72c77eaafa33fd5bc7275074d894f4436dd424ab
[dragonfly.git] / contrib / gcc-5.0 / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988-2015 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 "tm.h"
33 #include "hash-set.h"
34 #include "machmode.h"
35 #include "vec.h"
36 #include "double-int.h"
37 #include "input.h"
38 #include "alias.h"
39 #include "symtab.h"
40 #include "wide-int.h"
41 #include "inchash.h"
42 #include "tree.h"
43 #include "tree-hasher.h"
44 #include "stringpool.h"
45 #include "stor-layout.h"
46 #include "varasm.h"
47 #include "attribs.h"
48 #include "calls.h"
49 #include "flags.h"
50 #include "cp-tree.h"
51 #include "tree-iterator.h"
52 #include "tree-inline.h"
53 #include "decl.h"
54 #include "intl.h"
55 #include "toplev.h"
56 #include "hashtab.h"
57 #include "tm_p.h"
58 #include "target.h"
59 #include "c-family/c-common.h"
60 #include "c-family/c-objc.h"
61 #include "c-family/c-pragma.h"
62 #include "c-family/c-target.h"
63 #include "c-family/c-ubsan.h"
64 #include "diagnostic.h"
65 #include "intl.h"
66 #include "debug.h"
67 #include "timevar.h"
68 #include "splay-tree.h"
69 #include "plugin.h"
70 #include "hash-map.h"
71 #include "is-a.h"
72 #include "plugin-api.h"
73 #include "hard-reg-set.h"
74 #include "input.h"
75 #include "function.h"
76 #include "ipa-ref.h"
77 #include "cgraph.h"
78 #include "cilk.h"
79 #include "wide-int.h"
80 #include "builtins.h"
81
82 /* Possible cases of bad specifiers type used by bad_specifiers. */
83 enum bad_spec_place {
84   BSP_VAR,    /* variable */
85   BSP_PARM,   /* parameter */
86   BSP_TYPE,   /* type */
87   BSP_FIELD   /* field */
88 };
89
90 static tree grokparms (tree parmlist, tree *);
91 static const char *redeclaration_error_message (tree, tree);
92
93 static int decl_jump_unsafe (tree);
94 static void require_complete_types_for_parms (tree);
95 static int ambi_op_p (enum tree_code);
96 static int unary_op_p (enum tree_code);
97 static void push_local_name (tree);
98 static tree grok_reference_init (tree, tree, tree, int);
99 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
100                          int, int, int, tree);
101 static int check_static_variable_definition (tree, tree);
102 static void record_unknown_type (tree, const char *);
103 static tree builtin_function_1 (tree, tree, bool);
104 static int member_function_or_else (tree, tree, enum overload_flags);
105 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
106                             int);
107 static void check_for_uninitialized_const_var (tree);
108 static tree local_variable_p_walkfn (tree *, int *, void *);
109 static tree record_builtin_java_type (const char *, int);
110 static const char *tag_name (enum tag_types);
111 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
112 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
113 static void maybe_deduce_size_from_array_init (tree, tree);
114 static void layout_var_decl (tree);
115 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
116 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
117 static void save_function_data (tree);
118 static void copy_type_enum (tree , tree);
119 static void check_function_type (tree, tree);
120 static void finish_constructor_body (void);
121 static void begin_destructor_body (void);
122 static void finish_destructor_body (void);
123 static void record_key_method_defined (tree);
124 static tree create_array_type_for_decl (tree, tree, tree);
125 static tree get_atexit_node (void);
126 static tree get_dso_handle_node (void);
127 static tree start_cleanup_fn (void);
128 static void end_cleanup_fn (void);
129 static tree cp_make_fname_decl (location_t, tree, int);
130 static void initialize_predefined_identifiers (void);
131 static tree check_special_function_return_type
132         (special_function_kind, tree, tree);
133 static tree push_cp_library_fn (enum tree_code, tree, int);
134 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
135 static void store_parm_decls (tree);
136 static void initialize_local_var (tree, tree);
137 static void expand_static_init (tree, tree);
138
139 /* The following symbols are subsumed in the cp_global_trees array, and
140    listed here individually for documentation purposes.
141
142    C++ extensions
143         tree wchar_decl_node;
144
145         tree vtable_entry_type;
146         tree delta_type_node;
147         tree __t_desc_type_node;
148
149         tree class_type_node;
150         tree unknown_type_node;
151
152    Array type `vtable_entry_type[]'
153
154         tree vtbl_type_node;
155         tree vtbl_ptr_type_node;
156
157    Namespaces,
158
159         tree std_node;
160         tree abi_node;
161
162    A FUNCTION_DECL which can call `abort'.  Not necessarily the
163    one that the user will declare, but sufficient to be called
164    by routines that want to abort the program.
165
166         tree abort_fndecl;
167
168    Used by RTTI
169         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
170         tree tinfo_var_id;  */
171
172 tree cp_global_trees[CPTI_MAX];
173
174 /* Indicates that there is a type value in some namespace, although
175    that is not necessarily in scope at the moment.  */
176
177 tree global_type_node;
178
179 /* The node that holds the "name" of the global scope.  */
180 tree global_scope_name;
181
182 #define local_names cp_function_chain->x_local_names
183
184 /* A list of objects which have constructors or destructors
185    which reside in the global scope.  The decl is stored in
186    the TREE_VALUE slot and the initializer is stored
187    in the TREE_PURPOSE slot.  */
188 tree static_aggregates;
189
190 /* Like static_aggregates, but for thread_local variables.  */
191 tree tls_aggregates;
192
193 /* -- end of C++ */
194
195 /* A node for the integer constant 2.  */
196
197 tree integer_two_node;
198
199 /* Used only for jumps to as-yet undefined labels, since jumps to
200    defined labels can have their validity checked immediately.  */
201
202 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
203   struct named_label_use_entry *next;
204   /* The binding level to which this entry is *currently* attached.
205      This is initially the binding level in which the goto appeared,
206      but is modified as scopes are closed.  */
207   cp_binding_level *binding_level;
208   /* The head of the names list that was current when the goto appeared,
209      or the inner scope popped.  These are the decls that will *not* be
210      skipped when jumping to the label.  */
211   tree names_in_scope;
212   /* The location of the goto, for error reporting.  */
213   location_t o_goto_locus;
214   /* True if an OpenMP structured block scope has been closed since
215      the goto appeared.  This means that the branch from the label will
216      illegally exit an OpenMP scope.  */
217   bool in_omp_scope;
218 };
219
220 /* A list of all LABEL_DECLs in the function that have names.  Here so
221    we can clear out their names' definitions at the end of the
222    function, and so we can check the validity of jumps to these labels.  */
223
224 struct GTY((for_user)) named_label_entry {
225   /* The decl itself.  */
226   tree label_decl;
227
228   /* The binding level to which the label is *currently* attached.
229      This is initially set to the binding level in which the label
230      is defined, but is modified as scopes are closed.  */
231   cp_binding_level *binding_level;
232   /* The head of the names list that was current when the label was
233      defined, or the inner scope popped.  These are the decls that will
234      be skipped when jumping to the label.  */
235   tree names_in_scope;
236   /* A vector of all decls from all binding levels that would be
237      crossed by a backward branch to the label.  */
238   vec<tree, va_gc> *bad_decls;
239
240   /* A list of uses of the label, before the label is defined.  */
241   struct named_label_use_entry *uses;
242
243   /* The following bits are set after the label is defined, and are
244      updated as scopes are popped.  They indicate that a backward jump
245      to the label will illegally enter a scope of the given flavor.  */
246   bool in_try_scope;
247   bool in_catch_scope;
248   bool in_omp_scope;
249 };
250
251 #define named_labels cp_function_chain->x_named_labels
252 \f
253 /* The number of function bodies which we are currently processing.
254    (Zero if we are at namespace scope, one inside the body of a
255    function, two inside the body of a function in a local class, etc.)  */
256 int function_depth;
257
258 /* To avoid unwanted recursion, finish_function defers all mark_used calls
259    encountered during its execution until it finishes.  */
260 bool defer_mark_used_calls;
261 vec<tree, va_gc> *deferred_mark_used_calls;
262
263 /* States indicating how grokdeclarator() should handle declspecs marked
264    with __attribute__((deprecated)).  An object declared as
265    __attribute__((deprecated)) suppresses warnings of uses of other
266    deprecated items.  */
267 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
268
269 \f
270 /* A list of VAR_DECLs whose type was incomplete at the time the
271    variable was declared.  */
272
273 typedef struct GTY(()) incomplete_var_d {
274   tree decl;
275   tree incomplete_type;
276 } incomplete_var;
277
278
279 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
280 \f
281 /* Returns the kind of template specialization we are currently
282    processing, given that it's declaration contained N_CLASS_SCOPES
283    explicit scope qualifications.  */
284
285 tmpl_spec_kind
286 current_tmpl_spec_kind (int n_class_scopes)
287 {
288   int n_template_parm_scopes = 0;
289   int seen_specialization_p = 0;
290   int innermost_specialization_p = 0;
291   cp_binding_level *b;
292
293   /* Scan through the template parameter scopes.  */
294   for (b = current_binding_level;
295        b->kind == sk_template_parms;
296        b = b->level_chain)
297     {
298       /* If we see a specialization scope inside a parameter scope,
299          then something is wrong.  That corresponds to a declaration
300          like:
301
302             template <class T> template <> ...
303
304          which is always invalid since [temp.expl.spec] forbids the
305          specialization of a class member template if the enclosing
306          class templates are not explicitly specialized as well.  */
307       if (b->explicit_spec_p)
308         {
309           if (n_template_parm_scopes == 0)
310             innermost_specialization_p = 1;
311           else
312             seen_specialization_p = 1;
313         }
314       else if (seen_specialization_p == 1)
315         return tsk_invalid_member_spec;
316
317       ++n_template_parm_scopes;
318     }
319
320   /* Handle explicit instantiations.  */
321   if (processing_explicit_instantiation)
322     {
323       if (n_template_parm_scopes != 0)
324         /* We've seen a template parameter list during an explicit
325            instantiation.  For example:
326
327              template <class T> template void f(int);
328
329            This is erroneous.  */
330         return tsk_invalid_expl_inst;
331       else
332         return tsk_expl_inst;
333     }
334
335   if (n_template_parm_scopes < n_class_scopes)
336     /* We've not seen enough template headers to match all the
337        specialized classes present.  For example:
338
339          template <class T> void R<T>::S<T>::f(int);
340
341        This is invalid; there needs to be one set of template
342        parameters for each class.  */
343     return tsk_insufficient_parms;
344   else if (n_template_parm_scopes == n_class_scopes)
345     /* We're processing a non-template declaration (even though it may
346        be a member of a template class.)  For example:
347
348          template <class T> void S<T>::f(int);
349
350        The `class T' matches the `S<T>', leaving no template headers
351        corresponding to the `f'.  */
352     return tsk_none;
353   else if (n_template_parm_scopes > n_class_scopes + 1)
354     /* We've got too many template headers.  For example:
355
356          template <> template <class T> void f (T);
357
358        There need to be more enclosing classes.  */
359     return tsk_excessive_parms;
360   else
361     /* This must be a template.  It's of the form:
362
363          template <class T> template <class U> void S<T>::f(U);
364
365        This is a specialization if the innermost level was a
366        specialization; otherwise it's just a definition of the
367        template.  */
368     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
369 }
370
371 /* Exit the current scope.  */
372
373 void
374 finish_scope (void)
375 {
376   poplevel (0, 0, 0);
377 }
378
379 /* When a label goes out of scope, check to see if that label was used
380    in a valid manner, and issue any appropriate warnings or errors.  */
381
382 static void
383 pop_label (tree label, tree old_value)
384 {
385   if (!processing_template_decl)
386     {
387       if (DECL_INITIAL (label) == NULL_TREE)
388         {
389           location_t location;
390
391           error ("label %q+D used but not defined", label);
392           location = input_location;
393             /* FIXME want (LOCATION_FILE (input_location), (line)0) */
394           /* Avoid crashing later.  */
395           define_label (location, DECL_NAME (label));
396         }
397       else 
398         warn_for_unused_label (label);
399     }
400
401   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
402 }
403
404 /* At the end of a function, all labels declared within the function
405    go out of scope.  BLOCK is the top-level block for the
406    function.  */
407
408 int
409 pop_labels_1 (named_label_entry **slot, tree block)
410 {
411   struct named_label_entry *ent = *slot;
412
413   pop_label (ent->label_decl, NULL_TREE);
414
415   /* Put the labels into the "variables" of the top-level block,
416      so debugger can see them.  */
417   DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
418   BLOCK_VARS (block) = ent->label_decl;
419
420   named_labels->clear_slot (slot);
421
422   return 1;
423 }
424
425 static void
426 pop_labels (tree block)
427 {
428   if (named_labels)
429     {
430       named_labels->traverse<tree, pop_labels_1> (block);
431       named_labels = NULL;
432     }
433 }
434
435 /* At the end of a block with local labels, restore the outer definition.  */
436
437 static void
438 pop_local_label (tree label, tree old_value)
439 {
440   struct named_label_entry dummy;
441
442   pop_label (label, old_value);
443
444   dummy.label_decl = label;
445   named_label_entry **slot = named_labels->find_slot (&dummy, NO_INSERT);
446   named_labels->clear_slot (slot);
447 }
448
449 /* The following two routines are used to interface to Objective-C++.
450    The binding level is purposely treated as an opaque type.  */
451
452 void *
453 objc_get_current_scope (void)
454 {
455   return current_binding_level;
456 }
457
458 /* The following routine is used by the NeXT-style SJLJ exceptions;
459    variables get marked 'volatile' so as to not be clobbered by
460    _setjmp()/_longjmp() calls.  All variables in the current scope,
461    as well as parent scopes up to (but not including) ENCLOSING_BLK
462    shall be thusly marked.  */
463
464 void
465 objc_mark_locals_volatile (void *enclosing_blk)
466 {
467   cp_binding_level *scope;
468
469   for (scope = current_binding_level;
470        scope && scope != enclosing_blk;
471        scope = scope->level_chain)
472     {
473       tree decl;
474
475       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
476         objc_volatilize_decl (decl);
477
478       /* Do not climb up past the current function.  */
479       if (scope->kind == sk_function_parms)
480         break;
481     }
482 }
483
484 /* Update data for defined and undefined labels when leaving a scope.  */
485
486 int
487 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
488 {
489   named_label_entry *ent = *slot;
490   cp_binding_level *obl = bl->level_chain;
491
492   if (ent->binding_level == bl)
493     {
494       tree decl;
495
496       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
497          TREE_LISTs representing OVERLOADs, so be careful.  */
498       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
499                                                      ? DECL_CHAIN (decl)
500                                                      : TREE_CHAIN (decl)))
501         if (decl_jump_unsafe (decl))
502           vec_safe_push (ent->bad_decls, decl);
503
504       ent->binding_level = obl;
505       ent->names_in_scope = obl->names;
506       switch (bl->kind)
507         {
508         case sk_try:
509           ent->in_try_scope = true;
510           break;
511         case sk_catch:
512           ent->in_catch_scope = true;
513           break;
514         case sk_omp:
515           ent->in_omp_scope = true;
516           break;
517         default:
518           break;
519         }
520     }
521   else if (ent->uses)
522     {
523       struct named_label_use_entry *use;
524
525       for (use = ent->uses; use ; use = use->next)
526         if (use->binding_level == bl)
527           {
528             use->binding_level = obl;
529             use->names_in_scope = obl->names;
530             if (bl->kind == sk_omp)
531               use->in_omp_scope = true;
532           }
533     }
534
535   return 1;
536 }
537
538 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
539    when errors were reported, except for -Werror-unused-but-set-*.  */
540 static int unused_but_set_errorcount;
541
542 /* Exit a binding level.
543    Pop the level off, and restore the state of the identifier-decl mappings
544    that were in effect when this level was entered.
545
546    If KEEP == 1, this level had explicit declarations, so
547    and create a "block" (a BLOCK node) for the level
548    to record its declarations and subblocks for symbol table output.
549
550    If FUNCTIONBODY is nonzero, this level is the body of a function,
551    so create a block as if KEEP were set and also clear out all
552    label names.
553
554    If REVERSE is nonzero, reverse the order of decls before putting
555    them into the BLOCK.  */
556
557 tree
558 poplevel (int keep, int reverse, int functionbody)
559 {
560   tree link;
561   /* The chain of decls was accumulated in reverse order.
562      Put it into forward order, just for cleanliness.  */
563   tree decls;
564   tree subblocks;
565   tree block;
566   tree decl;
567   int leaving_for_scope;
568   scope_kind kind;
569   unsigned ix;
570   cp_label_binding *label_bind;
571
572   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
573  restart:
574
575   block = NULL_TREE;
576
577   gcc_assert (current_binding_level->kind != sk_class);
578
579   if (current_binding_level->kind == sk_cleanup)
580     functionbody = 0;
581   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
582
583   gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
584
585   /* We used to use KEEP == 2 to indicate that the new block should go
586      at the beginning of the list of blocks at this binding level,
587      rather than the end.  This hack is no longer used.  */
588   gcc_assert (keep == 0 || keep == 1);
589
590   if (current_binding_level->keep)
591     keep = 1;
592
593   /* Any uses of undefined labels, and any defined labels, now operate
594      under constraints of next binding contour.  */
595   if (cfun && !functionbody && named_labels)
596     named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
597                    (current_binding_level);
598
599   /* Get the decls in the order they were written.
600      Usually current_binding_level->names is in reverse order.
601      But parameter decls were previously put in forward order.  */
602
603   if (reverse)
604     current_binding_level->names
605       = decls = nreverse (current_binding_level->names);
606   else
607     decls = current_binding_level->names;
608
609   /* If there were any declarations or structure tags in that level,
610      or if this level is a function body,
611      create a BLOCK to record them for the life of this function.  */
612   block = NULL_TREE;
613   /* Avoid function body block if possible.  */
614   if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
615     keep = 0;
616   else if (keep == 1 || functionbody)
617     block = make_node (BLOCK);
618   if (block != NULL_TREE)
619     {
620       BLOCK_VARS (block) = decls;
621       BLOCK_SUBBLOCKS (block) = subblocks;
622     }
623
624   /* In each subblock, record that this is its superior.  */
625   if (keep >= 0)
626     for (link = subblocks; link; link = BLOCK_CHAIN (link))
627       BLOCK_SUPERCONTEXT (link) = block;
628
629   /* We still support the old for-scope rules, whereby the variables
630      in a for-init statement were in scope after the for-statement
631      ended.  We only use the new rules if flag_new_for_scope is
632      nonzero.  */
633   leaving_for_scope
634     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
635
636   /* Before we remove the declarations first check for unused variables.  */
637   if ((warn_unused_variable || warn_unused_but_set_variable)
638       && current_binding_level->kind != sk_template_parms
639       && !processing_template_decl)
640     for (tree d = getdecls (); d; d = TREE_CHAIN (d))
641       {
642         /* There are cases where D itself is a TREE_LIST.  See in
643            push_local_binding where the list of decls returned by
644            getdecls is built.  */
645         decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
646         tree type = TREE_TYPE (decl);
647         if (VAR_P (decl)
648             && (! TREE_USED (decl) || !DECL_READ_P (decl))
649             && ! DECL_IN_SYSTEM_HEADER (decl)
650             && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
651             && type != error_mark_node
652             && (!CLASS_TYPE_P (type)
653                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
654                 || lookup_attribute ("warn_unused",
655                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
656           {
657             if (! TREE_USED (decl))
658               warning (OPT_Wunused_variable, "unused variable %q+D", decl);
659             else if (DECL_CONTEXT (decl) == current_function_decl
660                      // For -Wunused-but-set-variable leave references alone.
661                      && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
662                      && errorcount == unused_but_set_errorcount)
663               {
664                 warning (OPT_Wunused_but_set_variable,
665                          "variable %q+D set but not used", decl);
666                 unused_but_set_errorcount = errorcount;
667               }
668           }
669       }
670
671   /* Remove declarations for all the DECLs in this level.  */
672   for (link = decls; link; link = TREE_CHAIN (link))
673     {
674       if (leaving_for_scope && VAR_P (link)
675           /* It's hard to make this ARM compatibility hack play nicely with
676              lambdas, and it really isn't necessary in C++11 mode.  */
677           && cxx_dialect < cxx11
678           && DECL_NAME (link))
679         {
680           tree name = DECL_NAME (link);
681           cxx_binding *ob;
682           tree ns_binding;
683
684           ob = outer_binding (name,
685                               IDENTIFIER_BINDING (name),
686                               /*class_p=*/true);
687           if (!ob)
688             ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
689           else
690             ns_binding = NULL_TREE;
691
692           if (ob && ob->scope == current_binding_level->level_chain)
693             /* We have something like:
694
695                  int i;
696                  for (int i; ;);
697
698                and we are leaving the `for' scope.  There's no reason to
699                keep the binding of the inner `i' in this case.  */
700             pop_binding (name, link);
701           else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
702                    || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
703             /* Here, we have something like:
704
705                  typedef int I;
706
707                  void f () {
708                    for (int I; ;);
709                  }
710
711                We must pop the for-scope binding so we know what's a
712                type and what isn't.  */
713             pop_binding (name, link);
714           else
715             {
716               /* Mark this VAR_DECL as dead so that we can tell we left it
717                  there only for backward compatibility.  */
718               DECL_DEAD_FOR_LOCAL (link) = 1;
719
720               /* Keep track of what should have happened when we
721                  popped the binding.  */
722               if (ob && ob->value)
723                 {
724                   SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
725                   DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
726                 }
727
728               /* Add it to the list of dead variables in the next
729                  outermost binding to that we can remove these when we
730                  leave that binding.  */
731               vec_safe_push (
732                   current_binding_level->level_chain->dead_vars_from_for,
733                   link);
734
735               /* Although we don't pop the cxx_binding, we do clear
736                  its SCOPE since the scope is going away now.  */
737               IDENTIFIER_BINDING (name)->scope
738                 = current_binding_level->level_chain;
739             }
740         }
741       else
742         {
743           tree name;
744
745           /* Remove the binding.  */
746           decl = link;
747
748           if (TREE_CODE (decl) == TREE_LIST)
749             decl = TREE_VALUE (decl);
750           name = decl;
751
752           if (TREE_CODE (name) == OVERLOAD)
753             name = OVL_FUNCTION (name);
754
755           gcc_assert (DECL_P (name));
756           pop_binding (DECL_NAME (name), decl);
757         }
758     }
759
760   /* Remove declarations for any `for' variables from inner scopes
761      that we kept around.  */
762   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
763                                  ix, decl)
764     pop_binding (DECL_NAME (decl), decl);
765
766   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
767   for (link = current_binding_level->type_shadowed;
768        link; link = TREE_CHAIN (link))
769     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
770
771   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
772   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
773                                  ix, label_bind)
774     pop_local_label (label_bind->label, label_bind->prev_value);
775
776   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
777      list if a `using' declaration put them there.  The debugging
778      back ends won't understand OVERLOAD, so we remove them here.
779      Because the BLOCK_VARS are (temporarily) shared with
780      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
781      popped all the bindings.  */
782   if (block)
783     {
784       tree* d;
785
786       for (d = &BLOCK_VARS (block); *d; )
787         {
788           if (TREE_CODE (*d) == TREE_LIST)
789             *d = TREE_CHAIN (*d);
790           else
791             d = &DECL_CHAIN (*d);
792         }
793     }
794
795   /* If the level being exited is the top level of a function,
796      check over all the labels.  */
797   if (functionbody)
798     {
799       if (block)
800         {
801           /* Since this is the top level block of a function, the vars are
802              the function's parameters.  Don't leave them in the BLOCK
803              because they are found in the FUNCTION_DECL instead.  */
804           BLOCK_VARS (block) = 0;
805           pop_labels (block);
806         }
807       else
808         pop_labels (subblocks);
809     }
810
811   kind = current_binding_level->kind;
812   if (kind == sk_cleanup)
813     {
814       tree stmt;
815
816       /* If this is a temporary binding created for a cleanup, then we'll
817          have pushed a statement list level.  Pop that, create a new
818          BIND_EXPR for the block, and insert it into the stream.  */
819       stmt = pop_stmt_list (current_binding_level->statement_list);
820       stmt = c_build_bind_expr (input_location, block, stmt);
821       add_stmt (stmt);
822     }
823
824   leave_scope ();
825   if (functionbody)
826     {
827       /* The current function is being defined, so its DECL_INITIAL
828          should be error_mark_node.  */
829       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
830       DECL_INITIAL (current_function_decl) = block ? block : subblocks;
831       if (subblocks)
832         {
833           if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
834             {
835               if (BLOCK_SUBBLOCKS (subblocks))
836                 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
837             }
838           else
839             BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
840         }
841     }
842   else if (block)
843     current_binding_level->blocks
844       = block_chainon (current_binding_level->blocks, block);
845
846   /* If we did not make a block for the level just exited,
847      any blocks made for inner levels
848      (since they cannot be recorded as subblocks in that level)
849      must be carried forward so they will later become subblocks
850      of something else.  */
851   else if (subblocks)
852     current_binding_level->blocks
853       = block_chainon (current_binding_level->blocks, subblocks);
854
855   /* Each and every BLOCK node created here in `poplevel' is important
856      (e.g. for proper debugging information) so if we created one
857      earlier, mark it as "used".  */
858   if (block)
859     TREE_USED (block) = 1;
860
861   /* All temporary bindings created for cleanups are popped silently.  */
862   if (kind == sk_cleanup)
863     goto restart;
864
865   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
866   return block;
867 }
868
869 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
870    itself, calling F for each.  The DATA is passed to F as well.  */
871
872 static int
873 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
874 {
875   int result = 0;
876   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
877
878   result |= (*f) (name_space, data);
879
880   for (; current; current = DECL_CHAIN (current))
881     result |= walk_namespaces_r (current, f, data);
882
883   return result;
884 }
885
886 /* Walk all the namespaces, calling F for each.  The DATA is passed to
887    F as well.  */
888
889 int
890 walk_namespaces (walk_namespaces_fn f, void* data)
891 {
892   return walk_namespaces_r (global_namespace, f, data);
893 }
894
895 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
896    DATA is non-NULL, this is the last time we will call
897    wrapup_global_declarations for this NAMESPACE.  */
898
899 int
900 wrapup_globals_for_namespace (tree name_space, void* data)
901 {
902   cp_binding_level *level = NAMESPACE_LEVEL (name_space);
903   vec<tree, va_gc> *statics = level->static_decls;
904   tree *vec = statics->address ();
905   int len = statics->length ();
906   int last_time = (data != 0);
907
908   if (last_time)
909     {
910       check_global_declarations (vec, len);
911       emit_debug_global_declarations (vec, len);
912       return 0;
913     }
914
915   /* Write out any globals that need to be output.  */
916   return wrapup_global_declarations (vec, len);
917 }
918
919 \f
920 /* In C++, you don't have to write `struct S' to refer to `S'; you
921    can just use `S'.  We accomplish this by creating a TYPE_DECL as
922    if the user had written `typedef struct S S'.  Create and return
923    the TYPE_DECL for TYPE.  */
924
925 tree
926 create_implicit_typedef (tree name, tree type)
927 {
928   tree decl;
929
930   decl = build_decl (input_location, TYPE_DECL, name, type);
931   DECL_ARTIFICIAL (decl) = 1;
932   /* There are other implicit type declarations, like the one *within*
933      a class that allows you to write `S::S'.  We must distinguish
934      amongst these.  */
935   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
936   TYPE_NAME (type) = decl;
937   TYPE_STUB_DECL (type) = decl;
938
939   return decl;
940 }
941
942 /* Remember a local name for name-mangling purposes.  */
943
944 static void
945 push_local_name (tree decl)
946 {
947   size_t i, nelts;
948   tree t, name;
949
950   timevar_start (TV_NAME_LOOKUP);
951
952   name = DECL_NAME (decl);
953
954   nelts = vec_safe_length (local_names);
955   for (i = 0; i < nelts; i++)
956     {
957       t = (*local_names)[i];
958       if (DECL_NAME (t) == name)
959         {
960           if (!DECL_LANG_SPECIFIC (decl))
961             retrofit_lang_decl (decl);
962           DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
963           if (DECL_DISCRIMINATOR_SET_P (t))
964             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
965           else
966             DECL_DISCRIMINATOR (decl) = 1;
967
968           (*local_names)[i] = decl;
969           timevar_stop (TV_NAME_LOOKUP);
970           return;
971         }
972     }
973
974   vec_safe_push (local_names, decl);
975   timevar_stop (TV_NAME_LOOKUP);
976 }
977 \f
978 /* Subroutine of duplicate_decls: return truthvalue of whether
979    or not types of these decls match.
980
981    For C++, we must compare the parameter list so that `int' can match
982    `int&' in a parameter position, but `int&' is not confused with
983    `const int&'.  */
984
985 int
986 decls_match (tree newdecl, tree olddecl)
987 {
988   int types_match;
989
990   if (newdecl == olddecl)
991     return 1;
992
993   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
994     /* If the two DECLs are not even the same kind of thing, we're not
995        interested in their types.  */
996     return 0;
997
998   gcc_assert (DECL_P (newdecl));
999
1000   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1001     {
1002       tree f1 = TREE_TYPE (newdecl);
1003       tree f2 = TREE_TYPE (olddecl);
1004       tree p1 = TYPE_ARG_TYPES (f1);
1005       tree p2 = TYPE_ARG_TYPES (f2);
1006       tree r2;
1007
1008       /* Specializations of different templates are different functions
1009          even if they have the same type.  */
1010       tree t1 = (DECL_USE_TEMPLATE (newdecl)
1011                  ? DECL_TI_TEMPLATE (newdecl)
1012                  : NULL_TREE);
1013       tree t2 = (DECL_USE_TEMPLATE (olddecl)
1014                  ? DECL_TI_TEMPLATE (olddecl)
1015                  : NULL_TREE);
1016       if (t1 != t2)
1017         return 0;
1018
1019       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1020           && ! (DECL_EXTERN_C_P (newdecl)
1021                 && DECL_EXTERN_C_P (olddecl)))
1022         return 0;
1023
1024       /* A new declaration doesn't match a built-in one unless it
1025          is also extern "C".  */
1026       if (DECL_IS_BUILTIN (olddecl)
1027           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1028         return 0;
1029
1030       if (TREE_CODE (f1) != TREE_CODE (f2))
1031         return 0;
1032
1033       /* A declaration with deduced return type should use its pre-deduction
1034          type for declaration matching.  */
1035       r2 = fndecl_declared_return_type (olddecl);
1036
1037       if (same_type_p (TREE_TYPE (f1), r2))
1038         {
1039           if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1040               && (DECL_BUILT_IN (olddecl)
1041 #ifndef NO_IMPLICIT_EXTERN_C
1042                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1043                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1044 #endif
1045               ))
1046             {
1047               types_match = self_promoting_args_p (p1);
1048               if (p1 == void_list_node)
1049                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1050             }
1051 #ifndef NO_IMPLICIT_EXTERN_C
1052           else if (!prototype_p (f1)
1053                    && (DECL_EXTERN_C_P (olddecl)
1054                        && DECL_IN_SYSTEM_HEADER (olddecl)
1055                        && !DECL_CLASS_SCOPE_P (olddecl))
1056                    && (DECL_EXTERN_C_P (newdecl)
1057                        && DECL_IN_SYSTEM_HEADER (newdecl)
1058                        && !DECL_CLASS_SCOPE_P (newdecl)))
1059             {
1060               types_match = self_promoting_args_p (p2);
1061               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1062             }
1063 #endif
1064           else
1065             types_match =
1066               compparms (p1, p2)
1067               && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1068               && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1069                   || comp_type_attributes (TREE_TYPE (newdecl),
1070                                            TREE_TYPE (olddecl)) != 0);
1071         }
1072       else
1073         types_match = 0;
1074
1075       /* The decls dont match if they correspond to two different versions
1076          of the same function.   Disallow extern "C" functions to be
1077          versions for now.  */
1078       if (types_match
1079           && !DECL_EXTERN_C_P (newdecl)
1080           && !DECL_EXTERN_C_P (olddecl)
1081           && targetm.target_option.function_versions (newdecl, olddecl))
1082         {
1083           /* Mark functions as versions if necessary.  Modify the mangled decl
1084              name if necessary.  */
1085           if (DECL_FUNCTION_VERSIONED (newdecl)
1086               && DECL_FUNCTION_VERSIONED (olddecl))
1087             return 0;
1088           if (!DECL_FUNCTION_VERSIONED (newdecl))
1089             {
1090               DECL_FUNCTION_VERSIONED (newdecl) = 1;
1091               if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1092                 mangle_decl (newdecl);
1093             }
1094           if (!DECL_FUNCTION_VERSIONED (olddecl))
1095             {
1096               DECL_FUNCTION_VERSIONED (olddecl) = 1;
1097               if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1098                mangle_decl (olddecl);
1099             }
1100           cgraph_node::record_function_versions (olddecl, newdecl);
1101           return 0;
1102         }
1103     }
1104   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1105     {
1106       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1107           != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1108         return 0;
1109
1110       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1111                                 DECL_TEMPLATE_PARMS (olddecl)))
1112         return 0;
1113
1114       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1115         types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1116                                    TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1117       else
1118         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1119                                    DECL_TEMPLATE_RESULT (newdecl));
1120     }
1121   else
1122     {
1123       /* Need to check scope for variable declaration (VAR_DECL).
1124          For typedef (TYPE_DECL), scope is ignored.  */
1125       if (VAR_P (newdecl)
1126           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1127           /* [dcl.link]
1128              Two declarations for an object with C language linkage
1129              with the same name (ignoring the namespace that qualify
1130              it) that appear in different namespace scopes refer to
1131              the same object.  */
1132           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1133         return 0;
1134
1135       if (TREE_TYPE (newdecl) == error_mark_node)
1136         types_match = TREE_TYPE (olddecl) == error_mark_node;
1137       else if (TREE_TYPE (olddecl) == NULL_TREE)
1138         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1139       else if (TREE_TYPE (newdecl) == NULL_TREE)
1140         types_match = 0;
1141       else
1142         types_match = comptypes (TREE_TYPE (newdecl),
1143                                  TREE_TYPE (olddecl),
1144                                  COMPARE_REDECLARATION);
1145     }
1146
1147   return types_match;
1148 }
1149
1150 /* If NEWDECL is `static' and an `extern' was seen previously,
1151    warn about it.  OLDDECL is the previous declaration.
1152
1153    Note that this does not apply to the C++ case of declaring
1154    a variable `extern const' and then later `const'.
1155
1156    Don't complain about built-in functions, since they are beyond
1157    the user's control.  */
1158
1159 void
1160 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1161 {
1162   if (TREE_CODE (newdecl) == TYPE_DECL
1163       || TREE_CODE (newdecl) == TEMPLATE_DECL
1164       || TREE_CODE (newdecl) == CONST_DECL
1165       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1166     return;
1167
1168   /* Don't get confused by static member functions; that's a different
1169      use of `static'.  */
1170   if (TREE_CODE (newdecl) == FUNCTION_DECL
1171       && DECL_STATIC_FUNCTION_P (newdecl))
1172     return;
1173
1174   /* If the old declaration was `static', or the new one isn't, then
1175      everything is OK.  */
1176   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1177     return;
1178
1179   /* It's OK to declare a builtin function as `static'.  */
1180   if (TREE_CODE (olddecl) == FUNCTION_DECL
1181       && DECL_ARTIFICIAL (olddecl))
1182     return;
1183
1184   if (permerror (input_location,
1185                  "%qD was declared %<extern%> and later %<static%>", newdecl))
1186     inform (input_location, "previous declaration of %q+D", olddecl);
1187 }
1188
1189 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1190    function templates.  If their exception specifications do not
1191    match, issue a diagnostic.  */
1192
1193 static void
1194 check_redeclaration_exception_specification (tree new_decl,
1195                                              tree old_decl)
1196 {
1197   tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1198   tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1199
1200   /* Two default specs are equivalent, don't force evaluation.  */
1201   if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1202       && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1203     return;
1204
1205   maybe_instantiate_noexcept (new_decl);
1206   maybe_instantiate_noexcept (old_decl);
1207   new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1208   old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1209
1210   /* [except.spec]
1211
1212      If any declaration of a function has an exception-specification,
1213      all declarations, including the definition and an explicit
1214      specialization, of that function shall have an
1215      exception-specification with the same set of type-ids.  */
1216   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1217       && ! DECL_IS_BUILTIN (old_decl)
1218       && flag_exceptions
1219       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1220     {
1221       error ("declaration of %qF has a different exception specifier",
1222              new_decl);
1223       error ("from previous declaration %q+F", old_decl);
1224     }
1225 }
1226
1227 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1228    Otherwise issue diagnostics.  */
1229
1230 static bool
1231 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1232 {
1233   old_decl = STRIP_TEMPLATE (old_decl);
1234   new_decl = STRIP_TEMPLATE (new_decl);
1235   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1236       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1237     return true;
1238   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1239       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1240     return true;
1241   if (TREE_CODE (old_decl) == FUNCTION_DECL)
1242     {
1243       if (DECL_BUILT_IN (old_decl))
1244         {
1245           /* Hide a built-in declaration.  */
1246           DECL_DECLARED_CONSTEXPR_P (old_decl)
1247             = DECL_DECLARED_CONSTEXPR_P (new_decl);
1248           return true;
1249         }
1250       /* 7.1.5 [dcl.constexpr]
1251          Note: An explicit specialization can differ from the template
1252          declaration with respect to the constexpr specifier.  */
1253       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1254           && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1255         return true;
1256
1257       error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1258       error ("from previous declaration %q+D", old_decl);
1259       return false;
1260     }
1261   return true;
1262 }
1263
1264 /* DECL is a redeclaration of a function or function template.  If
1265    it does have default arguments issue a diagnostic.  Note: this
1266    function is used to enforce the requirements in C++11 8.3.6 about
1267    no default arguments in redeclarations.  */
1268
1269 static void
1270 check_redeclaration_no_default_args (tree decl)
1271 {
1272   gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1273
1274   for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1275        t && t != void_list_node; t = TREE_CHAIN (t))
1276     if (TREE_PURPOSE (t))
1277       {
1278         permerror (input_location,
1279                    "redeclaration of %q#D may not have default "
1280                    "arguments", decl);
1281         return;
1282       }
1283 }
1284
1285 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1286                           && lookup_attribute ("gnu_inline",            \
1287                                                DECL_ATTRIBUTES (fn)))
1288
1289 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1290    If the redeclaration is invalid, a diagnostic is issued, and the
1291    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1292
1293    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1294    returned.
1295
1296    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1297
1298 tree
1299 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1300 {
1301   unsigned olddecl_uid = DECL_UID (olddecl);
1302   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1303   int new_defines_function = 0;
1304   tree new_template_info;
1305
1306   if (newdecl == olddecl)
1307     return olddecl;
1308
1309   types_match = decls_match (newdecl, olddecl);
1310
1311   /* If either the type of the new decl or the type of the old decl is an
1312      error_mark_node, then that implies that we have already issued an
1313      error (earlier) for some bogus type specification, and in that case,
1314      it is rather pointless to harass the user with yet more error message
1315      about the same declaration, so just pretend the types match here.  */
1316   if (TREE_TYPE (newdecl) == error_mark_node
1317       || TREE_TYPE (olddecl) == error_mark_node)
1318     return error_mark_node;
1319
1320   if (UDLIT_OPER_P (DECL_NAME (newdecl))
1321       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1322     {
1323       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1324           && TREE_CODE (olddecl) != TEMPLATE_DECL
1325           && check_raw_literal_operator (olddecl))
1326         error ("literal operator template %q+D conflicts with"
1327                " raw literal operator %qD", newdecl, olddecl);
1328       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1329                && TREE_CODE (olddecl) == TEMPLATE_DECL
1330                && check_raw_literal_operator (newdecl))
1331         error ("raw literal operator %q+D conflicts with"
1332                " literal operator template %qD", newdecl, olddecl);
1333     }
1334
1335   if (DECL_P (olddecl)
1336       && TREE_CODE (newdecl) == FUNCTION_DECL
1337       && TREE_CODE (olddecl) == FUNCTION_DECL
1338       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1339     {
1340       if (DECL_DECLARED_INLINE_P (newdecl)
1341           && DECL_UNINLINABLE (newdecl)
1342           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1343         /* Already warned elsewhere.  */;
1344       else if (DECL_DECLARED_INLINE_P (olddecl)
1345                && DECL_UNINLINABLE (olddecl)
1346                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1347         /* Already warned.  */;
1348       else if (DECL_DECLARED_INLINE_P (newdecl)
1349                && DECL_UNINLINABLE (olddecl)
1350                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1351         {
1352           if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1353                        newdecl))
1354             inform (DECL_SOURCE_LOCATION (olddecl),
1355                     "previous declaration of %qD with attribute noinline",
1356                     olddecl);
1357         }
1358       else if (DECL_DECLARED_INLINE_P (olddecl)
1359                && DECL_UNINLINABLE (newdecl)
1360                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1361         {
1362           if (warning (OPT_Wattributes, "function %q+D redeclared with "
1363                        "attribute noinline", newdecl))
1364             inform (DECL_SOURCE_LOCATION (olddecl),
1365                     "previous declaration of %qD was inline",
1366                     olddecl);
1367         }
1368     }
1369
1370   /* Check for redeclaration and other discrepancies.  */
1371   if (TREE_CODE (olddecl) == FUNCTION_DECL
1372       && DECL_ARTIFICIAL (olddecl))
1373     {
1374       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1375       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1376         {
1377           /* Avoid warnings redeclaring built-ins which have not been
1378              explicitly declared.  */
1379           if (DECL_ANTICIPATED (olddecl))
1380             return NULL_TREE;
1381
1382           /* If you declare a built-in or predefined function name as static,
1383              the old definition is overridden, but optionally warn this was a
1384              bad choice of name.  */
1385           if (! TREE_PUBLIC (newdecl))
1386             {
1387               warning (OPT_Wshadow, 
1388                        DECL_BUILT_IN (olddecl)
1389                        ? G_("shadowing built-in function %q#D")
1390                        : G_("shadowing library function %q#D"), olddecl);
1391               /* Discard the old built-in function.  */
1392               return NULL_TREE;
1393             }
1394           /* If the built-in is not ansi, then programs can override
1395              it even globally without an error.  */
1396           else if (! DECL_BUILT_IN (olddecl))
1397             warning (0, "library function %q#D redeclared as non-function %q#D",
1398                      olddecl, newdecl);
1399           else
1400             error ("declaration of %q#D conflicts with built-in "
1401                    "declaration %q#D", newdecl, olddecl);
1402           return NULL_TREE;
1403         }
1404       else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1405         {
1406           gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1407           error_at (DECL_SOURCE_LOCATION (newdecl),
1408                     "redeclaration of %<pragma omp declare reduction%>");
1409           inform (DECL_SOURCE_LOCATION (olddecl),
1410                   "previous %<pragma omp declare reduction%> declaration");
1411           return error_mark_node;
1412         }
1413       else if (!types_match)
1414         {
1415           /* Avoid warnings redeclaring built-ins which have not been
1416              explicitly declared.  */
1417           if (DECL_ANTICIPATED (olddecl))
1418             {
1419               /* Deal with fileptr_type_node.  FILE type is not known
1420                  at the time we create the builtins.  */
1421               tree t1, t2;
1422
1423               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1424                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1425                    t1 || t2;
1426                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1427                 if (!t1 || !t2)
1428                   break;
1429                 else if (TREE_VALUE (t2) == fileptr_type_node)
1430                   {
1431                     tree t = TREE_VALUE (t1);
1432
1433                     if (TYPE_PTR_P (t)
1434                         && TYPE_IDENTIFIER (TREE_TYPE (t))
1435                            == get_identifier ("FILE")
1436                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1437                       {
1438                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1439
1440                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1441                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1442                         types_match = decls_match (newdecl, olddecl);
1443                         if (types_match)
1444                           return duplicate_decls (newdecl, olddecl,
1445                                                   newdecl_is_friend);
1446                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1447                       }
1448                   }
1449                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1450                   break;
1451             }
1452           else if ((DECL_EXTERN_C_P (newdecl)
1453                     && DECL_EXTERN_C_P (olddecl))
1454                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1455                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1456             {
1457               /* A near match; override the builtin.  */
1458
1459               if (TREE_PUBLIC (newdecl))
1460                 warning (0, "new declaration %q#D ambiguates built-in "
1461                          "declaration %q#D", newdecl, olddecl);
1462               else
1463                 warning (OPT_Wshadow, 
1464                          DECL_BUILT_IN (olddecl)
1465                          ? G_("shadowing built-in function %q#D")
1466                          : G_("shadowing library function %q#D"), olddecl);
1467             }
1468           else
1469             /* Discard the old built-in function.  */
1470             return NULL_TREE;
1471
1472           /* Replace the old RTL to avoid problems with inlining.  */
1473           COPY_DECL_RTL (newdecl, olddecl);
1474         }
1475       /* Even if the types match, prefer the new declarations type for
1476          built-ins which have not been explicitly declared, for
1477          exception lists, etc...  */
1478       else if (DECL_IS_BUILTIN (olddecl))
1479         {
1480           tree type = TREE_TYPE (newdecl);
1481           tree attribs = (*targetm.merge_type_attributes)
1482             (TREE_TYPE (olddecl), type);
1483
1484           type = cp_build_type_attribute_variant (type, attribs);
1485           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1486         }
1487
1488       /* If a function is explicitly declared "throw ()", propagate that to
1489          the corresponding builtin.  */
1490       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1491           && DECL_ANTICIPATED (olddecl)
1492           && TREE_NOTHROW (newdecl)
1493           && !TREE_NOTHROW (olddecl))
1494         {
1495           enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1496           tree tmpdecl = builtin_decl_explicit (fncode);
1497           if (tmpdecl && tmpdecl != olddecl && types_match)
1498             TREE_NOTHROW (tmpdecl)  = 1;
1499         }
1500
1501       /* Whether or not the builtin can throw exceptions has no
1502          bearing on this declarator.  */
1503       TREE_NOTHROW (olddecl) = 0;
1504
1505       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1506         {
1507           /* If a builtin function is redeclared as `static', merge
1508              the declarations, but make the original one static.  */
1509           DECL_THIS_STATIC (olddecl) = 1;
1510           TREE_PUBLIC (olddecl) = 0;
1511
1512           /* Make the old declaration consistent with the new one so
1513              that all remnants of the builtin-ness of this function
1514              will be banished.  */
1515           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1516           COPY_DECL_RTL (newdecl, olddecl);
1517         }
1518     }
1519   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1520     {
1521       /* C++ Standard, 3.3, clause 4:
1522          "[Note: a namespace name or a class template name must be unique
1523          in its declarative region (7.3.2, clause 14). ]"  */
1524       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1525           && TREE_CODE (newdecl) != NAMESPACE_DECL
1526           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1527               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1528           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1529               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1530         {
1531           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1532                && TREE_CODE (newdecl) != TYPE_DECL)
1533               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1534                   && TREE_CODE (olddecl) != TYPE_DECL))
1535             {
1536               /* We do nothing special here, because C++ does such nasty
1537                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1538                  get shadowed, and know that if we need to find a TYPE_DECL
1539                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1540                  slot of the identifier.  */
1541               return NULL_TREE;
1542             }
1543             
1544             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1545                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1546                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1547                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1548               return NULL_TREE;
1549         }
1550
1551       error ("%q#D redeclared as different kind of symbol", newdecl);
1552       if (TREE_CODE (olddecl) == TREE_LIST)
1553         olddecl = TREE_VALUE (olddecl);
1554       inform (DECL_SOURCE_LOCATION (olddecl),
1555               "previous declaration %q#D", olddecl);
1556
1557       return error_mark_node;
1558     }
1559   else if (!types_match)
1560     {
1561       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1562         /* These are certainly not duplicate declarations; they're
1563            from different scopes.  */
1564         return NULL_TREE;
1565
1566       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1567         {
1568           /* The name of a class template may not be declared to refer to
1569              any other template, class, function, object, namespace, value,
1570              or type in the same scope.  */
1571           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1572               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1573             {
1574               error ("conflicting declaration of template %q#D", newdecl);
1575               inform (DECL_SOURCE_LOCATION (olddecl),
1576                       "previous declaration %q#D", olddecl);
1577               return error_mark_node;
1578             }
1579           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1580                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1581                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1582                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1583                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1584                                            DECL_TEMPLATE_PARMS (olddecl))
1585                    /* Template functions can be disambiguated by
1586                       return type.  */
1587                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1588                                    TREE_TYPE (TREE_TYPE (olddecl))))
1589             {
1590               error ("ambiguating new declaration %q#D", newdecl);
1591               inform (DECL_SOURCE_LOCATION (olddecl),
1592                       "old declaration %q#D", olddecl);
1593             }
1594           return NULL_TREE;
1595         }
1596       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1597         {
1598           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1599             {
1600               error ("conflicting declaration of C function %q#D",
1601                      newdecl);
1602               inform (DECL_SOURCE_LOCATION (olddecl),
1603                       "previous declaration %q#D", olddecl);
1604               return NULL_TREE;
1605             }
1606           /* For function versions, params and types match, but they
1607              are not ambiguous.  */
1608           else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1609                     && !DECL_FUNCTION_VERSIONED (olddecl))
1610                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1611                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1612             {
1613               error ("ambiguating new declaration of %q#D", newdecl);
1614               inform (DECL_SOURCE_LOCATION (olddecl),
1615                       "old declaration %q#D", olddecl);
1616               return error_mark_node;
1617             }
1618           else
1619             return NULL_TREE;
1620         }
1621       else
1622         {
1623           error ("conflicting declaration %q#D", newdecl);
1624           inform (DECL_SOURCE_LOCATION (olddecl),
1625                   "previous declaration as %q#D", olddecl);
1626           return error_mark_node;
1627         }
1628     }
1629   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1630             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1631                  && (!DECL_TEMPLATE_INFO (newdecl)
1632                      || (DECL_TI_TEMPLATE (newdecl)
1633                          != DECL_TI_TEMPLATE (olddecl))))
1634                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1635                     && (!DECL_TEMPLATE_INFO (olddecl)
1636                         || (DECL_TI_TEMPLATE (olddecl)
1637                             != DECL_TI_TEMPLATE (newdecl))))))
1638     /* It's OK to have a template specialization and a non-template
1639        with the same type, or to have specializations of two
1640        different templates with the same type.  Note that if one is a
1641        specialization, and the other is an instantiation of the same
1642        template, that we do not exit at this point.  That situation
1643        can occur if we instantiate a template class, and then
1644        specialize one of its methods.  This situation is valid, but
1645        the declarations must be merged in the usual way.  */
1646     return NULL_TREE;
1647   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1648            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1649                 && !DECL_USE_TEMPLATE (newdecl))
1650                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1651                    && !DECL_USE_TEMPLATE (olddecl))))
1652     /* One of the declarations is a template instantiation, and the
1653        other is not a template at all.  That's OK.  */
1654     return NULL_TREE;
1655   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1656     {
1657       /* In [namespace.alias] we have:
1658
1659            In a declarative region, a namespace-alias-definition can be
1660            used to redefine a namespace-alias declared in that declarative
1661            region to refer only to the namespace to which it already
1662            refers.
1663
1664          Therefore, if we encounter a second alias directive for the same
1665          alias, we can just ignore the second directive.  */
1666       if (DECL_NAMESPACE_ALIAS (newdecl)
1667           && (DECL_NAMESPACE_ALIAS (newdecl)
1668               == DECL_NAMESPACE_ALIAS (olddecl)))
1669         return olddecl;
1670       /* [namespace.alias]
1671
1672          A namespace-name or namespace-alias shall not be declared as
1673          the name of any other entity in the same declarative region.
1674          A namespace-name defined at global scope shall not be
1675          declared as the name of any other entity in any global scope
1676          of the program.  */
1677       error ("conflicting declaration of namespace %qD", newdecl);
1678       inform (DECL_SOURCE_LOCATION (olddecl),
1679               "previous declaration of namespace %qD here", olddecl);
1680       return error_mark_node;
1681     }
1682   else
1683     {
1684       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1685       if (errmsg)
1686         {
1687           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1688           if (DECL_NAME (olddecl) != NULL_TREE)
1689             inform (input_location,
1690                     (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1691                     ? G_("%q+#D previously defined here")
1692                     : G_("%q+#D previously declared here"), olddecl);
1693           return error_mark_node;
1694         }
1695       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1696                && DECL_INITIAL (olddecl) != NULL_TREE
1697                && !prototype_p (TREE_TYPE (olddecl))
1698                && prototype_p (TREE_TYPE (newdecl)))
1699         {
1700           /* Prototype decl follows defn w/o prototype.  */
1701           if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1702                           "prototype specified for %q#D", newdecl))
1703             inform (DECL_SOURCE_LOCATION (olddecl),
1704                     "previous non-prototype definition here");
1705         }
1706       else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1707                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1708         {
1709           /* [dcl.link]
1710              If two declarations of the same function or object
1711              specify different linkage-specifications ..., the program
1712              is ill-formed.... Except for functions with C++ linkage,
1713              a function declaration without a linkage specification
1714              shall not precede the first linkage specification for
1715              that function.  A function can be declared without a
1716              linkage specification after an explicit linkage
1717              specification has been seen; the linkage explicitly
1718              specified in the earlier declaration is not affected by
1719              such a function declaration.
1720
1721              DR 563 raises the question why the restrictions on
1722              functions should not also apply to objects.  Older
1723              versions of G++ silently ignore the linkage-specification
1724              for this example:
1725
1726                namespace N { 
1727                  extern int i;
1728                  extern "C" int i;
1729                }
1730
1731              which is clearly wrong.  Therefore, we now treat objects
1732              like functions.  */
1733           if (current_lang_depth () == 0)
1734             {
1735               /* There is no explicit linkage-specification, so we use
1736                  the linkage from the previous declaration.  */
1737               if (!DECL_LANG_SPECIFIC (newdecl))
1738                 retrofit_lang_decl (newdecl);
1739               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1740             }
1741           else
1742             {
1743               error ("conflicting declaration of %q#D with %qL linkage",
1744                      newdecl, DECL_LANGUAGE (newdecl));
1745               inform (DECL_SOURCE_LOCATION (olddecl),
1746                       "previous declaration with %qL linkage",
1747                       DECL_LANGUAGE (olddecl));
1748             }
1749         }
1750
1751       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1752         ;
1753       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1754         {
1755           /* Note: free functions, as TEMPLATE_DECLs, are handled below.  */
1756           if (DECL_FUNCTION_MEMBER_P (olddecl)
1757               && (/* grokfndecl passes member function templates too
1758                      as FUNCTION_DECLs.  */
1759                   DECL_TEMPLATE_INFO (olddecl)
1760                   /* C++11 8.3.6/6.
1761                      Default arguments for a member function of a class
1762                      template shall be specified on the initial declaration
1763                      of the member function within the class template.  */
1764                   || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1765             check_redeclaration_no_default_args (newdecl);
1766           else
1767             {
1768               tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1769               tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1770               int i = 1;
1771
1772               for (; t1 && t1 != void_list_node;
1773                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1774                 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1775                   {
1776                     if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1777                                                TREE_PURPOSE (t2)))
1778                       {
1779                         if (permerror (input_location,
1780                                        "default argument given for parameter "
1781                                        "%d of %q#D", i, newdecl))
1782                           inform (DECL_SOURCE_LOCATION (olddecl),
1783                                   "previous specification in %q#D here",
1784                                   olddecl);
1785                       }
1786                     else
1787                       {
1788                         error ("default argument given for parameter %d "
1789                                "of %q#D", i, newdecl);
1790                         inform (DECL_SOURCE_LOCATION (olddecl),
1791                                 "previous specification in %q#D here",
1792                                 olddecl);
1793                       }
1794                   }
1795             }
1796         }
1797     }
1798
1799   /* Do not merge an implicit typedef with an explicit one.  In:
1800
1801        class A;
1802        ...
1803        typedef class A A __attribute__ ((foo));
1804
1805      the attribute should apply only to the typedef.  */
1806   if (TREE_CODE (olddecl) == TYPE_DECL
1807       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1808           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1809     return NULL_TREE;
1810
1811   /* If new decl is `static' and an `extern' was seen previously,
1812      warn about it.  */
1813   warn_extern_redeclared_static (newdecl, olddecl);
1814
1815   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1816     return error_mark_node;
1817
1818   /* We have committed to returning 1 at this point.  */
1819   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1820     {
1821       /* Now that functions must hold information normally held
1822          by field decls, there is extra work to do so that
1823          declaration information does not get destroyed during
1824          definition.  */
1825       if (DECL_VINDEX (olddecl))
1826         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1827       if (DECL_CONTEXT (olddecl))
1828         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1829       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1830       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1831       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1832       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1833       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1834       DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1835       DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1836       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1837       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1838         SET_OVERLOADED_OPERATOR_CODE
1839           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1840       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1841
1842       /* Optionally warn about more than one declaration for the same
1843          name, but don't warn about a function declaration followed by a
1844          definition.  */
1845       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1846           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1847           /* Don't warn about extern decl followed by definition.  */
1848           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1849           /* Don't warn about friends, let add_friend take care of it.  */
1850           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1851           /* Don't warn about declaration followed by specialization.  */
1852           && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1853               || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1854         {
1855           if (warning (OPT_Wredundant_decls,
1856                        "redundant redeclaration of %qD in same scope",
1857                        newdecl))
1858             inform (DECL_SOURCE_LOCATION (olddecl),
1859                     "previous declaration of %qD", olddecl);
1860         }
1861
1862       if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1863             && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1864         {
1865           if (DECL_DELETED_FN (newdecl))
1866             {
1867               error ("deleted definition of %qD", newdecl);
1868               inform (DECL_SOURCE_LOCATION (olddecl),
1869                       "previous declaration of %qD", olddecl);
1870             }
1871           DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1872         }
1873     }
1874
1875   /* Deal with C++: must preserve virtual function table size.  */
1876   if (TREE_CODE (olddecl) == TYPE_DECL)
1877     {
1878       tree newtype = TREE_TYPE (newdecl);
1879       tree oldtype = TREE_TYPE (olddecl);
1880
1881       if (newtype != error_mark_node && oldtype != error_mark_node
1882           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1883         CLASSTYPE_FRIEND_CLASSES (newtype)
1884           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1885
1886       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1887     }
1888
1889   /* Copy all the DECL_... slots specified in the new decl
1890      except for any that we copy here from the old type.  */
1891   DECL_ATTRIBUTES (newdecl)
1892     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1893
1894   if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1895     {
1896       olddecl_friend = DECL_FRIEND_P (olddecl);
1897       hidden_friend = (DECL_ANTICIPATED (olddecl)
1898                        && DECL_HIDDEN_FRIEND_P (olddecl)
1899                        && newdecl_is_friend);
1900       if (!hidden_friend)
1901         {
1902           DECL_ANTICIPATED (olddecl) = 0;
1903           DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1904         }
1905     }
1906
1907   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1908     {
1909       tree old_result;
1910       tree new_result;
1911       old_result = DECL_TEMPLATE_RESULT (olddecl);
1912       new_result = DECL_TEMPLATE_RESULT (newdecl);
1913       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1914       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1915         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1916                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1917
1918       DECL_ATTRIBUTES (old_result)
1919         = (*targetm.merge_decl_attributes) (old_result, new_result);
1920
1921       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1922         {
1923           /* Per C++11 8.3.6/4, default arguments cannot be added in later
1924              declarations of a function template.  */
1925           if (DECL_SOURCE_LOCATION (newdecl)
1926               != DECL_SOURCE_LOCATION (olddecl))
1927             check_redeclaration_no_default_args (newdecl);
1928
1929           check_default_args (newdecl);
1930
1931           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1932               && DECL_INITIAL (new_result))
1933             {
1934               if (DECL_INITIAL (old_result))
1935                 DECL_UNINLINABLE (old_result) = 1;
1936               else
1937                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1938               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1939               DECL_NOT_REALLY_EXTERN (old_result)
1940                 = DECL_NOT_REALLY_EXTERN (new_result);
1941               DECL_INTERFACE_KNOWN (old_result)
1942                 = DECL_INTERFACE_KNOWN (new_result);
1943               DECL_DECLARED_INLINE_P (old_result)
1944                 = DECL_DECLARED_INLINE_P (new_result);
1945               DECL_DISREGARD_INLINE_LIMITS (old_result)
1946                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1947
1948             }
1949           else
1950             {
1951               DECL_DECLARED_INLINE_P (old_result)
1952                 |= DECL_DECLARED_INLINE_P (new_result);
1953               DECL_DISREGARD_INLINE_LIMITS (old_result)
1954                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1955               check_redeclaration_exception_specification (newdecl, olddecl);
1956             }
1957         }
1958
1959       /* If the new declaration is a definition, update the file and
1960          line information on the declaration, and also make
1961          the old declaration the same definition.  */
1962       if (DECL_INITIAL (new_result) != NULL_TREE)
1963         {
1964           DECL_SOURCE_LOCATION (olddecl)
1965             = DECL_SOURCE_LOCATION (old_result)
1966             = DECL_SOURCE_LOCATION (newdecl);
1967           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1968           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1969             {
1970               tree parm;
1971               DECL_ARGUMENTS (old_result)
1972                 = DECL_ARGUMENTS (new_result);
1973               for (parm = DECL_ARGUMENTS (old_result); parm;
1974                    parm = DECL_CHAIN (parm))
1975                 DECL_CONTEXT (parm) = old_result;
1976             }
1977         }
1978
1979       return olddecl;
1980     }
1981
1982   if (types_match)
1983     {
1984       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1985         check_redeclaration_exception_specification (newdecl, olddecl);
1986
1987       /* Automatically handles default parameters.  */
1988       tree oldtype = TREE_TYPE (olddecl);
1989       tree newtype;
1990
1991       /* For typedefs use the old type, as the new type's DECL_NAME points
1992          at newdecl, which will be ggc_freed.  */
1993       if (TREE_CODE (newdecl) == TYPE_DECL)
1994         newtype = oldtype;
1995       else
1996         /* Merge the data types specified in the two decls.  */
1997         newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1998
1999       if (VAR_P (newdecl))
2000         {
2001           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2002           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2003           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2004             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2005           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2006             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2007
2008           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
2009           if (DECL_LANG_SPECIFIC (olddecl)
2010               && CP_DECL_THREADPRIVATE_P (olddecl))
2011             {
2012               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
2013               if (!DECL_LANG_SPECIFIC (newdecl))
2014                 retrofit_lang_decl (newdecl);
2015
2016               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2017             }
2018         }
2019
2020       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2021
2022       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2023         check_default_args (newdecl);
2024
2025       /* Lay the type out, unless already done.  */
2026       if (! same_type_p (newtype, oldtype)
2027           && TREE_TYPE (newdecl) != error_mark_node
2028           && !(processing_template_decl && uses_template_parms (newdecl)))
2029         layout_type (TREE_TYPE (newdecl));
2030
2031       if ((VAR_P (newdecl)
2032            || TREE_CODE (newdecl) == PARM_DECL
2033            || TREE_CODE (newdecl) == RESULT_DECL
2034            || TREE_CODE (newdecl) == FIELD_DECL
2035            || TREE_CODE (newdecl) == TYPE_DECL)
2036           && !(processing_template_decl && uses_template_parms (newdecl)))
2037         layout_decl (newdecl, 0);
2038
2039       /* Merge the type qualifiers.  */
2040       if (TREE_READONLY (newdecl))
2041         TREE_READONLY (olddecl) = 1;
2042       if (TREE_THIS_VOLATILE (newdecl))
2043         TREE_THIS_VOLATILE (olddecl) = 1;
2044       if (TREE_NOTHROW (newdecl))
2045         TREE_NOTHROW (olddecl) = 1;
2046
2047       /* Merge deprecatedness.  */
2048       if (TREE_DEPRECATED (newdecl))
2049         TREE_DEPRECATED (olddecl) = 1;
2050
2051       /* Preserve function specific target and optimization options */
2052       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2053         {
2054           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2055               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2056             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2057               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2058
2059           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2060               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2061             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2062               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2063         }
2064
2065       /* Merge the initialization information.  */
2066       if (DECL_INITIAL (newdecl) == NULL_TREE
2067           && DECL_INITIAL (olddecl) != NULL_TREE)
2068         {
2069           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2070           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2071           if (TREE_CODE (newdecl) == FUNCTION_DECL)
2072             {
2073               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2074               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2075             }
2076         }
2077
2078       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2079         {
2080           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2081             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2082           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2083           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2084           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2085           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2086           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2087           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2088           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2089           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
2090             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2091           /* Keep the old RTL.  */
2092           COPY_DECL_RTL (olddecl, newdecl);
2093         }
2094       else if (VAR_P (newdecl)
2095                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2096         {
2097           /* Keep the old RTL.  We cannot keep the old RTL if the old
2098              declaration was for an incomplete object and the new
2099              declaration is not since many attributes of the RTL will
2100              change.  */
2101           COPY_DECL_RTL (olddecl, newdecl);
2102         }
2103     }
2104   /* If cannot merge, then use the new type and qualifiers,
2105      and don't preserve the old rtl.  */
2106   else
2107     {
2108       /* Clean out any memory we had of the old declaration.  */
2109       tree oldstatic = value_member (olddecl, static_aggregates);
2110       if (oldstatic)
2111         TREE_VALUE (oldstatic) = error_mark_node;
2112
2113       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2114       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2115       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2116       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2117     }
2118
2119   /* Merge the storage class information.  */
2120   merge_weak (newdecl, olddecl);
2121
2122   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2123   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2124   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2125   if (! DECL_EXTERNAL (olddecl))
2126     DECL_EXTERNAL (newdecl) = 0;
2127
2128   new_template_info = NULL_TREE;
2129   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2130     {
2131       bool new_redefines_gnu_inline = false;
2132
2133       if (new_defines_function
2134           && ((DECL_INTERFACE_KNOWN (olddecl)
2135                && TREE_CODE (olddecl) == FUNCTION_DECL)
2136               || (TREE_CODE (olddecl) == TEMPLATE_DECL
2137                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2138                       == FUNCTION_DECL))))
2139         {
2140           tree fn = olddecl;
2141
2142           if (TREE_CODE (fn) == TEMPLATE_DECL)
2143             fn = DECL_TEMPLATE_RESULT (olddecl);
2144
2145           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2146         }
2147
2148       if (!new_redefines_gnu_inline)
2149         {
2150           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2151           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2152           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2153         }
2154       DECL_TEMPLATE_INSTANTIATED (newdecl)
2155         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2156       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2157
2158       /* If the OLDDECL is an instantiation and/or specialization,
2159          then the NEWDECL must be too.  But, it may not yet be marked
2160          as such if the caller has created NEWDECL, but has not yet
2161          figured out that it is a redeclaration.  */
2162       if (!DECL_USE_TEMPLATE (newdecl))
2163         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2164
2165       /* Don't really know how much of the language-specific
2166          values we should copy from old to new.  */
2167       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2168       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2169       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2170         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2171
2172       if (LANG_DECL_HAS_MIN (newdecl))
2173         {
2174           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2175             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2176           if (DECL_TEMPLATE_INFO (newdecl))
2177             {
2178               new_template_info = DECL_TEMPLATE_INFO (newdecl);
2179               if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2180                   && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2181                 /* Remember the presence of explicit specialization args.  */
2182                 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2183                   = TINFO_USED_TEMPLATE_ID (new_template_info);
2184             }
2185           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2186         }
2187       /* Only functions have these fields.  */
2188       if (DECL_DECLARES_FUNCTION_P (newdecl))
2189         {
2190           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2191           DECL_BEFRIENDING_CLASSES (newdecl)
2192             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2193                        DECL_BEFRIENDING_CLASSES (olddecl));
2194           /* DECL_THUNKS is only valid for virtual functions,
2195              otherwise it is a DECL_FRIEND_CONTEXT.  */
2196           if (DECL_VIRTUAL_P (newdecl))
2197             SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2198         }
2199       /* Only variables have this field.  */
2200       else if (VAR_P (newdecl)
2201                && VAR_HAD_UNKNOWN_BOUND (olddecl))
2202         SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2203     }
2204
2205   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2206     {
2207       tree parm;
2208
2209       /* Merge parameter attributes. */
2210       tree oldarg, newarg;
2211       for (oldarg = DECL_ARGUMENTS(olddecl), 
2212                newarg = DECL_ARGUMENTS(newdecl);
2213            oldarg && newarg;
2214            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2215           DECL_ATTRIBUTES (newarg)
2216               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2217           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2218       }
2219       
2220       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2221           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2222         {
2223           /* If newdecl is not a specialization, then it is not a
2224              template-related function at all.  And that means that we
2225              should have exited above, returning 0.  */
2226           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2227
2228           if (DECL_ODR_USED (olddecl))
2229             /* From [temp.expl.spec]:
2230
2231                If a template, a member template or the member of a class
2232                template is explicitly specialized then that
2233                specialization shall be declared before the first use of
2234                that specialization that would cause an implicit
2235                instantiation to take place, in every translation unit in
2236                which such a use occurs.  */
2237             error ("explicit specialization of %qD after first use",
2238                       olddecl);
2239
2240           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2241           DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2242                                    && DECL_DECLARED_INLINE_P (newdecl));
2243
2244           /* Don't propagate visibility from the template to the
2245              specialization here.  We'll do that in determine_visibility if
2246              appropriate.  */
2247           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2248
2249           /* [temp.expl.spec/14] We don't inline explicit specialization
2250              just because the primary template says so.  */
2251
2252           /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2253              the always_inline attribute.  */
2254           if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2255               && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2256             {
2257               if (DECL_DECLARED_INLINE_P (newdecl))
2258                 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2259               else
2260                 DECL_ATTRIBUTES (newdecl)
2261                   = remove_attribute ("always_inline",
2262                                       DECL_ATTRIBUTES (newdecl));
2263             }
2264         }
2265       else if (new_defines_function && DECL_INITIAL (olddecl))
2266         {
2267           /* Never inline re-defined extern inline functions.
2268              FIXME: this could be better handled by keeping both
2269              function as separate declarations.  */
2270           DECL_UNINLINABLE (newdecl) = 1;
2271         }
2272       else
2273         {
2274           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2275             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2276
2277           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2278
2279           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2280             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2281
2282           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2283             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2284             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2285                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2286         }
2287
2288       /* Preserve abstractness on cloned [cd]tors.  */
2289       DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2290
2291       /* Update newdecl's parms to point at olddecl.  */
2292       for (parm = DECL_ARGUMENTS (newdecl); parm;
2293            parm = DECL_CHAIN (parm))
2294         DECL_CONTEXT (parm) = olddecl;
2295
2296       if (! types_match)
2297         {
2298           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2299           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2300           COPY_DECL_RTL (newdecl, olddecl);
2301         }
2302       if (! types_match || new_defines_function)
2303         {
2304           /* These need to be copied so that the names are available.
2305              Note that if the types do match, we'll preserve inline
2306              info and other bits, but if not, we won't.  */
2307           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2308           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2309         }
2310       /* If redeclaring a builtin function, it stays built in
2311          if newdecl is a gnu_inline definition, or if newdecl is just
2312          a declaration.  */
2313       if (DECL_BUILT_IN (olddecl)
2314           && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2315         {
2316           DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2317           DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2318           /* If we're keeping the built-in definition, keep the rtl,
2319              regardless of declaration matches.  */
2320           COPY_DECL_RTL (olddecl, newdecl);
2321           if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2322             {
2323               enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2324               switch (fncode)
2325                 {
2326                   /* If a compatible prototype of these builtin functions
2327                      is seen, assume the runtime implements it with the
2328                      expected semantics.  */
2329                 case BUILT_IN_STPCPY:
2330                   if (builtin_decl_explicit_p (fncode))
2331                     set_builtin_decl_implicit_p (fncode, true);
2332                   break;
2333                 default:
2334                   if (builtin_decl_explicit_p (fncode))
2335                     set_builtin_decl_declared_p (fncode, true);
2336                   break;
2337                 }
2338             }
2339         }
2340       if (new_defines_function)
2341         /* If defining a function declared with other language
2342            linkage, use the previously declared language linkage.  */
2343         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2344       else if (types_match)
2345         {
2346           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2347           /* Don't clear out the arguments if we're just redeclaring a
2348              function.  */
2349           if (DECL_ARGUMENTS (olddecl))
2350             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2351         }
2352     }
2353   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2354     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2355
2356   /* Now preserve various other info from the definition.  */
2357   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2358   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2359   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2360   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2361
2362   /* Warn about conflicting visibility specifications.  */
2363   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2364       && DECL_VISIBILITY_SPECIFIED (newdecl)
2365       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2366     {
2367       if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2368                       "%qD: visibility attribute ignored because it "
2369                       "conflicts with previous declaration", newdecl))
2370         inform (DECL_SOURCE_LOCATION (olddecl),
2371                 "previous declaration of %qD", olddecl);
2372     }
2373   /* Choose the declaration which specified visibility.  */
2374   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2375     {
2376       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2377       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2378     }
2379   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2380      so keep this behavior.  */
2381   if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2382     {
2383       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2384       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2385     }
2386   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2387   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2388     {
2389       DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2390       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2391     }
2392   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2393   if (TREE_CODE (newdecl) == FIELD_DECL)
2394     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2395
2396   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2397      with that from NEWDECL below.  */
2398   if (DECL_LANG_SPECIFIC (olddecl))
2399     {
2400       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2401                   != DECL_LANG_SPECIFIC (newdecl));
2402       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2403     }
2404
2405   /* Merge the USED information.  */
2406   if (TREE_USED (olddecl))
2407     TREE_USED (newdecl) = 1;
2408   else if (TREE_USED (newdecl))
2409     TREE_USED (olddecl) = 1;
2410   if (VAR_P (newdecl))
2411     {
2412       if (DECL_READ_P (olddecl))
2413         DECL_READ_P (newdecl) = 1;
2414       else if (DECL_READ_P (newdecl))
2415         DECL_READ_P (olddecl) = 1;
2416     }
2417   if (DECL_PRESERVE_P (olddecl))
2418     DECL_PRESERVE_P (newdecl) = 1;
2419   else if (DECL_PRESERVE_P (newdecl))
2420     DECL_PRESERVE_P (olddecl) = 1;
2421
2422   /* Merge the DECL_FUNCTION_VERSIONED information.  newdecl will be copied
2423      to olddecl and deleted.  */
2424   if (TREE_CODE (newdecl) == FUNCTION_DECL
2425       && DECL_FUNCTION_VERSIONED (olddecl))
2426     {
2427       /* Set the flag for newdecl so that it gets copied to olddecl.  */
2428       DECL_FUNCTION_VERSIONED (newdecl) = 1;
2429       /* newdecl will be purged after copying to olddecl and is no longer
2430          a version.  */
2431       cgraph_node::delete_function_version (newdecl);
2432     }
2433
2434   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2435     {
2436       int function_size;
2437       struct symtab_node *snode = symtab_node::get (olddecl);
2438
2439       function_size = sizeof (struct tree_decl_common);
2440
2441       memcpy ((char *) olddecl + sizeof (struct tree_common),
2442               (char *) newdecl + sizeof (struct tree_common),
2443               function_size - sizeof (struct tree_common));
2444
2445       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2446               (char *) newdecl + sizeof (struct tree_decl_common),
2447               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2448
2449       /* Preserve symtab node mapping.  */
2450       olddecl->decl_with_vis.symtab_node = snode;
2451
2452       if (new_template_info)
2453         /* If newdecl is a template instantiation, it is possible that
2454            the following sequence of events has occurred:
2455
2456            o A friend function was declared in a class template.  The
2457            class template was instantiated.
2458
2459            o The instantiation of the friend declaration was
2460            recorded on the instantiation list, and is newdecl.
2461
2462            o Later, however, instantiate_class_template called pushdecl
2463            on the newdecl to perform name injection.  But, pushdecl in
2464            turn called duplicate_decls when it discovered that another
2465            declaration of a global function with the same name already
2466            existed.
2467
2468            o Here, in duplicate_decls, we decided to clobber newdecl.
2469
2470            If we're going to do that, we'd better make sure that
2471            olddecl, and not newdecl, is on the list of
2472            instantiations so that if we try to do the instantiation
2473            again we won't get the clobbered declaration.  */
2474         reregister_specialization (newdecl,
2475                                    new_template_info,
2476                                    olddecl);
2477     }
2478   else
2479     {
2480       size_t size = tree_code_size (TREE_CODE (newdecl));
2481
2482       memcpy ((char *) olddecl + sizeof (struct tree_common),
2483               (char *) newdecl + sizeof (struct tree_common),
2484               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2485       switch (TREE_CODE (newdecl))
2486         {
2487         case LABEL_DECL:
2488         case VAR_DECL:
2489         case RESULT_DECL:
2490         case PARM_DECL:
2491         case FIELD_DECL:
2492         case TYPE_DECL:
2493         case CONST_DECL:
2494           {
2495             struct symtab_node *snode = NULL;
2496
2497             if (TREE_CODE (newdecl) == VAR_DECL
2498                 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl) || DECL_EXTERNAL (olddecl)))
2499               snode = symtab_node::get (olddecl);
2500             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2501                     (char *) newdecl + sizeof (struct tree_decl_common),
2502                     size - sizeof (struct tree_decl_common)
2503                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2504             if (TREE_CODE (newdecl) == VAR_DECL)
2505               olddecl->decl_with_vis.symtab_node = snode;
2506           }
2507           break;
2508         default:
2509           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2510                   (char *) newdecl + sizeof (struct tree_decl_common),
2511                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2512                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2513           break;
2514         }
2515     }
2516
2517   if (TREE_CODE (newdecl) == FUNCTION_DECL
2518       || TREE_CODE (newdecl) == VAR_DECL)
2519     {
2520       if (DECL_EXTERNAL (olddecl)
2521           || TREE_PUBLIC (olddecl)
2522           || TREE_STATIC (olddecl))
2523         {
2524           /* Merge the section attribute.
2525              We want to issue an error if the sections conflict but that must be
2526              done later in decl_attributes since we are called before attributes
2527              are assigned.  */
2528           if (DECL_SECTION_NAME (newdecl) != NULL)
2529             set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2530
2531           if (DECL_ONE_ONLY (newdecl))
2532             {
2533               struct symtab_node *oldsym, *newsym;
2534               if (TREE_CODE (olddecl) == FUNCTION_DECL)
2535                 oldsym = cgraph_node::get_create (olddecl);
2536               else
2537                 oldsym = varpool_node::get_create (olddecl);
2538               newsym = symtab_node::get (newdecl);
2539               oldsym->set_comdat_group (newsym->get_comdat_group ());
2540             }
2541         }
2542
2543       if (TREE_CODE (newdecl) == VAR_DECL
2544           && DECL_THREAD_LOCAL_P (newdecl))
2545         set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2546     }
2547
2548   DECL_UID (olddecl) = olddecl_uid;
2549   if (olddecl_friend)
2550     DECL_FRIEND_P (olddecl) = 1;
2551   if (hidden_friend)
2552     {
2553       DECL_ANTICIPATED (olddecl) = 1;
2554       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2555     }
2556
2557   /* NEWDECL contains the merged attribute lists.
2558      Update OLDDECL to be the same.  */
2559   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2560
2561   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2562     so that encode_section_info has a chance to look at the new decl
2563     flags and attributes.  */
2564   if (DECL_RTL_SET_P (olddecl)
2565       && (TREE_CODE (olddecl) == FUNCTION_DECL
2566           || (VAR_P (olddecl)
2567               && TREE_STATIC (olddecl))))
2568     make_decl_rtl (olddecl);
2569
2570   /* The NEWDECL will no longer be needed.  Because every out-of-class
2571      declaration of a member results in a call to duplicate_decls,
2572      freeing these nodes represents in a significant savings.
2573
2574      Before releasing the node, be sore to remove function from symbol
2575      table that might have been inserted there to record comdat group.
2576      Be sure to however do not free DECL_STRUCT_FUNCTION becuase this
2577      structure is shared in between newdecl and oldecl.  */
2578   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2579     DECL_STRUCT_FUNCTION (newdecl) = NULL;
2580   if (TREE_CODE (newdecl) == FUNCTION_DECL
2581       || TREE_CODE (newdecl) == VAR_DECL)
2582     {
2583       struct symtab_node *snode = symtab_node::get (newdecl);
2584       if (snode)
2585         snode->remove ();
2586     }
2587   ggc_free (newdecl);
2588
2589   return olddecl;
2590 }
2591 \f
2592 /* Return zero if the declaration NEWDECL is valid
2593    when the declaration OLDDECL (assumed to be for the same name)
2594    has already been seen.
2595    Otherwise return an error message format string with a %s
2596    where the identifier should go.  */
2597
2598 static const char *
2599 redeclaration_error_message (tree newdecl, tree olddecl)
2600 {
2601   if (TREE_CODE (newdecl) == TYPE_DECL)
2602     {
2603       /* Because C++ can put things into name space for free,
2604          constructs like "typedef struct foo { ... } foo"
2605          would look like an erroneous redeclaration.  */
2606       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2607         return NULL;
2608       else
2609         return G_("redefinition of %q#D");
2610     }
2611   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2612     {
2613       /* If this is a pure function, its olddecl will actually be
2614          the original initialization to `0' (which we force to call
2615          abort()).  Don't complain about redefinition in this case.  */
2616       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2617           && DECL_INITIAL (olddecl) == NULL_TREE)
2618         return NULL;
2619
2620       /* If both functions come from different namespaces, this is not
2621          a redeclaration - this is a conflict with a used function.  */
2622       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2623           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2624           && ! decls_match (olddecl, newdecl))
2625         return G_("%qD conflicts with used function");
2626
2627       /* We'll complain about linkage mismatches in
2628          warn_extern_redeclared_static.  */
2629
2630       /* Defining the same name twice is no good.  */
2631       if (DECL_INITIAL (olddecl) != NULL_TREE
2632           && DECL_INITIAL (newdecl) != NULL_TREE)
2633         {
2634           if (DECL_NAME (olddecl) == NULL_TREE)
2635             return G_("%q#D not declared in class");
2636           else if (!GNU_INLINE_P (olddecl)
2637                    || GNU_INLINE_P (newdecl))
2638             return G_("redefinition of %q#D");
2639         }
2640
2641       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2642         {
2643           bool olda = GNU_INLINE_P (olddecl);
2644           bool newa = GNU_INLINE_P (newdecl);
2645
2646           if (olda != newa)
2647             {
2648               if (newa)
2649                 return G_("%q+D redeclared inline with "
2650                           "%<gnu_inline%> attribute");
2651               else
2652                 return G_("%q+D redeclared inline without "
2653                           "%<gnu_inline%> attribute");
2654             }
2655         }
2656
2657       check_abi_tag_redeclaration
2658         (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2659          lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2660
2661       return NULL;
2662     }
2663   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2664     {
2665       tree nt, ot;
2666
2667       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2668         {
2669           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2670               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2671             return G_("redefinition of %q#D");
2672           return NULL;
2673         }
2674
2675       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2676           || (DECL_TEMPLATE_RESULT (newdecl)
2677               == DECL_TEMPLATE_RESULT (olddecl)))
2678         return NULL;
2679
2680       nt = DECL_TEMPLATE_RESULT (newdecl);
2681       if (DECL_TEMPLATE_INFO (nt))
2682         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2683       ot = DECL_TEMPLATE_RESULT (olddecl);
2684       if (DECL_TEMPLATE_INFO (ot))
2685         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2686       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2687           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2688         return G_("redefinition of %q#D");
2689
2690       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2691         {
2692           bool olda = GNU_INLINE_P (ot);
2693           bool newa = GNU_INLINE_P (nt);
2694
2695           if (olda != newa)
2696             {
2697               if (newa)
2698                 return G_("%q+D redeclared inline with "
2699                           "%<gnu_inline%> attribute");
2700               else
2701                 return G_("%q+D redeclared inline without "
2702                           "%<gnu_inline%> attribute");
2703             }
2704         }
2705
2706       /* Core issue #226 (C++0x): 
2707            
2708            If a friend function template declaration specifies a
2709            default template-argument, that declaration shall be a
2710            definition and shall be the only declaration of the
2711            function template in the translation unit.  */
2712       if ((cxx_dialect != cxx98) 
2713           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2714           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2715                                        /*is_primary=*/true,
2716                                        /*is_partial=*/false,
2717                                        /*is_friend_decl=*/2))
2718         return G_("redeclaration of friend %q#D "
2719                   "may not have default template arguments");
2720
2721       return NULL;
2722     }
2723   else if (VAR_P (newdecl)
2724            && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2725            && (! DECL_LANG_SPECIFIC (olddecl)
2726                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2727                || DECL_THREAD_LOCAL_P (newdecl)))
2728     {
2729       /* Only variables can be thread-local, and all declarations must
2730          agree on this property.  */
2731       if (DECL_THREAD_LOCAL_P (newdecl))
2732         return G_("thread-local declaration of %q#D follows "
2733                   "non-thread-local declaration");
2734       else
2735         return G_("non-thread-local declaration of %q#D follows "
2736                   "thread-local declaration");
2737     }
2738   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2739     {
2740       /* The objects have been declared at namespace scope.  If either
2741          is a member of an anonymous union, then this is an invalid
2742          redeclaration.  For example:
2743
2744            int i;
2745            union { int i; };
2746
2747            is invalid.  */
2748       if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2749           || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2750         return G_("redeclaration of %q#D");
2751       /* If at least one declaration is a reference, there is no
2752          conflict.  For example:
2753
2754            int i = 3;
2755            extern int i;
2756
2757          is valid.  */
2758       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2759         return NULL;
2760       /* Reject two definitions.  */
2761       return G_("redefinition of %q#D");
2762     }
2763   else
2764     {
2765       /* Objects declared with block scope:  */
2766       /* Reject two definitions, and reject a definition
2767          together with an external reference.  */
2768       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2769         return G_("redeclaration of %q#D");
2770       return NULL;
2771     }
2772 }
2773 \f
2774 /* Hash and equality functions for the named_label table.  */
2775
2776 hashval_t
2777 named_label_hasher::hash (named_label_entry *ent)
2778 {
2779   return DECL_UID (ent->label_decl);
2780 }
2781
2782 bool
2783 named_label_hasher::equal (named_label_entry *a, named_label_entry *b)
2784 {
2785   return a->label_decl == b->label_decl;
2786 }
2787
2788 /* Create a new label, named ID.  */
2789
2790 static tree
2791 make_label_decl (tree id, int local_p)
2792 {
2793   struct named_label_entry *ent;
2794   tree decl;
2795
2796   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2797
2798   DECL_CONTEXT (decl) = current_function_decl;
2799   DECL_MODE (decl) = VOIDmode;
2800   C_DECLARED_LABEL_FLAG (decl) = local_p;
2801
2802   /* Say where one reference is to the label, for the sake of the
2803      error if it is not defined.  */
2804   DECL_SOURCE_LOCATION (decl) = input_location;
2805
2806   /* Record the fact that this identifier is bound to this label.  */
2807   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2808
2809   /* Create the label htab for the function on demand.  */
2810   if (!named_labels)
2811     named_labels = hash_table<named_label_hasher>::create_ggc (13);
2812
2813   /* Record this label on the list of labels used in this function.
2814      We do this before calling make_label_decl so that we get the
2815      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2816   ent = ggc_cleared_alloc<named_label_entry> ();
2817   ent->label_decl = decl;
2818
2819   named_label_entry **slot = named_labels->find_slot (ent, INSERT);
2820   gcc_assert (*slot == NULL);
2821   *slot = ent;
2822
2823   return decl;
2824 }
2825
2826 /* Look for a label named ID in the current function.  If one cannot
2827    be found, create one.  (We keep track of used, but undefined,
2828    labels, and complain about them at the end of a function.)  */
2829
2830 static tree
2831 lookup_label_1 (tree id)
2832 {
2833   tree decl;
2834
2835   /* You can't use labels at global scope.  */
2836   if (current_function_decl == NULL_TREE)
2837     {
2838       error ("label %qE referenced outside of any function", id);
2839       return NULL_TREE;
2840     }
2841
2842   /* See if we've already got this label.  */
2843   decl = IDENTIFIER_LABEL_VALUE (id);
2844   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2845     return decl;
2846
2847   decl = make_label_decl (id, /*local_p=*/0);
2848   return decl;
2849 }
2850
2851 /* Wrapper for lookup_label_1.  */
2852
2853 tree
2854 lookup_label (tree id)
2855 {
2856   tree ret;
2857   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2858   ret = lookup_label_1 (id);
2859   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2860   return ret;
2861 }
2862
2863 /* Declare a local label named ID.  */
2864
2865 tree
2866 declare_local_label (tree id)
2867 {
2868   tree decl;
2869   cp_label_binding bind;
2870
2871   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2872      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2873   bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2874
2875   decl = make_label_decl (id, /*local_p=*/1);
2876   bind.label = decl;
2877   vec_safe_push (current_binding_level->shadowed_labels, bind);
2878
2879   return decl;
2880 }
2881
2882 /* Returns nonzero if it is ill-formed to jump past the declaration of
2883    DECL.  Returns 2 if it's also a real problem.  */
2884
2885 static int
2886 decl_jump_unsafe (tree decl)
2887 {
2888   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2889      with automatic storage duration is not in scope to a point where it is
2890      in scope is ill-formed unless the variable has scalar type, class type
2891      with a trivial default constructor and a trivial destructor, a
2892      cv-qualified version of one of these types, or an array of one of the
2893      preceding types and is declared without an initializer (8.5).  */
2894   tree type = TREE_TYPE (decl);
2895
2896   if (!VAR_P (decl) || TREE_STATIC (decl)
2897       || type == error_mark_node)
2898     return 0;
2899
2900   if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
2901       || variably_modified_type_p (type, NULL_TREE))
2902     return 2;
2903
2904   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2905     return 1;
2906
2907   return 0;
2908 }
2909
2910 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2911
2912 static bool
2913 identify_goto (tree decl, const location_t *locus)
2914 {
2915   bool complained = (decl
2916                      ? permerror (input_location, "jump to label %qD", decl)
2917                      : permerror (input_location, "jump to case label"));
2918   if (complained && locus)
2919     inform (*locus, "  from here");
2920   return complained;
2921 }
2922
2923 /* Check that a single previously seen jump to a newly defined label
2924    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2925    the jump context; NAMES are the names in scope in LEVEL at the jump
2926    context; LOCUS is the source position of the jump or 0.  Returns
2927    true if all is well.  */
2928
2929 static bool
2930 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2931                        bool exited_omp, const location_t *locus)
2932 {
2933   cp_binding_level *b;
2934   bool identified = false, complained = false;
2935   bool saw_eh = false, saw_omp = false;
2936
2937   if (exited_omp)
2938     {
2939       complained = identify_goto (decl, locus);
2940       if (complained)
2941         inform (input_location, "  exits OpenMP structured block");
2942       identified = saw_omp = true;
2943     }
2944
2945   for (b = current_binding_level; b ; b = b->level_chain)
2946     {
2947       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2948
2949       for (new_decls = b->names; new_decls != old_decls;
2950            new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2951                         : TREE_CHAIN (new_decls)))
2952         {
2953           int problem = decl_jump_unsafe (new_decls);
2954           if (! problem)
2955             continue;
2956
2957           if (!identified)
2958             {
2959               complained = identify_goto (decl, locus);
2960               identified = true;
2961             }
2962           if (complained)
2963             {
2964               if (problem > 1)
2965                 inform (input_location,
2966                         "  crosses initialization of %q+#D", new_decls);
2967               else
2968                 inform (input_location, "  enters scope of %q+#D which has "
2969                         "non-trivial destructor", new_decls);
2970             }
2971         }
2972
2973       if (b == level)
2974         break;
2975       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2976         {
2977           if (!identified)
2978             {
2979               complained = identify_goto (decl, locus);
2980               identified = true;
2981             }
2982           if (complained)
2983             {
2984               if (b->kind == sk_try)
2985                 inform (input_location, "  enters try block");
2986               else
2987                 inform (input_location, "  enters catch block");
2988             }
2989           saw_eh = true;
2990         }
2991       if (b->kind == sk_omp && !saw_omp)
2992         {
2993           if (!identified)
2994             {
2995               complained = identify_goto (decl, locus);
2996               identified = true;
2997             }
2998           if (complained)
2999             inform (input_location, "  enters OpenMP structured block");
3000           saw_omp = true;
3001         }
3002     }
3003
3004   return !identified;
3005 }
3006
3007 static void
3008 check_previous_goto (tree decl, struct named_label_use_entry *use)
3009 {
3010   check_previous_goto_1 (decl, use->binding_level,
3011                          use->names_in_scope, use->in_omp_scope,
3012                          &use->o_goto_locus);
3013 }
3014
3015 static bool
3016 check_switch_goto (cp_binding_level* level)
3017 {
3018   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3019 }
3020
3021 /* Check that a new jump to a label DECL is OK.  Called by
3022    finish_goto_stmt.  */
3023
3024 void
3025 check_goto (tree decl)
3026 {
3027   struct named_label_entry *ent, dummy;
3028   bool saw_catch = false, identified = false, complained = false;
3029   tree bad;
3030   unsigned ix;
3031
3032   /* We can't know where a computed goto is jumping.
3033      So we assume that it's OK.  */
3034   if (TREE_CODE (decl) != LABEL_DECL)
3035     return;
3036
3037   /* We didn't record any information about this label when we created it,
3038      and there's not much point since it's trivial to analyze as a return.  */
3039   if (decl == cdtor_label)
3040     return;
3041
3042   dummy.label_decl = decl;
3043   ent = named_labels->find (&dummy);
3044   gcc_assert (ent != NULL);
3045
3046   /* If the label hasn't been defined yet, defer checking.  */
3047   if (! DECL_INITIAL (decl))
3048     {
3049       struct named_label_use_entry *new_use;
3050
3051       /* Don't bother creating another use if the last goto had the
3052          same data, and will therefore create the same set of errors.  */
3053       if (ent->uses
3054           && ent->uses->names_in_scope == current_binding_level->names)
3055         return;
3056
3057       new_use = ggc_alloc<named_label_use_entry> ();
3058       new_use->binding_level = current_binding_level;
3059       new_use->names_in_scope = current_binding_level->names;
3060       new_use->o_goto_locus = input_location;
3061       new_use->in_omp_scope = false;
3062
3063       new_use->next = ent->uses;
3064       ent->uses = new_use;
3065       return;
3066     }
3067
3068   if (ent->in_try_scope || ent->in_catch_scope
3069       || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3070     {
3071       complained = permerror (input_location, "jump to label %q+D", decl);
3072       if (complained)
3073         inform (input_location, "  from here");
3074       identified = true;
3075     }
3076
3077   FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3078     {
3079       int u = decl_jump_unsafe (bad);
3080
3081       if (u > 1 && DECL_ARTIFICIAL (bad))
3082         {
3083           /* Can't skip init of __exception_info.  */
3084           if (complained)
3085             inform (DECL_SOURCE_LOCATION (bad), "  enters catch block");
3086           saw_catch = true;
3087         }
3088       else if (complained)
3089         {
3090           if (u > 1)
3091             inform (input_location, "  skips initialization of %q+#D", bad);
3092           else
3093             inform (input_location, "  enters scope of %q+#D which has "
3094                     "non-trivial destructor", bad);
3095         }
3096     }
3097
3098   if (complained)
3099     {
3100       if (ent->in_try_scope)
3101         inform (input_location, "  enters try block");
3102       else if (ent->in_catch_scope && !saw_catch)
3103         inform (input_location, "  enters catch block");
3104     }
3105
3106   if (ent->in_omp_scope)
3107     {
3108       if (complained)
3109         inform (input_location, "  enters OpenMP structured block");
3110     }
3111   else if (flag_openmp)
3112     {
3113       cp_binding_level *b;
3114       for (b = current_binding_level; b ; b = b->level_chain)
3115         {
3116           if (b == ent->binding_level)
3117             break;
3118           if (b->kind == sk_omp)
3119             {
3120               if (!identified)
3121                 {
3122                   complained = permerror (input_location,
3123                                           "jump to label %q+D", decl);
3124                   if (complained)
3125                     inform (input_location, "  from here");
3126                   identified = true;
3127                 }
3128               if (complained)
3129                 inform (input_location, "  exits OpenMP structured block");
3130               break;
3131             }
3132         }
3133     }
3134 }
3135
3136 /* Check that a return is ok wrt OpenMP structured blocks.
3137    Called by finish_return_stmt.  Returns true if all is well.  */
3138
3139 bool
3140 check_omp_return (void)
3141 {
3142   cp_binding_level *b;
3143   for (b = current_binding_level; b ; b = b->level_chain)
3144     if (b->kind == sk_omp)
3145       {
3146         error ("invalid exit from OpenMP structured block");
3147         return false;
3148       }
3149     else if (b->kind == sk_function_parms)
3150       break;
3151   return true;
3152 }
3153
3154 /* Define a label, specifying the location in the source file.
3155    Return the LABEL_DECL node for the label.  */
3156
3157 static tree
3158 define_label_1 (location_t location, tree name)
3159 {
3160   struct named_label_entry *ent, dummy;
3161   cp_binding_level *p;
3162   tree decl;
3163
3164   decl = lookup_label (name);
3165
3166   dummy.label_decl = decl;
3167   ent = named_labels->find (&dummy);
3168   gcc_assert (ent != NULL);
3169
3170   /* After labels, make any new cleanups in the function go into their
3171      own new (temporary) binding contour.  */
3172   for (p = current_binding_level;
3173        p->kind != sk_function_parms;
3174        p = p->level_chain)
3175     p->more_cleanups_ok = 0;
3176
3177   if (name == get_identifier ("wchar_t"))
3178     permerror (input_location, "label named wchar_t");
3179
3180   if (DECL_INITIAL (decl) != NULL_TREE)
3181     {
3182       error ("duplicate label %qD", decl);
3183       return error_mark_node;
3184     }
3185   else
3186     {
3187       struct named_label_use_entry *use;
3188
3189       /* Mark label as having been defined.  */
3190       DECL_INITIAL (decl) = error_mark_node;
3191       /* Say where in the source.  */
3192       DECL_SOURCE_LOCATION (decl) = location;
3193
3194       ent->binding_level = current_binding_level;
3195       ent->names_in_scope = current_binding_level->names;
3196
3197       for (use = ent->uses; use ; use = use->next)
3198         check_previous_goto (decl, use);
3199       ent->uses = NULL;
3200     }
3201
3202   return decl;
3203 }
3204
3205 /* Wrapper for define_label_1.  */
3206
3207 tree
3208 define_label (location_t location, tree name)
3209 {
3210   tree ret;
3211   bool running = timevar_cond_start (TV_NAME_LOOKUP);
3212   ret = define_label_1 (location, name);
3213   timevar_cond_stop (TV_NAME_LOOKUP, running);
3214   return ret;
3215 }
3216
3217
3218 struct cp_switch
3219 {
3220   cp_binding_level *level;
3221   struct cp_switch *next;
3222   /* The SWITCH_STMT being built.  */
3223   tree switch_stmt;
3224   /* A splay-tree mapping the low element of a case range to the high
3225      element, or NULL_TREE if there is no high element.  Used to
3226      determine whether or not a new case label duplicates an old case
3227      label.  We need a tree, rather than simply a hash table, because
3228      of the GNU case range extension.  */
3229   splay_tree cases;
3230 };
3231
3232 /* A stack of the currently active switch statements.  The innermost
3233    switch statement is on the top of the stack.  There is no need to
3234    mark the stack for garbage collection because it is only active
3235    during the processing of the body of a function, and we never
3236    collect at that point.  */
3237
3238 static struct cp_switch *switch_stack;
3239
3240 /* Called right after a switch-statement condition is parsed.
3241    SWITCH_STMT is the switch statement being parsed.  */
3242
3243 void
3244 push_switch (tree switch_stmt)
3245 {
3246   struct cp_switch *p = XNEW (struct cp_switch);
3247   p->level = current_binding_level;
3248   p->next = switch_stack;
3249   p->switch_stmt = switch_stmt;
3250   p->cases = splay_tree_new (case_compare, NULL, NULL);
3251   switch_stack = p;
3252 }
3253
3254 void
3255 pop_switch (void)
3256 {
3257   struct cp_switch *cs = switch_stack;
3258   location_t switch_location;
3259
3260   /* Emit warnings as needed.  */
3261   switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3262   if (!processing_template_decl)
3263     c_do_switch_warnings (cs->cases, switch_location,
3264                           SWITCH_STMT_TYPE (cs->switch_stmt),
3265                           SWITCH_STMT_COND (cs->switch_stmt));
3266
3267   splay_tree_delete (cs->cases);
3268   switch_stack = switch_stack->next;
3269   free (cs);
3270 }
3271
3272 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3273    condition.  Note that if TYPE and VALUE are already integral we don't
3274    really do the conversion because the language-independent
3275    warning/optimization code will work better that way.  */
3276
3277 static tree
3278 case_conversion (tree type, tree value)
3279 {
3280   if (value == NULL_TREE)
3281     return value;
3282
3283   if (cxx_dialect >= cxx11
3284       && (SCOPED_ENUM_P (type)
3285           || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3286     {
3287       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3288         type = type_promotes_to (type);
3289       value = (perform_implicit_conversion_flags
3290                (type, value, tf_warning_or_error,
3291                 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3292     }
3293   return cxx_constant_value (value);
3294 }
3295
3296 /* Note that we've seen a definition of a case label, and complain if this
3297    is a bad place for one.  */
3298
3299 tree
3300 finish_case_label (location_t loc, tree low_value, tree high_value)
3301 {
3302   tree cond, r;
3303   cp_binding_level *p;
3304   tree type;
3305
3306   if (processing_template_decl)
3307     {
3308       tree label;
3309
3310       /* For templates, just add the case label; we'll do semantic
3311          analysis at instantiation-time.  */
3312       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3313       return add_stmt (build_case_label (low_value, high_value, label));
3314     }
3315
3316   /* Find the condition on which this switch statement depends.  */
3317   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3318   if (cond && TREE_CODE (cond) == TREE_LIST)
3319     cond = TREE_VALUE (cond);
3320
3321   if (!check_switch_goto (switch_stack->level))
3322     return error_mark_node;
3323
3324   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3325
3326   low_value = case_conversion (type, low_value);
3327   high_value = case_conversion (type, high_value);
3328
3329   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3330                         low_value, high_value);
3331
3332   /* After labels, make any new cleanups in the function go into their
3333      own new (temporary) binding contour.  */
3334   for (p = current_binding_level;
3335        p->kind != sk_function_parms;
3336        p = p->level_chain)
3337     p->more_cleanups_ok = 0;
3338
3339   return r;
3340 }
3341 \f
3342 struct typename_info {
3343   tree scope;
3344   tree name;
3345   tree template_id;
3346   bool enum_p;
3347   bool class_p;
3348 };
3349
3350 struct typename_hasher : ggc_hasher<tree>
3351 {
3352   typedef typename_info *compare_type;
3353
3354   /* Hash a TYPENAME_TYPE.  */
3355
3356   static hashval_t
3357   hash (tree t)
3358   {
3359     hashval_t hash;
3360
3361     hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3362             ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3363
3364     return hash;
3365   }
3366
3367   /* Compare two TYPENAME_TYPEs.  */
3368
3369   static bool
3370   equal (tree t1, const typename_info *t2)
3371   {
3372     return (TYPE_IDENTIFIER (t1) == t2->name
3373             && TYPE_CONTEXT (t1) == t2->scope
3374             && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3375             && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3376             && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3377   }
3378 };
3379
3380 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3381    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3382
3383    Returns the new TYPENAME_TYPE.  */
3384
3385 static GTY (()) hash_table<typename_hasher> *typename_htab;
3386
3387 static tree
3388 build_typename_type (tree context, tree name, tree fullname,
3389                      enum tag_types tag_type)
3390 {
3391   tree t;
3392   tree d;
3393   typename_info ti;
3394   tree *e;
3395   hashval_t hash;
3396
3397   if (typename_htab == NULL)
3398     typename_htab = hash_table<typename_hasher>::create_ggc (61);
3399
3400   ti.scope = FROB_CONTEXT (context);
3401   ti.name = name;
3402   ti.template_id = fullname;
3403   ti.enum_p = tag_type == enum_type;
3404   ti.class_p = (tag_type == class_type
3405                 || tag_type == record_type
3406                 || tag_type == union_type);
3407   hash =  (htab_hash_pointer (ti.scope)
3408            ^ htab_hash_pointer (ti.name));
3409
3410   /* See if we already have this type.  */
3411   e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3412   if (*e)
3413     t = *e;
3414   else
3415     {
3416       /* Build the TYPENAME_TYPE.  */
3417       t = cxx_make_type (TYPENAME_TYPE);
3418       TYPE_CONTEXT (t) = ti.scope;
3419       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3420       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3421       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3422
3423       /* Build the corresponding TYPE_DECL.  */
3424       d = build_decl (input_location, TYPE_DECL, name, t);
3425       TYPE_NAME (TREE_TYPE (d)) = d;
3426       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3427       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3428       DECL_ARTIFICIAL (d) = 1;
3429
3430       /* Store it in the hash table.  */
3431       *e = t;
3432
3433       /* TYPENAME_TYPEs must always be compared structurally, because
3434          they may or may not resolve down to another type depending on
3435          the currently open classes. */
3436       SET_TYPE_STRUCTURAL_EQUALITY (t);
3437     }
3438
3439   return t;
3440 }
3441
3442 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3443    provided to name the type.  Returns an appropriate type, unless an
3444    error occurs, in which case error_mark_node is returned.  If we
3445    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3446    return that, rather than the _TYPE it corresponds to, in other
3447    cases we look through the type decl.  If TF_ERROR is set, complain
3448    about errors, otherwise be quiet.  */
3449
3450 tree
3451 make_typename_type (tree context, tree name, enum tag_types tag_type,
3452                     tsubst_flags_t complain)
3453 {
3454   tree fullname;
3455   tree t;
3456   bool want_template;
3457
3458   if (name == error_mark_node
3459       || context == NULL_TREE
3460       || context == error_mark_node)
3461     return error_mark_node;
3462
3463   if (TYPE_P (name))
3464     {
3465       if (!(TYPE_LANG_SPECIFIC (name)
3466             && (CLASSTYPE_IS_TEMPLATE (name)
3467                 || CLASSTYPE_USE_TEMPLATE (name))))
3468         name = TYPE_IDENTIFIER (name);
3469       else
3470         /* Create a TEMPLATE_ID_EXPR for the type.  */
3471         name = build_nt (TEMPLATE_ID_EXPR,
3472                          CLASSTYPE_TI_TEMPLATE (name),
3473                          CLASSTYPE_TI_ARGS (name));
3474     }
3475   else if (TREE_CODE (name) == TYPE_DECL)
3476     name = DECL_NAME (name);
3477
3478   fullname = name;
3479
3480   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3481     {
3482       name = TREE_OPERAND (name, 0);
3483       if (DECL_TYPE_TEMPLATE_P (name))
3484         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3485       if (TREE_CODE (name) != IDENTIFIER_NODE)
3486         {
3487           if (complain & tf_error)
3488             error ("%qD is not a type", name);
3489           return error_mark_node;
3490         }
3491     }
3492   if (TREE_CODE (name) == TEMPLATE_DECL)
3493     {
3494       if (complain & tf_error)
3495         error ("%qD used without template parameters", name);
3496       return error_mark_node;
3497     }
3498   gcc_assert (identifier_p (name));
3499   gcc_assert (TYPE_P (context));
3500
3501   if (!MAYBE_CLASS_TYPE_P (context))
3502     {
3503       if (complain & tf_error)
3504         error ("%q#T is not a class", context);
3505       return error_mark_node;
3506     }
3507   
3508   /* When the CONTEXT is a dependent type,  NAME could refer to a
3509      dependent base class of CONTEXT.  But look inside it anyway
3510      if CONTEXT is a currently open scope, in case it refers to a
3511      member of the current instantiation or a non-dependent base;
3512      lookup will stop when we hit a dependent base.  */
3513   if (!dependent_scope_p (context))
3514     /* We should only set WANT_TYPE when we're a nested typename type.
3515        Then we can give better diagnostics if we find a non-type.  */
3516     t = lookup_field (context, name, 2, /*want_type=*/true);
3517   else
3518     t = NULL_TREE;
3519
3520   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3521     return build_typename_type (context, name, fullname, tag_type);
3522
3523   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3524   
3525   if (!t)
3526     {
3527       if (complain & tf_error)
3528         error (want_template ? G_("no class template named %q#T in %q#T")
3529                : G_("no type named %q#T in %q#T"), name, context);
3530       return error_mark_node;
3531     }
3532   
3533   /* Pull out the template from an injected-class-name (or multiple).  */
3534   if (want_template)
3535     t = maybe_get_template_decl_from_type_decl (t);
3536
3537   if (TREE_CODE (t) == TREE_LIST)
3538     {
3539       if (complain & tf_error)
3540         {
3541           error ("lookup of %qT in %qT is ambiguous", name, context);
3542           print_candidates (t);
3543         }
3544       return error_mark_node;
3545     }
3546
3547   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3548     {
3549       if (complain & tf_error)
3550         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3551                context, name, t);
3552       return error_mark_node;
3553     }
3554   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3555     {
3556       if (complain & tf_error)
3557         error ("%<typename %T::%D%> names %q#T, which is not a type",
3558                context, name, t);
3559       return error_mark_node;
3560     }
3561
3562   if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3563     return error_mark_node;
3564
3565   /* If we are currently parsing a template and if T is a typedef accessed
3566      through CONTEXT then we need to remember and check access of T at
3567      template instantiation time.  */
3568   add_typedef_to_current_template_for_access_check (t, context, input_location);
3569
3570   if (want_template)
3571     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3572                                   NULL_TREE, context,
3573                                   /*entering_scope=*/0,
3574                                   complain | tf_user);
3575   
3576   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3577     t = TREE_TYPE (t);
3578
3579   maybe_record_typedef_use (t);
3580
3581   return t;
3582 }
3583
3584 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3585    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3586    in which case error_mark_node is returned.
3587
3588    If PARM_LIST is non-NULL, also make sure that the template parameter
3589    list of TEMPLATE_DECL matches.
3590
3591    If COMPLAIN zero, don't complain about any errors that occur.  */
3592
3593 tree
3594 make_unbound_class_template (tree context, tree name, tree parm_list,
3595                              tsubst_flags_t complain)
3596 {
3597   tree t;
3598   tree d;
3599
3600   if (TYPE_P (name))
3601     name = TYPE_IDENTIFIER (name);
3602   else if (DECL_P (name))
3603     name = DECL_NAME (name);
3604   gcc_assert (identifier_p (name));
3605
3606   if (!dependent_type_p (context)
3607       || currently_open_class (context))
3608     {
3609       tree tmpl = NULL_TREE;
3610
3611       if (MAYBE_CLASS_TYPE_P (context))
3612         tmpl = lookup_field (context, name, 0, false);
3613
3614       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3615         tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3616
3617       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3618         {
3619           if (complain & tf_error)
3620             error ("no class template named %q#T in %q#T", name, context);
3621           return error_mark_node;
3622         }
3623
3624       if (parm_list
3625           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3626         {
3627           if (complain & tf_error)
3628             {
3629               error ("template parameters do not match template %qD", tmpl);
3630               inform (DECL_SOURCE_LOCATION (tmpl),
3631                       "%qD declared here", tmpl);
3632             }
3633           return error_mark_node;
3634         }
3635
3636       if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3637                                           complain))
3638         return error_mark_node;
3639
3640       return tmpl;
3641     }
3642
3643   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3644   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3645   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3646   TREE_TYPE (t) = NULL_TREE;
3647   SET_TYPE_STRUCTURAL_EQUALITY (t);
3648
3649   /* Build the corresponding TEMPLATE_DECL.  */
3650   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3651   TYPE_NAME (TREE_TYPE (d)) = d;
3652   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3653   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3654   DECL_ARTIFICIAL (d) = 1;
3655   DECL_TEMPLATE_PARMS (d) = parm_list;
3656
3657   return t;
3658 }
3659
3660 \f
3661
3662 /* Push the declarations of builtin types into the namespace.
3663    RID_INDEX is the index of the builtin type in the array
3664    RID_POINTERS.  NAME is the name used when looking up the builtin
3665    type.  TYPE is the _TYPE node for the builtin type.  */
3666
3667 void
3668 record_builtin_type (enum rid rid_index,
3669                      const char* name,
3670                      tree type)
3671 {
3672   tree rname = NULL_TREE, tname = NULL_TREE;
3673   tree tdecl = NULL_TREE;
3674
3675   if ((int) rid_index < (int) RID_MAX)
3676     rname = ridpointers[(int) rid_index];
3677   if (name)
3678     tname = get_identifier (name);
3679
3680   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3681      eliminated.  Built-in types should not be looked up name; their
3682      names are keywords that the parser can recognize.  However, there
3683      is code in c-common.c that uses identifier_global_value to look
3684      up built-in types by name.  */
3685   if (tname)
3686     {
3687       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3688       DECL_ARTIFICIAL (tdecl) = 1;
3689       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3690     }
3691   if (rname)
3692     {
3693       if (!tdecl)
3694         {
3695           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3696           DECL_ARTIFICIAL (tdecl) = 1;
3697         }
3698       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3699     }
3700
3701   if (!TYPE_NAME (type))
3702     TYPE_NAME (type) = tdecl;
3703
3704   if (tdecl)
3705     debug_hooks->type_decl (tdecl, 0);
3706 }
3707
3708 /* Record one of the standard Java types.
3709  * Declare it as having the given NAME.
3710  * If SIZE > 0, it is the size of one of the integral types;
3711  * otherwise it is the negative of the size of one of the other types.  */
3712
3713 static tree
3714 record_builtin_java_type (const char* name, int size)
3715 {
3716   tree type, decl;
3717   if (size > 0)
3718     {
3719       type = build_nonstandard_integer_type (size, 0);
3720       type = build_distinct_type_copy (type);
3721     }
3722   else if (size > -32)
3723     {
3724       tree stype;
3725       /* "__java_char" or ""__java_boolean".  */
3726       type = build_nonstandard_integer_type (-size, 1);
3727       type = build_distinct_type_copy (type);
3728       /* Get the signed type cached and attached to the unsigned type,
3729          so it doesn't get garbage-collected at "random" times,
3730          causing potential codegen differences out of different UIDs
3731          and different alias set numbers.  */
3732       stype = build_nonstandard_integer_type (-size, 0);
3733       stype = build_distinct_type_copy (stype);
3734       TREE_CHAIN (type) = stype;
3735       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3736     }
3737   else
3738     { /* "__java_float" or ""__java_double".  */
3739       type = make_node (REAL_TYPE);
3740       TYPE_PRECISION (type) = - size;
3741       layout_type (type);
3742     }
3743   record_builtin_type (RID_MAX, name, type);
3744   decl = TYPE_NAME (type);
3745
3746   /* Suppress generate debug symbol entries for these types,
3747      since for normal C++ they are just clutter.
3748      However, push_lang_context undoes this if extern "Java" is seen.  */
3749   DECL_IGNORED_P (decl) = 1;
3750
3751   TYPE_FOR_JAVA (type) = 1;
3752   return type;
3753 }
3754
3755 /* Push a type into the namespace so that the back ends ignore it.  */
3756
3757 static void
3758 record_unknown_type (tree type, const char* name)
3759 {
3760   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3761                                     TYPE_DECL, get_identifier (name), type));
3762   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3763   DECL_IGNORED_P (decl) = 1;
3764   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3765   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3766   TYPE_ALIGN (type) = 1;
3767   TYPE_USER_ALIGN (type) = 0;
3768   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3769 }
3770
3771 /* A string for which we should create an IDENTIFIER_NODE at
3772    startup.  */
3773
3774 typedef struct predefined_identifier
3775 {
3776   /* The name of the identifier.  */
3777   const char *const name;
3778   /* The place where the IDENTIFIER_NODE should be stored.  */
3779   tree *const node;
3780   /* Nonzero if this is the name of a constructor or destructor.  */
3781   const int ctor_or_dtor_p;
3782 } predefined_identifier;
3783
3784 /* Create all the predefined identifiers.  */
3785
3786 static void
3787 initialize_predefined_identifiers (void)
3788 {
3789   const predefined_identifier *pid;
3790
3791   /* A table of identifiers to create at startup.  */
3792   static const predefined_identifier predefined_identifiers[] = {
3793     { "C++", &lang_name_cplusplus, 0 },
3794     { "C", &lang_name_c, 0 },
3795     { "Java", &lang_name_java, 0 },
3796     /* Some of these names have a trailing space so that it is
3797        impossible for them to conflict with names written by users.  */
3798     { "__ct ", &ctor_identifier, 1 },
3799     { "__base_ctor ", &base_ctor_identifier, 1 },
3800     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3801     { "__dt ", &dtor_identifier, 1 },
3802     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3803     { "__base_dtor ", &base_dtor_identifier, 1 },
3804     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3805     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3806     { "nelts", &nelts_identifier, 0 },
3807     { THIS_NAME, &this_identifier, 0 },
3808     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3809     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3810     { "_vptr", &vptr_identifier, 0 },
3811     { "__vtt_parm", &vtt_parm_identifier, 0 },
3812     { "::", &global_scope_name, 0 },
3813     { "std", &std_identifier, 0 },
3814     { NULL, NULL, 0 }
3815   };
3816
3817   for (pid = predefined_identifiers; pid->name; ++pid)
3818     {
3819       *pid->node = get_identifier (pid->name);
3820       if (pid->ctor_or_dtor_p)
3821         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3822     }
3823 }
3824
3825 /* Create the predefined scalar types of C,
3826    and some nodes representing standard constants (0, 1, (void *)0).
3827    Initialize the global binding level.
3828    Make definitions for built-in primitive functions.  */
3829
3830 void
3831 cxx_init_decl_processing (void)
3832 {
3833   tree void_ftype;
3834   tree void_ftype_ptr;
3835
3836   /* Create all the identifiers we need.  */
3837   initialize_predefined_identifiers ();
3838
3839   /* Create the global variables.  */
3840   push_to_top_level ();
3841
3842   current_function_decl = NULL_TREE;
3843   current_binding_level = NULL;
3844   /* Enter the global namespace.  */
3845   gcc_assert (global_namespace == NULL_TREE);
3846   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3847                                       void_type_node);
3848   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3849   debug_hooks->register_main_translation_unit
3850     (DECL_CONTEXT (global_namespace));
3851   TREE_PUBLIC (global_namespace) = 1;
3852   begin_scope (sk_namespace, global_namespace);
3853
3854   if (flag_visibility_ms_compat)
3855     default_visibility = VISIBILITY_HIDDEN;
3856
3857   /* Initially, C.  */
3858   current_lang_name = lang_name_c;
3859
3860   /* Create the `std' namespace.  */
3861   push_namespace (std_identifier);
3862   std_node = current_namespace;
3863   pop_namespace ();
3864
3865   c_common_nodes_and_builtins ();
3866
3867   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3868   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3869   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3870   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3871   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3872   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3873   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3874   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3875
3876   integer_two_node = build_int_cst (NULL_TREE, 2);
3877
3878   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3879   truthvalue_type_node = boolean_type_node;
3880   truthvalue_false_node = boolean_false_node;
3881   truthvalue_true_node = boolean_true_node;
3882
3883   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3884   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3885   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3886
3887 #if 0
3888   record_builtin_type (RID_MAX, NULL, string_type_node);
3889 #endif
3890
3891   delta_type_node = ptrdiff_type_node;
3892   vtable_index_type = ptrdiff_type_node;
3893
3894   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3895   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3896   void_ftype_ptr = build_function_type_list (void_type_node,
3897                                              ptr_type_node, NULL_TREE);
3898   void_ftype_ptr
3899     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3900
3901   /* C++ extensions */
3902
3903   unknown_type_node = make_node (LANG_TYPE);
3904   record_unknown_type (unknown_type_node, "unknown type");
3905
3906   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3907   TREE_TYPE (unknown_type_node) = unknown_type_node;
3908
3909   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3910      result.  */
3911   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3912   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3913
3914   init_list_type_node = make_node (LANG_TYPE);
3915   record_unknown_type (init_list_type_node, "init list");
3916
3917   {
3918     /* Make sure we get a unique function type, so we can give
3919        its pointer type a name.  (This wins for gdb.) */
3920     tree vfunc_type = make_node (FUNCTION_TYPE);
3921     TREE_TYPE (vfunc_type) = integer_type_node;
3922     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3923     layout_type (vfunc_type);
3924
3925     vtable_entry_type = build_pointer_type (vfunc_type);
3926   }
3927   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3928
3929   vtbl_type_node
3930     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3931   layout_type (vtbl_type_node);
3932   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3933   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3934   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3935   layout_type (vtbl_ptr_type_node);
3936   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3937
3938   push_namespace (get_identifier ("__cxxabiv1"));
3939   abi_node = current_namespace;
3940   pop_namespace ();
3941
3942   global_type_node = make_node (LANG_TYPE);
3943   record_unknown_type (global_type_node, "global type");
3944
3945   /* Now, C++.  */
3946   current_lang_name = lang_name_cplusplus;
3947
3948   {
3949     tree newattrs, extvisattr;
3950     tree newtype, deltype;
3951     tree ptr_ftype_sizetype;
3952     tree new_eh_spec;
3953
3954     ptr_ftype_sizetype
3955       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3956     if (cxx_dialect == cxx98)
3957       {
3958         tree bad_alloc_id;
3959         tree bad_alloc_type_node;
3960         tree bad_alloc_decl;
3961
3962         push_namespace (std_identifier);
3963         bad_alloc_id = get_identifier ("bad_alloc");
3964         bad_alloc_type_node = make_class_type (RECORD_TYPE);
3965         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3966         bad_alloc_decl
3967           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3968         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3969         pop_namespace ();
3970
3971         new_eh_spec
3972           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3973       }
3974     else
3975       new_eh_spec = noexcept_false_spec;
3976
3977     /* Ensure attribs.c is initialized.  */
3978     init_attributes ();
3979     extvisattr = build_tree_list (get_identifier ("externally_visible"),
3980                                   NULL_TREE);
3981     newattrs = tree_cons (get_identifier ("alloc_size"),
3982                           build_tree_list (NULL_TREE, integer_one_node),
3983                           extvisattr);
3984     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3985     newtype = build_exception_variant (newtype, new_eh_spec);
3986     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3987     deltype = build_exception_variant (deltype, empty_except_spec);
3988     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
3989     DECL_IS_MALLOC (opnew) = 1;
3990     DECL_IS_OPERATOR_NEW (opnew) = 1;
3991     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
3992     DECL_IS_MALLOC (opnew) = 1;
3993     DECL_IS_OPERATOR_NEW (opnew) = 1;
3994     push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3995     push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3996     if (flag_sized_deallocation)
3997       {
3998         /* Also push the sized deallocation variants:
3999              void operator delete(void*, std::size_t) throw();
4000              void operator delete[](void*, std::size_t) throw();  */
4001         tree void_ftype_ptr_size
4002           = build_function_type_list (void_type_node, ptr_type_node,
4003                                       size_type_node, NULL_TREE);
4004         deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4005                                                    extvisattr);
4006         deltype = build_exception_variant (deltype, empty_except_spec);
4007         push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4008         push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4009       }
4010
4011     nullptr_type_node = make_node (NULLPTR_TYPE);
4012     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4013     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4014     TYPE_UNSIGNED (nullptr_type_node) = 1;
4015     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4016     if (abi_version_at_least (9))
4017       TYPE_ALIGN (nullptr_type_node) = GET_MODE_ALIGNMENT (ptr_mode);
4018     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4019     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4020     nullptr_node = build_int_cst (nullptr_type_node, 0);
4021   }
4022
4023   abort_fndecl
4024     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4025                             ECF_NORETURN | ECF_NOTHROW);
4026
4027   /* Perform other language dependent initializations.  */
4028   init_class_processing ();
4029   init_rtti_processing ();
4030   init_template_processing ();
4031
4032   if (flag_exceptions)
4033     init_exception_processing ();
4034
4035   if (! supports_one_only ())
4036     flag_weak = 0;
4037
4038   make_fname_decl = cp_make_fname_decl;
4039   start_fname_decls ();
4040
4041   /* Show we use EH for cleanups.  */
4042   if (flag_exceptions)
4043     using_eh_for_cleanups ();
4044 }
4045
4046 /* Generate an initializer for a function naming variable from
4047    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
4048    filled in with the type of the init.  */
4049
4050 tree
4051 cp_fname_init (const char* name, tree *type_p)
4052 {
4053   tree domain = NULL_TREE;
4054   tree type;
4055   tree init = NULL_TREE;
4056   size_t length = 0;
4057
4058   if (name)
4059     {
4060       length = strlen (name);
4061       domain = build_index_type (size_int (length));
4062       init = build_string (length + 1, name);
4063     }
4064
4065   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4066   type = build_cplus_array_type (type, domain);
4067
4068   *type_p = type;
4069
4070   if (init)
4071     TREE_TYPE (init) = type;
4072   else
4073     init = error_mark_node;
4074
4075   return init;
4076 }
4077
4078 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4079    the decl, LOC is the location to give the decl, NAME is the
4080    initialization string and TYPE_DEP indicates whether NAME depended
4081    on the type of the function. We make use of that to detect
4082    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4083    at the point of first use, so we mustn't push the decl now.  */
4084
4085 static tree
4086 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4087 {
4088   const char *const name = (type_dep && processing_template_decl
4089                             ? NULL : fname_as_string (type_dep));
4090   tree type;
4091   tree init = cp_fname_init (name, &type);
4092   tree decl = build_decl (loc, VAR_DECL, id, type);
4093
4094   if (name)
4095     free (CONST_CAST (char *, name));
4096
4097   /* As we're using pushdecl_with_scope, we must set the context.  */
4098   DECL_CONTEXT (decl) = current_function_decl;
4099
4100   TREE_STATIC (decl) = 1;
4101   TREE_READONLY (decl) = 1;
4102   DECL_ARTIFICIAL (decl) = 1;
4103
4104   TREE_USED (decl) = 1;
4105
4106   if (current_function_decl)
4107     {
4108       cp_binding_level *b = current_binding_level;
4109       if (b->kind == sk_function_parms)
4110         return error_mark_node;
4111       while (b->level_chain->kind != sk_function_parms)
4112         b = b->level_chain;
4113       pushdecl_with_scope (decl, b, /*is_friend=*/false);
4114       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4115                       LOOKUP_ONLYCONVERTING);
4116     }
4117   else
4118     {
4119       DECL_THIS_STATIC (decl) = true;
4120       pushdecl_top_level_and_finish (decl, init);
4121     }
4122
4123   return decl;
4124 }
4125
4126 static tree
4127 builtin_function_1 (tree decl, tree context, bool is_global)
4128 {
4129   tree          id = DECL_NAME (decl);
4130   const char *name = IDENTIFIER_POINTER (id);
4131
4132   retrofit_lang_decl (decl);
4133
4134   DECL_ARTIFICIAL (decl) = 1;
4135   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4136   SET_DECL_LANGUAGE (decl, lang_c);
4137   /* Runtime library routines are, by definition, available in an
4138      external shared object.  */
4139   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4140   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4141
4142   DECL_CONTEXT (decl) = context;
4143
4144   if (is_global)
4145     pushdecl_top_level (decl);
4146   else
4147     pushdecl (decl);
4148
4149   /* A function in the user's namespace should have an explicit
4150      declaration before it is used.  Mark the built-in function as
4151      anticipated but not actually declared.  */
4152   if (name[0] != '_' || name[1] != '_')
4153     DECL_ANTICIPATED (decl) = 1;
4154   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4155     {
4156       size_t len = strlen (name);
4157
4158       /* Treat __*_chk fortification functions as anticipated as well,
4159          unless they are __builtin_*.  */
4160       if (len > strlen ("___chk")
4161           && memcmp (name + len - strlen ("_chk"),
4162                      "_chk", strlen ("_chk") + 1) == 0)
4163         DECL_ANTICIPATED (decl) = 1;
4164     }
4165
4166   return decl;
4167 }
4168
4169 tree
4170 cxx_builtin_function (tree decl)
4171 {
4172   tree          id = DECL_NAME (decl);
4173   const char *name = IDENTIFIER_POINTER (id);
4174   /* All builtins that don't begin with an '_' should additionally
4175      go in the 'std' namespace.  */
4176   if (name[0] != '_')
4177     {
4178       tree decl2 = copy_node(decl);
4179       push_namespace (std_identifier);
4180       builtin_function_1 (decl2, std_node, false);
4181       pop_namespace ();
4182     }
4183
4184   return builtin_function_1 (decl, NULL_TREE, false);
4185 }
4186
4187 /* Like cxx_builtin_function, but guarantee the function is added to the global
4188    scope.  This is to allow function specific options to add new machine
4189    dependent builtins when the target ISA changes via attribute((target(...)))
4190    which saves space on program startup if the program does not use non-generic
4191    ISAs.  */
4192
4193 tree
4194 cxx_builtin_function_ext_scope (tree decl)
4195 {
4196
4197   tree          id = DECL_NAME (decl);
4198   const char *name = IDENTIFIER_POINTER (id);
4199   /* All builtins that don't begin with an '_' should additionally
4200      go in the 'std' namespace.  */
4201   if (name[0] != '_')
4202     {
4203       tree decl2 = copy_node(decl);
4204       push_namespace (std_identifier);
4205       builtin_function_1 (decl2, std_node, true);
4206       pop_namespace ();
4207     }
4208
4209   return builtin_function_1 (decl, NULL_TREE, true);
4210 }
4211
4212 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4213    function.  Not called directly.  */
4214
4215 static tree
4216 build_library_fn (tree name, enum tree_code operator_code, tree type,
4217                   int ecf_flags)
4218 {
4219   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4220   DECL_EXTERNAL (fn) = 1;
4221   TREE_PUBLIC (fn) = 1;
4222   DECL_ARTIFICIAL (fn) = 1;
4223   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4224   SET_DECL_LANGUAGE (fn, lang_c);
4225   /* Runtime library routines are, by definition, available in an
4226      external shared object.  */
4227   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4228   DECL_VISIBILITY_SPECIFIED (fn) = 1;
4229   set_call_expr_flags (fn, ecf_flags);
4230   return fn;
4231 }
4232
4233 /* Returns the _DECL for a library function with C++ linkage.  */
4234
4235 static tree
4236 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4237                      int ecf_flags)
4238 {
4239   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4240   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4241   SET_DECL_LANGUAGE (fn, lang_cplusplus);
4242   return fn;
4243 }
4244
4245 /* Like build_library_fn, but takes a C string instead of an
4246    IDENTIFIER_NODE.  */
4247
4248 tree
4249 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4250 {
4251   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4252 }
4253
4254 /* Like build_cp_library_fn, but takes a C string instead of an
4255    IDENTIFIER_NODE.  */
4256
4257 tree
4258 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4259 {
4260   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4261                               ecf_flags);
4262 }
4263
4264 /* Like build_library_fn, but also pushes the function so that we will
4265    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
4266    may throw exceptions listed in RAISES.  */
4267
4268 tree
4269 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4270 {
4271   tree fn;
4272
4273   if (raises)
4274     type = build_exception_variant (type, raises);
4275
4276   fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4277   pushdecl_top_level (fn);
4278   return fn;
4279 }
4280
4281 /* Like build_cp_library_fn, but also pushes the function so that it
4282    will be found by normal lookup.  */
4283
4284 static tree
4285 push_cp_library_fn (enum tree_code operator_code, tree type,
4286                     int ecf_flags)
4287 {
4288   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4289                                  operator_code,
4290                                  type, ecf_flags);
4291   pushdecl (fn);
4292   if (flag_tm)
4293     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4294   return fn;
4295 }
4296
4297 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4298    a FUNCTION_TYPE.  */
4299
4300 tree
4301 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4302 {
4303   tree type = build_function_type (void_type_node, parmtypes);
4304   return push_library_fn (name, type, NULL_TREE, ecf_flags);
4305 }
4306
4307 /* Like push_library_fn, but also note that this function throws
4308    and does not return.  Used for __throw_foo and the like.  */
4309
4310 tree
4311 push_throw_library_fn (tree name, tree type)
4312 {
4313   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4314   return fn;
4315 }
4316 \f
4317 /* When we call finish_struct for an anonymous union, we create
4318    default copy constructors and such.  But, an anonymous union
4319    shouldn't have such things; this function undoes the damage to the
4320    anonymous union type T.
4321
4322    (The reason that we create the synthesized methods is that we don't
4323    distinguish `union { int i; }' from `typedef union { int i; } U'.
4324    The first is an anonymous union; the second is just an ordinary
4325    union type.)  */
4326
4327 void
4328 fixup_anonymous_aggr (tree t)
4329 {
4330   tree *q;
4331
4332   /* Wipe out memory of synthesized methods.  */
4333   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4334   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4335   TYPE_HAS_COPY_CTOR (t) = 0;
4336   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4337   TYPE_HAS_COPY_ASSIGN (t) = 0;
4338   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4339
4340   /* Splice the implicitly generated functions out of the TYPE_METHODS
4341      list.  */
4342   q = &TYPE_METHODS (t);
4343   while (*q)
4344     {
4345       if (DECL_ARTIFICIAL (*q))
4346         *q = TREE_CHAIN (*q);
4347       else
4348         q = &DECL_CHAIN (*q);
4349     }
4350
4351   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4352   if (TYPE_METHODS (t))
4353     {
4354       tree decl = TYPE_MAIN_DECL (t);
4355
4356       if (TREE_CODE (t) != UNION_TYPE)
4357         error_at (DECL_SOURCE_LOCATION (decl), 
4358                   "an anonymous struct cannot have function members");
4359       else
4360         error_at (DECL_SOURCE_LOCATION (decl),
4361                   "an anonymous union cannot have function members");
4362     }
4363
4364   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4365      assignment operators (because they cannot have these methods themselves).
4366      For anonymous unions this is already checked because they are not allowed
4367      in any union, otherwise we have to check it.  */
4368   if (TREE_CODE (t) != UNION_TYPE)
4369     {
4370       tree field, type;
4371
4372       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4373         if (TREE_CODE (field) == FIELD_DECL)
4374           {
4375             type = TREE_TYPE (field);
4376             if (CLASS_TYPE_P (type))
4377               {
4378                 if (TYPE_NEEDS_CONSTRUCTING (type))
4379                   error ("member %q+#D with constructor not allowed "
4380                          "in anonymous aggregate", field);
4381                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4382                   error ("member %q+#D with destructor not allowed "
4383                          "in anonymous aggregate", field);
4384                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4385                   error ("member %q+#D with copy assignment operator "
4386                          "not allowed in anonymous aggregate", field);
4387               }
4388           }
4389     }
4390 }
4391
4392 /* Warn for an attribute located at LOCATION that appertains to the
4393    class type CLASS_TYPE that has not been properly placed after its
4394    class-key, in it class-specifier.  */
4395
4396 void
4397 warn_misplaced_attr_for_class_type (source_location location,
4398                                     tree class_type)
4399 {
4400   gcc_assert (OVERLOAD_TYPE_P (class_type));
4401
4402   if (warning_at (location, OPT_Wattributes,
4403                   "attribute ignored in declaration "
4404                   "of %q#T", class_type))
4405     inform (location,
4406             "attribute for %q#T must follow the %qs keyword",
4407             class_type, class_key_or_enum_as_string (class_type));
4408 }
4409
4410 /* Make sure that a declaration with no declarator is well-formed, i.e.
4411    just declares a tagged type or anonymous union.
4412
4413    Returns the type declared; or NULL_TREE if none.  */
4414
4415 tree
4416 check_tag_decl (cp_decl_specifier_seq *declspecs,
4417                 bool explicit_type_instantiation_p)
4418 {
4419   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4420   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4421   /* If a class, struct, or enum type is declared by the DECLSPECS
4422      (i.e, if a class-specifier, enum-specifier, or non-typename
4423      elaborated-type-specifier appears in the DECLSPECS),
4424      DECLARED_TYPE is set to the corresponding type.  */
4425   tree declared_type = NULL_TREE;
4426   bool error_p = false;
4427
4428   if (declspecs->multiple_types_p)
4429     error ("multiple types in one declaration");
4430   else if (declspecs->redefined_builtin_type)
4431     {
4432       if (!in_system_header_at (input_location))
4433         permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4434                    "redeclaration of C++ built-in type %qT",
4435                    declspecs->redefined_builtin_type);
4436       return NULL_TREE;
4437     }
4438
4439   if (declspecs->type
4440       && TYPE_P (declspecs->type)
4441       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4442            && MAYBE_CLASS_TYPE_P (declspecs->type))
4443           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4444     declared_type = declspecs->type;
4445   else if (declspecs->type == error_mark_node)
4446     error_p = true;
4447   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4448     permerror (input_location, "declaration does not declare anything");
4449   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4450     {
4451       error ("%<auto%> can only be specified for variables "
4452              "or function declarations");
4453       return error_mark_node;
4454     }
4455   /* Check for an anonymous union.  */
4456   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4457            && TYPE_ANONYMOUS_P (declared_type))
4458     {
4459       /* 7/3 In a simple-declaration, the optional init-declarator-list
4460          can be omitted only when declaring a class (clause 9) or
4461          enumeration (7.2), that is, when the decl-specifier-seq contains
4462          either a class-specifier, an elaborated-type-specifier with
4463          a class-key (9.1), or an enum-specifier.  In these cases and
4464          whenever a class-specifier or enum-specifier is present in the
4465          decl-specifier-seq, the identifiers in these specifiers are among
4466          the names being declared by the declaration (as class-name,
4467          enum-names, or enumerators, depending on the syntax).  In such
4468          cases, and except for the declaration of an unnamed bit-field (9.6),
4469          the decl-specifier-seq shall introduce one or more names into the
4470          program, or shall redeclare a name introduced by a previous
4471          declaration.  [Example:
4472              enum { };                  // ill-formed
4473              typedef class { };         // ill-formed
4474          --end example]  */
4475       if (saw_typedef)
4476         {
4477           error ("missing type-name in typedef-declaration");
4478           return NULL_TREE;
4479         }
4480       /* Anonymous unions are objects, so they can have specifiers.  */;
4481       SET_ANON_AGGR_TYPE_P (declared_type);
4482
4483       if (TREE_CODE (declared_type) != UNION_TYPE
4484           && !in_system_header_at (input_location))
4485         pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4486     }
4487
4488   else
4489     {
4490       if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4491           || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4492         error ("%qs can only be specified for functions",
4493                decl_spec_seq_has_spec_p (declspecs, ds_inline)
4494                ? "inline" : "virtual");
4495       else if (saw_friend
4496                && (!current_class_type
4497                    || current_scope () != current_class_type))
4498         error ("%<friend%> can only be specified inside a class");
4499       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4500         error ("%<explicit%> can only be specified for constructors");
4501       else if (declspecs->storage_class)
4502         error ("a storage class can only be specified for objects "
4503                "and functions");
4504       else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4505                || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4506                || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4507                || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4508         error ("qualifiers can only be specified for objects "
4509                "and functions");
4510       else if (saw_typedef)
4511         warning (0, "%<typedef%> was ignored in this declaration");
4512       else if (decl_spec_seq_has_spec_p (declspecs,  ds_constexpr))
4513         error ("%<constexpr%> cannot be used for type declarations");
4514     }
4515
4516   if (declspecs->attributes && warn_attributes && declared_type)
4517     {
4518       location_t loc;
4519       if (!CLASS_TYPE_P (declared_type)
4520           || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4521         /* For a non-template class, use the name location.  */
4522         loc = location_of (declared_type);
4523       else
4524         /* For a template class (an explicit instantiation), use the
4525            current location.  */
4526         loc = input_location;
4527
4528       if (explicit_type_instantiation_p)
4529         /* [dcl.attr.grammar]/4:
4530
4531                No attribute-specifier-seq shall appertain to an explicit
4532                instantiation.  */
4533         {
4534           if (warning_at (loc, OPT_Wattributes,
4535                           "attribute ignored in explicit instantiation %q#T",
4536                           declared_type))
4537             inform (loc,
4538                     "no attribute can be applied to "
4539                     "an explicit instantiation");
4540         }
4541       else
4542         warn_misplaced_attr_for_class_type (loc, declared_type);
4543     }
4544
4545   return declared_type;
4546 }
4547
4548 /* Called when a declaration is seen that contains no names to declare.
4549    If its type is a reference to a structure, union or enum inherited
4550    from a containing scope, shadow that tag name for the current scope
4551    with a forward reference.
4552    If its type defines a new named structure or union
4553    or defines an enum, it is valid but we need not do anything here.
4554    Otherwise, it is an error.
4555
4556    C++: may have to grok the declspecs to learn about static,
4557    complain for anonymous unions.
4558
4559    Returns the TYPE declared -- or NULL_TREE if none.  */
4560
4561 tree
4562 shadow_tag (cp_decl_specifier_seq *declspecs)
4563 {
4564   tree t = check_tag_decl (declspecs,
4565                            /*explicit_type_instantiation_p=*/false);
4566
4567   if (!t)
4568     return NULL_TREE;
4569
4570   if (maybe_process_partial_specialization (t) == error_mark_node)
4571     return NULL_TREE;
4572
4573   /* This is where the variables in an anonymous union are
4574      declared.  An anonymous union declaration looks like:
4575      union { ... } ;
4576      because there is no declarator after the union, the parser
4577      sends that declaration here.  */
4578   if (ANON_AGGR_TYPE_P (t))
4579     {
4580       fixup_anonymous_aggr (t);
4581
4582       if (TYPE_FIELDS (t))
4583         {
4584           tree decl = grokdeclarator (/*declarator=*/NULL,
4585                                       declspecs, NORMAL, 0, NULL);
4586           finish_anon_union (decl);
4587         }
4588     }
4589
4590   return t;
4591 }
4592 \f
4593 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4594
4595 tree
4596 groktypename (cp_decl_specifier_seq *type_specifiers,
4597               const cp_declarator *declarator,
4598               bool is_template_arg)
4599 {
4600   tree attrs;
4601   tree type;
4602   enum decl_context context
4603     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4604   attrs = type_specifiers->attributes;
4605   type_specifiers->attributes = NULL_TREE;
4606   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4607   if (attrs && type != error_mark_node)
4608     {
4609       if (CLASS_TYPE_P (type))
4610         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4611                  "outside of definition", type);
4612       else if (MAYBE_CLASS_TYPE_P (type))
4613         /* A template type parameter or other dependent type.  */
4614         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4615                  "type %qT without an associated declaration", type);
4616       else
4617         cplus_decl_attributes (&type, attrs, 0);
4618     }
4619   return type;
4620 }
4621
4622 /* Process a DECLARATOR for a function-scope variable declaration,
4623    namespace-scope variable declaration, or function declaration.
4624    (Function definitions go through start_function; class member
4625    declarations appearing in the body of the class go through
4626    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4627    If an error occurs, the error_mark_node is returned instead.
4628    
4629    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4630    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4631    for an explicitly defaulted function, or SD_DELETED for an explicitly
4632    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4633    implicitly initialized via a default constructor.  ATTRIBUTES and
4634    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4635
4636    The scope represented by the context of the returned DECL is pushed
4637    (if it is not the global namespace) and is assigned to
4638    *PUSHED_SCOPE_P.  The caller is then responsible for calling
4639    pop_scope on *PUSHED_SCOPE_P if it is set.  */
4640
4641 tree
4642 start_decl (const cp_declarator *declarator,
4643             cp_decl_specifier_seq *declspecs,
4644             int initialized,
4645             tree attributes,
4646             tree prefix_attributes,
4647             tree *pushed_scope_p)
4648 {
4649   tree decl;
4650   tree context;
4651   bool was_public;
4652   int flags;
4653   bool alias;
4654
4655   *pushed_scope_p = NULL_TREE;
4656
4657   /* An object declared as __attribute__((deprecated)) suppresses
4658      warnings of uses of other deprecated items.  */
4659   if (lookup_attribute ("deprecated", attributes))
4660     deprecated_state = DEPRECATED_SUPPRESS;
4661
4662   attributes = chainon (attributes, prefix_attributes);
4663
4664   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4665                          &attributes);
4666
4667   deprecated_state = DEPRECATED_NORMAL;
4668
4669   if (decl == NULL_TREE || VOID_TYPE_P (decl)
4670       || decl == error_mark_node)
4671     return error_mark_node;
4672
4673   context = CP_DECL_CONTEXT (decl);
4674   if (context != global_namespace)
4675     *pushed_scope_p = push_scope (context);
4676
4677   /* Is it valid for this decl to have an initializer at all?
4678      If not, set INITIALIZED to zero, which will indirectly
4679      tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4680   if (initialized
4681       && TREE_CODE (decl) == TYPE_DECL)
4682     {
4683       error ("typedef %qD is initialized (use decltype instead)", decl);
4684       return error_mark_node;
4685     }
4686
4687   if (initialized)
4688     {
4689       if (! toplevel_bindings_p ()
4690           && DECL_EXTERNAL (decl))
4691         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4692                  decl);
4693       DECL_EXTERNAL (decl) = 0;
4694       if (toplevel_bindings_p ())
4695         TREE_STATIC (decl) = 1;
4696     }
4697   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4698   
4699   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4700     record_key_method_defined (decl);
4701
4702   /* If this is a typedef that names the class for linkage purposes
4703      (7.1.3p8), apply any attributes directly to the type.  */
4704   if (TREE_CODE (decl) == TYPE_DECL
4705       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4706       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4707     flags = ATTR_FLAG_TYPE_IN_PLACE;
4708   else
4709     flags = 0;
4710
4711   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4712   cplus_decl_attributes (&decl, attributes, flags);
4713
4714   /* Dllimported symbols cannot be defined.  Static data members (which
4715      can be initialized in-class and dllimported) go through grokfield,
4716      not here, so we don't need to exclude those decls when checking for
4717      a definition.  */
4718   if (initialized && DECL_DLLIMPORT_P (decl))
4719     {
4720       error ("definition of %q#D is marked %<dllimport%>", decl);
4721       DECL_DLLIMPORT_P (decl) = 0;
4722     }
4723
4724   /* If #pragma weak was used, mark the decl weak now.  */
4725   if (!processing_template_decl)
4726     maybe_apply_pragma_weak (decl);
4727
4728   if (TREE_CODE (decl) == FUNCTION_DECL
4729       && DECL_DECLARED_INLINE_P (decl)
4730       && DECL_UNINLINABLE (decl)
4731       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4732     warning (0, "inline function %q+D given attribute noinline", decl);
4733
4734   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4735     {
4736       bool this_tmpl = (processing_template_decl
4737                         > template_class_depth (context));
4738       if (VAR_P (decl))
4739         {
4740           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4741           if (field == NULL_TREE
4742               || !(VAR_P (field) || variable_template_p (field)))
4743             error ("%q+#D is not a static data member of %q#T", decl, context);
4744           else if (variable_template_p (field) && !this_tmpl)
4745             {
4746               if (DECL_LANG_SPECIFIC (decl)
4747                   && DECL_TEMPLATE_SPECIALIZATION (decl))
4748                 /* OK, specialization was already checked.  */;
4749               else
4750                 {
4751                   error_at (DECL_SOURCE_LOCATION (decl),
4752                             "non-member-template declaration of %qD", decl);
4753                   inform (DECL_SOURCE_LOCATION (field), "does not match "
4754                           "member template declaration here");
4755                   return error_mark_node;
4756                 }
4757             }
4758           else
4759             {
4760               if (variable_template_p (field))
4761                 field = DECL_TEMPLATE_RESULT (field);
4762
4763               if (DECL_CONTEXT (field) != context)
4764                 {
4765                   if (!same_type_p (DECL_CONTEXT (field), context))
4766                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4767                                "to be defined as %<%T::%D%>",
4768                                DECL_CONTEXT (field), DECL_NAME (decl),
4769                                context, DECL_NAME (decl));
4770                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4771                 }
4772               /* Static data member are tricky; an in-class initialization
4773                  still doesn't provide a definition, so the in-class
4774                  declaration will have DECL_EXTERNAL set, but will have an
4775                  initialization.  Thus, duplicate_decls won't warn
4776                  about this situation, and so we check here.  */
4777               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4778                 error ("duplicate initialization of %qD", decl);
4779               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4780                 decl = field;
4781               if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4782                   && !DECL_DECLARED_CONSTEXPR_P (field))
4783                 error ("%qD declared %<constexpr%> outside its class", field);
4784             }
4785         }
4786       else
4787         {
4788           tree field = check_classfn (context, decl,
4789                                       this_tmpl
4790                                       ? current_template_parms
4791                                       : NULL_TREE);
4792           if (field && field != error_mark_node
4793               && duplicate_decls (decl, field,
4794                                  /*newdecl_is_friend=*/false))
4795             decl = field;
4796         }
4797
4798       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4799       DECL_IN_AGGR_P (decl) = 0;
4800       /* Do not mark DECL as an explicit specialization if it was not
4801          already marked as an instantiation; a declaration should
4802          never be marked as a specialization unless we know what
4803          template is being specialized.  */
4804       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4805         {
4806           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4807           if (TREE_CODE (decl) == FUNCTION_DECL)
4808             DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
4809                                   && DECL_DECLARED_INLINE_P (decl));
4810           else
4811             DECL_COMDAT (decl) = false;
4812
4813           /* [temp.expl.spec] An explicit specialization of a static data
4814              member of a template is a definition if the declaration
4815              includes an initializer; otherwise, it is a declaration.
4816
4817              We check for processing_specialization so this only applies
4818              to the new specialization syntax.  */
4819           if (!initialized && processing_specialization)
4820             DECL_EXTERNAL (decl) = 1;
4821         }
4822
4823       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4824           /* Aliases are definitions. */
4825           && !alias)
4826         permerror (input_location, "declaration of %q#D outside of class is not definition",
4827                    decl);
4828     }
4829
4830   was_public = TREE_PUBLIC (decl);
4831
4832   /* Enter this declaration into the symbol table.  Don't push the plain
4833      VAR_DECL for a variable template.  */
4834   if (!template_parm_scope_p ()
4835       || TREE_CODE (decl) != VAR_DECL)
4836     decl = maybe_push_decl (decl);
4837
4838   if (processing_template_decl)
4839     decl = push_template_decl (decl);
4840   if (decl == error_mark_node)
4841     return error_mark_node;
4842
4843   if (VAR_P (decl)
4844       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4845       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4846     {
4847       /* This is a const variable with implicit 'static'.  Set
4848          DECL_THIS_STATIC so we can tell it from variables that are
4849          !TREE_PUBLIC because of the anonymous namespace.  */
4850       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4851       DECL_THIS_STATIC (decl) = 1;
4852     }
4853
4854   if (current_function_decl && VAR_P (decl)
4855       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
4856     {
4857       bool ok = false;
4858       if (DECL_THREAD_LOCAL_P (decl))
4859         error ("%qD declared %<thread_local%> in %<constexpr%> function",
4860                decl);
4861       else if (TREE_STATIC (decl))
4862         error ("%qD declared %<static%> in %<constexpr%> function", decl);
4863       else
4864         ok = true;
4865       if (!ok)
4866         cp_function_chain->invalid_constexpr = true;
4867     }
4868
4869   if (!processing_template_decl && VAR_P (decl))
4870     start_decl_1 (decl, initialized);
4871
4872   return decl;
4873 }
4874
4875 /* Process the declaration of a variable DECL.  INITIALIZED is true
4876    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4877    variable is initialized via an implicitly-called constructor.)
4878    This function must be called for ordinary variables (including, for
4879    example, implicit instantiations of templates), but must not be
4880    called for template declarations.  */
4881
4882 void
4883 start_decl_1 (tree decl, bool initialized)
4884 {
4885   tree type;
4886   bool complete_p;
4887   bool aggregate_definition_p;
4888
4889   gcc_assert (!processing_template_decl);
4890
4891   if (error_operand_p (decl))
4892     return;
4893
4894   gcc_assert (VAR_P (decl));
4895
4896   type = TREE_TYPE (decl);
4897   complete_p = COMPLETE_TYPE_P (type);
4898   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4899
4900   /* If an explicit initializer is present, or if this is a definition
4901      of an aggregate, then we need a complete type at this point.
4902      (Scalars are always complete types, so there is nothing to
4903      check.)  This code just sets COMPLETE_P; errors (if necessary)
4904      are issued below.  */
4905   if ((initialized || aggregate_definition_p) 
4906       && !complete_p
4907       && COMPLETE_TYPE_P (complete_type (type)))
4908     {
4909       complete_p = true;
4910       /* We will not yet have set TREE_READONLY on DECL if the type
4911          was "const", but incomplete, before this point.  But, now, we
4912          have a complete type, so we can try again.  */
4913       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4914     }
4915
4916   if (initialized)
4917     /* Is it valid for this decl to have an initializer at all?  */
4918     {
4919       /* Don't allow initializations for incomplete types except for
4920          arrays which might be completed by the initialization.  */
4921       if (complete_p)
4922         ;                       /* A complete type is ok.  */
4923       else if (type_uses_auto (type))
4924         ;                       /* An auto type is ok.  */
4925       else if (TREE_CODE (type) != ARRAY_TYPE)
4926         {
4927           error ("variable %q#D has initializer but incomplete type", decl);
4928           type = TREE_TYPE (decl) = error_mark_node;
4929         }
4930       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4931         {
4932           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4933             error ("elements of array %q#D have incomplete type", decl);
4934           /* else we already gave an error in start_decl.  */
4935         }
4936     }
4937   else if (aggregate_definition_p && !complete_p)
4938     {
4939       if (type_uses_auto (type))
4940         error ("declaration of %q#D has no initializer", decl);
4941       else
4942         error ("aggregate %q#D has incomplete type and cannot be defined",
4943                decl);
4944       /* Change the type so that assemble_variable will give
4945          DECL an rtl we can live with: (mem (const_int 0)).  */
4946       type = TREE_TYPE (decl) = error_mark_node;
4947     }
4948
4949   /* Create a new scope to hold this declaration if necessary.
4950      Whether or not a new scope is necessary cannot be determined
4951      until after the type has been completed; if the type is a
4952      specialization of a class template it is not until after
4953      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4954      will be set correctly.  */
4955   maybe_push_cleanup_level (type);
4956 }
4957
4958 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4959    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4960    but will be set to a new CLEANUP_STMT if a temporary is created
4961    that must be destroyed subsequently.
4962
4963    Returns an initializer expression to use to initialize DECL, or
4964    NULL if the initialization can be performed statically.
4965
4966    Quotes on semantics can be found in ARM 8.4.3.  */
4967
4968 static tree
4969 grok_reference_init (tree decl, tree type, tree init, int flags)
4970 {
4971   if (init == NULL_TREE)
4972     {
4973       if ((DECL_LANG_SPECIFIC (decl) == 0
4974            || DECL_IN_AGGR_P (decl) == 0)
4975           && ! DECL_THIS_EXTERN (decl))
4976         error ("%qD declared as reference but not initialized", decl);
4977       return NULL_TREE;
4978     }
4979
4980   if (TREE_CODE (init) == TREE_LIST)
4981     init = build_x_compound_expr_from_list (init, ELK_INIT,
4982                                             tf_warning_or_error);
4983
4984   tree ttype = TREE_TYPE (type);
4985   if (TREE_CODE (ttype) != ARRAY_TYPE
4986       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4987     /* Note: default conversion is only called in very special cases.  */
4988     init = decay_conversion (init, tf_warning_or_error);
4989
4990   /* check_initializer handles this for non-reference variables, but for
4991      references we need to do it here or the initializer will get the
4992      incomplete array type and confuse later calls to
4993      cp_complete_array_type.  */
4994   if (TREE_CODE (ttype) == ARRAY_TYPE
4995       && TYPE_DOMAIN (ttype) == NULL_TREE
4996       && (BRACE_ENCLOSED_INITIALIZER_P (init)
4997           || TREE_CODE (init) == STRING_CST))
4998     {
4999       cp_complete_array_type (&ttype, init, false);
5000       if (ttype != TREE_TYPE (type))
5001         type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5002     }
5003
5004   /* Convert INIT to the reference type TYPE.  This may involve the
5005      creation of a temporary, whose lifetime must be the same as that
5006      of the reference.  If so, a DECL_EXPR for the temporary will be
5007      added just after the DECL_EXPR for DECL.  That's why we don't set
5008      DECL_INITIAL for local references (instead assigning to them
5009      explicitly); we need to allow the temporary to be initialized
5010      first.  */
5011   return initialize_reference (type, init, flags,
5012                                tf_warning_or_error);
5013 }
5014
5015 /* Designated initializers in arrays are not supported in GNU C++.
5016    The parser cannot detect this error since it does not know whether
5017    a given brace-enclosed initializer is for a class type or for an
5018    array.  This function checks that CE does not use a designated
5019    initializer.  If it does, an error is issued.  Returns true if CE
5020    is valid, i.e., does not have a designated initializer.  */
5021
5022 static bool
5023 check_array_designated_initializer (constructor_elt *ce,
5024                                     unsigned HOST_WIDE_INT index)
5025 {
5026   /* Designated initializers for array elements are not supported.  */
5027   if (ce->index)
5028     {
5029       /* The parser only allows identifiers as designated
5030          initializers.  */
5031       if (ce->index == error_mark_node)
5032         {
5033           error ("name used in a GNU-style designated "
5034                  "initializer for an array");
5035           return false;
5036         }
5037       else if (identifier_p (ce->index))
5038         {
5039           error ("name %qD used in a GNU-style designated "
5040                  "initializer for an array", ce->index);
5041           return false;
5042         }
5043
5044       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5045                                                   ce->index, true);
5046       if (ce_index
5047           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5048           && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5049               == INTEGER_CST))
5050         {
5051           /* A C99 designator is OK if it matches the current index.  */
5052           if (wi::eq_p (ce_index, index))
5053             return true;
5054           else
5055             sorry ("non-trivial designated initializers not supported");
5056         }
5057       else
5058         error ("C99 designator %qE is not an integral constant-expression",
5059                ce->index);
5060
5061       return false;
5062     }
5063
5064   return true;
5065 }
5066
5067 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5068    array until we finish parsing the initializer.  If that's the
5069    situation we're in, update DECL accordingly.  */
5070
5071 static void
5072 maybe_deduce_size_from_array_init (tree decl, tree init)
5073 {
5074   tree type = TREE_TYPE (decl);
5075
5076   if (TREE_CODE (type) == ARRAY_TYPE
5077       && TYPE_DOMAIN (type) == NULL_TREE
5078       && TREE_CODE (decl) != TYPE_DECL)
5079     {
5080       /* do_default is really a C-ism to deal with tentative definitions.
5081          But let's leave it here to ease the eventual merge.  */
5082       int do_default = !DECL_EXTERNAL (decl);
5083       tree initializer = init ? init : DECL_INITIAL (decl);
5084       int failure = 0;
5085
5086       /* Check that there are no designated initializers in INIT, as
5087          those are not supported in GNU C++, and as the middle-end
5088          will crash if presented with a non-numeric designated
5089          initializer.  */
5090       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5091         {
5092           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5093           constructor_elt *ce;
5094           HOST_WIDE_INT i;
5095           FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5096             if (!check_array_designated_initializer (ce, i))
5097               failure = 1;
5098         }
5099
5100       if (!failure)
5101         {
5102           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5103                                             do_default);
5104           if (failure == 1)
5105             {
5106               error ("initializer fails to determine size of %qD", decl);
5107             }
5108           else if (failure == 2)
5109             {
5110               if (do_default)
5111                 {
5112                   error ("array size missing in %qD", decl);
5113                 }
5114               /* If a `static' var's size isn't known, make it extern as
5115                  well as static, so it does not get allocated.  If it's not
5116                  `static', then don't mark it extern; finish_incomplete_decl
5117                  will give it a default size and it will get allocated.  */
5118               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5119                 DECL_EXTERNAL (decl) = 1;
5120             }
5121           else if (failure == 3)
5122             {
5123               error ("zero-size array %qD", decl);
5124             }
5125         }
5126
5127       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5128
5129       relayout_decl (decl);
5130     }
5131 }
5132
5133 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5134    any appropriate error messages regarding the layout.  */
5135
5136 static void
5137 layout_var_decl (tree decl)
5138 {
5139   tree type;
5140
5141   type = TREE_TYPE (decl);
5142   if (type == error_mark_node)
5143     return;
5144
5145   /* If we haven't already laid out this declaration, do so now.
5146      Note that we must not call complete type for an external object
5147      because it's type might involve templates that we are not
5148      supposed to instantiate yet.  (And it's perfectly valid to say
5149      `extern X x' for some incomplete type `X'.)  */
5150   if (!DECL_EXTERNAL (decl))
5151     complete_type (type);
5152   if (!DECL_SIZE (decl)
5153       && TREE_TYPE (decl) != error_mark_node
5154       && (COMPLETE_TYPE_P (type)
5155           || (TREE_CODE (type) == ARRAY_TYPE
5156               && !TYPE_DOMAIN (type)
5157               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
5158     layout_decl (decl, 0);
5159
5160   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5161     {
5162       /* An automatic variable with an incomplete type: that is an error.
5163          Don't talk about array types here, since we took care of that
5164          message in grokdeclarator.  */
5165       error ("storage size of %qD isn%'t known", decl);
5166       TREE_TYPE (decl) = error_mark_node;
5167     }
5168 #if 0
5169   /* Keep this code around in case we later want to control debug info
5170      based on whether a type is "used".  (jason 1999-11-11) */
5171
5172   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5173     /* Let debugger know it should output info for this type.  */
5174     note_debug_info_needed (ttype);
5175
5176   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5177     note_debug_info_needed (DECL_CONTEXT (decl));
5178 #endif
5179
5180   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5181       && DECL_SIZE (decl) != NULL_TREE
5182       && ! TREE_CONSTANT (DECL_SIZE (decl)))
5183     {
5184       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5185         constant_expression_warning (DECL_SIZE (decl));
5186       else
5187         {
5188           error ("storage size of %qD isn%'t constant", decl);
5189           TREE_TYPE (decl) = error_mark_node;
5190         }
5191     }
5192 }
5193
5194 /* If a local static variable is declared in an inline function, or if
5195    we have a weak definition, we must endeavor to create only one
5196    instance of the variable at link-time.  */
5197
5198 void
5199 maybe_commonize_var (tree decl)
5200 {
5201   /* Static data in a function with comdat linkage also has comdat
5202      linkage.  */
5203   if (TREE_STATIC (decl)
5204       /* Don't mess with __FUNCTION__.  */
5205       && ! DECL_ARTIFICIAL (decl)
5206       && DECL_FUNCTION_SCOPE_P (decl)
5207       && vague_linkage_p (DECL_CONTEXT (decl)))
5208     {
5209       if (flag_weak)
5210         {
5211           /* With weak symbols, we simply make the variable COMDAT;
5212              that will cause copies in multiple translations units to
5213              be merged.  */
5214           comdat_linkage (decl);
5215         }
5216       else
5217         {
5218           if (DECL_INITIAL (decl) == NULL_TREE
5219               || DECL_INITIAL (decl) == error_mark_node)
5220             {
5221               /* Without weak symbols, we can use COMMON to merge
5222                  uninitialized variables.  */
5223               TREE_PUBLIC (decl) = 1;
5224               DECL_COMMON (decl) = 1;
5225             }
5226           else
5227             {
5228               /* While for initialized variables, we must use internal
5229                  linkage -- which means that multiple copies will not
5230                  be merged.  */
5231               TREE_PUBLIC (decl) = 0;
5232               DECL_COMMON (decl) = 0;
5233               if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5234                               "sorry: semantics of inline function static "
5235                               "data %q#D are wrong (you%'ll wind up "
5236                               "with multiple copies)", decl))
5237                 inform (DECL_SOURCE_LOCATION (decl),
5238                         "you can work around this by removing the initializer");
5239             }
5240         }
5241     }
5242 }
5243
5244 /* Issue an error message if DECL is an uninitialized const variable.  */
5245
5246 static void
5247 check_for_uninitialized_const_var (tree decl)
5248 {
5249   tree type = strip_array_types (TREE_TYPE (decl));
5250
5251   /* ``Unless explicitly declared extern, a const object does not have
5252      external linkage and must be initialized. ($8.4; $12.1)'' ARM
5253      7.1.6 */
5254   if (VAR_P (decl)
5255       && TREE_CODE (type) != REFERENCE_TYPE
5256       && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5257       && !DECL_INITIAL (decl))
5258     {
5259       tree field = default_init_uninitialized_part (type);
5260       if (!field)
5261         return;
5262
5263       if (CP_TYPE_CONST_P (type))
5264         permerror (DECL_SOURCE_LOCATION (decl),
5265                    "uninitialized const %qD", decl);
5266       else
5267         {
5268           error_at (DECL_SOURCE_LOCATION (decl),
5269                     "uninitialized variable %qD in %<constexpr%> function",
5270                     decl);
5271           cp_function_chain->invalid_constexpr = true;
5272         }
5273
5274       if (CLASS_TYPE_P (type))
5275         {
5276           tree defaulted_ctor;
5277
5278           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5279                   "%q#T has no user-provided default constructor", type);
5280           defaulted_ctor = in_class_defaulted_default_constructor (type);
5281           if (defaulted_ctor)
5282             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5283                     "constructor is not user-provided because it is "
5284                     "explicitly defaulted in the class body");
5285           inform (0, "and the implicitly-defined constructor does not "
5286                   "initialize %q+#D", field);
5287         }
5288     }
5289 }
5290 \f
5291 /* Structure holding the current initializer being processed by reshape_init.
5292    CUR is a pointer to the current element being processed, END is a pointer
5293    after the last element present in the initializer.  */
5294 typedef struct reshape_iterator_t
5295 {
5296   constructor_elt *cur;
5297   constructor_elt *end;
5298 } reshape_iter;
5299
5300 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5301
5302 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
5303    returned is the next FIELD_DECL (possibly FIELD itself) that can be
5304    initialized.  If there are no more such fields, the return value
5305    will be NULL.  */
5306
5307 tree
5308 next_initializable_field (tree field)
5309 {
5310   while (field
5311          && (TREE_CODE (field) != FIELD_DECL
5312              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5313              || DECL_ARTIFICIAL (field)))
5314     field = DECL_CHAIN (field);
5315
5316   return field;
5317 }
5318
5319 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5320    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5321    INTEGER_CST representing the size of the array minus one (the maximum index),
5322    or NULL_TREE if the array was declared without specifying the size. D is
5323    the iterator within the constructor.  */
5324
5325 static tree
5326 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5327                       tsubst_flags_t complain)
5328 {
5329   tree new_init;
5330   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5331   unsigned HOST_WIDE_INT max_index_cst = 0;
5332   unsigned HOST_WIDE_INT index;
5333
5334   /* The initializer for an array is always a CONSTRUCTOR.  */
5335   new_init = build_constructor (init_list_type_node, NULL);
5336
5337   if (sized_array_p)
5338     {
5339       /* Minus 1 is used for zero sized arrays.  */
5340       if (integer_all_onesp (max_index))
5341         return new_init;
5342
5343       if (tree_fits_uhwi_p (max_index))
5344         max_index_cst = tree_to_uhwi (max_index);
5345       /* sizetype is sign extended, not zero extended.  */
5346       else
5347         max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5348     }
5349
5350   /* Loop until there are no more initializers.  */
5351   for (index = 0;
5352        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5353        ++index)
5354     {
5355       tree elt_init;
5356       constructor_elt *old_cur = d->cur;
5357
5358       check_array_designated_initializer (d->cur, index);
5359       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5360                                  complain);
5361       if (elt_init == error_mark_node)
5362         return error_mark_node;
5363       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5364                               size_int (index), elt_init);
5365       if (!TREE_CONSTANT (elt_init))
5366         TREE_CONSTANT (new_init) = false;
5367
5368       /* This can happen with an invalid initializer (c++/54501).  */
5369       if (d->cur == old_cur && !sized_array_p)
5370         break;
5371     }
5372
5373   return new_init;
5374 }
5375
5376 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5377    Parameters are the same of reshape_init_r.  */
5378
5379 static tree
5380 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5381 {
5382   tree max_index = NULL_TREE;
5383
5384   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5385
5386   if (TYPE_DOMAIN (type))
5387     max_index = array_type_nelts (type);
5388
5389   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5390 }
5391
5392 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5393    Parameters are the same of reshape_init_r.  */
5394
5395 static tree
5396 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5397 {
5398   tree max_index = NULL_TREE;
5399
5400   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5401
5402   if (COMPOUND_LITERAL_P (d->cur->value))
5403     {
5404       tree value = d->cur->value;
5405       if (!same_type_p (TREE_TYPE (value), type))
5406         {
5407           if (complain & tf_error)
5408             error ("invalid type %qT as initializer for a vector of type %qT",
5409                    TREE_TYPE (d->cur->value), type);
5410           value = error_mark_node;
5411         }
5412       ++d->cur;
5413       return value;
5414     }
5415
5416   /* For a vector, we initialize it as an array of the appropriate size.  */
5417   if (TREE_CODE (type) == VECTOR_TYPE)
5418     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5419
5420   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5421 }
5422
5423 /* Subroutine of reshape_init_r, processes the initializers for classes
5424    or union. Parameters are the same of reshape_init_r.  */
5425
5426 static tree
5427 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5428                     tsubst_flags_t complain)
5429 {
5430   tree field;
5431   tree new_init;
5432
5433   gcc_assert (CLASS_TYPE_P (type));
5434
5435   /* The initializer for a class is always a CONSTRUCTOR.  */
5436   new_init = build_constructor (init_list_type_node, NULL);
5437   field = next_initializable_field (TYPE_FIELDS (type));
5438
5439   if (!field)
5440     {
5441       /* [dcl.init.aggr]
5442
5443         An initializer for an aggregate member that is an
5444         empty class shall have the form of an empty
5445         initializer-list {}.  */
5446       if (!first_initializer_p)
5447         {
5448           if (complain & tf_error)
5449             error ("initializer for %qT must be brace-enclosed", type);
5450           return error_mark_node;
5451         }
5452       return new_init;
5453     }
5454
5455   /* Loop through the initializable fields, gathering initializers.  */
5456   while (d->cur != d->end)
5457     {
5458       tree field_init;
5459       constructor_elt *old_cur = d->cur;
5460
5461       /* Handle designated initializers, as an extension.  */
5462       if (d->cur->index)
5463         {
5464           if (d->cur->index == error_mark_node)
5465             return error_mark_node;
5466
5467           if (TREE_CODE (d->cur->index) == FIELD_DECL)
5468             /* We already reshaped this.  */
5469             gcc_assert (d->cur->index == field);
5470           else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5471             field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5472           else
5473             {
5474               if (complain & tf_error)
5475                 error ("%<[%E] =%> used in a GNU-style designated initializer"
5476                        " for class %qT", d->cur->index, type);
5477               return error_mark_node;
5478             }
5479
5480           if (!field || TREE_CODE (field) != FIELD_DECL)
5481             {
5482               if (complain & tf_error)
5483                 error ("%qT has no non-static data member named %qD", type,
5484                        d->cur->index);
5485               return error_mark_node;
5486             }
5487         }
5488
5489       /* If we processed all the member of the class, we are done.  */
5490       if (!field)
5491         break;
5492
5493       field_init = reshape_init_r (TREE_TYPE (field), d,
5494                                    /*first_initializer_p=*/false, complain);
5495       if (field_init == error_mark_node)
5496         return error_mark_node;
5497
5498       if (d->cur == old_cur && d->cur->index)
5499         {
5500           /* This can happen with an invalid initializer for a flexible
5501              array member (c++/54441).  */
5502           if (complain & tf_error)
5503             error ("invalid initializer for %q#D", field);
5504           return error_mark_node;
5505         }
5506
5507       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5508
5509       /* [dcl.init.aggr]
5510
5511         When a union  is  initialized with a brace-enclosed
5512         initializer, the braces shall only contain an
5513         initializer for the first member of the union.  */
5514       if (TREE_CODE (type) == UNION_TYPE)
5515         break;
5516
5517       field = next_initializable_field (DECL_CHAIN (field));
5518     }
5519
5520   return new_init;
5521 }
5522
5523 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5524    designators are not valid; either complain or return true to indicate
5525    that reshape_init_r should return error_mark_node.  */
5526
5527 static bool
5528 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5529 {
5530   if (d->cur->index)
5531     {
5532       if (complain & tf_error)
5533         error ("C99 designator %qE outside aggregate initializer",
5534                d->cur->index);
5535       else
5536         return true;
5537     }
5538   return false;
5539 }
5540
5541 /* Subroutine of reshape_init, which processes a single initializer (part of
5542    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5543    iterator within the CONSTRUCTOR which points to the initializer to process.
5544    FIRST_INITIALIZER_P is true if this is the first initializer of the
5545    outermost CONSTRUCTOR node.  */
5546
5547 static tree
5548 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5549                 tsubst_flags_t complain)
5550 {
5551   tree init = d->cur->value;
5552
5553   if (error_operand_p (init))
5554     return error_mark_node;
5555
5556   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5557       && has_designator_problem (d, complain))
5558     return error_mark_node;
5559
5560   if (TREE_CODE (type) == COMPLEX_TYPE)
5561     {
5562       /* A complex type can be initialized from one or two initializers,
5563          but braces are not elided.  */
5564       d->cur++;
5565       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5566         {
5567           if (CONSTRUCTOR_NELTS (init) > 2)
5568             {
5569               if (complain & tf_error)
5570                 error ("too many initializers for %qT", type);
5571               else
5572                 return error_mark_node;
5573             }
5574         }
5575       else if (first_initializer_p && d->cur != d->end)
5576         {
5577           vec<constructor_elt, va_gc> *v = 0;
5578           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5579           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5580           if (has_designator_problem (d, complain))
5581             return error_mark_node;
5582           d->cur++;
5583           init = build_constructor (init_list_type_node, v);
5584         }
5585       return init;
5586     }
5587
5588   /* A non-aggregate type is always initialized with a single
5589      initializer.  */
5590   if (!CP_AGGREGATE_TYPE_P (type))
5591     {
5592       /* It is invalid to initialize a non-aggregate type with a
5593          brace-enclosed initializer before C++0x.
5594          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5595          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5596          a CONSTRUCTOR (with a record type).  */
5597       if (TREE_CODE (init) == CONSTRUCTOR
5598           /* Don't complain about a capture-init.  */
5599           && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5600           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5601         {
5602           if (SCALAR_TYPE_P (type))
5603             {
5604               if (cxx_dialect < cxx11
5605                   /* Isn't value-initialization.  */
5606                   || CONSTRUCTOR_NELTS (init) > 0)
5607                 {
5608                   if (complain & tf_error)
5609                     error ("braces around scalar initializer for type %qT",
5610                            type);
5611                   init = error_mark_node;
5612                 }
5613             }
5614           else
5615             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5616         }
5617
5618       d->cur++;
5619       return init;
5620     }
5621
5622   /* "If T is a class type and the initializer list has a single element of
5623      type cv U, where U is T or a class derived from T, the object is
5624      initialized from that element."  Even if T is an aggregate.  */
5625   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5626       && first_initializer_p
5627       && d->end - d->cur == 1
5628       && reference_related_p (type, TREE_TYPE (init)))
5629     {
5630       d->cur++;
5631       return init;
5632     }
5633
5634   /* [dcl.init.aggr]
5635
5636      All implicit type conversions (clause _conv_) are considered when
5637      initializing the aggregate member with an initializer from an
5638      initializer-list.  If the initializer can initialize a member,
5639      the member is initialized.  Otherwise, if the member is itself a
5640      non-empty subaggregate, brace elision is assumed and the
5641      initializer is considered for the initialization of the first
5642      member of the subaggregate.  */
5643   if (TREE_CODE (init) != CONSTRUCTOR
5644       /* But don't try this for the first initializer, since that would be
5645          looking through the outermost braces; A a2 = { a1 }; is not a
5646          valid aggregate initialization.  */
5647       && !first_initializer_p
5648       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5649           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5650                               complain)))
5651     {
5652       d->cur++;
5653       return init;
5654     }
5655
5656   /* [dcl.init.string]
5657
5658       A char array (whether plain char, signed char, or unsigned char)
5659       can be initialized by a string-literal (optionally enclosed in
5660       braces); a wchar_t array can be initialized by a wide
5661       string-literal (optionally enclosed in braces).  */
5662   if (TREE_CODE (type) == ARRAY_TYPE
5663       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5664     {
5665       tree str_init = init;
5666
5667       /* Strip one level of braces if and only if they enclose a single
5668          element (as allowed by [dcl.init.string]).  */
5669       if (!first_initializer_p
5670           && TREE_CODE (str_init) == CONSTRUCTOR
5671           && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5672         {
5673           str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5674         }
5675
5676       /* If it's a string literal, then it's the initializer for the array
5677          as a whole. Otherwise, continue with normal initialization for
5678          array types (one value per array element).  */
5679       if (TREE_CODE (str_init) == STRING_CST)
5680         {
5681           if (has_designator_problem (d, complain))
5682             return error_mark_node;
5683           d->cur++;
5684           return str_init;
5685         }
5686     }
5687
5688   /* The following cases are about aggregates. If we are not within a full
5689      initializer already, and there is not a CONSTRUCTOR, it means that there
5690      is a missing set of braces (that is, we are processing the case for
5691      which reshape_init exists).  */
5692   if (!first_initializer_p)
5693     {
5694       if (TREE_CODE (init) == CONSTRUCTOR)
5695         {
5696           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5697             /* There is no need to reshape pointer-to-member function
5698                initializers, as they are always constructed correctly
5699                by the front end.  */
5700            ;
5701           else if (COMPOUND_LITERAL_P (init))
5702           /* For a nested compound literal, there is no need to reshape since
5703              brace elision is not allowed. Even if we decided to allow it,
5704              we should add a call to reshape_init in finish_compound_literal,
5705              before calling digest_init, so changing this code would still
5706              not be necessary.  */
5707             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5708           else
5709             {
5710               ++d->cur;
5711               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5712               return reshape_init (type, init, complain);
5713             }
5714         }
5715
5716       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5717                type);
5718     }
5719
5720   /* Dispatch to specialized routines.  */
5721   if (CLASS_TYPE_P (type))
5722     return reshape_init_class (type, d, first_initializer_p, complain);
5723   else if (TREE_CODE (type) == ARRAY_TYPE)
5724     return reshape_init_array (type, d, complain);
5725   else if (TREE_CODE (type) == VECTOR_TYPE)
5726     return reshape_init_vector (type, d, complain);
5727   else
5728     gcc_unreachable();
5729 }
5730
5731 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5732    brace-enclosed aggregate initializer.
5733
5734    INIT is the CONSTRUCTOR containing the list of initializers describing
5735    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5736    It may not presently match the shape of the TYPE; for example:
5737
5738      struct S { int a; int b; };
5739      struct S a[] = { 1, 2, 3, 4 };
5740
5741    Here INIT will hold a vector of four elements, rather than a
5742    vector of two elements, each itself a vector of two elements.  This
5743    routine transforms INIT from the former form into the latter.  The
5744    revised CONSTRUCTOR node is returned.  */
5745
5746 tree
5747 reshape_init (tree type, tree init, tsubst_flags_t complain)
5748 {
5749   vec<constructor_elt, va_gc> *v;
5750   reshape_iter d;
5751   tree new_init;
5752
5753   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5754
5755   v = CONSTRUCTOR_ELTS (init);
5756
5757   /* An empty constructor does not need reshaping, and it is always a valid
5758      initializer.  */
5759   if (vec_safe_is_empty (v))
5760     return init;
5761
5762   /* Recurse on this CONSTRUCTOR.  */
5763   d.cur = &(*v)[0];
5764   d.end = d.cur + v->length ();
5765
5766   new_init = reshape_init_r (type, &d, true, complain);
5767   if (new_init == error_mark_node)
5768     return error_mark_node;
5769
5770   /* Make sure all the element of the constructor were used. Otherwise,
5771      issue an error about exceeding initializers.  */
5772   if (d.cur != d.end)
5773     {
5774       if (complain & tf_error)
5775         error ("too many initializers for %qT", type);
5776       else
5777         return error_mark_node;
5778     }
5779
5780   return new_init;
5781 }
5782
5783 /* Verify array initializer.  Returns true if errors have been reported.  */
5784
5785 bool
5786 check_array_initializer (tree decl, tree type, tree init)
5787 {
5788   tree element_type = TREE_TYPE (type);
5789
5790   /* The array type itself need not be complete, because the
5791      initializer may tell us how many elements are in the array.
5792      But, the elements of the array must be complete.  */
5793   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5794     {
5795       if (decl)
5796         error ("elements of array %q#D have incomplete type", decl);
5797       else
5798         error ("elements of array %q#T have incomplete type", type);
5799       return true;
5800     }
5801   /* A compound literal can't have variable size.  */
5802   if (init && !decl
5803       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5804           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5805     {
5806       error ("variable-sized compound literal");
5807       return true;
5808     }
5809   return false;
5810 }
5811
5812 /* Subroutine of check_initializer; args are passed down from that function.
5813    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5814
5815 static tree
5816 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5817      
5818 {
5819   gcc_assert (stmts_are_full_exprs_p ());
5820   return build_aggr_init (decl, init, flags, tf_warning_or_error);
5821 }
5822
5823 /* Verify INIT (the initializer for DECL), and record the
5824    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5825    grok_reference_init.
5826
5827    If the return value is non-NULL, it is an expression that must be
5828    evaluated dynamically to initialize DECL.  */
5829
5830 static tree
5831 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5832 {
5833   tree type = TREE_TYPE (decl);
5834   tree init_code = NULL;
5835   tree core_type;
5836
5837   /* Things that are going to be initialized need to have complete
5838      type.  */
5839   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5840
5841   if (DECL_HAS_VALUE_EXPR_P (decl))
5842     {
5843       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5844          it doesn't have storage to be initialized.  */
5845       gcc_assert (init == NULL_TREE);
5846       return NULL_TREE;
5847     }
5848
5849   if (type == error_mark_node)
5850     /* We will have already complained.  */
5851     return NULL_TREE;
5852
5853   if (TREE_CODE (type) == ARRAY_TYPE)
5854     {
5855       if (check_array_initializer (decl, type, init))
5856         return NULL_TREE;
5857     }
5858   else if (!COMPLETE_TYPE_P (type))
5859     {
5860       error ("%q#D has incomplete type", decl);
5861       TREE_TYPE (decl) = error_mark_node;
5862       return NULL_TREE;
5863     }
5864   else
5865     /* There is no way to make a variable-sized class type in GNU C++.  */
5866     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5867
5868   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5869     {
5870       int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5871       if (SCALAR_TYPE_P (type))
5872         {
5873           if (init_len == 0)
5874             {
5875               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5876               init = build_zero_init (type, NULL_TREE, false);
5877             }
5878           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5879             {
5880               error ("scalar object %qD requires one element in initializer",
5881                      decl);
5882               TREE_TYPE (decl) = error_mark_node;
5883               return NULL_TREE;
5884             }
5885         }
5886     }
5887
5888   if (TREE_CODE (decl) == CONST_DECL)
5889     {
5890       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5891
5892       DECL_INITIAL (decl) = init;
5893
5894       gcc_assert (init != NULL_TREE);
5895       init = NULL_TREE;
5896     }
5897   else if (!init && DECL_REALLY_EXTERN (decl))
5898     ;
5899   else if (init || type_build_ctor_call (type)
5900            || TREE_CODE (type) == REFERENCE_TYPE)
5901     {
5902       if (TREE_CODE (type) == REFERENCE_TYPE)
5903         {
5904           init = grok_reference_init (decl, type, init, flags);
5905           flags |= LOOKUP_ALREADY_DIGESTED;
5906         }
5907       else if (!init)
5908         check_for_uninitialized_const_var (decl);
5909       /* Do not reshape constructors of vectors (they don't need to be
5910          reshaped.  */
5911       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5912         {
5913           if (is_std_init_list (type))
5914             {
5915               init = perform_implicit_conversion (type, init,
5916                                                   tf_warning_or_error);
5917               flags |= LOOKUP_ALREADY_DIGESTED;
5918             }
5919           else if (TYPE_NON_AGGREGATE_CLASS (type))
5920             {
5921               /* Don't reshape if the class has constructors.  */
5922               if (cxx_dialect == cxx98)
5923                 error ("in C++98 %qD must be initialized by constructor, "
5924                        "not by %<{...}%>",
5925                        decl);
5926             }
5927           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5928             {
5929               error ("opaque vector types cannot be initialized");
5930               init = error_mark_node;
5931             }
5932           else
5933             {
5934               init = reshape_init (type, init, tf_warning_or_error);
5935               flags |= LOOKUP_NO_NARROWING;
5936             }
5937         }
5938       else if (TREE_CODE (init) == TREE_LIST
5939                && TREE_TYPE (init) != unknown_type_node
5940                && !MAYBE_CLASS_TYPE_P (type))
5941         {
5942           gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5943
5944           /* We get here with code like `int a (2);' */
5945           init = build_x_compound_expr_from_list (init, ELK_INIT,
5946                                                   tf_warning_or_error);
5947         }
5948
5949       /* If DECL has an array type without a specific bound, deduce the
5950          array size from the initializer.  */
5951       maybe_deduce_size_from_array_init (decl, init);
5952       type = TREE_TYPE (decl);
5953       if (type == error_mark_node)
5954         return NULL_TREE;
5955
5956       if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5957           && !(flags & LOOKUP_ALREADY_DIGESTED)
5958           && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5959                && CP_AGGREGATE_TYPE_P (type)
5960                && (CLASS_TYPE_P (type)
5961                    || !TYPE_NEEDS_CONSTRUCTING (type)
5962                    || type_has_extended_temps (type))))
5963         {
5964           init_code = build_aggr_init_full_exprs (decl, init, flags);
5965
5966           /* A constructor call is a non-trivial initializer even if
5967              it isn't explicitly written.  */
5968           if (TREE_SIDE_EFFECTS (init_code))
5969             DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5970
5971           /* If this is a constexpr initializer, expand_default_init will
5972              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5973              case, pull the initializer back out and pass it down into
5974              store_init_value.  */
5975           while (TREE_CODE (init_code) == EXPR_STMT
5976                  || TREE_CODE (init_code) == CONVERT_EXPR)
5977             init_code = TREE_OPERAND (init_code, 0);
5978           if (TREE_CODE (init_code) == INIT_EXPR)
5979             {
5980               init = TREE_OPERAND (init_code, 1);
5981               init_code = NULL_TREE;
5982               /* Don't call digest_init; it's unnecessary and will complain
5983                  about aggregate initialization of non-aggregate classes.  */
5984               flags |= LOOKUP_ALREADY_DIGESTED;
5985             }
5986           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5987             {
5988               /* Declared constexpr, but no suitable initializer; massage
5989                  init appropriately so we can pass it into store_init_value
5990                  for the error.  */
5991               if (CLASS_TYPE_P (type)
5992                   && (!init || TREE_CODE (init) == TREE_LIST))
5993                 {
5994                   init = build_functional_cast (type, init, tf_none);
5995                   if (TREE_CODE (init) == TARGET_EXPR)
5996                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5997                 }
5998               init_code = NULL_TREE;
5999             }
6000           else
6001             init = NULL_TREE;
6002         }
6003
6004       if (init && TREE_CODE (init) != TREE_VEC)
6005         {
6006           /* In aggregate initialization of a variable, each element
6007              initialization is a full-expression because there is no
6008              enclosing expression.  */
6009           gcc_assert (stmts_are_full_exprs_p ());
6010
6011           init_code = store_init_value (decl, init, cleanups, flags);
6012
6013           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6014               && DECL_INITIAL (decl)
6015               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6016               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6017             warning (0, "array %qD initialized by parenthesized string literal %qE",
6018                      decl, DECL_INITIAL (decl));
6019           init = NULL;
6020         }
6021     }
6022   else
6023     {
6024       if (CLASS_TYPE_P (core_type = strip_array_types (type))
6025           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6026               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6027         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6028                                                   /*complain=*/true);
6029
6030       check_for_uninitialized_const_var (decl);
6031     }
6032
6033   if (init && init != error_mark_node)
6034     init_code = build2 (INIT_EXPR, type, decl, init);
6035
6036   if (init_code)
6037     {
6038       /* We might have set these in cp_finish_decl.  */
6039       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6040       TREE_CONSTANT (decl) = false;
6041     }
6042
6043   if (init_code && DECL_IN_AGGR_P (decl))
6044     {
6045       static int explained = 0;
6046
6047       if (cxx_dialect < cxx11)
6048         error ("initializer invalid for static member with constructor");
6049       else
6050         error ("non-constant in-class initialization invalid for static "
6051                "member %qD", decl);
6052       if (!explained)
6053         {
6054           inform (input_location,
6055                   "(an out of class initialization is required)");
6056           explained = 1;
6057         }
6058       return NULL_TREE;
6059     }
6060
6061   return init_code;
6062 }
6063
6064 /* If DECL is not a local variable, give it RTL.  */
6065
6066 static void
6067 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6068 {
6069   int toplev = toplevel_bindings_p ();
6070   int defer_p;
6071
6072   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6073   if (asmspec)
6074     {
6075       /* The `register' keyword, when used together with an
6076          asm-specification, indicates that the variable should be
6077          placed in a particular register.  */
6078       if (VAR_P (decl) && DECL_REGISTER (decl))
6079         {
6080           set_user_assembler_name (decl, asmspec);
6081           DECL_HARD_REGISTER (decl) = 1;
6082         }
6083       else
6084         {
6085           if (TREE_CODE (decl) == FUNCTION_DECL
6086               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6087             set_builtin_user_assembler_name (decl, asmspec);
6088           set_user_assembler_name (decl, asmspec);
6089         }
6090     }
6091
6092   /* Handle non-variables up front.  */
6093   if (!VAR_P (decl))
6094     {
6095       rest_of_decl_compilation (decl, toplev, at_eof);
6096       return;
6097     }
6098
6099   /* If we see a class member here, it should be a static data
6100      member.  */
6101   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6102     {
6103       gcc_assert (TREE_STATIC (decl));
6104       /* An in-class declaration of a static data member should be
6105          external; it is only a declaration, and not a definition.  */
6106       if (init == NULL_TREE)
6107         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
6108     }
6109
6110   /* We don't create any RTL for local variables.  */
6111   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6112     return;
6113
6114   /* We defer emission of local statics until the corresponding
6115      DECL_EXPR is expanded.  */
6116   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
6117
6118   /* Defer template instantiations.  */
6119   if (DECL_LANG_SPECIFIC (decl)
6120       && DECL_IMPLICIT_INSTANTIATION (decl))
6121     defer_p = 1;
6122
6123   /* If we're not deferring, go ahead and assemble the variable.  */
6124   if (!defer_p)
6125     rest_of_decl_compilation (decl, toplev, at_eof);
6126 }
6127
6128 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6129
6130 static tree
6131 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6132 {
6133   /* Stop at types or full-expression boundaries.  */
6134   if (TYPE_P (*stmt_p)
6135       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6136     {
6137       *walk_subtrees = 0;
6138       return NULL_TREE;
6139     }
6140
6141   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6142     {
6143       tree guard = (tree)data;
6144       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6145
6146       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6147       /* Tell honor_protect_cleanup_actions to handle this as a separate
6148          cleanup.  */
6149       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6150  
6151       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6152     }
6153
6154   return NULL_TREE;
6155 }
6156
6157 /* We're initializing a local variable which has a cleanup GUARD.  If there
6158    are any temporaries used in the initializer INIT of this variable, we
6159    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6160    variable will be cleaned up properly if one of them throws.
6161
6162    Unfortunately, there's no way to express this properly in terms of
6163    nesting, as the regions for the temporaries overlap the region for the
6164    variable itself; if there are two temporaries, the variable needs to be
6165    the first thing destroyed if either of them throws.  However, we only
6166    want to run the variable's cleanup if it actually got constructed.  So
6167    we need to guard the temporary cleanups with the variable's cleanup if
6168    they are run on the normal path, but not if they are run on the
6169    exceptional path.  We implement this by telling
6170    honor_protect_cleanup_actions to strip the variable cleanup from the
6171    exceptional path.  */
6172
6173 static void
6174 wrap_temporary_cleanups (tree init, tree guard)
6175 {
6176   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6177 }
6178
6179 /* Generate code to initialize DECL (a local variable).  */
6180
6181 static void
6182 initialize_local_var (tree decl, tree init)
6183 {
6184   tree type = TREE_TYPE (decl);
6185   tree cleanup;
6186   int already_used;
6187
6188   gcc_assert (VAR_P (decl)
6189               || TREE_CODE (decl) == RESULT_DECL);
6190   gcc_assert (!TREE_STATIC (decl));
6191
6192   if (DECL_SIZE (decl) == NULL_TREE)
6193     {
6194       /* If we used it already as memory, it must stay in memory.  */
6195       DECL_INITIAL (decl) = NULL_TREE;
6196       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6197       return;
6198     }
6199
6200   if (type == error_mark_node)
6201     return;
6202
6203   /* Compute and store the initial value.  */
6204   already_used = TREE_USED (decl) || TREE_USED (type);
6205   if (TREE_USED (type))
6206     DECL_READ_P (decl) = 1;
6207
6208   /* Generate a cleanup, if necessary.  */
6209   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6210
6211   /* Perform the initialization.  */
6212   if (init)
6213     {
6214       tree rinit = (TREE_CODE (init) == INIT_EXPR
6215                     ? TREE_OPERAND (init, 1) : NULL_TREE);
6216       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6217         {
6218           /* Stick simple initializers in DECL_INITIAL so that
6219              -Wno-init-self works (c++/34772).  */
6220           gcc_assert (TREE_OPERAND (init, 0) == decl);
6221           DECL_INITIAL (decl) = rinit;
6222
6223           if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6224             {
6225               STRIP_NOPS (rinit);
6226               if (rinit == decl)
6227                 warning_at (DECL_SOURCE_LOCATION (decl),
6228                             OPT_Winit_self,
6229                             "reference %qD is initialized with itself", decl);
6230             }
6231         }
6232       else
6233         {
6234           int saved_stmts_are_full_exprs_p;
6235
6236           /* If we're only initializing a single object, guard the
6237              destructors of any temporaries used in its initializer with
6238              its destructor.  This isn't right for arrays because each
6239              element initialization is a full-expression.  */
6240           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6241             wrap_temporary_cleanups (init, cleanup);
6242
6243           gcc_assert (building_stmt_list_p ());
6244           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6245           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6246           finish_expr_stmt (init);
6247           current_stmt_tree ()->stmts_are_full_exprs_p =
6248             saved_stmts_are_full_exprs_p;
6249         }
6250     }
6251
6252   /* Set this to 0 so we can tell whether an aggregate which was
6253      initialized was ever used.  Don't do this if it has a
6254      destructor, so we don't complain about the 'resource
6255      allocation is initialization' idiom.  Now set
6256      attribute((unused)) on types so decls of that type will be
6257      marked used. (see TREE_USED, above.)  */
6258   if (TYPE_NEEDS_CONSTRUCTING (type)
6259       && ! already_used
6260       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6261       && DECL_NAME (decl))
6262     TREE_USED (decl) = 0;
6263   else if (already_used)
6264     TREE_USED (decl) = 1;
6265
6266   if (cleanup)
6267     finish_decl_cleanup (decl, cleanup);
6268 }
6269
6270 /* DECL is a VAR_DECL for a compiler-generated variable with static
6271    storage duration (like a virtual table) whose initializer is a
6272    compile-time constant.  Initialize the variable and provide it to the
6273    back end.  */
6274
6275 void
6276 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6277 {
6278   tree init;
6279   gcc_assert (DECL_ARTIFICIAL (decl));
6280   init = build_constructor (TREE_TYPE (decl), v);
6281   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6282   DECL_INITIAL (decl) = init;
6283   DECL_INITIALIZED_P (decl) = 1;
6284   determine_visibility (decl);
6285   layout_var_decl (decl);
6286   maybe_commonize_var (decl);
6287   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6288 }
6289
6290 /* INIT is the initializer for a variable, as represented by the
6291    parser.  Returns true iff INIT is type-dependent.  */
6292
6293 static bool
6294 type_dependent_init_p (tree init)
6295 {
6296   if (TREE_CODE (init) == TREE_LIST)
6297     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6298     return any_type_dependent_elements_p (init);
6299   else if (TREE_CODE (init) == CONSTRUCTOR)
6300   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6301     {
6302       vec<constructor_elt, va_gc> *elts;
6303       size_t nelts;
6304       size_t i;
6305
6306       elts = CONSTRUCTOR_ELTS (init);
6307       nelts = vec_safe_length (elts);
6308       for (i = 0; i < nelts; ++i)
6309         if (type_dependent_init_p ((*elts)[i].value))
6310           return true;
6311     }
6312   else
6313     /* It must be a simple expression, e.g., int i = 3;  */
6314     return type_dependent_expression_p (init);
6315
6316   return false;
6317 }
6318
6319 /* INIT is the initializer for a variable, as represented by the
6320    parser.  Returns true iff INIT is value-dependent.  */
6321
6322 static bool
6323 value_dependent_init_p (tree init)
6324 {
6325   if (TREE_CODE (init) == TREE_LIST)
6326     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6327     return any_value_dependent_elements_p (init);
6328   else if (TREE_CODE (init) == CONSTRUCTOR)
6329   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6330     {
6331       vec<constructor_elt, va_gc> *elts;
6332       size_t nelts;
6333       size_t i;
6334
6335       elts = CONSTRUCTOR_ELTS (init);
6336       nelts = vec_safe_length (elts);
6337       for (i = 0; i < nelts; ++i)
6338         if (value_dependent_init_p ((*elts)[i].value))
6339           return true;
6340     }
6341   else
6342     /* It must be a simple expression, e.g., int i = 3;  */
6343     return value_dependent_expression_p (init);
6344   
6345   return false;
6346 }
6347
6348 /* Finish processing of a declaration;
6349    install its line number and initial value.
6350    If the length of an array type is not known before,
6351    it must be determined now, from the initial value, or it is an error.
6352
6353    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6354    true, then INIT is an integral constant expression.
6355
6356    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6357    if the (init) syntax was used.  */
6358
6359 void
6360 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6361                 tree asmspec_tree, int flags)
6362 {
6363   tree type;
6364   vec<tree, va_gc> *cleanups = NULL;
6365   const char *asmspec = NULL;
6366   int was_readonly = 0;
6367   bool var_definition_p = false;
6368   tree auto_node;
6369
6370   if (decl == error_mark_node)
6371     return;
6372   else if (! decl)
6373     {
6374       if (init)
6375         error ("assignment (not initialization) in declaration");
6376       return;
6377     }
6378
6379   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6380   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6381   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6382
6383   type = TREE_TYPE (decl);
6384   if (type == error_mark_node)
6385     return;
6386
6387   /* If a name was specified, get the string.  */
6388   if (at_namespace_scope_p ())
6389     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6390   if (asmspec_tree && asmspec_tree != error_mark_node)
6391     asmspec = TREE_STRING_POINTER (asmspec_tree);
6392
6393   if (current_class_type
6394       && CP_DECL_CONTEXT (decl) == current_class_type
6395       && TYPE_BEING_DEFINED (current_class_type)
6396       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6397       && (DECL_INITIAL (decl) || init))
6398     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6399
6400   if (TREE_CODE (decl) != FUNCTION_DECL
6401       && (auto_node = type_uses_auto (type)))
6402     {
6403       tree d_init;
6404       if (init == NULL_TREE)
6405         {
6406           if (DECL_LANG_SPECIFIC (decl)
6407               && DECL_TEMPLATE_INSTANTIATION (decl)
6408               && !DECL_TEMPLATE_INSTANTIATED (decl))
6409             {
6410               /* init is null because we're deferring instantiating the
6411                  initializer until we need it.  Well, we need it now.  */
6412               instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6413               return;
6414             }
6415
6416           error ("declaration of %q#D has no initializer", decl);
6417           TREE_TYPE (decl) = error_mark_node;
6418           return;
6419         }
6420       d_init = init;
6421       if (TREE_CODE (d_init) == TREE_LIST)
6422         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6423                                                   tf_warning_or_error);
6424       d_init = resolve_nondeduced_context (d_init);
6425       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6426                                                    auto_node);
6427       if (type == error_mark_node)
6428         return;
6429       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6430     }
6431
6432   if (!ensure_literal_type_for_constexpr_object (decl))
6433     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6434
6435   if (VAR_P (decl)
6436       && DECL_CLASS_SCOPE_P (decl)
6437       && DECL_INITIALIZED_IN_CLASS_P (decl))
6438     check_static_variable_definition (decl, type);
6439
6440   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6441     {
6442       tree clone;
6443       if (init == ridpointers[(int)RID_DELETE])
6444         {
6445           /* FIXME check this is 1st decl.  */
6446           DECL_DELETED_FN (decl) = 1;
6447           DECL_DECLARED_INLINE_P (decl) = 1;
6448           DECL_INITIAL (decl) = error_mark_node;
6449           FOR_EACH_CLONE (clone, decl)
6450             {
6451               DECL_DELETED_FN (clone) = 1;
6452               DECL_DECLARED_INLINE_P (clone) = 1;
6453               DECL_INITIAL (clone) = error_mark_node;
6454             }
6455           init = NULL_TREE;
6456         }
6457       else if (init == ridpointers[(int)RID_DEFAULT])
6458         {
6459           if (defaultable_fn_check (decl))
6460             DECL_DEFAULTED_FN (decl) = 1;
6461           else
6462             DECL_INITIAL (decl) = NULL_TREE;
6463         }
6464     }
6465
6466   if (init && VAR_P (decl))
6467     {
6468       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6469       /* If DECL is a reference, then we want to know whether init is a
6470          reference constant; init_const_expr_p as passed tells us whether
6471          it's an rvalue constant.  */
6472       if (TREE_CODE (type) == REFERENCE_TYPE)
6473         init_const_expr_p = potential_constant_expression (init);
6474       if (init_const_expr_p)
6475         {
6476           /* Set these flags now for templates.  We'll update the flags in
6477              store_init_value for instantiations.  */
6478           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6479           if (decl_maybe_constant_var_p (decl))
6480             TREE_CONSTANT (decl) = 1;
6481         }
6482     }
6483
6484   if (processing_template_decl)
6485     {
6486       bool type_dependent_p;
6487
6488       /* Add this declaration to the statement-tree.  */
6489       if (at_function_scope_p ())
6490         add_decl_expr (decl);
6491
6492       type_dependent_p = dependent_type_p (type);
6493
6494       if (check_for_bare_parameter_packs (init))
6495         {
6496           init = NULL_TREE;
6497           DECL_INITIAL (decl) = NULL_TREE;
6498         }
6499
6500       /* Generally, initializers in templates are expanded when the
6501          template is instantiated.  But, if DECL is a variable constant
6502          then it can be used in future constant expressions, so its value
6503          must be available. */
6504
6505       if (!VAR_P (decl) || dependent_type_p (type))
6506         /* We can't do anything if the decl has dependent type.  */;
6507       else if (init
6508                && init_const_expr_p
6509                && !type_dependent_p
6510                && TREE_CODE (type) != REFERENCE_TYPE
6511                && decl_maybe_constant_var_p (decl)
6512                && !type_dependent_init_p (init)
6513                && !value_dependent_init_p (init))
6514         {
6515           /* This variable seems to be a non-dependent constant, so process
6516              its initializer.  If check_initializer returns non-null the
6517              initialization wasn't constant after all.  */
6518           tree init_code;
6519           cleanups = make_tree_vector ();
6520           init_code = check_initializer (decl, init, flags, &cleanups);
6521           if (init_code == NULL_TREE)
6522             init = NULL_TREE;
6523           release_tree_vector (cleanups);
6524         }
6525       else if (!DECL_PRETTY_FUNCTION_P (decl))
6526         {
6527           /* Deduce array size even if the initializer is dependent.  */
6528           maybe_deduce_size_from_array_init (decl, init);
6529           /* And complain about multiple initializers.  */
6530           if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6531               && !MAYBE_CLASS_TYPE_P (type))
6532             init = build_x_compound_expr_from_list (init, ELK_INIT,
6533                                                     tf_warning_or_error);
6534         }
6535
6536       if (init)
6537         DECL_INITIAL (decl) = init;
6538       return;
6539     }
6540
6541   /* Just store non-static data member initializers for later.  */
6542   if (init && TREE_CODE (decl) == FIELD_DECL)
6543     DECL_INITIAL (decl) = init;
6544
6545   /* Take care of TYPE_DECLs up front.  */
6546   if (TREE_CODE (decl) == TYPE_DECL)
6547     {
6548       if (type != error_mark_node
6549           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6550         {
6551           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6552             warning (0, "shadowing previous type declaration of %q#D", decl);
6553           set_identifier_type_value (DECL_NAME (decl), decl);
6554         }
6555
6556       /* If we have installed this as the canonical typedef for this
6557          type, and that type has not been defined yet, delay emitting
6558          the debug information for it, as we will emit it later.  */
6559       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6560           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6561         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6562
6563       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6564                                 at_eof);
6565       return;
6566     }
6567
6568   /* A reference will be modified here, as it is initialized.  */
6569   if (! DECL_EXTERNAL (decl)
6570       && TREE_READONLY (decl)
6571       && TREE_CODE (type) == REFERENCE_TYPE)
6572     {
6573       was_readonly = 1;
6574       TREE_READONLY (decl) = 0;
6575     }
6576
6577   if (VAR_P (decl))
6578     {
6579       /* If this is a local variable that will need a mangled name,
6580          register it now.  We must do this before processing the
6581          initializer for the variable, since the initialization might
6582          require a guard variable, and since the mangled name of the
6583          guard variable will depend on the mangled name of this
6584          variable.  */
6585       if (DECL_FUNCTION_SCOPE_P (decl)
6586           && TREE_STATIC (decl)
6587           && !DECL_ARTIFICIAL (decl))
6588         {
6589           push_local_name (decl);
6590           if (DECL_CONSTRUCTOR_P (current_function_decl)
6591               || DECL_DESTRUCTOR_P (current_function_decl))
6592             /* Normally local_decls is populated during GIMPLE lowering,
6593                but [cd]tors are never actually compiled directly.  We need
6594                to put statics on the list so we can deal with the label
6595                address extension.  FIXME.  */
6596             add_local_decl (cfun, decl);
6597         }
6598
6599       /* Convert the initializer to the type of DECL, if we have not
6600          already initialized DECL.  */
6601       if (!DECL_INITIALIZED_P (decl)
6602           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6603              case of a static data member initialized inside the
6604              class-specifier, there can be an initializer even if DECL
6605              is *not* defined.  */
6606           && (!DECL_EXTERNAL (decl) || init))
6607         {
6608           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6609             {
6610               tree jclass
6611                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6612               /* Allow libjava/prims.cc define primitive classes.  */
6613               if (init != NULL_TREE
6614                   || jclass == NULL_TREE
6615                   || TREE_CODE (jclass) != TYPE_DECL
6616                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6617                   || !same_type_ignoring_top_level_qualifiers_p
6618                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6619                 error ("Java object %qD not allocated with %<new%>", decl);
6620               init = NULL_TREE;
6621             }
6622           cleanups = make_tree_vector ();
6623           init = check_initializer (decl, init, flags, &cleanups);
6624
6625           /* Handle:
6626
6627              [dcl.init]
6628
6629              The memory occupied by any object of static storage
6630              duration is zero-initialized at program startup before
6631              any other initialization takes place.
6632
6633              We cannot create an appropriate initializer until after
6634              the type of DECL is finalized.  If DECL_INITIAL is set,
6635              then the DECL is statically initialized, and any
6636              necessary zero-initialization has already been performed.  */
6637           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6638             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6639                                                    /*nelts=*/NULL_TREE,
6640                                                    /*static_storage_p=*/true);
6641           /* Remember that the initialization for this variable has
6642              taken place.  */
6643           DECL_INITIALIZED_P (decl) = 1;
6644           /* This declaration is the definition of this variable,
6645              unless we are initializing a static data member within
6646              the class specifier.  */
6647           if (!DECL_EXTERNAL (decl))
6648             var_definition_p = true;
6649         }
6650       /* If the variable has an array type, lay out the type, even if
6651          there is no initializer.  It is valid to index through the
6652          array, and we must get TYPE_ALIGN set correctly on the array
6653          type.  */
6654       else if (TREE_CODE (type) == ARRAY_TYPE)
6655         layout_type (type);
6656
6657       if (TREE_STATIC (decl)
6658           && !at_function_scope_p ()
6659           && current_function_decl == NULL)
6660         /* So decl is a global variable or a static member of a
6661            non local class. Record the types it uses
6662            so that we can decide later to emit debug info for them.  */
6663         record_types_used_by_current_var_decl (decl);
6664     }
6665   else if (TREE_CODE (decl) == FIELD_DECL
6666            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6667     error ("non-static data member %qD has Java class type", decl);
6668
6669   /* Add this declaration to the statement-tree.  This needs to happen
6670      after the call to check_initializer so that the DECL_EXPR for a
6671      reference temp is added before the DECL_EXPR for the reference itself.  */
6672   if (DECL_FUNCTION_SCOPE_P (decl))
6673     {
6674       /* If we're building a variable sized type, and we might be
6675          reachable other than via the top of the current binding
6676          level, then create a new BIND_EXPR so that we deallocate
6677          the object at the right time.  */
6678       if (VAR_P (decl)
6679           && DECL_SIZE (decl)
6680           && !TREE_CONSTANT (DECL_SIZE (decl))
6681           && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6682         {
6683           tree bind;
6684           bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6685           TREE_SIDE_EFFECTS (bind) = 1;
6686           add_stmt (bind);
6687           BIND_EXPR_BODY (bind) = push_stmt_list ();
6688         }
6689       add_decl_expr (decl);
6690     }
6691
6692   /* Let the middle end know about variables and functions -- but not
6693      static data members in uninstantiated class templates.  */
6694   if (VAR_OR_FUNCTION_DECL_P (decl))
6695     {
6696       if (VAR_P (decl))
6697         {
6698           layout_var_decl (decl);
6699           maybe_commonize_var (decl);
6700         }
6701
6702       /* This needs to happen after the linkage is set. */
6703       determine_visibility (decl);
6704
6705       if (var_definition_p && TREE_STATIC (decl))
6706         {
6707           /* If a TREE_READONLY variable needs initialization
6708              at runtime, it is no longer readonly and we need to
6709              avoid MEM_READONLY_P being set on RTL created for it.  */
6710           if (init)
6711             {
6712               if (TREE_READONLY (decl))
6713                 TREE_READONLY (decl) = 0;
6714               was_readonly = 0;
6715             }
6716           else if (was_readonly)
6717             TREE_READONLY (decl) = 1;
6718
6719           /* Likewise if it needs destruction.  */
6720           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6721             TREE_READONLY (decl) = 0;
6722         }
6723
6724       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6725
6726       /* Check for abstractness of the type. Notice that there is no
6727          need to strip array types here since the check for those types
6728          is already done within create_array_type_for_decl.  */
6729       abstract_virtuals_error (decl, type);
6730
6731       if (TREE_TYPE (decl) == error_mark_node)
6732         /* No initialization required.  */
6733         ;
6734       else if (TREE_CODE (decl) == FUNCTION_DECL)
6735         {
6736           if (init)
6737             {
6738               if (init == ridpointers[(int)RID_DEFAULT])
6739                 {
6740                   /* An out-of-class default definition is defined at
6741                      the point where it is explicitly defaulted.  */
6742                   if (DECL_DELETED_FN (decl))
6743                     maybe_explain_implicit_delete (decl);
6744                   else if (DECL_INITIAL (decl) == error_mark_node)
6745                     synthesize_method (decl);
6746                 }
6747               else
6748                 error ("function %q#D is initialized like a variable", decl);
6749             }
6750           /* else no initialization required.  */
6751         }
6752       else if (DECL_EXTERNAL (decl)
6753                && ! (DECL_LANG_SPECIFIC (decl)
6754                      && DECL_NOT_REALLY_EXTERN (decl)))
6755         {
6756           if (init)
6757             DECL_INITIAL (decl) = init;
6758         }
6759       /* A variable definition.  */
6760       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6761         /* Initialize the local variable.  */
6762         initialize_local_var (decl, init);
6763
6764       /* If a variable is defined, and then a subsequent
6765          definition with external linkage is encountered, we will
6766          get here twice for the same variable.  We want to avoid
6767          calling expand_static_init more than once.  For variables
6768          that are not static data members, we can call
6769          expand_static_init only when we actually process the
6770          initializer.  It is not legal to redeclare a static data
6771          member, so this issue does not arise in that case.  */
6772       else if (var_definition_p && TREE_STATIC (decl))
6773         expand_static_init (decl, init);
6774     }
6775
6776   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6777      reference, insert it in the statement-tree now.  */
6778   if (cleanups)
6779     {
6780       unsigned i; tree t;
6781       FOR_EACH_VEC_ELT (*cleanups, i, t)
6782         push_cleanup (decl, t, false);
6783       release_tree_vector (cleanups);
6784     }
6785
6786   if (was_readonly)
6787     TREE_READONLY (decl) = 1;
6788
6789   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6790 }
6791
6792 /* Returns a declaration for a VAR_DECL as if:
6793
6794      extern "C" TYPE NAME;
6795
6796    had been seen.  Used to create compiler-generated global
6797    variables.  */
6798
6799 static tree
6800 declare_global_var (tree name, tree type)
6801 {
6802   tree decl;
6803
6804   push_to_top_level ();
6805   decl = build_decl (input_location, VAR_DECL, name, type);
6806   TREE_PUBLIC (decl) = 1;
6807   DECL_EXTERNAL (decl) = 1;
6808   DECL_ARTIFICIAL (decl) = 1;
6809   /* If the user has explicitly declared this variable (perhaps
6810      because the code we are compiling is part of a low-level runtime
6811      library), then it is possible that our declaration will be merged
6812      with theirs by pushdecl.  */
6813   decl = pushdecl (decl);
6814   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6815   pop_from_top_level ();
6816
6817   return decl;
6818 }
6819
6820 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6821    if "__cxa_atexit" is not being used) corresponding to the function
6822    to be called when the program exits.  */
6823
6824 static tree
6825 get_atexit_fn_ptr_type (void)
6826 {
6827   tree fn_type;
6828
6829   if (!atexit_fn_ptr_type_node)
6830     {
6831       tree arg_type;
6832       if (flag_use_cxa_atexit 
6833           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6834         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6835         arg_type = ptr_type_node;
6836       else
6837         /* The parameter to "atexit" is "void (*)(void)".  */
6838         arg_type = NULL_TREE;
6839       
6840       fn_type = build_function_type_list (void_type_node,
6841                                           arg_type, NULL_TREE);
6842       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6843     }
6844
6845   return atexit_fn_ptr_type_node;
6846 }
6847
6848 /* Returns a pointer to the `atexit' function.  Note that if
6849    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6850    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6851
6852 static tree
6853 get_atexit_node (void)
6854 {
6855   tree atexit_fndecl;
6856   tree fn_type;
6857   tree fn_ptr_type;
6858   const char *name;
6859   bool use_aeabi_atexit;
6860
6861   if (atexit_node)
6862     return atexit_node;
6863
6864   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6865     {
6866       /* The declaration for `__cxa_atexit' is:
6867
6868            int __cxa_atexit (void (*)(void *), void *, void *)
6869
6870          We build up the argument types and then the function type
6871          itself.  */
6872       tree argtype0, argtype1, argtype2;
6873
6874       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6875       /* First, build the pointer-to-function type for the first
6876          argument.  */
6877       fn_ptr_type = get_atexit_fn_ptr_type ();
6878       /* Then, build the rest of the argument types.  */
6879       argtype2 = ptr_type_node;
6880       if (use_aeabi_atexit)
6881         {
6882           argtype1 = fn_ptr_type;
6883           argtype0 = ptr_type_node;
6884         }
6885       else
6886         {
6887           argtype1 = ptr_type_node;
6888           argtype0 = fn_ptr_type;
6889         }
6890       /* And the final __cxa_atexit type.  */
6891       fn_type = build_function_type_list (integer_type_node,
6892                                           argtype0, argtype1, argtype2,
6893                                           NULL_TREE);
6894       if (use_aeabi_atexit)
6895         name = "__aeabi_atexit";
6896       else
6897         name = "__cxa_atexit";
6898     }
6899   else
6900     {
6901       /* The declaration for `atexit' is:
6902
6903            int atexit (void (*)());
6904
6905          We build up the argument types and then the function type
6906          itself.  */
6907       fn_ptr_type = get_atexit_fn_ptr_type ();
6908       /* Build the final atexit type.  */
6909       fn_type = build_function_type_list (integer_type_node,
6910                                           fn_ptr_type, NULL_TREE);
6911       name = "atexit";
6912     }
6913
6914   /* Now, build the function declaration.  */
6915   push_lang_context (lang_name_c);
6916   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6917   mark_used (atexit_fndecl);
6918   pop_lang_context ();
6919   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6920
6921   return atexit_node;
6922 }
6923
6924 /* Like get_atexit_node, but for thread-local cleanups.  */
6925
6926 static tree
6927 get_thread_atexit_node (void)
6928 {
6929   /* The declaration for `__cxa_thread_atexit' is:
6930
6931      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6932   tree fn_type = build_function_type_list (integer_type_node,
6933                                            get_atexit_fn_ptr_type (),
6934                                            ptr_type_node, ptr_type_node,
6935                                            NULL_TREE);
6936
6937   /* Now, build the function declaration.  */
6938   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6939                                              ECF_LEAF | ECF_NOTHROW);
6940   return decay_conversion (atexit_fndecl, tf_warning_or_error);
6941 }
6942
6943 /* Returns the __dso_handle VAR_DECL.  */
6944
6945 static tree
6946 get_dso_handle_node (void)
6947 {
6948   if (dso_handle_node)
6949     return dso_handle_node;
6950
6951   /* Declare the variable.  */
6952   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6953                                         ptr_type_node);
6954
6955 #ifdef HAVE_GAS_HIDDEN
6956   if (dso_handle_node != error_mark_node)
6957     {
6958       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6959       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6960     }
6961 #endif
6962
6963   return dso_handle_node;
6964 }
6965
6966 /* Begin a new function with internal linkage whose job will be simply
6967    to destroy some particular variable.  */
6968
6969 static GTY(()) int start_cleanup_cnt;
6970
6971 static tree
6972 start_cleanup_fn (void)
6973 {
6974   char name[32];
6975   tree fntype;
6976   tree fndecl;
6977   bool use_cxa_atexit = flag_use_cxa_atexit
6978                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6979
6980   push_to_top_level ();
6981
6982   /* No need to mangle this.  */
6983   push_lang_context (lang_name_c);
6984
6985   /* Build the name of the function.  */
6986   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6987   /* Build the function declaration.  */
6988   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6989   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6990   /* It's a function with internal linkage, generated by the
6991      compiler.  */
6992   TREE_PUBLIC (fndecl) = 0;
6993   DECL_ARTIFICIAL (fndecl) = 1;
6994   /* Make the function `inline' so that it is only emitted if it is
6995      actually needed.  It is unlikely that it will be inlined, since
6996      it is only called via a function pointer, but we avoid unnecessary
6997      emissions this way.  */
6998   DECL_DECLARED_INLINE_P (fndecl) = 1;
6999   DECL_INTERFACE_KNOWN (fndecl) = 1;
7000   /* Build the parameter.  */
7001   if (use_cxa_atexit)
7002     {
7003       tree parmdecl;
7004
7005       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
7006       DECL_CONTEXT (parmdecl) = fndecl;
7007       TREE_USED (parmdecl) = 1;
7008       DECL_READ_P (parmdecl) = 1;
7009       DECL_ARGUMENTS (fndecl) = parmdecl;
7010     }
7011
7012   pushdecl (fndecl);
7013   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7014
7015   pop_lang_context ();
7016
7017   return current_function_decl;
7018 }
7019
7020 /* Finish the cleanup function begun by start_cleanup_fn.  */
7021
7022 static void
7023 end_cleanup_fn (void)
7024 {
7025   expand_or_defer_fn (finish_function (0));
7026
7027   pop_from_top_level ();
7028 }
7029
7030 /* Generate code to handle the destruction of DECL, an object with
7031    static storage duration.  */
7032
7033 tree
7034 register_dtor_fn (tree decl)
7035 {
7036   tree cleanup;
7037   tree addr;
7038   tree compound_stmt;
7039   tree fcall;
7040   tree type;
7041   bool ob_parm, dso_parm, use_dtor;
7042   tree arg0, arg1, arg2;
7043   tree atex_node;
7044
7045   type = TREE_TYPE (decl);
7046   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7047     return void_node;
7048
7049   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7050      "__aeabi_atexit"), and DECL is a class object, we can just pass the
7051      destructor to "__cxa_atexit"; we don't have to build a temporary
7052      function to do the cleanup.  */
7053   dso_parm = (flag_use_cxa_atexit
7054               && !targetm.cxx.use_atexit_for_cxa_atexit ());
7055   ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
7056   use_dtor = ob_parm && CLASS_TYPE_P (type);
7057   if (use_dtor)
7058     {
7059       int idx;
7060
7061       /* Find the destructor.  */
7062       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
7063       gcc_assert (idx >= 0);
7064       cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
7065       /* Make sure it is accessible.  */
7066       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7067                                      tf_warning_or_error);
7068     }
7069   else
7070     {
7071       /* Call build_cleanup before we enter the anonymous function so
7072          that any access checks will be done relative to the current
7073          scope, rather than the scope of the anonymous function.  */
7074       build_cleanup (decl);
7075   
7076       /* Now start the function.  */
7077       cleanup = start_cleanup_fn ();
7078       
7079       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7080          to the original function, rather than the anonymous one.  That
7081          will make the back end think that nested functions are in use,
7082          which causes confusion.  */
7083       push_deferring_access_checks (dk_no_check);
7084       fcall = build_cleanup (decl);
7085       pop_deferring_access_checks ();
7086       
7087       /* Create the body of the anonymous function.  */
7088       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7089       finish_expr_stmt (fcall);
7090       finish_compound_stmt (compound_stmt);
7091       end_cleanup_fn ();
7092     }
7093
7094   /* Call atexit with the cleanup function.  */
7095   mark_used (cleanup);
7096   cleanup = build_address (cleanup);
7097
7098   if (DECL_THREAD_LOCAL_P (decl))
7099     atex_node = get_thread_atexit_node ();
7100   else
7101     atex_node = get_atexit_node ();
7102
7103   if (use_dtor)
7104     {
7105       /* We must convert CLEANUP to the type that "__cxa_atexit"
7106          expects.  */
7107       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7108       /* "__cxa_atexit" will pass the address of DECL to the
7109          cleanup function.  */
7110       mark_used (decl);
7111       addr = build_address (decl);
7112       /* The declared type of the parameter to "__cxa_atexit" is
7113          "void *".  For plain "T*", we could just let the
7114          machinery in cp_build_function_call convert it -- but if the
7115          type is "cv-qualified T *", then we need to convert it
7116          before passing it in, to avoid spurious errors.  */
7117       addr = build_nop (ptr_type_node, addr);
7118     }
7119   else
7120     /* Since the cleanup functions we build ignore the address
7121        they're given, there's no reason to pass the actual address
7122        in, and, in general, it's cheaper to pass NULL than any
7123        other value.  */
7124     addr = null_pointer_node;
7125
7126   if (dso_parm)
7127     arg2 = cp_build_addr_expr (get_dso_handle_node (),
7128                                tf_warning_or_error);
7129   else if (ob_parm)
7130     /* Just pass NULL to the dso handle parm if we don't actually
7131        have a DSO handle on this target.  */
7132     arg2 = null_pointer_node;
7133   else
7134     arg2 = NULL_TREE;
7135
7136   if (ob_parm)
7137     {
7138       if (!DECL_THREAD_LOCAL_P (decl)
7139           && targetm.cxx.use_aeabi_atexit ())
7140         {
7141           arg1 = cleanup;
7142           arg0 = addr;
7143         }
7144       else
7145         {
7146           arg1 = addr;
7147           arg0 = cleanup;
7148         }
7149     }
7150   else
7151     {
7152       arg0 = cleanup;
7153       arg1 = NULL_TREE;
7154     }
7155   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7156                                       arg0, arg1, arg2, NULL_TREE);
7157 }
7158
7159 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
7160    is its initializer.  Generate code to handle the construction
7161    and destruction of DECL.  */
7162
7163 static void
7164 expand_static_init (tree decl, tree init)
7165 {
7166   gcc_assert (VAR_P (decl));
7167   gcc_assert (TREE_STATIC (decl));
7168
7169   /* Some variables require no dynamic initialization.  */
7170   if (!init
7171       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7172     {
7173       /* Make sure the destructor is callable.  */
7174       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7175       return;
7176     }
7177
7178   if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7179       && !DECL_FUNCTION_SCOPE_P (decl))
7180     {
7181       if (init)
7182         error ("non-local variable %qD declared %<__thread%> "
7183                "needs dynamic initialization", decl);
7184       else
7185         error ("non-local variable %qD declared %<__thread%> "
7186                "has a non-trivial destructor", decl);
7187       static bool informed;
7188       if (!informed)
7189         {
7190           inform (DECL_SOURCE_LOCATION (decl),
7191                   "C++11 %<thread_local%> allows dynamic initialization "
7192                   "and destruction");
7193           informed = true;
7194         }
7195       return;
7196     }
7197
7198   if (DECL_FUNCTION_SCOPE_P (decl))
7199     {
7200       /* Emit code to perform this initialization but once.  */
7201       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7202       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7203       tree guard, guard_addr;
7204       tree flag, begin;
7205       /* We don't need thread-safety code for thread-local vars.  */
7206       bool thread_guard = (flag_threadsafe_statics
7207                            && !DECL_THREAD_LOCAL_P (decl));
7208
7209       /* Emit code to perform this initialization but once.  This code
7210          looks like:
7211
7212            static <type> guard;
7213            if (!guard.first_byte) {
7214              if (__cxa_guard_acquire (&guard)) {
7215                bool flag = false;
7216                try {
7217                  // Do initialization.
7218                  flag = true; __cxa_guard_release (&guard);
7219                  // Register variable for destruction at end of program.
7220                } catch {
7221                  if (!flag) __cxa_guard_abort (&guard);
7222                }
7223            }
7224
7225          Note that the `flag' variable is only set to 1 *after* the
7226          initialization is complete.  This ensures that an exception,
7227          thrown during the construction, will cause the variable to
7228          reinitialized when we pass through this code again, as per:
7229
7230            [stmt.dcl]
7231
7232            If the initialization exits by throwing an exception, the
7233            initialization is not complete, so it will be tried again
7234            the next time control enters the declaration.
7235
7236          This process should be thread-safe, too; multiple threads
7237          should not be able to initialize the variable more than
7238          once.  */
7239
7240       /* Create the guard variable.  */
7241       guard = get_guard (decl);
7242
7243       /* This optimization isn't safe on targets with relaxed memory
7244          consistency.  On such targets we force synchronization in
7245          __cxa_guard_acquire.  */
7246       if (!targetm.relaxed_ordering || !thread_guard)
7247         {
7248           /* Begin the conditional initialization.  */
7249           if_stmt = begin_if_stmt ();
7250           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7251           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7252         }
7253
7254       if (thread_guard)
7255         {
7256           tree vfntype = NULL_TREE;
7257           tree acquire_name, release_name, abort_name;
7258           tree acquire_fn, release_fn, abort_fn;
7259           guard_addr = build_address (guard);
7260
7261           acquire_name = get_identifier ("__cxa_guard_acquire");
7262           release_name = get_identifier ("__cxa_guard_release");
7263           abort_name = get_identifier ("__cxa_guard_abort");
7264           acquire_fn = identifier_global_value (acquire_name);
7265           release_fn = identifier_global_value (release_name);
7266           abort_fn = identifier_global_value (abort_name);
7267           if (!acquire_fn)
7268             acquire_fn = push_library_fn
7269               (acquire_name, build_function_type_list (integer_type_node,
7270                                                        TREE_TYPE (guard_addr),
7271                                                        NULL_TREE),
7272                NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7273           if (!release_fn || !abort_fn)
7274             vfntype = build_function_type_list (void_type_node,
7275                                                 TREE_TYPE (guard_addr),
7276                                                 NULL_TREE);
7277           if (!release_fn)
7278             release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7279                                            ECF_NOTHROW | ECF_LEAF);
7280           if (!abort_fn)
7281             abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7282                                         ECF_NOTHROW | ECF_LEAF);
7283
7284           inner_if_stmt = begin_if_stmt ();
7285           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7286                                inner_if_stmt);
7287
7288           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7289           begin = get_target_expr (boolean_false_node);
7290           flag = TARGET_EXPR_SLOT (begin);
7291
7292           TARGET_EXPR_CLEANUP (begin)
7293             = build3 (COND_EXPR, void_type_node, flag,
7294                       void_node,
7295                       build_call_n (abort_fn, 1, guard_addr));
7296           CLEANUP_EH_ONLY (begin) = 1;
7297
7298           /* Do the initialization itself.  */
7299           init = add_stmt_to_compound (begin, init);
7300           init = add_stmt_to_compound
7301             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7302           init = add_stmt_to_compound
7303             (init, build_call_n (release_fn, 1, guard_addr));
7304         }
7305       else
7306         init = add_stmt_to_compound (init, set_guard (guard));
7307
7308       /* Use atexit to register a function for destroying this static
7309          variable.  */
7310       init = add_stmt_to_compound (init, register_dtor_fn (decl));
7311
7312       finish_expr_stmt (init);
7313
7314       if (thread_guard)
7315         {
7316           finish_compound_stmt (inner_then_clause);
7317           finish_then_clause (inner_if_stmt);
7318           finish_if_stmt (inner_if_stmt);
7319         }
7320
7321       if (!targetm.relaxed_ordering || !thread_guard)
7322         {
7323           finish_compound_stmt (then_clause);
7324           finish_then_clause (if_stmt);
7325           finish_if_stmt (if_stmt);
7326         }
7327     }
7328   else if (DECL_THREAD_LOCAL_P (decl))
7329     tls_aggregates = tree_cons (init, decl, tls_aggregates);
7330   else
7331     static_aggregates = tree_cons (init, decl, static_aggregates);
7332 }
7333
7334 \f
7335 /* Make TYPE a complete type based on INITIAL_VALUE.
7336    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7337    2 if there was no information (in which case assume 0 if DO_DEFAULT),
7338    3 if the initializer list is empty (in pedantic mode). */
7339
7340 int
7341 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7342 {
7343   int failure;
7344   tree type, elt_type;
7345
7346   /* Don't get confused by a CONSTRUCTOR for some other type.  */
7347   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7348       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value))
7349     return 1;
7350
7351   if (initial_value)
7352     {
7353       unsigned HOST_WIDE_INT i;
7354       tree value;
7355
7356       /* An array of character type can be initialized from a
7357          brace-enclosed string constant.
7358
7359          FIXME: this code is duplicated from reshape_init. Probably
7360          we should just call reshape_init here?  */
7361       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7362           && TREE_CODE (initial_value) == CONSTRUCTOR
7363           && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7364         {
7365           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7366           tree value = (*v)[0].value;
7367
7368           if (TREE_CODE (value) == STRING_CST
7369               && v->length () == 1)
7370             initial_value = value;
7371         }
7372
7373       /* If any of the elements are parameter packs, we can't actually
7374          complete this type now because the array size is dependent.  */
7375       if (TREE_CODE (initial_value) == CONSTRUCTOR)
7376         {
7377           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
7378                                       i, value)
7379             {
7380               if (PACK_EXPANSION_P (value))
7381                 return 0;
7382             }
7383         }
7384     }
7385
7386   failure = complete_array_type (ptype, initial_value, do_default);
7387
7388   /* We can create the array before the element type is complete, which
7389      means that we didn't have these two bits set in the original type
7390      either.  In completing the type, we are expected to propagate these
7391      bits.  See also complete_type which does the same thing for arrays
7392      of fixed size.  */
7393   type = *ptype;
7394   if (TYPE_DOMAIN (type))
7395     {
7396       elt_type = TREE_TYPE (type);
7397       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7398       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7399         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7400     }
7401
7402   return failure;
7403 }
7404
7405 /* As above, but either give an error or reject zero-size arrays, depending
7406    on COMPLAIN.  */
7407
7408 int
7409 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7410                                  bool do_default, tsubst_flags_t complain)
7411 {
7412   int failure;
7413   bool sfinae = !(complain & tf_error);
7414   /* In SFINAE context we can't be lenient about zero-size arrays.  */
7415   if (sfinae)
7416     ++pedantic;
7417   failure = cp_complete_array_type (ptype, initial_value, do_default);
7418   if (sfinae)
7419     --pedantic;
7420   if (failure)
7421     {
7422       if (sfinae)
7423         /* Not an error.  */;
7424       else if (failure == 1)
7425         error ("initializer fails to determine size of %qT", *ptype);
7426       else if (failure == 2)
7427         {
7428           if (do_default)
7429             error ("array size missing in %qT", *ptype);
7430         }
7431       else if (failure == 3)
7432         error ("zero-size array %qT", *ptype);
7433       *ptype = error_mark_node;
7434     }
7435   return failure;
7436 }
7437 \f
7438 /* Return zero if something is declared to be a member of type
7439    CTYPE when in the context of CUR_TYPE.  STRING is the error
7440    message to print in that case.  Otherwise, quietly return 1.  */
7441
7442 static int
7443 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7444 {
7445   if (ctype && ctype != cur_type)
7446     {
7447       if (flags == DTOR_FLAG)
7448         error ("destructor for alien class %qT cannot be a member", ctype);
7449       else
7450         error ("constructor for alien class %qT cannot be a member", ctype);
7451       return 0;
7452     }
7453   return 1;
7454 }
7455 \f
7456 /* Subroutine of `grokdeclarator'.  */
7457
7458 /* Generate errors possibly applicable for a given set of specifiers.
7459    This is for ARM $7.1.2.  */
7460
7461 static void
7462 bad_specifiers (tree object,
7463                 enum bad_spec_place type,
7464                 int virtualp,
7465                 int quals,
7466                 int inlinep,
7467                 int friendp,
7468                 int raises)
7469 {
7470   switch (type)
7471     {
7472       case BSP_VAR:
7473         if (virtualp)
7474           error ("%qD declared as a %<virtual%> variable", object);
7475         if (inlinep)
7476           error ("%qD declared as an %<inline%> variable", object);
7477         if (quals)
7478           error ("%<const%> and %<volatile%> function specifiers on "
7479                  "%qD invalid in variable declaration", object);
7480         break;
7481       case BSP_PARM:
7482         if (virtualp)
7483           error ("%qD declared as a %<virtual%> parameter", object);
7484         if (inlinep)
7485           error ("%qD declared as an %<inline%> parameter", object);
7486         if (quals)
7487           error ("%<const%> and %<volatile%> function specifiers on "
7488                  "%qD invalid in parameter declaration", object);
7489         break;
7490       case BSP_TYPE:
7491         if (virtualp)
7492           error ("%qD declared as a %<virtual%> type", object);
7493         if (inlinep)
7494           error ("%qD declared as an %<inline%> type", object);
7495         if (quals)
7496           error ("%<const%> and %<volatile%> function specifiers on "
7497                  "%qD invalid in type declaration", object);
7498         break;
7499       case BSP_FIELD:
7500         if (virtualp)
7501           error ("%qD declared as a %<virtual%> field", object);
7502         if (inlinep)
7503           error ("%qD declared as an %<inline%> field", object);
7504         if (quals)
7505           error ("%<const%> and %<volatile%> function specifiers on "
7506                  "%qD invalid in field declaration", object);
7507         break;
7508       default:
7509         gcc_unreachable();
7510     }
7511   if (friendp)
7512     error ("%q+D declared as a friend", object);
7513   if (raises
7514       && (TREE_CODE (object) == TYPE_DECL
7515           || (!TYPE_PTRFN_P (TREE_TYPE (object))
7516               && !TYPE_REFFN_P (TREE_TYPE (object))
7517               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7518     error ("%q+D declared with an exception specification", object);
7519 }
7520
7521 /* DECL is a member function or static data member and is presently
7522    being defined.  Check that the definition is taking place in a
7523    valid namespace.  */
7524
7525 static void
7526 check_class_member_definition_namespace (tree decl)
7527 {
7528   /* These checks only apply to member functions and static data
7529      members.  */
7530   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7531   /* We check for problems with specializations in pt.c in
7532      check_specialization_namespace, where we can issue better
7533      diagnostics.  */
7534   if (processing_specialization)
7535     return;
7536   /* There are no restrictions on the placement of
7537      explicit instantiations.  */
7538   if (processing_explicit_instantiation)
7539     return;
7540   /* [class.mfct]
7541
7542      A member function definition that appears outside of the
7543      class definition shall appear in a namespace scope enclosing
7544      the class definition.
7545
7546      [class.static.data]
7547
7548      The definition for a static data member shall appear in a
7549      namespace scope enclosing the member's class definition.  */
7550   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7551     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7552                decl, DECL_CONTEXT (decl));
7553 }
7554
7555 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7556    METHOD_TYPE for a non-static member function; QUALS are the
7557    cv-qualifiers that apply to the function.  */
7558
7559 tree
7560 build_this_parm (tree type, cp_cv_quals quals)
7561 {
7562   tree this_type;
7563   tree qual_type;
7564   tree parm;
7565   cp_cv_quals this_quals;
7566
7567   if (CLASS_TYPE_P (type))
7568     {
7569       this_type
7570         = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7571       this_type = build_pointer_type (this_type);
7572     }
7573   else
7574     this_type = type_of_this_parm (type);
7575   /* The `this' parameter is implicitly `const'; it cannot be
7576      assigned to.  */
7577   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7578   qual_type = cp_build_qualified_type (this_type, this_quals);
7579   parm = build_artificial_parm (this_identifier, qual_type);
7580   cp_apply_type_quals_to_decl (this_quals, parm);
7581   return parm;
7582 }
7583
7584 /* DECL is a static member function.  Complain if it was declared
7585    with function-cv-quals.  */
7586
7587 static void
7588 check_static_quals (tree decl, cp_cv_quals quals)
7589 {
7590   if (quals != TYPE_UNQUALIFIED)
7591     error ("static member function %q#D declared with type qualifiers",
7592            decl);
7593 }
7594
7595 /* Helper function.  Replace the temporary this parameter injected
7596    during cp_finish_omp_declare_simd with the real this parameter.  */
7597
7598 static tree
7599 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7600 {
7601   tree this_parm = (tree) data;
7602   if (TREE_CODE (*tp) == PARM_DECL
7603       && DECL_NAME (*tp) == this_identifier
7604       && *tp != this_parm)
7605     *tp = this_parm;
7606   else if (TYPE_P (*tp))
7607     *walk_subtrees = 0;
7608   return NULL_TREE;
7609 }
7610
7611 /* CTYPE is class type, or null if non-class.
7612    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7613    or METHOD_TYPE.
7614    DECLARATOR is the function's name.
7615    PARMS is a chain of PARM_DECLs for the function.
7616    VIRTUALP is truthvalue of whether the function is virtual or not.
7617    FLAGS are to be passed through to `grokclassfn'.
7618    QUALS are qualifiers indicating whether the function is `const'
7619    or `volatile'.
7620    RAISES is a list of exceptions that this function can raise.
7621    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7622    not look, and -1 if we should not call `grokclassfn' at all.
7623
7624    SFK is the kind of special function (if any) for the new function.
7625
7626    Returns `NULL_TREE' if something goes wrong, after issuing
7627    applicable error messages.  */
7628
7629 static tree
7630 grokfndecl (tree ctype,
7631             tree type,
7632             tree declarator,
7633             tree parms,
7634             tree orig_declarator,
7635             int virtualp,
7636             enum overload_flags flags,
7637             cp_cv_quals quals,
7638             cp_ref_qualifier rqual,
7639             tree raises,
7640             int check,
7641             int friendp,
7642             int publicp,
7643             int inlinep,
7644             bool deletedp,
7645             special_function_kind sfk,
7646             bool funcdef_flag,
7647             int template_count,
7648             tree in_namespace,
7649             tree* attrlist,
7650             location_t location)
7651 {
7652   tree decl;
7653   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7654   tree t;
7655
7656   if (rqual)
7657     type = build_ref_qualified_type (type, rqual);
7658   if (raises)
7659     type = build_exception_variant (type, raises);
7660
7661   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7662
7663   /* If we have an explicit location, use it, otherwise use whatever
7664      build_lang_decl used (probably input_location).  */
7665   if (location != UNKNOWN_LOCATION)
7666     DECL_SOURCE_LOCATION (decl) = location;
7667
7668   if (TREE_CODE (type) == METHOD_TYPE)
7669     {
7670       tree parm;
7671       parm = build_this_parm (type, quals);
7672       DECL_CHAIN (parm) = parms;
7673       parms = parm;
7674     }
7675   DECL_ARGUMENTS (decl) = parms;
7676   for (t = parms; t; t = DECL_CHAIN (t))
7677     DECL_CONTEXT (t) = decl;
7678   /* Propagate volatile out from type to decl.  */
7679   if (TYPE_VOLATILE (type))
7680     TREE_THIS_VOLATILE (decl) = 1;
7681
7682   /* Setup decl according to sfk.  */
7683   switch (sfk)
7684     {
7685     case sfk_constructor:
7686     case sfk_copy_constructor:
7687     case sfk_move_constructor:
7688       DECL_CONSTRUCTOR_P (decl) = 1;
7689       break;
7690     case sfk_destructor:
7691       DECL_DESTRUCTOR_P (decl) = 1;
7692       break;
7693     default:
7694       break;
7695     }
7696
7697   /* If pointers to member functions use the least significant bit to
7698      indicate whether a function is virtual, ensure a pointer
7699      to this function will have that bit clear.  */
7700   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7701       && TREE_CODE (type) == METHOD_TYPE
7702       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7703     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7704
7705   if (friendp
7706       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7707     {
7708       if (funcdef_flag)
7709         error
7710           ("defining explicit specialization %qD in friend declaration",
7711            orig_declarator);
7712       else
7713         {
7714           tree fns = TREE_OPERAND (orig_declarator, 0);
7715           tree args = TREE_OPERAND (orig_declarator, 1);
7716
7717           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7718             {
7719               /* Something like `template <class T> friend void f<T>()'.  */
7720               error ("invalid use of template-id %qD in declaration "
7721                      "of primary template",
7722                      orig_declarator);
7723               return NULL_TREE;
7724             }
7725
7726
7727           /* A friend declaration of the form friend void f<>().  Record
7728              the information in the TEMPLATE_ID_EXPR.  */
7729           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7730
7731           gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7732           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7733
7734           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7735             if (TREE_PURPOSE (t)
7736                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7737             {
7738               error ("default arguments are not allowed in declaration "
7739                      "of friend template specialization %qD",
7740                      decl);
7741               return NULL_TREE;
7742             }
7743
7744           if (inlinep & 1)
7745             error ("%<inline%> is not allowed in declaration of friend "
7746                    "template specialization %qD",
7747                    decl);
7748           if (inlinep & 2)
7749             error ("%<constexpr%> is not allowed in declaration of friend "
7750                    "template specialization %qD",
7751                    decl);
7752           if (inlinep)
7753             return NULL_TREE;
7754         }
7755     }
7756
7757   /* If this decl has namespace scope, set that up.  */
7758   if (in_namespace)
7759     set_decl_namespace (decl, in_namespace, friendp);
7760   else if (!ctype)
7761     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7762
7763   /* `main' and builtins have implicit 'C' linkage.  */
7764   if ((MAIN_NAME_P (declarator)
7765        || (IDENTIFIER_LENGTH (declarator) > 10
7766            && IDENTIFIER_POINTER (declarator)[0] == '_'
7767            && IDENTIFIER_POINTER (declarator)[1] == '_'
7768            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7769        || (targetcm.cxx_implicit_extern_c
7770            && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7771       && current_lang_name == lang_name_cplusplus
7772       && ctype == NULL_TREE
7773       && DECL_FILE_SCOPE_P (decl))
7774     SET_DECL_LANGUAGE (decl, lang_c);
7775
7776   /* Should probably propagate const out from type to decl I bet (mrs).  */
7777   if (staticp)
7778     {
7779       DECL_STATIC_FUNCTION_P (decl) = 1;
7780       DECL_CONTEXT (decl) = ctype;
7781     }
7782
7783   if (deletedp)
7784     DECL_DELETED_FN (decl) = 1;
7785
7786   if (ctype)
7787     {
7788       DECL_CONTEXT (decl) = ctype;
7789       if (funcdef_flag)
7790         check_class_member_definition_namespace (decl);
7791     }
7792
7793   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7794     {
7795       if (PROCESSING_REAL_TEMPLATE_DECL_P())
7796         error ("cannot declare %<::main%> to be a template");
7797       if (inlinep & 1)
7798         error ("cannot declare %<::main%> to be inline");
7799       if (inlinep & 2)
7800         error ("cannot declare %<::main%> to be constexpr");
7801       if (!publicp)
7802         error ("cannot declare %<::main%> to be static");
7803       inlinep = 0;
7804       publicp = 1;
7805     }
7806
7807   /* Members of anonymous types and local classes have no linkage; make
7808      them internal.  If a typedef is made later, this will be changed.  */
7809   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7810                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7811     publicp = 0;
7812
7813   if (publicp && cxx_dialect == cxx98)
7814     {
7815       /* [basic.link]: A name with no linkage (notably, the name of a class
7816          or enumeration declared in a local scope) shall not be used to
7817          declare an entity with linkage.
7818
7819          DR 757 relaxes this restriction for C++0x.  */
7820       no_linkage_error (decl);
7821     }
7822
7823   TREE_PUBLIC (decl) = publicp;
7824   if (! publicp)
7825     {
7826       DECL_INTERFACE_KNOWN (decl) = 1;
7827       DECL_NOT_REALLY_EXTERN (decl) = 1;
7828     }
7829
7830   /* If the declaration was declared inline, mark it as such.  */
7831   if (inlinep)
7832     {
7833       DECL_DECLARED_INLINE_P (decl) = 1;
7834       if (publicp)
7835         DECL_COMDAT (decl) = 1;
7836     }
7837   if (inlinep & 2)
7838     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7839
7840   DECL_EXTERNAL (decl) = 1;
7841   if (TREE_CODE (type) == FUNCTION_TYPE)
7842     {
7843       if (quals)
7844         {
7845           error (ctype
7846                  ? G_("static member function %qD cannot have cv-qualifier")
7847                  : G_("non-member function %qD cannot have cv-qualifier"),
7848                  decl);
7849           quals = TYPE_UNQUALIFIED;
7850         }
7851
7852       if (rqual)
7853         {
7854           error (ctype
7855                  ? G_("static member function %qD cannot have ref-qualifier")
7856                  : G_("non-member function %qD cannot have ref-qualifier"),
7857                  decl);
7858           rqual = REF_QUAL_NONE;
7859         }
7860     }
7861
7862   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7863       && !grok_op_properties (decl, /*complain=*/true))
7864     return NULL_TREE;
7865   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7866     {
7867       bool long_long_unsigned_p;
7868       bool long_double_p;
7869       const char *suffix = NULL;
7870       /* [over.literal]/6: Literal operators shall not have C linkage. */
7871       if (DECL_LANGUAGE (decl) == lang_c)
7872         {
7873           error ("literal operator with C linkage");
7874           return NULL_TREE;
7875         }
7876
7877       if (DECL_NAMESPACE_SCOPE_P (decl))
7878         {
7879           if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7880                                             &long_double_p))
7881             {
7882               error ("%qD has invalid argument list", decl);
7883               return NULL_TREE;
7884             }
7885
7886           suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7887           if (long_long_unsigned_p)
7888             {
7889               if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7890                 warning (0, "integer suffix %<%s%>"
7891                             " shadowed by implementation", suffix);
7892             }
7893           else if (long_double_p)
7894             {
7895               if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7896                 warning (0, "floating point suffix %<%s%>"
7897                             " shadowed by implementation", suffix);
7898             }
7899         }
7900       else
7901         {
7902           error ("%qD must be a non-member function", decl);
7903           return NULL_TREE;
7904         }
7905     }
7906
7907   if (funcdef_flag)
7908     /* Make the init_value nonzero so pushdecl knows this is not
7909        tentative.  error_mark_node is replaced later with the BLOCK.  */
7910     DECL_INITIAL (decl) = error_mark_node;
7911
7912   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7913     TREE_NOTHROW (decl) = 1;
7914
7915   if (flag_openmp || flag_openmp_simd || flag_cilkplus)
7916     {
7917       /* Adjust "omp declare simd" attributes.  */
7918       tree ods = lookup_attribute ("omp declare simd", *attrlist);
7919       if (ods)
7920         {
7921           tree attr;
7922           for (attr = ods; attr;
7923                attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7924             {
7925               if (TREE_CODE (type) == METHOD_TYPE)
7926                 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7927                            DECL_ARGUMENTS (decl), NULL);
7928               if (TREE_VALUE (attr) != NULL_TREE)
7929                 {
7930                   tree cl = TREE_VALUE (TREE_VALUE (attr));
7931                   cl = c_omp_declare_simd_clauses_to_numbers
7932                                                 (DECL_ARGUMENTS (decl), cl);
7933                   if (cl)
7934                     TREE_VALUE (TREE_VALUE (attr)) = cl;
7935                   else
7936                     TREE_VALUE (attr) = NULL_TREE;
7937                 }
7938             }
7939         }
7940     }
7941
7942   /* Caller will do the rest of this.  */
7943   if (check < 0)
7944     return decl;
7945
7946   if (ctype != NULL_TREE)
7947     grokclassfn (ctype, decl, flags);
7948
7949   /* 12.4/3  */
7950   if (cxx_dialect >= cxx11
7951       && DECL_DESTRUCTOR_P (decl)
7952       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7953       && !processing_template_decl)
7954     deduce_noexcept_on_destructor (decl);
7955
7956   decl = check_explicit_specialization (orig_declarator, decl,
7957                                         template_count,
7958                                         2 * funcdef_flag +
7959                                         4 * (friendp != 0));
7960   if (decl == error_mark_node)
7961     return NULL_TREE;
7962
7963   if (DECL_STATIC_FUNCTION_P (decl))
7964     check_static_quals (decl, quals);
7965
7966   if (attrlist)
7967     {
7968       cplus_decl_attributes (&decl, *attrlist, 0);
7969       *attrlist = NULL_TREE;
7970     }
7971
7972   /* Check main's type after attributes have been applied.  */
7973   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7974     {
7975       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7976                         integer_type_node))
7977         {
7978           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7979           tree newtype;
7980           error ("%<::main%> must return %<int%>");
7981           newtype = build_function_type (integer_type_node, oldtypeargs);
7982           TREE_TYPE (decl) = newtype;
7983         }
7984       if (warn_main)
7985         check_main_parameter_types (decl);
7986     }
7987
7988   if (ctype != NULL_TREE
7989       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7990       && check)
7991     {
7992       tree old_decl = check_classfn (ctype, decl,
7993                                      (processing_template_decl
7994                                       > template_class_depth (ctype))
7995                                      ? current_template_parms
7996                                      : NULL_TREE);
7997
7998       if (old_decl == error_mark_node)
7999         return NULL_TREE;
8000
8001       if (old_decl)
8002         {
8003           tree ok;
8004           tree pushed_scope;
8005
8006           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8007             /* Because grokfndecl is always supposed to return a
8008                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8009                here.  We depend on our callers to figure out that its
8010                really a template that's being returned.  */
8011             old_decl = DECL_TEMPLATE_RESULT (old_decl);
8012
8013           if (DECL_STATIC_FUNCTION_P (old_decl)
8014               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8015             {
8016               /* Remove the `this' parm added by grokclassfn.  */
8017               revert_static_member_fn (decl);
8018               check_static_quals (decl, quals);
8019             }
8020           if (DECL_ARTIFICIAL (old_decl))
8021             {
8022               error ("definition of implicitly-declared %qD", old_decl);
8023               return NULL_TREE;
8024             }
8025           else if (DECL_DEFAULTED_FN (old_decl))
8026             {
8027               error ("definition of explicitly-defaulted %q+D", decl);
8028               error ("%q+#D explicitly defaulted here", old_decl);
8029               return NULL_TREE;
8030             }
8031
8032           /* Since we've smashed OLD_DECL to its
8033              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8034           if (TREE_CODE (decl) == TEMPLATE_DECL)
8035             decl = DECL_TEMPLATE_RESULT (decl);
8036
8037           /* Attempt to merge the declarations.  This can fail, in
8038              the case of some invalid specialization declarations.  */
8039           pushed_scope = push_scope (ctype);
8040           ok = duplicate_decls (decl, old_decl, friendp);
8041           if (pushed_scope)
8042             pop_scope (pushed_scope);
8043           if (!ok)
8044             {
8045               error ("no %q#D member function declared in class %qT",
8046                      decl, ctype);
8047               return NULL_TREE;
8048             }
8049           if (ok == error_mark_node)
8050             return NULL_TREE;
8051           return old_decl;
8052         }
8053     }
8054
8055   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8056     return NULL_TREE;
8057
8058   if (ctype == NULL_TREE || check)
8059     return decl;
8060
8061   if (virtualp)
8062     DECL_VIRTUAL_P (decl) = 1;
8063
8064   return decl;
8065 }
8066
8067 /* decl is a FUNCTION_DECL.
8068    specifiers are the parsed virt-specifiers.
8069
8070    Set flags to reflect the virt-specifiers.
8071
8072    Returns decl.  */
8073
8074 static tree
8075 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8076 {
8077   if (decl == NULL_TREE)
8078     return decl;
8079   if (specifiers & VIRT_SPEC_OVERRIDE)
8080     DECL_OVERRIDE_P (decl) = 1;
8081   if (specifiers & VIRT_SPEC_FINAL)
8082     DECL_FINAL_P (decl) = 1;
8083   return decl;
8084 }
8085
8086 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
8087    the linkage that DECL will receive in the object file.  */
8088
8089 static void
8090 set_linkage_for_static_data_member (tree decl)
8091 {
8092   /* A static data member always has static storage duration and
8093      external linkage.  Note that static data members are forbidden in
8094      local classes -- the only situation in which a class has
8095      non-external linkage.  */
8096   TREE_PUBLIC (decl) = 1;
8097   TREE_STATIC (decl) = 1;
8098   /* For non-template classes, static data members are always put
8099      out in exactly those files where they are defined, just as
8100      with ordinary namespace-scope variables.  */
8101   if (!processing_template_decl)
8102     DECL_INTERFACE_KNOWN (decl) = 1;
8103 }
8104
8105 /* Create a VAR_DECL named NAME with the indicated TYPE.
8106
8107    If SCOPE is non-NULL, it is the class type or namespace containing
8108    the variable.  If SCOPE is NULL, the variable should is created in
8109    the innermost enclosing scope.  */
8110
8111 static tree
8112 grokvardecl (tree type,
8113              tree name,
8114              tree orig_declarator,
8115              const cp_decl_specifier_seq *declspecs,
8116              int initialized,
8117              int constp,
8118              int template_count,
8119              tree scope)
8120 {
8121   tree decl;
8122   tree explicit_scope;
8123
8124   gcc_assert (!name || identifier_p (name));
8125
8126   /* Compute the scope in which to place the variable, but remember
8127      whether or not that scope was explicitly specified by the user.   */
8128   explicit_scope = scope;
8129   if (!scope)
8130     {
8131       /* An explicit "extern" specifier indicates a namespace-scope
8132          variable.  */
8133       if (declspecs->storage_class == sc_extern)
8134         scope = current_decl_namespace ();
8135       else if (!at_function_scope_p ())
8136         scope = current_scope ();
8137     }
8138
8139   if (scope
8140       && (/* If the variable is a namespace-scope variable declared in a
8141              template, we need DECL_LANG_SPECIFIC.  */
8142           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8143           /* Similarly for namespace-scope variables with language linkage
8144              other than C++.  */
8145           || (TREE_CODE (scope) == NAMESPACE_DECL
8146               && current_lang_name != lang_name_cplusplus)
8147           /* Similarly for static data members.  */
8148           || TYPE_P (scope)
8149           /* Similarly for explicit specializations.  */
8150           || (orig_declarator
8151               && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8152     decl = build_lang_decl (VAR_DECL, name, type);
8153   else
8154     decl = build_decl (input_location, VAR_DECL, name, type);
8155
8156   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8157     set_decl_namespace (decl, explicit_scope, 0);
8158   else
8159     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
8160
8161   if (declspecs->storage_class == sc_extern)
8162     {
8163       DECL_THIS_EXTERN (decl) = 1;
8164       DECL_EXTERNAL (decl) = !initialized;
8165     }
8166
8167   if (DECL_CLASS_SCOPE_P (decl))
8168     {
8169       set_linkage_for_static_data_member (decl);
8170       /* This function is only called with out-of-class definitions.  */
8171       DECL_EXTERNAL (decl) = 0;
8172       check_class_member_definition_namespace (decl);
8173     }
8174   /* At top level, either `static' or no s.c. makes a definition
8175      (perhaps tentative), and absence of `static' makes it public.  */
8176   else if (toplevel_bindings_p ())
8177     {
8178       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8179                             && (DECL_THIS_EXTERN (decl) || ! constp));
8180       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8181     }
8182   /* Not at top level, only `static' makes a static definition.  */
8183   else
8184     {
8185       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8186       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8187     }
8188
8189   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8190     {
8191       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8192         set_decl_tls_model (decl, decl_default_tls_model (decl));
8193       if (declspecs->gnu_thread_keyword_p)
8194         DECL_GNU_TLS_P (decl) = true;
8195     }
8196
8197   /* If the type of the decl has no linkage, make sure that we'll
8198      notice that in mark_used.  */
8199   if (cxx_dialect > cxx98
8200       && decl_linkage (decl) != lk_none
8201       && DECL_LANG_SPECIFIC (decl) == NULL
8202       && !DECL_EXTERN_C_P (decl)
8203       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8204     retrofit_lang_decl (decl);
8205
8206   if (TREE_PUBLIC (decl))
8207     {
8208       /* [basic.link]: A name with no linkage (notably, the name of a class
8209          or enumeration declared in a local scope) shall not be used to
8210          declare an entity with linkage.
8211
8212          DR 757 relaxes this restriction for C++0x.  */
8213       if (cxx_dialect < cxx11)
8214         no_linkage_error (decl);
8215     }
8216   else
8217     DECL_INTERFACE_KNOWN (decl) = 1;
8218
8219   // Handle explicit specializations and instantiations of variable templates.
8220   if (orig_declarator
8221       /* For GCC 5 fix 65646 this way.  */
8222       && current_tmpl_spec_kind (template_count) != tsk_none)
8223     decl = check_explicit_specialization (orig_declarator, decl,
8224                                           template_count, 0);
8225
8226   return decl != error_mark_node ? decl : NULL_TREE;
8227 }
8228
8229 /* Create and return a canonical pointer to member function type, for
8230    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8231
8232 tree
8233 build_ptrmemfunc_type (tree type)
8234 {
8235   tree field, fields;
8236   tree t;
8237
8238   if (type == error_mark_node)
8239     return type;
8240
8241   /* Make sure that we always have the unqualified pointer-to-member
8242      type first.  */
8243   if (cp_cv_quals quals = cp_type_quals (type))
8244     {
8245       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8246       return cp_build_qualified_type (unqual, quals);
8247     }
8248
8249   /* If a canonical type already exists for this type, use it.  We use
8250      this method instead of type_hash_canon, because it only does a
8251      simple equality check on the list of field members.  */
8252
8253   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8254     return t;
8255
8256   t = make_node (RECORD_TYPE);
8257
8258   /* Let the front end know this is a pointer to member function.  */
8259   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8260
8261   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8262   fields = field;
8263
8264   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
8265                       delta_type_node);
8266   DECL_CHAIN (field) = fields;
8267   fields = field;
8268
8269   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8270
8271   /* Zap out the name so that the back end will give us the debugging
8272      information for this anonymous RECORD_TYPE.  */
8273   TYPE_NAME (t) = NULL_TREE;
8274
8275   /* Cache this pointer-to-member type so that we can find it again
8276      later.  */
8277   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8278
8279   if (TYPE_STRUCTURAL_EQUALITY_P (type))
8280     SET_TYPE_STRUCTURAL_EQUALITY (t);
8281   else if (TYPE_CANONICAL (type) != type)
8282     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8283
8284   return t;
8285 }
8286
8287 /* Create and return a pointer to data member type.  */
8288
8289 tree
8290 build_ptrmem_type (tree class_type, tree member_type)
8291 {
8292   if (TREE_CODE (member_type) == METHOD_TYPE)
8293     {
8294       cp_cv_quals quals = type_memfn_quals (member_type);
8295       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8296       member_type = build_memfn_type (member_type, class_type, quals, rqual);
8297       return build_ptrmemfunc_type (build_pointer_type (member_type));
8298     }
8299   else
8300     {
8301       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8302       return build_offset_type (class_type, member_type);
8303     }
8304 }
8305
8306 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8307    Check to see that the definition is valid.  Issue appropriate error
8308    messages.  Return 1 if the definition is particularly bad, or 0
8309    otherwise.  */
8310
8311 static int
8312 check_static_variable_definition (tree decl, tree type)
8313 {
8314   /* Can't check yet if we don't know the type.  */
8315   if (dependent_type_p (type))
8316     return 0;
8317   /* If DECL is declared constexpr, we'll do the appropriate checks
8318      in check_initializer.  */
8319   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8320     return 0;
8321   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8322     {
8323       if (!COMPLETE_TYPE_P (type))
8324         error ("in-class initialization of static data member %q#D of "
8325                "incomplete type", decl);
8326       else if (literal_type_p (type))
8327         permerror (input_location,
8328                    "%<constexpr%> needed for in-class initialization of "
8329                    "static data member %q#D of non-integral type", decl);
8330       else
8331         error ("in-class initialization of static data member %q#D of "
8332                "non-literal type", decl);
8333       return 1;
8334     }
8335
8336   /* Motion 10 at San Diego: If a static const integral data member is
8337      initialized with an integral constant expression, the initializer
8338      may appear either in the declaration (within the class), or in
8339      the definition, but not both.  If it appears in the class, the
8340      member is a member constant.  The file-scope definition is always
8341      required.  */
8342   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8343     {
8344       error ("invalid in-class initialization of static data member "
8345              "of non-integral type %qT",
8346              type);
8347       return 1;
8348     }
8349   else if (!CP_TYPE_CONST_P (type))
8350     error ("ISO C++ forbids in-class initialization of non-const "
8351            "static member %qD",
8352            decl);
8353   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8354     pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8355              "%qD of non-integral type %qT", decl, type);
8356
8357   return 0;
8358 }
8359
8360 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
8361    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8362    expressions out into temporary variables so that walk_tree doesn't
8363    step into them (c++/15764).  */
8364
8365 static tree
8366 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8367 {
8368   hash_set<tree> *pset = (hash_set<tree> *)data;
8369   tree expr = *expr_p;
8370   if (TREE_CODE (expr) == SAVE_EXPR)
8371     {
8372       tree op = TREE_OPERAND (expr, 0);
8373       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8374       if (TREE_SIDE_EFFECTS (op))
8375         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8376       *walk_subtrees = 0;
8377     }
8378   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8379     *walk_subtrees = 0;
8380   return NULL;
8381 }
8382
8383 /* Entry point for the above.  */
8384
8385 static void
8386 stabilize_vla_size (tree size)
8387 {
8388   hash_set<tree> pset;
8389   /* Break out any function calls into temporary variables.  */
8390   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
8391 }
8392
8393 /* Helper function for compute_array_index_type.  Look for SIZEOF_EXPR
8394    not inside of SAVE_EXPR and fold them.  */
8395
8396 static tree
8397 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8398 {
8399   tree expr = *expr_p;
8400   if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8401     *walk_subtrees = 0;
8402   else if (TREE_CODE (expr) == SIZEOF_EXPR)
8403     {
8404       *(bool *)data = true;
8405       if (SIZEOF_EXPR_TYPE_P (expr))
8406         expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8407                                            SIZEOF_EXPR, false);
8408       else if (TYPE_P (TREE_OPERAND (expr, 0)))
8409         expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8410                                            false);
8411       else
8412         expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8413                                            false);
8414       if (expr == error_mark_node)
8415         expr = size_one_node;
8416       *expr_p = expr;
8417       *walk_subtrees = 0;
8418     }
8419   return NULL;
8420 }
8421
8422 /* Given the SIZE (i.e., number of elements) in an array, compute an
8423    appropriate index type for the array.  If non-NULL, NAME is the
8424    name of the thing being declared.  */
8425
8426 tree
8427 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8428 {
8429   tree itype;
8430   tree osize = size;
8431
8432   if (error_operand_p (size))
8433     return error_mark_node;
8434
8435   if (!type_dependent_expression_p (size))
8436     {
8437       tree type = TREE_TYPE (size);
8438
8439       mark_rvalue_use (size);
8440
8441       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8442           && TREE_SIDE_EFFECTS (size))
8443         /* In C++98, we mark a non-constant array bound with a magic
8444            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
8445       else
8446         {
8447           size = instantiate_non_dependent_expr_sfinae (size, complain);
8448
8449           if (CLASS_TYPE_P (type)
8450               && CLASSTYPE_LITERAL_P (type))
8451             {
8452               size = build_expr_type_conversion (WANT_INT, size, true);
8453               if (!size)
8454                 {
8455                   if (!(complain & tf_error))
8456                     return error_mark_node;
8457                   if (name)
8458                     error ("size of array %qD has non-integral type %qT",
8459                            name, type);
8460                   else
8461                     error ("size of array has non-integral type %qT", type);
8462                   size = integer_one_node;
8463                 }
8464               if (size == error_mark_node)
8465                 return error_mark_node;
8466               type = TREE_TYPE (size);
8467             }
8468
8469           if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8470             size = maybe_constant_value (size);
8471
8472           if (!TREE_CONSTANT (size))
8473             size = osize;
8474         }
8475
8476       if (error_operand_p (size))
8477         return error_mark_node;
8478
8479       /* The array bound must be an integer type.  */
8480       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8481         {
8482           if (!(complain & tf_error))
8483             return error_mark_node;
8484           if (name)
8485             error ("size of array %qD has non-integral type %qT", name, type);
8486           else
8487             error ("size of array has non-integral type %qT", type);
8488           size = integer_one_node;
8489           type = TREE_TYPE (size);
8490         }
8491     }
8492
8493   /* A type is dependent if it is...an array type constructed from any
8494      dependent type or whose size is specified by a constant expression
8495      that is value-dependent.  */
8496   /* We can only call value_dependent_expression_p on integral constant
8497      expressions; treat non-constant expressions as dependent, too.  */
8498   if (processing_template_decl
8499       && (type_dependent_expression_p (size)
8500           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8501     {
8502       /* We cannot do any checking for a SIZE that isn't known to be
8503          constant. Just build the index type and mark that it requires
8504          structural equality checks.  */
8505       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8506                                            size, size_one_node));
8507       TYPE_DEPENDENT_P (itype) = 1;
8508       TYPE_DEPENDENT_P_VALID (itype) = 1;
8509       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8510       return itype;
8511     }
8512   
8513   /* Normally, the array-bound will be a constant.  */
8514   if (TREE_CODE (size) == INTEGER_CST)
8515     {
8516       /* Check to see if the array bound overflowed.  Make that an
8517          error, no matter how generous we're being.  */
8518       constant_expression_error (size);
8519
8520       /* An array must have a positive number of elements.  */
8521       if (tree_int_cst_lt (size, integer_zero_node))
8522         {
8523           if (!(complain & tf_error))
8524             return error_mark_node;
8525           if (name)
8526             error ("size of array %qD is negative", name);
8527           else
8528             error ("size of array is negative");
8529           size = integer_one_node;
8530         }
8531       /* As an extension we allow zero-sized arrays.  */
8532       else if (integer_zerop (size))
8533         {
8534           if (!(complain & tf_error))
8535             /* We must fail if performing argument deduction (as
8536                indicated by the state of complain), so that
8537                another substitution can be found.  */
8538             return error_mark_node;
8539           else if (in_system_header_at (input_location))
8540             /* Allow them in system headers because glibc uses them.  */;
8541           else if (name)
8542             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8543           else
8544             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8545         }
8546     }
8547   else if (TREE_CONSTANT (size)
8548            /* We don't allow VLAs at non-function scopes, or during
8549               tentative template substitution.  */
8550            || !at_function_scope_p ()
8551            || !(complain & tf_error))
8552     {
8553       if (!(complain & tf_error))
8554         return error_mark_node;
8555       /* `(int) &fn' is not a valid array bound.  */
8556       if (name)
8557         error ("size of array %qD is not an integral constant-expression",
8558                name);
8559       else
8560         error ("size of array is not an integral constant-expression");
8561       size = integer_one_node;
8562     }
8563   else if (pedantic && warn_vla != 0)
8564     {
8565       if (name)
8566         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8567       else
8568         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8569     }
8570   else if (warn_vla > 0)
8571     {
8572       if (name)
8573         warning (OPT_Wvla, 
8574                  "variable length array %qD is used", name);
8575       else
8576         warning (OPT_Wvla, 
8577                  "variable length array is used");
8578     }
8579
8580   if (processing_template_decl && !TREE_CONSTANT (size))
8581     /* A variable sized array.  */
8582     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8583   else
8584     {
8585       HOST_WIDE_INT saved_processing_template_decl;
8586
8587       /* Compute the index of the largest element in the array.  It is
8588          one less than the number of elements in the array.  We save
8589          and restore PROCESSING_TEMPLATE_DECL so that computations in
8590          cp_build_binary_op will be appropriately folded.  */
8591       saved_processing_template_decl = processing_template_decl;
8592       processing_template_decl = 0;
8593       itype = cp_build_binary_op (input_location,
8594                                   MINUS_EXPR,
8595                                   cp_convert (ssizetype, size, complain),
8596                                   cp_convert (ssizetype, integer_one_node,
8597                                               complain),
8598                                   complain);
8599       itype = fold (itype);
8600       processing_template_decl = saved_processing_template_decl;
8601
8602       if (!TREE_CONSTANT (itype))
8603         {
8604           /* A variable sized array.  */
8605           itype = variable_size (itype);
8606
8607           if (TREE_CODE (itype) != SAVE_EXPR)
8608             {
8609               /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8610                  they might survive till gimplification.  */
8611               tree newitype = itype;
8612               bool found = false;
8613               cp_walk_tree_without_duplicates (&newitype,
8614                                                fold_sizeof_expr_r, &found);
8615               if (found)
8616                 itype = variable_size (fold (newitype));
8617             }
8618
8619           stabilize_vla_size (itype);
8620
8621           if (flag_sanitize & SANITIZE_VLA
8622               && do_ubsan_in_current_function ())
8623             {
8624               /* We have to add 1 -- in the ubsan routine we generate
8625                  LE_EXPR rather than LT_EXPR.  */
8626               tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8627                                     build_one_cst (TREE_TYPE (itype)));
8628               t = ubsan_instrument_vla (input_location, t);
8629               finish_expr_stmt (t);
8630             }
8631         }
8632       /* Make sure that there was no overflow when creating to a signed
8633          index type.  (For example, on a 32-bit machine, an array with
8634          size 2^32 - 1 is too big.)  */
8635       else if (TREE_CODE (itype) == INTEGER_CST
8636                && TREE_OVERFLOW (itype))
8637         {
8638           if (!(complain & tf_error))
8639             return error_mark_node;
8640           error ("overflow in array dimension");
8641           TREE_OVERFLOW (itype) = 0;
8642         }
8643     }
8644
8645   /* Create and return the appropriate index type.  */
8646   itype = build_index_type (itype);
8647
8648   /* If the index type were dependent, we would have returned early, so
8649      remember that it isn't.  */
8650   TYPE_DEPENDENT_P (itype) = 0;
8651   TYPE_DEPENDENT_P_VALID (itype) = 1;
8652   return itype;
8653 }
8654
8655 /* Returns the scope (if any) in which the entity declared by
8656    DECLARATOR will be located.  If the entity was declared with an
8657    unqualified name, NULL_TREE is returned.  */
8658
8659 tree
8660 get_scope_of_declarator (const cp_declarator *declarator)
8661 {
8662   while (declarator && declarator->kind != cdk_id)
8663     declarator = declarator->declarator;
8664
8665   /* If the declarator-id is a SCOPE_REF, the scope in which the
8666      declaration occurs is the first operand.  */
8667   if (declarator
8668       && declarator->u.id.qualifying_scope)
8669     return declarator->u.id.qualifying_scope;
8670
8671   /* Otherwise, the declarator is not a qualified name; the entity will
8672      be declared in the current scope.  */
8673   return NULL_TREE;
8674 }
8675
8676 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8677    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8678    with this type.  */
8679
8680 static tree
8681 create_array_type_for_decl (tree name, tree type, tree size)
8682 {
8683   tree itype = NULL_TREE;
8684
8685   /* If things have already gone awry, bail now.  */
8686   if (type == error_mark_node || size == error_mark_node)
8687     return error_mark_node;
8688
8689   /* 8.3.4/1: If the type of the identifier of D contains the auto
8690      type-specifier, the program is ill-formed.  */
8691   if (type_uses_auto (type))
8692     {
8693       error ("%qD declared as array of %qT", name, type);
8694       return error_mark_node;
8695     }
8696
8697   /* If there are some types which cannot be array elements,
8698      issue an error-message and return.  */
8699   switch (TREE_CODE (type))
8700     {
8701     case VOID_TYPE:
8702       if (name)
8703         error ("declaration of %qD as array of void", name);
8704       else
8705         error ("creating array of void");
8706       return error_mark_node;
8707
8708     case FUNCTION_TYPE:
8709       if (name)
8710         error ("declaration of %qD as array of functions", name);
8711       else
8712         error ("creating array of functions");
8713       return error_mark_node;
8714
8715     case REFERENCE_TYPE:
8716       if (name)
8717         error ("declaration of %qD as array of references", name);
8718       else
8719         error ("creating array of references");
8720       return error_mark_node;
8721
8722     case METHOD_TYPE:
8723       if (name)
8724         error ("declaration of %qD as array of function members", name);
8725       else
8726         error ("creating array of function members");
8727       return error_mark_node;
8728
8729     default:
8730       break;
8731     }
8732
8733   /* [dcl.array]
8734
8735      The constant expressions that specify the bounds of the arrays
8736      can be omitted only for the first member of the sequence.  */
8737   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8738     {
8739       if (name)
8740         error ("declaration of %qD as multidimensional array must "
8741                "have bounds for all dimensions except the first",
8742                name);
8743       else
8744         error ("multidimensional array must have bounds for all "
8745                "dimensions except the first");
8746
8747       return error_mark_node;
8748     }
8749
8750   /* Figure out the index type for the array.  */
8751   if (size)
8752     itype = compute_array_index_type (name, size, tf_warning_or_error);
8753
8754   /* [dcl.array]
8755      T is called the array element type; this type shall not be [...] an
8756      abstract class type.  */
8757   abstract_virtuals_error (name, type);
8758
8759   return build_cplus_array_type (type, itype);
8760 }
8761
8762 /* Check that it's OK to declare a function with the indicated TYPE.
8763    SFK indicates the kind of special function (if any) that this
8764    function is.  OPTYPE is the type given in a conversion operator
8765    declaration, or the class type for a constructor/destructor.
8766    Returns the actual return type of the function; that
8767    may be different than TYPE if an error occurs, or for certain
8768    special functions.  */
8769
8770 static tree
8771 check_special_function_return_type (special_function_kind sfk,
8772                                     tree type,
8773                                     tree optype)
8774 {
8775   switch (sfk)
8776     {
8777     case sfk_constructor:
8778       if (type)
8779         error ("return type specification for constructor invalid");
8780
8781       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8782         type = build_pointer_type (optype);
8783       else
8784         type = void_type_node;
8785       break;
8786
8787     case sfk_destructor:
8788       if (type)
8789         error ("return type specification for destructor invalid");
8790       /* We can't use the proper return type here because we run into
8791          problems with ambiguous bases and covariant returns.
8792          Java classes are left unchanged because (void *) isn't a valid
8793          Java type, and we don't want to change the Java ABI.  */
8794       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8795         type = build_pointer_type (void_type_node);
8796       else
8797         type = void_type_node;
8798       break;
8799
8800     case sfk_conversion:
8801       if (type)
8802         error ("return type specified for %<operator %T%>",  optype);
8803       type = optype;
8804       break;
8805
8806     default:
8807       gcc_unreachable ();
8808     }
8809
8810   return type;
8811 }
8812
8813 /* A variable or data member (whose unqualified name is IDENTIFIER)
8814    has been declared with the indicated TYPE.  If the TYPE is not
8815    acceptable, issue an error message and return a type to use for
8816    error-recovery purposes.  */
8817
8818 tree
8819 check_var_type (tree identifier, tree type)
8820 {
8821   if (VOID_TYPE_P (type))
8822     {
8823       if (!identifier)
8824         error ("unnamed variable or field declared void");
8825       else if (identifier_p (identifier))
8826         {
8827           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8828           error ("variable or field %qE declared void", identifier);
8829         }
8830       else
8831         error ("variable or field declared void");
8832       type = error_mark_node;
8833     }
8834
8835   return type;
8836 }
8837
8838 /* Given declspecs and a declarator (abstract or otherwise), determine
8839    the name and type of the object declared and construct a DECL node
8840    for it.
8841
8842    DECLSPECS points to the representation of declaration-specifier
8843    sequence that precedes declarator.
8844
8845    DECL_CONTEXT says which syntactic context this declaration is in:
8846      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8847      FUNCDEF for a function definition.  Like NORMAL but a few different
8848       error messages in each case.  Return value may be zero meaning
8849       this definition is too screwy to try to parse.
8850      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8851       handle member functions (which have FIELD context).
8852       Return value may be zero meaning this definition is too screwy to
8853       try to parse.
8854      PARM for a parameter declaration (either within a function prototype
8855       or before a function body).  Make a PARM_DECL, or return void_type_node.
8856      TPARM for a template parameter declaration.
8857      CATCHPARM for a parameter declaration before a catch clause.
8858      TYPENAME if for a typename (in a cast or sizeof).
8859       Don't make a DECL node; just return the ..._TYPE node.
8860      FIELD for a struct or union field; make a FIELD_DECL.
8861      BITFIELD for a field with specified width.
8862
8863    INITIALIZED is as for start_decl.
8864
8865    ATTRLIST is a pointer to the list of attributes, which may be NULL
8866    if there are none; *ATTRLIST may be modified if attributes from inside
8867    the declarator should be applied to the declaration.
8868
8869    When this function is called, scoping variables (such as
8870    CURRENT_CLASS_TYPE) should reflect the scope in which the
8871    declaration occurs, not the scope in which the new declaration will
8872    be placed.  For example, on:
8873
8874      void S::f() { ... }
8875
8876    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8877    should not be `S'.
8878
8879    Returns a DECL (if a declarator is present), a TYPE (if there is no
8880    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8881    error occurs. */
8882
8883 tree
8884 grokdeclarator (const cp_declarator *declarator,
8885                 cp_decl_specifier_seq *declspecs,
8886                 enum decl_context decl_context,
8887                 int initialized,
8888                 tree* attrlist)
8889 {
8890   tree type = NULL_TREE;
8891   int longlong = 0;
8892   int explicit_intN = 0;
8893   int virtualp, explicitp, friendp, inlinep, staticp;
8894   int explicit_int = 0;
8895   int explicit_char = 0;
8896   int defaulted_int = 0;
8897
8898   tree typedef_decl = NULL_TREE;
8899   const char *name = NULL;
8900   tree typedef_type = NULL_TREE;
8901   /* True if this declarator is a function definition.  */
8902   bool funcdef_flag = false;
8903   cp_declarator_kind innermost_code = cdk_error;
8904   int bitfield = 0;
8905 #if 0
8906   /* See the code below that used this.  */
8907   tree decl_attr = NULL_TREE;
8908 #endif
8909
8910   /* Keep track of what sort of function is being processed
8911      so that we can warn about default return values, or explicit
8912      return values which do not match prescribed defaults.  */
8913   special_function_kind sfk = sfk_none;
8914
8915   tree dname = NULL_TREE;
8916   tree ctor_return_type = NULL_TREE;
8917   enum overload_flags flags = NO_SPECIAL;
8918   /* cv-qualifiers that apply to the declarator, for a declaration of
8919      a member function.  */
8920   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8921   /* virt-specifiers that apply to the declarator, for a declaration of
8922      a member function.  */
8923   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8924   /* ref-qualifier that applies to the declarator, for a declaration of
8925      a member function.  */
8926   cp_ref_qualifier rqual = REF_QUAL_NONE;
8927   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8928   int type_quals;
8929   tree raises = NULL_TREE;
8930   int template_count = 0;
8931   tree returned_attrs = NULL_TREE;
8932   tree parms = NULL_TREE;
8933   const cp_declarator *id_declarator;
8934   /* The unqualified name of the declarator; either an
8935      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8936   tree unqualified_id;
8937   /* The class type, if any, in which this entity is located,
8938      or NULL_TREE if none.  Note that this value may be different from
8939      the current class type; for example if an attempt is made to declare
8940      "A::f" inside "B", this value will be "A".  */
8941   tree ctype = current_class_type;
8942   /* The NAMESPACE_DECL for the namespace in which this entity is
8943      located.  If an unqualified name is used to declare the entity,
8944      this value will be NULL_TREE, even if the entity is located at
8945      namespace scope.  */
8946   tree in_namespace = NULL_TREE;
8947   cp_storage_class storage_class;
8948   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8949   bool type_was_error_mark_node = false;
8950   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8951   bool template_type_arg = false;
8952   bool template_parm_flag = false;
8953   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8954   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8955   bool late_return_type_p = false;
8956   bool array_parameter_p = false;
8957   source_location saved_loc = input_location;
8958   const char *errmsg;
8959
8960   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8961   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8962   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8963   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8964   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8965   explicit_intN = declspecs->explicit_intN_p;
8966   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8967
8968   if (decl_context == FUNCDEF)
8969     funcdef_flag = true, decl_context = NORMAL;
8970   else if (decl_context == MEMFUNCDEF)
8971     funcdef_flag = true, decl_context = FIELD;
8972   else if (decl_context == BITFIELD)
8973     bitfield = 1, decl_context = FIELD;
8974   else if (decl_context == TEMPLATE_TYPE_ARG)
8975     template_type_arg = true, decl_context = TYPENAME;
8976   else if (decl_context == TPARM)
8977     template_parm_flag = true, decl_context = PARM;
8978
8979   if (initialized > 1)
8980     funcdef_flag = true;
8981
8982   /* Look inside a declarator for the name being declared
8983      and get it as a string, for an error message.  */
8984   for (id_declarator = declarator;
8985        id_declarator;
8986        id_declarator = id_declarator->declarator)
8987     {
8988       if (id_declarator->kind != cdk_id)
8989         innermost_code = id_declarator->kind;
8990
8991       switch (id_declarator->kind)
8992         {
8993         case cdk_function:
8994           if (id_declarator->declarator
8995               && id_declarator->declarator->kind == cdk_id)
8996             {
8997               sfk = id_declarator->declarator->u.id.sfk;
8998               if (sfk == sfk_destructor)
8999                 flags = DTOR_FLAG;
9000             }
9001           break;
9002
9003         case cdk_id:
9004           {
9005             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
9006             tree decl = id_declarator->u.id.unqualified_name;
9007             if (!decl)
9008               break;
9009             if (qualifying_scope)
9010               {
9011                 if (at_function_scope_p ())
9012                   {
9013                     /* [dcl.meaning] 
9014
9015                        A declarator-id shall not be qualified except
9016                        for ... 
9017
9018                        None of the cases are permitted in block
9019                        scope.  */
9020                     if (qualifying_scope == global_namespace)
9021                       error ("invalid use of qualified-name %<::%D%>",
9022                              decl);
9023                     else if (TYPE_P (qualifying_scope))
9024                       error ("invalid use of qualified-name %<%T::%D%>",
9025                              qualifying_scope, decl);
9026                     else 
9027                       error ("invalid use of qualified-name %<%D::%D%>",
9028                              qualifying_scope, decl);
9029                     return error_mark_node;
9030                   }
9031                 else if (TYPE_P (qualifying_scope))
9032                   {
9033                     ctype = qualifying_scope;
9034                     if (!MAYBE_CLASS_TYPE_P (ctype))
9035                       {
9036                         error ("%q#T is not a class or a namespace", ctype);
9037                         ctype = NULL_TREE;
9038                       }
9039                     else if (innermost_code != cdk_function
9040                              && current_class_type
9041                              && !uniquely_derived_from_p (ctype,
9042                                                           current_class_type))
9043                       {
9044                         error ("invalid use of qualified-name %<%T::%D%>",
9045                                qualifying_scope, decl);
9046                         return error_mark_node;
9047                       }
9048                   }
9049                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
9050                   in_namespace = qualifying_scope;
9051               }
9052             switch (TREE_CODE (decl))
9053               {
9054               case BIT_NOT_EXPR:
9055                 {
9056                   tree type;
9057
9058                   if (innermost_code != cdk_function)
9059                     {
9060                       error ("declaration of %qD as non-function", decl);
9061                       return error_mark_node;
9062                     }
9063                   else if (!qualifying_scope
9064                            && !(current_class_type && at_class_scope_p ()))
9065                     {
9066                       error ("declaration of %qD as non-member", decl);
9067                       return error_mark_node;
9068                     }
9069
9070                   type = TREE_OPERAND (decl, 0);
9071                   if (TYPE_P (type))
9072                     type = constructor_name (type);
9073                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
9074                   dname = decl;
9075                 }
9076                 break;
9077
9078               case TEMPLATE_ID_EXPR:
9079                 {
9080                   tree fns = TREE_OPERAND (decl, 0);
9081
9082                   dname = fns;
9083                   if (!identifier_p (dname))
9084                     {
9085                       if (variable_template_p (dname))
9086                         dname = DECL_NAME (dname);
9087                       else
9088                         {
9089                           gcc_assert (is_overloaded_fn (dname));
9090                           dname = DECL_NAME (get_first_fn (dname));
9091                         }
9092                     }
9093                 }
9094                 /* Fall through.  */
9095
9096               case IDENTIFIER_NODE:
9097                 if (identifier_p (decl))
9098                   dname = decl;
9099
9100                 if (C_IS_RESERVED_WORD (dname))
9101                   {
9102                     error ("declarator-id missing; using reserved word %qD",
9103                            dname);
9104                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9105                   }
9106                 else if (!IDENTIFIER_TYPENAME_P (dname))
9107                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9108                 else
9109                   {
9110                     gcc_assert (flags == NO_SPECIAL);
9111                     flags = TYPENAME_FLAG;
9112                     ctor_return_type = TREE_TYPE (dname);
9113                     sfk = sfk_conversion;
9114                     if (is_typename_at_global_scope (dname))
9115                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9116                     else
9117                       name = "<invalid operator>";
9118                   }
9119                 break;
9120
9121               default:
9122                 gcc_unreachable ();
9123               }
9124             break;
9125           }
9126
9127         case cdk_array:
9128         case cdk_pointer:
9129         case cdk_reference:
9130         case cdk_ptrmem:
9131           break;
9132
9133         case cdk_error:
9134           return error_mark_node;
9135
9136         default:
9137           gcc_unreachable ();
9138         }
9139       if (id_declarator->kind == cdk_id)
9140         break;
9141     }
9142
9143   /* [dcl.fct.edf]
9144
9145      The declarator in a function-definition shall have the form
9146      D1 ( parameter-declaration-clause) ...  */
9147   if (funcdef_flag && innermost_code != cdk_function)
9148     {
9149       error ("function definition does not declare parameters");
9150       return error_mark_node;
9151     }
9152
9153   if (flags == TYPENAME_FLAG
9154       && innermost_code != cdk_function
9155       && ! (ctype && !declspecs->any_specifiers_p))
9156     {
9157       error ("declaration of %qD as non-function", dname);
9158       return error_mark_node;
9159     }
9160
9161   if (dname
9162       && identifier_p (dname)
9163       && UDLIT_OPER_P (dname)
9164       && innermost_code != cdk_function)
9165     {
9166       error ("declaration of %qD as non-function", dname);
9167       return error_mark_node;
9168     }
9169
9170   if (dname && IDENTIFIER_OPNAME_P (dname))
9171     {
9172       if (typedef_p)
9173         {
9174           error ("declaration of %qD as %<typedef%>", dname);
9175           return error_mark_node;
9176         }
9177       else if (decl_context == PARM || decl_context == CATCHPARM)
9178         {
9179           error ("declaration of %qD as parameter", dname);
9180           return error_mark_node;
9181         }
9182     }
9183
9184   /* Anything declared one level down from the top level
9185      must be one of the parameters of a function
9186      (because the body is at least two levels down).  */
9187
9188   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9189      by not allowing C++ class definitions to specify their parameters
9190      with xdecls (must be spec.d in the parmlist).
9191
9192      Since we now wait to push a class scope until we are sure that
9193      we are in a legitimate method context, we must set oldcname
9194      explicitly (since current_class_name is not yet alive).
9195
9196      We also want to avoid calling this a PARM if it is in a namespace.  */
9197
9198   if (decl_context == NORMAL && !toplevel_bindings_p ())
9199     {
9200       cp_binding_level *b = current_binding_level;
9201       current_binding_level = b->level_chain;
9202       if (current_binding_level != 0 && toplevel_bindings_p ())
9203         decl_context = PARM;
9204       current_binding_level = b;
9205     }
9206
9207   if (name == NULL)
9208     name = decl_context == PARM ? "parameter" : "type name";
9209
9210   if (constexpr_p && typedef_p)
9211     {
9212       error ("%<constexpr%> cannot appear in a typedef declaration");
9213       return error_mark_node;
9214     }
9215
9216   /* If there were multiple types specified in the decl-specifier-seq,
9217      issue an error message.  */
9218   if (declspecs->multiple_types_p)
9219     {
9220       error ("two or more data types in declaration of %qs", name);
9221       return error_mark_node;
9222     }
9223
9224   if (declspecs->conflicting_specifiers_p)
9225     {
9226       error ("conflicting specifiers in declaration of %qs", name);
9227       return error_mark_node;
9228     }
9229
9230   /* Extract the basic type from the decl-specifier-seq.  */
9231   type = declspecs->type;
9232   if (type == error_mark_node)
9233     {
9234       type = NULL_TREE;
9235       type_was_error_mark_node = true;
9236     }
9237   /* If the entire declaration is itself tagged as deprecated then
9238      suppress reports of deprecated items.  */
9239   if (type && TREE_DEPRECATED (type)
9240       && deprecated_state != DEPRECATED_SUPPRESS)
9241     warn_deprecated_use (type, NULL_TREE);
9242   if (type && TREE_CODE (type) == TYPE_DECL)
9243     {
9244       typedef_decl = type;
9245       type = TREE_TYPE (typedef_decl);
9246       if (TREE_DEPRECATED (type)
9247           && DECL_ARTIFICIAL (typedef_decl)
9248           && deprecated_state != DEPRECATED_SUPPRESS)
9249         warn_deprecated_use (type, NULL_TREE);
9250     }
9251   /* No type at all: default to `int', and set DEFAULTED_INT
9252      because it was not a user-defined typedef.  */
9253   if (type == NULL_TREE)
9254     {
9255       if (signed_p || unsigned_p || long_p || short_p)
9256         {
9257           /* These imply 'int'.  */
9258           type = integer_type_node;
9259           defaulted_int = 1;
9260         }
9261       /* If we just have "complex", it is equivalent to "complex double".  */
9262       else if (!longlong && !explicit_intN
9263                && decl_spec_seq_has_spec_p (declspecs, ds_complex))
9264         {
9265           type = double_type_node;
9266           pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
9267                    "ISO C++ does not support plain %<complex%> meaning "
9268                    "%<double complex%>");
9269         }
9270     }
9271   /* Gather flags.  */
9272   explicit_int = declspecs->explicit_int_p;
9273   explicit_char = declspecs->explicit_char_p;
9274
9275 #if 0
9276   /* See the code below that used this.  */
9277   if (typedef_decl)
9278     decl_attr = DECL_ATTRIBUTES (typedef_decl);
9279 #endif
9280   typedef_type = type;
9281
9282
9283   if (sfk != sfk_conversion)
9284     ctor_return_type = ctype;
9285
9286   if (sfk != sfk_none)
9287     type = check_special_function_return_type (sfk, type,
9288                                                ctor_return_type);
9289   else if (type == NULL_TREE)
9290     {
9291       int is_main;
9292
9293       explicit_int = -1;
9294
9295       /* We handle `main' specially here, because 'main () { }' is so
9296          common.  With no options, it is allowed.  With -Wreturn-type,
9297          it is a warning.  It is only an error with -pedantic-errors.  */
9298       is_main = (funcdef_flag
9299                  && dname && identifier_p (dname)
9300                  && MAIN_NAME_P (dname)
9301                  && ctype == NULL_TREE
9302                  && in_namespace == NULL_TREE
9303                  && current_namespace == global_namespace);
9304
9305       if (type_was_error_mark_node)
9306         /* We've already issued an error, don't complain more.  */;
9307       else if (in_system_header_at (input_location) || flag_ms_extensions)
9308         /* Allow it, sigh.  */;
9309       else if (! is_main)
9310         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9311       else if (pedantic)
9312         pedwarn (input_location, OPT_Wpedantic,
9313                  "ISO C++ forbids declaration of %qs with no type", name);
9314       else
9315         warning (OPT_Wreturn_type,
9316                  "ISO C++ forbids declaration of %qs with no type", name);
9317
9318       type = integer_type_node;
9319     }
9320
9321   ctype = NULL_TREE;
9322
9323   if (explicit_intN)
9324     {
9325       if (! int_n_enabled_p[declspecs->int_n_idx])
9326        {
9327          error ("%<__int%d%> is not supported by this target",
9328                 int_n_data[declspecs->int_n_idx].bitsize);
9329          explicit_intN = false;
9330        }
9331       else if (pedantic && ! in_system_header_at (input_location))
9332        pedwarn (input_location, OPT_Wpedantic,
9333                 "ISO C++ does not support %<__int%d%> for %qs",
9334                 int_n_data[declspecs->int_n_idx].bitsize,  name);
9335     }
9336
9337   /* Now process the modifiers that were specified
9338      and check for invalid combinations.  */
9339
9340   /* Long double is a special combination.  */
9341   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9342     {
9343       long_p = false;
9344       type = cp_build_qualified_type (long_double_type_node,
9345                                       cp_type_quals (type));
9346     }
9347
9348   /* Check all other uses of type modifiers.  */
9349
9350   if (unsigned_p || signed_p || long_p || short_p)
9351     {
9352       int ok = 0;
9353
9354       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9355         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9356       else if (signed_p && unsigned_p)
9357         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9358       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9359         error ("%<long long%> invalid for %qs", name);
9360       else if (long_p && TREE_CODE (type) == REAL_TYPE)
9361         error ("%<long%> invalid for %qs", name);
9362       else if (short_p && TREE_CODE (type) == REAL_TYPE)
9363         error ("%<short%> invalid for %qs", name);
9364       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9365         error ("%<long%> or %<short%> invalid for %qs", name);
9366       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
9367         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9368       else if ((long_p || short_p) && explicit_char)
9369         error ("%<long%> or %<short%> specified with char for %qs", name);
9370       else if (long_p && short_p)
9371         error ("%<long%> and %<short%> specified together for %qs", name);
9372       else if (type == char16_type_node || type == char32_type_node)
9373         {
9374           if (signed_p || unsigned_p)
9375             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9376           else if (short_p || long_p)
9377             error ("%<short%> or %<long%> invalid for %qs", name);
9378         }
9379       else
9380         {
9381           ok = 1;
9382           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
9383             {
9384               pedwarn (input_location, OPT_Wpedantic, 
9385                        "long, short, signed or unsigned used invalidly for %qs",
9386                        name);
9387               if (flag_pedantic_errors)
9388                 ok = 0;
9389             }
9390         }
9391
9392       /* Discard the type modifiers if they are invalid.  */
9393       if (! ok)
9394         {
9395           unsigned_p = false;
9396           signed_p = false;
9397           long_p = false;
9398           short_p = false;
9399           longlong = 0;
9400         }
9401     }
9402
9403   /* Decide whether an integer type is signed or not.
9404      Optionally treat bitfields as signed by default.  */
9405   if (unsigned_p
9406       /* [class.bit]
9407
9408          It is implementation-defined whether a plain (neither
9409          explicitly signed or unsigned) char, short, int, or long
9410          bit-field is signed or unsigned.
9411
9412          Naturally, we extend this to long long as well.  Note that
9413          this does not include wchar_t.  */
9414       || (bitfield && !flag_signed_bitfields
9415           && !signed_p
9416           /* A typedef for plain `int' without `signed' can be
9417              controlled just like plain `int', but a typedef for
9418              `signed int' cannot be so controlled.  */
9419           && !(typedef_decl
9420                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9421           && TREE_CODE (type) == INTEGER_TYPE
9422           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9423     {
9424       if (explicit_intN)
9425         type = int_n_trees[declspecs->int_n_idx].unsigned_type;
9426       else if (longlong)
9427         type = long_long_unsigned_type_node;
9428       else if (long_p)
9429         type = long_unsigned_type_node;
9430       else if (short_p)
9431         type = short_unsigned_type_node;
9432       else if (type == char_type_node)
9433         type = unsigned_char_type_node;
9434       else if (typedef_decl)
9435         type = unsigned_type_for (type);
9436       else
9437         type = unsigned_type_node;
9438     }
9439   else if (signed_p && type == char_type_node)
9440     type = signed_char_type_node;
9441   else if (explicit_intN)
9442     type = int_n_trees[declspecs->int_n_idx].signed_type;
9443   else if (longlong)
9444     type = long_long_integer_type_node;
9445   else if (long_p)
9446     type = long_integer_type_node;
9447   else if (short_p)
9448     type = short_integer_type_node;
9449
9450   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9451     {
9452       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9453         error ("complex invalid for %qs", name);
9454       /* If a modifier is specified, the resulting complex is the complex
9455          form of TYPE.  E.g, "complex short" is "complex short int".  */
9456       else if (type == integer_type_node)
9457         type = complex_integer_type_node;
9458       else if (type == float_type_node)
9459         type = complex_float_type_node;
9460       else if (type == double_type_node)
9461         type = complex_double_type_node;
9462       else if (type == long_double_type_node)
9463         type = complex_long_double_type_node;
9464       else
9465         type = build_complex_type (type);
9466     }
9467
9468   type_quals = TYPE_UNQUALIFIED;
9469   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9470     type_quals |= TYPE_QUAL_CONST;
9471   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9472     type_quals |= TYPE_QUAL_VOLATILE;
9473   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9474     type_quals |= TYPE_QUAL_RESTRICT;
9475   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9476     error ("qualifiers are not allowed on declaration of %<operator %T%>",
9477            ctor_return_type);
9478
9479   /* If we're using the injected-class-name to form a compound type or a
9480      declaration, replace it with the underlying class so we don't get
9481      redundant typedefs in the debug output.  But if we are returning the
9482      type unchanged, leave it alone so that it's available to
9483      maybe_get_template_decl_from_type_decl.  */
9484   if (CLASS_TYPE_P (type)
9485       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9486       && type == TREE_TYPE (TYPE_NAME (type))
9487       && (declarator || type_quals))
9488     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9489
9490   type_quals |= cp_type_quals (type);
9491   type = cp_build_qualified_type_real
9492     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
9493                           || declspecs->decltype_p)
9494                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9495   /* We might have ignored or rejected some of the qualifiers.  */
9496   type_quals = cp_type_quals (type);
9497
9498   staticp = 0;
9499   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9500   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9501   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9502
9503   storage_class = declspecs->storage_class;
9504   if (storage_class == sc_static)
9505     staticp = 1 + (decl_context == FIELD);
9506
9507   if (virtualp && staticp == 2)
9508     {
9509       error ("member %qD cannot be declared both virtual and static", dname);
9510       storage_class = sc_none;
9511       staticp = 0;
9512     }
9513   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9514
9515   /* Issue errors about use of storage classes for parameters.  */
9516   if (decl_context == PARM)
9517     {
9518       if (typedef_p)
9519         {
9520           error ("typedef declaration invalid in parameter declaration");
9521           return error_mark_node;
9522         }
9523       else if (template_parm_flag && storage_class != sc_none)
9524         {
9525           error ("storage class specified for template parameter %qs", name);
9526           return error_mark_node;
9527         }
9528       else if (storage_class == sc_static
9529                || storage_class == sc_extern
9530                || thread_p)
9531         error ("storage class specifiers invalid in parameter declarations");
9532
9533       /* Function parameters cannot be constexpr.  If we saw one, moan
9534          and pretend it wasn't there.  */
9535       if (constexpr_p)
9536         {
9537           error ("a parameter cannot be declared %<constexpr%>");
9538           constexpr_p = 0;
9539         }
9540     }
9541
9542   /* Give error if `virtual' is used outside of class declaration.  */
9543   if (virtualp
9544       && (current_class_name == NULL_TREE || decl_context != FIELD))
9545     {
9546       error ("%<virtual%> outside class declaration");
9547       virtualp = 0;
9548     }
9549
9550   /* Static anonymous unions are dealt with here.  */
9551   if (staticp && decl_context == TYPENAME
9552       && declspecs->type
9553       && ANON_AGGR_TYPE_P (declspecs->type))
9554     decl_context = FIELD;
9555
9556   /* Warn about storage classes that are invalid for certain
9557      kinds of declarations (parameters, typenames, etc.).  */
9558   if (thread_p
9559       && ((storage_class
9560            && storage_class != sc_extern
9561            && storage_class != sc_static)
9562           || typedef_p))
9563     {
9564       error ("multiple storage classes in declaration of %qs", name);
9565       thread_p = false;
9566     }
9567   if (decl_context != NORMAL
9568       && ((storage_class != sc_none
9569            && storage_class != sc_mutable)
9570           || thread_p))
9571     {
9572       if ((decl_context == PARM || decl_context == CATCHPARM)
9573           && (storage_class == sc_register
9574               || storage_class == sc_auto))
9575         ;
9576       else if (typedef_p)
9577         ;
9578       else if (decl_context == FIELD
9579                /* C++ allows static class elements.  */
9580                && storage_class == sc_static)
9581         /* C++ also allows inlines and signed and unsigned elements,
9582            but in those cases we don't come in here.  */
9583         ;
9584       else
9585         {
9586           if (decl_context == FIELD)
9587             error ("storage class specified for %qs", name);
9588           else
9589             {
9590               if (decl_context == PARM || decl_context == CATCHPARM)
9591                 error ("storage class specified for parameter %qs", name);
9592               else
9593                 error ("storage class specified for typename");
9594             }
9595           if (storage_class == sc_register
9596               || storage_class == sc_auto
9597               || storage_class == sc_extern
9598               || thread_p)
9599             storage_class = sc_none;
9600         }
9601     }
9602   else if (storage_class == sc_extern && funcdef_flag
9603            && ! toplevel_bindings_p ())
9604     error ("nested function %qs declared %<extern%>", name);
9605   else if (toplevel_bindings_p ())
9606     {
9607       if (storage_class == sc_auto)
9608         error ("top-level declaration of %qs specifies %<auto%>", name);
9609     }
9610   else if (thread_p
9611            && storage_class != sc_extern
9612            && storage_class != sc_static)
9613     {
9614       if (declspecs->gnu_thread_keyword_p)
9615         pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9616                  "declared %<__thread%>", name);
9617
9618       /* When thread_local is applied to a variable of block scope the
9619          storage-class-specifier static is implied if it does not appear
9620          explicitly.  */
9621       storage_class = declspecs->storage_class = sc_static;
9622       staticp = 1;
9623     }
9624
9625   if (storage_class && friendp)
9626     {
9627       error ("storage class specifiers invalid in friend function declarations");
9628       storage_class = sc_none;
9629       staticp = 0;
9630     }
9631
9632   if (!id_declarator)
9633     unqualified_id = NULL_TREE;
9634   else
9635     {
9636       unqualified_id = id_declarator->u.id.unqualified_name;
9637       switch (TREE_CODE (unqualified_id))
9638         {
9639         case BIT_NOT_EXPR:
9640           unqualified_id = TREE_OPERAND (unqualified_id, 0);
9641           if (TYPE_P (unqualified_id))
9642             unqualified_id = constructor_name (unqualified_id);
9643           break;
9644
9645         case IDENTIFIER_NODE:
9646         case TEMPLATE_ID_EXPR:
9647           break;
9648
9649         default:
9650           gcc_unreachable ();
9651         }
9652     }
9653
9654   if (declspecs->std_attributes)
9655     {
9656       /* Apply the c++11 attributes to the type preceding them.  */
9657       input_location = declspecs->locations[ds_std_attribute];
9658       decl_attributes (&type, declspecs->std_attributes, 0);
9659       input_location = saved_loc;
9660     }
9661
9662   /* Determine the type of the entity declared by recurring on the
9663      declarator.  */
9664   for (; declarator; declarator = declarator->declarator)
9665     {
9666       const cp_declarator *inner_declarator;
9667       tree attrs;
9668
9669       if (type == error_mark_node)
9670         return error_mark_node;
9671
9672       attrs = declarator->attributes;
9673       if (attrs)
9674         {
9675           int attr_flags;
9676
9677           attr_flags = 0;
9678           if (declarator == NULL || declarator->kind == cdk_id)
9679             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9680           if (declarator->kind == cdk_function)
9681             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9682           if (declarator->kind == cdk_array)
9683             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9684           returned_attrs = decl_attributes (&type,
9685                                             chainon (returned_attrs, attrs),
9686                                             attr_flags);
9687         }
9688
9689       if (declarator->kind == cdk_id)
9690         break;
9691
9692       inner_declarator = declarator->declarator;
9693
9694       switch (declarator->kind)
9695         {
9696         case cdk_array:
9697           type = create_array_type_for_decl (dname, type,
9698                                              declarator->u.array.bounds);
9699           if (declarator->std_attributes)
9700             /* [dcl.array]/1:
9701
9702                The optional attribute-specifier-seq appertains to the
9703                array.  */
9704             returned_attrs = chainon (returned_attrs,
9705                                       declarator->std_attributes);
9706           break;
9707
9708         case cdk_function:
9709           {
9710             tree arg_types;
9711             int funcdecl_p;
9712
9713             /* Declaring a function type.
9714                Make sure we have a valid type for the function to return.  */
9715
9716             if (type_quals != TYPE_UNQUALIFIED)
9717               {
9718                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9719                   warning (OPT_Wignored_qualifiers,
9720                            "type qualifiers ignored on function return type");
9721                 /* We now know that the TYPE_QUALS don't apply to the
9722                    decl, but to its return type.  */
9723                 type_quals = TYPE_UNQUALIFIED;
9724               }
9725             errmsg = targetm.invalid_return_type (type);
9726             if (errmsg)
9727               {
9728                 error (errmsg);
9729                 type = integer_type_node;
9730               }
9731
9732             /* Error about some types functions can't return.  */
9733
9734             if (TREE_CODE (type) == FUNCTION_TYPE)
9735               {
9736                 error ("%qs declared as function returning a function", name);
9737                 return error_mark_node;
9738               }
9739             if (TREE_CODE (type) == ARRAY_TYPE)
9740               {
9741                 error ("%qs declared as function returning an array", name);
9742                 return error_mark_node;
9743               }
9744
9745             input_location = declspecs->locations[ds_type_spec];
9746             abstract_virtuals_error (ACU_RETURN, type);
9747             input_location = saved_loc;
9748
9749             /* Pick up type qualifiers which should be applied to `this'.  */
9750             memfn_quals = declarator->u.function.qualifiers;
9751             /* Pick up virt-specifiers.  */
9752             virt_specifiers = declarator->u.function.virt_specifiers;
9753             /* And ref-qualifier, too */
9754             rqual = declarator->u.function.ref_qualifier;
9755             /* Pick up the exception specifications.  */
9756             raises = declarator->u.function.exception_specification;
9757             /* If the exception-specification is ill-formed, let's pretend
9758                there wasn't one.  */
9759             if (raises == error_mark_node)
9760               raises = NULL_TREE;
9761
9762             /* Say it's a definition only for the CALL_EXPR
9763                closest to the identifier.  */
9764             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9765
9766             /* Handle a late-specified return type.  */
9767             if (funcdecl_p)
9768               {
9769                 if (type_uses_auto (type))
9770                   {
9771                     if (!declarator->u.function.late_return_type)
9772                       {
9773                         if (current_class_type
9774                             && LAMBDA_TYPE_P (current_class_type))
9775                           /* OK for C++11 lambdas.  */;
9776                         else if (cxx_dialect < cxx14)
9777                           {
9778                             error ("%qs function uses "
9779                                    "%<auto%> type specifier without trailing "
9780                                    "return type", name);
9781                             inform (input_location, "deduced return type "
9782                                     "only available with -std=c++14 or "
9783                                     "-std=gnu++14");
9784                           }
9785                         else if (virtualp)
9786                           {
9787                             error ("virtual function cannot "
9788                                    "have deduced return type");
9789                             virtualp = false;
9790                           }
9791                       }
9792                     else if (!is_auto (type))
9793                       {
9794                         error ("%qs function with trailing return type has"
9795                                " %qT as its type rather than plain %<auto%>",
9796                                name, type);
9797                         return error_mark_node;
9798                       }
9799                   }
9800                 else if (declarator->u.function.late_return_type)
9801                   {
9802                     if (cxx_dialect < cxx11)
9803                       /* Not using maybe_warn_cpp0x because this should
9804                          always be an error.  */
9805                       error ("trailing return type only available with "
9806                              "-std=c++11 or -std=gnu++11");
9807                     else
9808                       error ("%qs function with trailing return type not "
9809                              "declared with %<auto%> type specifier", name);
9810                     return error_mark_node;
9811                   }
9812               }
9813             type = splice_late_return_type
9814               (type, declarator->u.function.late_return_type);
9815             if (type == error_mark_node)
9816               return error_mark_node;
9817
9818             if (declarator->u.function.late_return_type)
9819               late_return_type_p = true;
9820
9821             if (ctype == NULL_TREE
9822                 && decl_context == FIELD
9823                 && funcdecl_p
9824                 && friendp == 0)
9825               ctype = current_class_type;
9826
9827             if (ctype && (sfk == sfk_constructor
9828                           || sfk == sfk_destructor))
9829               {
9830                 /* We are within a class's scope. If our declarator name
9831                    is the same as the class name, and we are defining
9832                    a function, then it is a constructor/destructor, and
9833                    therefore returns a void type.  */
9834
9835                 /* ISO C++ 12.4/2.  A destructor may not be declared
9836                    const or volatile.  A destructor may not be static.
9837                    A destructor may not be declared with ref-qualifier.
9838
9839                    ISO C++ 12.1.  A constructor may not be declared
9840                    const or volatile.  A constructor may not be
9841                    virtual.  A constructor may not be static.
9842                    A constructor may not be declared with ref-qualifier. */
9843                 if (staticp == 2)
9844                   error ((flags == DTOR_FLAG)
9845                          ? G_("destructor cannot be static member function")
9846                          : G_("constructor cannot be static member function"));
9847                 if (memfn_quals)
9848                   {
9849                     error ((flags == DTOR_FLAG)
9850                            ? G_("destructors may not be cv-qualified")
9851                            : G_("constructors may not be cv-qualified"));
9852                     memfn_quals = TYPE_UNQUALIFIED;
9853                   }
9854
9855                 if (rqual)
9856                   {
9857                     maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9858                     error ((flags == DTOR_FLAG)
9859                            ? "destructors may not be ref-qualified"
9860                            : "constructors may not be ref-qualified");
9861                     rqual = REF_QUAL_NONE;
9862                   }
9863
9864                 if (decl_context == FIELD
9865                     && !member_function_or_else (ctype,
9866                                                  current_class_type,
9867                                                  flags))
9868                   return error_mark_node;
9869
9870                 if (flags != DTOR_FLAG)
9871                   {
9872                     /* It's a constructor.  */
9873                     if (explicitp == 1)
9874                       explicitp = 2;
9875                     if (virtualp)
9876                       {
9877                         permerror (input_location, "constructors cannot be declared virtual");
9878                         virtualp = 0;
9879                       }
9880                     if (decl_context == FIELD
9881                         && sfk != sfk_constructor)
9882                       return error_mark_node;
9883                   }
9884                 if (decl_context == FIELD)
9885                   staticp = 0;
9886               }
9887             else if (friendp)
9888               {
9889                 if (virtualp)
9890                   {
9891                     /* Cannot be both friend and virtual.  */
9892                     error ("virtual functions cannot be friends");
9893                     friendp = 0;
9894                   }
9895                 if (decl_context == NORMAL)
9896                   error ("friend declaration not in class definition");
9897                 if (current_function_decl && funcdef_flag)
9898                   error ("can%'t define friend function %qs in a local "
9899                          "class definition",
9900                          name);
9901               }
9902             else if (ctype && sfk == sfk_conversion)
9903               {
9904                 if (explicitp == 1)
9905                   {
9906                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9907                     explicitp = 2;
9908                   }
9909               }
9910
9911             arg_types = grokparms (declarator->u.function.parameters,
9912                                    &parms);
9913
9914             if (inner_declarator
9915                 && inner_declarator->kind == cdk_id
9916                 && inner_declarator->u.id.sfk == sfk_destructor
9917                 && arg_types != void_list_node)
9918               {
9919                 error ("destructors may not have parameters");
9920                 arg_types = void_list_node;
9921                 parms = NULL_TREE;
9922               }
9923
9924             type = build_function_type (type, arg_types);
9925             if (declarator->std_attributes)
9926               /* [dcl.fct]/2:
9927
9928                  The optional attribute-specifier-seq appertains to
9929                  the function type.  */
9930               decl_attributes (&type, declarator->std_attributes,
9931                                0);
9932           }
9933           break;
9934
9935         case cdk_pointer:
9936         case cdk_reference:
9937         case cdk_ptrmem:
9938           /* Filter out pointers-to-references and references-to-references.
9939              We can get these if a TYPE_DECL is used.  */
9940
9941           if (TREE_CODE (type) == REFERENCE_TYPE)
9942             {
9943               if (declarator->kind != cdk_reference)
9944                 {
9945                   error ("cannot declare pointer to %q#T", type);
9946                   type = TREE_TYPE (type);
9947                 }
9948
9949               /* In C++0x, we allow reference to reference declarations
9950                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9951                  and template type arguments [14.3.1/4 temp.arg.type]. The
9952                  check for direct reference to reference declarations, which
9953                  are still forbidden, occurs below. Reasoning behind the change
9954                  can be found in DR106, DR540, and the rvalue reference
9955                  proposals. */
9956               else if (cxx_dialect == cxx98)
9957                 {
9958                   error ("cannot declare reference to %q#T", type);
9959                   type = TREE_TYPE (type);
9960                 }
9961             }
9962           else if (VOID_TYPE_P (type))
9963             {
9964               if (declarator->kind == cdk_reference)
9965                 error ("cannot declare reference to %q#T", type);
9966               else if (declarator->kind == cdk_ptrmem)
9967                 error ("cannot declare pointer to %q#T member", type);
9968             }
9969
9970           /* We now know that the TYPE_QUALS don't apply to the decl,
9971              but to the target of the pointer.  */
9972           type_quals = TYPE_UNQUALIFIED;
9973
9974           /* This code used to handle METHOD_TYPE, but I don't think it's
9975              possible to get it here anymore.  */
9976           gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9977           if (declarator->kind == cdk_ptrmem
9978               && TREE_CODE (type) == FUNCTION_TYPE)
9979             {
9980               memfn_quals |= type_memfn_quals (type);
9981               type = build_memfn_type (type,
9982                                        declarator->u.pointer.class_type,
9983                                        memfn_quals,
9984                                        rqual);
9985               if (type == error_mark_node)
9986                 return error_mark_node;
9987
9988               rqual = REF_QUAL_NONE;
9989               memfn_quals = TYPE_UNQUALIFIED;
9990             }
9991
9992           if (TREE_CODE (type) == FUNCTION_TYPE
9993               && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9994                   || type_memfn_rqual (type) != REF_QUAL_NONE))
9995             error (declarator->kind == cdk_reference
9996                    ? G_("cannot declare reference to qualified function type %qT")
9997                    : G_("cannot declare pointer to qualified function type %qT"),
9998                    type);
9999
10000           /* When the pointed-to type involves components of variable size,
10001              care must be taken to ensure that the size evaluation code is
10002              emitted early enough to dominate all the possible later uses
10003              and late enough for the variables on which it depends to have
10004              been assigned.
10005
10006              This is expected to happen automatically when the pointed-to
10007              type has a name/declaration of it's own, but special attention
10008              is required if the type is anonymous.
10009
10010              We handle the NORMAL and FIELD contexts here by inserting a
10011              dummy statement that just evaluates the size at a safe point
10012              and ensures it is not deferred until e.g. within a deeper
10013              conditional context (c++/43555).
10014
10015              We expect nothing to be needed here for PARM or TYPENAME.
10016              Evaluating the size at this point for TYPENAME would
10017              actually be incorrect, as we might be in the middle of an
10018              expression with side effects on the pointed-to type size
10019              "arguments" prior to the pointer declaration point and the
10020              size evaluation could end up prior to the side effects.  */
10021
10022           if (!TYPE_NAME (type)
10023               && (decl_context == NORMAL || decl_context == FIELD)
10024               && at_function_scope_p ()
10025               && variably_modified_type_p (type, NULL_TREE))
10026             /* Force evaluation of the SAVE_EXPR.  */
10027             finish_expr_stmt (TYPE_SIZE (type));
10028
10029           if (declarator->kind == cdk_reference)
10030             {
10031               /* In C++0x, the type we are creating a reference to might be
10032                  a typedef which is itself a reference type. In that case,
10033                  we follow the reference collapsing rules in
10034                  [7.1.3/8 dcl.typedef] to create the final reference type:
10035
10036                  "If a typedef TD names a type that is a reference to a type
10037                  T, an attempt to create the type 'lvalue reference to cv TD'
10038                  creates the type 'lvalue reference to T,' while an attempt
10039                  to create the type "rvalue reference to cv TD' creates the
10040                  type TD."
10041               */
10042               if (VOID_TYPE_P (type))
10043                 /* We already gave an error.  */;
10044               else if (TREE_CODE (type) == REFERENCE_TYPE)
10045                 {
10046                   if (declarator->u.reference.rvalue_ref)
10047                     /* Leave type alone.  */;
10048                   else
10049                     type = cp_build_reference_type (TREE_TYPE (type), false);
10050                 }
10051               else
10052                 type = cp_build_reference_type
10053                   (type, declarator->u.reference.rvalue_ref);
10054
10055               /* In C++0x, we need this check for direct reference to
10056                  reference declarations, which are forbidden by
10057                  [8.3.2/5 dcl.ref]. Reference to reference declarations
10058                  are only allowed indirectly through typedefs and template
10059                  type arguments. Example:
10060
10061                    void foo(int & &);      // invalid ref-to-ref decl
10062
10063                    typedef int & int_ref;
10064                    void foo(int_ref &);    // valid ref-to-ref decl
10065               */
10066               if (inner_declarator && inner_declarator->kind == cdk_reference)
10067                 error ("cannot declare reference to %q#T, which is not "
10068                        "a typedef or a template type argument", type);
10069             }
10070           else if (TREE_CODE (type) == METHOD_TYPE)
10071             type = build_ptrmemfunc_type (build_pointer_type (type));
10072           else if (declarator->kind == cdk_ptrmem)
10073             {
10074               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
10075                           != NAMESPACE_DECL);
10076               if (declarator->u.pointer.class_type == error_mark_node)
10077                 /* We will already have complained.  */
10078                 type = error_mark_node;
10079               else
10080                 type = build_ptrmem_type (declarator->u.pointer.class_type,
10081                                           type);
10082             }
10083           else
10084             type = build_pointer_type (type);
10085
10086           /* Process a list of type modifier keywords (such as
10087              const or volatile) that were given inside the `*' or `&'.  */
10088
10089           if (declarator->u.pointer.qualifiers)
10090             {
10091               type
10092                 = cp_build_qualified_type (type,
10093                                            declarator->u.pointer.qualifiers);
10094               type_quals = cp_type_quals (type);
10095             }
10096
10097           /* Apply C++11 attributes to the pointer, and not to the
10098              type pointed to.  This is unlike what is done for GNU
10099              attributes above.  It is to comply with [dcl.ptr]/1:
10100
10101                  [the optional attribute-specifier-seq (7.6.1) appertains
10102                   to the pointer and not to the object pointed to].  */
10103           if (declarator->std_attributes)
10104             decl_attributes (&type, declarator->std_attributes,
10105                              0);
10106
10107           ctype = NULL_TREE;
10108           break;
10109
10110         case cdk_error:
10111           break;
10112
10113         default:
10114           gcc_unreachable ();
10115         }
10116     }
10117
10118   /* A `constexpr' specifier used in an object declaration declares
10119      the object as `const'.  */
10120   if (constexpr_p && innermost_code != cdk_function)
10121     {
10122       /* DR1688 says that a `constexpr' specifier in combination with
10123          `volatile' is valid.  */
10124
10125       if (TREE_CODE (type) != REFERENCE_TYPE)
10126         {
10127           type_quals |= TYPE_QUAL_CONST;
10128           type = cp_build_qualified_type (type, type_quals);
10129         }
10130     }
10131
10132   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10133       && TREE_CODE (type) != FUNCTION_TYPE
10134       && TREE_CODE (type) != METHOD_TYPE
10135       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
10136     {
10137       error ("template-id %qD used as a declarator",
10138              unqualified_id);
10139       unqualified_id = dname;
10140     }
10141
10142   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10143      qualified with a class-name, turn it into a METHOD_TYPE, unless
10144      we know that the function is static.  We take advantage of this
10145      opportunity to do other processing that pertains to entities
10146      explicitly declared to be class members.  Note that if DECLARATOR
10147      is non-NULL, we know it is a cdk_id declarator; otherwise, we
10148      would not have exited the loop above.  */
10149   if (declarator
10150       && declarator->u.id.qualifying_scope
10151       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10152     {
10153       ctype = declarator->u.id.qualifying_scope;
10154       ctype = TYPE_MAIN_VARIANT (ctype);
10155       template_count = num_template_headers_for_class (ctype);
10156
10157       if (ctype == current_class_type)
10158         {
10159           if (friendp)
10160             {
10161               permerror (input_location, "member functions are implicitly friends of their class");
10162               friendp = 0;
10163             }
10164           else
10165             permerror (declarator->id_loc, 
10166                           "extra qualification %<%T::%> on member %qs",
10167                           ctype, name);
10168         }
10169       else if (/* If the qualifying type is already complete, then we
10170                   can skip the following checks.  */
10171                !COMPLETE_TYPE_P (ctype)
10172                && (/* If the function is being defined, then
10173                       qualifying type must certainly be complete.  */
10174                    funcdef_flag
10175                    /* A friend declaration of "T::f" is OK, even if
10176                       "T" is a template parameter.  But, if this
10177                       function is not a friend, the qualifying type
10178                       must be a class.  */
10179                    || (!friendp && !CLASS_TYPE_P (ctype))
10180                    /* For a declaration, the type need not be
10181                       complete, if either it is dependent (since there
10182                       is no meaningful definition of complete in that
10183                       case) or the qualifying class is currently being
10184                       defined.  */
10185                    || !(dependent_type_p (ctype)
10186                         || currently_open_class (ctype)))
10187                /* Check that the qualifying type is complete.  */
10188                && !complete_type_or_else (ctype, NULL_TREE))
10189         return error_mark_node;
10190       else if (TREE_CODE (type) == FUNCTION_TYPE)
10191         {
10192           if (current_class_type
10193               && (!friendp || funcdef_flag))
10194             {
10195               error (funcdef_flag
10196                      ? G_("cannot define member function %<%T::%s%> "
10197                           "within %<%T%>")
10198                      : G_("cannot declare member function %<%T::%s%> "
10199                           "within %<%T%>"),
10200                      ctype, name, current_class_type);
10201               return error_mark_node;
10202             }
10203         }
10204       else if (typedef_p && current_class_type)
10205         {
10206           error ("cannot declare member %<%T::%s%> within %qT",
10207                  ctype, name, current_class_type);
10208           return error_mark_node;
10209         }
10210     }
10211
10212   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10213     ctype = current_class_type;
10214
10215   /* Now TYPE has the actual type.  */
10216
10217   if (returned_attrs)
10218     {
10219       if (attrlist)
10220         *attrlist = chainon (returned_attrs, *attrlist);
10221       else
10222         attrlist = &returned_attrs;
10223     }
10224
10225   if (declarator
10226       && declarator->kind == cdk_id
10227       && declarator->std_attributes)
10228     /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10229        a declarator-id appertains to the entity that is declared.  */
10230     *attrlist = chainon (*attrlist, declarator->std_attributes);
10231
10232   /* Handle parameter packs. */
10233   if (parameter_pack_p)
10234     {
10235       if (decl_context == PARM)
10236         /* Turn the type into a pack expansion.*/
10237         type = make_pack_expansion (type);
10238       else
10239         error ("non-parameter %qs cannot be a parameter pack", name);
10240     }
10241
10242   /* Did array size calculations overflow or does the array cover more
10243      than half of the address-space?  */
10244   if (TREE_CODE (type) == ARRAY_TYPE
10245       && COMPLETE_TYPE_P (type)
10246       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10247       && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10248     {
10249       error ("size of array %qs is too large", name);
10250       /* If we proceed with the array type as it is, we'll eventually
10251          crash in tree_to_[su]hwi().  */
10252       type = error_mark_node;
10253     }
10254
10255   if ((decl_context == FIELD || decl_context == PARM)
10256       && !processing_template_decl
10257       && variably_modified_type_p (type, NULL_TREE))
10258     {
10259       if (decl_context == FIELD)
10260         error ("data member may not have variably modified type %qT", type);
10261       else
10262         error ("parameter may not have variably modified type %qT", type);
10263       type = error_mark_node;
10264     }
10265
10266   if (explicitp == 1 || (explicitp && friendp))
10267     {
10268       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10269          in the declaration of a constructor or conversion function within
10270          a class definition.  */
10271       if (!current_class_type)
10272         error ("%<explicit%> outside class declaration");
10273       else if (friendp)
10274         error ("%<explicit%> in friend declaration");
10275       else
10276         error ("only declarations of constructors and conversion operators "
10277                "can be %<explicit%>");
10278       explicitp = 0;
10279     }
10280
10281   if (storage_class == sc_mutable)
10282     {
10283       if (decl_context != FIELD || friendp)
10284         {
10285           error ("non-member %qs cannot be declared %<mutable%>", name);
10286           storage_class = sc_none;
10287         }
10288       else if (decl_context == TYPENAME || typedef_p)
10289         {
10290           error ("non-object member %qs cannot be declared %<mutable%>", name);
10291           storage_class = sc_none;
10292         }
10293       else if (TREE_CODE (type) == FUNCTION_TYPE
10294                || TREE_CODE (type) == METHOD_TYPE)
10295         {
10296           error ("function %qs cannot be declared %<mutable%>", name);
10297           storage_class = sc_none;
10298         }
10299       else if (staticp)
10300         {
10301           error ("static %qs cannot be declared %<mutable%>", name);
10302           storage_class = sc_none;
10303         }
10304       else if (type_quals & TYPE_QUAL_CONST)
10305         {
10306           error ("const %qs cannot be declared %<mutable%>", name);
10307           storage_class = sc_none;
10308         }
10309       else if (TREE_CODE (type) == REFERENCE_TYPE)
10310         {
10311           permerror (input_location, "reference %qs cannot be declared "
10312                      "%<mutable%>", name);
10313           storage_class = sc_none;
10314         }
10315     }
10316
10317   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10318   if (typedef_p && decl_context != TYPENAME)
10319     {
10320       tree decl;
10321
10322       /* Note that the grammar rejects storage classes
10323          in typenames, fields or parameters.  */
10324       if (current_lang_name == lang_name_java)
10325         TYPE_FOR_JAVA (type) = 1;
10326
10327       /* This declaration:
10328
10329            typedef void f(int) const;
10330
10331          declares a function type which is not a member of any
10332          particular class, but which is cv-qualified; for
10333          example "f S::*" declares a pointer to a const-qualified
10334          member function of S.  We record the cv-qualification in the
10335          function type.  */
10336       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10337         {
10338           type = apply_memfn_quals (type, memfn_quals, rqual);
10339           
10340           /* We have now dealt with these qualifiers.  */
10341           memfn_quals = TYPE_UNQUALIFIED;
10342           rqual = REF_QUAL_NONE;
10343         }
10344
10345       if (type_uses_auto (type))
10346         {
10347           error ("typedef declared %<auto%>");
10348           type = error_mark_node;
10349         }
10350
10351       if (decl_context == FIELD)
10352         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10353       else
10354         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10355       if (id_declarator && declarator->u.id.qualifying_scope) {
10356         error_at (DECL_SOURCE_LOCATION (decl), 
10357                   "typedef name may not be a nested-name-specifier");
10358         TREE_TYPE (decl) = error_mark_node;
10359       }
10360
10361       if (decl_context != FIELD)
10362         {
10363           if (!current_function_decl)
10364             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10365           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10366                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10367                        (current_function_decl)))
10368             /* The TYPE_DECL is "abstract" because there will be
10369                clones of this constructor/destructor, and there will
10370                be copies of this TYPE_DECL generated in those
10371                clones.  The decloning optimization (for space) may
10372                revert this subsequently if it determines that
10373                the clones should share a common implementation.  */
10374             DECL_ABSTRACT_P (decl) = true;
10375         }
10376       else if (current_class_type
10377                && constructor_name_p (unqualified_id, current_class_type))
10378         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10379                    "as enclosing class",
10380                    unqualified_id);
10381
10382       /* If the user declares "typedef struct {...} foo" then the
10383          struct will have an anonymous name.  Fill that name in now.
10384          Nothing can refer to it, so nothing needs know about the name
10385          change.  */
10386       if (type != error_mark_node
10387           && unqualified_id
10388           && TYPE_NAME (type)
10389           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10390           && TYPE_ANONYMOUS_P (type)
10391           && declspecs->type_definition_p
10392           && attributes_naming_typedef_ok (*attrlist)
10393           && cp_type_quals (type) == TYPE_UNQUALIFIED)
10394         {
10395           tree t;
10396
10397           /* Replace the anonymous name with the real name everywhere.  */
10398           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10399             {
10400               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10401                 /* We do not rename the debug info representing the
10402                    anonymous tagged type because the standard says in
10403                    [dcl.typedef] that the naming applies only for
10404                    linkage purposes.  */
10405                 /*debug_hooks->set_name (t, decl);*/
10406                 TYPE_NAME (t) = decl;
10407             }
10408
10409           if (TYPE_LANG_SPECIFIC (type))
10410             TYPE_WAS_ANONYMOUS (type) = 1;
10411
10412           /* If this is a typedef within a template class, the nested
10413              type is a (non-primary) template.  The name for the
10414              template needs updating as well.  */
10415           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10416             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10417               = TYPE_IDENTIFIER (type);
10418
10419           /* Adjust linkage now that we aren't anonymous anymore.  */
10420           reset_type_linkage (type);
10421
10422           /* FIXME remangle member functions; member functions of a
10423              type with external linkage have external linkage.  */
10424         }
10425
10426       if (signed_p
10427           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10428         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10429
10430       bad_specifiers (decl, BSP_TYPE, virtualp,
10431                       memfn_quals != TYPE_UNQUALIFIED,
10432                       inlinep, friendp, raises != NULL_TREE);
10433
10434       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10435         /* Acknowledge that this was written:
10436              `using analias = atype;'.  */
10437         TYPE_DECL_ALIAS_P (decl) = 1;
10438
10439       return decl;
10440     }
10441
10442   /* Detect the case of an array type of unspecified size
10443      which came, as such, direct from a typedef name.
10444      We must copy the type, so that the array's domain can be
10445      individually set by the object's initializer.  */
10446
10447   if (type && typedef_type
10448       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10449       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10450     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10451
10452   /* Detect where we're using a typedef of function type to declare a
10453      function. PARMS will not be set, so we must create it now.  */
10454
10455   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10456     {
10457       tree decls = NULL_TREE;
10458       tree args;
10459
10460       for (args = TYPE_ARG_TYPES (type);
10461            args && args != void_list_node;
10462            args = TREE_CHAIN (args))
10463         {
10464           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10465
10466           DECL_CHAIN (decl) = decls;
10467           decls = decl;
10468         }
10469
10470       parms = nreverse (decls);
10471
10472       if (decl_context != TYPENAME)
10473         {
10474           /* The qualifiers on the function type become the qualifiers on
10475              the non-static member function. */
10476           memfn_quals |= type_memfn_quals (type);
10477           rqual = type_memfn_rqual (type);
10478           type_quals = TYPE_UNQUALIFIED;
10479         }
10480     }
10481
10482   /* If this is a type name (such as, in a cast or sizeof),
10483      compute the type and return it now.  */
10484
10485   if (decl_context == TYPENAME)
10486     {
10487       /* Note that the grammar rejects storage classes
10488          in typenames, fields or parameters.  */
10489       if (type_quals != TYPE_UNQUALIFIED)
10490         type_quals = TYPE_UNQUALIFIED;
10491
10492       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10493       if (friendp)
10494         {
10495           if (type_quals != TYPE_UNQUALIFIED)
10496             {
10497               error ("type qualifiers specified for friend class declaration");
10498               type_quals = TYPE_UNQUALIFIED;
10499             }
10500           if (inlinep)
10501             {
10502               error ("%<inline%> specified for friend class declaration");
10503               inlinep = 0;
10504             }
10505
10506           if (!current_aggr)
10507             {
10508               /* Don't allow friend declaration without a class-key.  */
10509               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10510                 permerror (input_location, "template parameters cannot be friends");
10511               else if (TREE_CODE (type) == TYPENAME_TYPE)
10512                 permerror (input_location, "friend declaration requires class-key, "
10513                            "i.e. %<friend class %T::%D%>",
10514                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10515               else
10516                 permerror (input_location, "friend declaration requires class-key, "
10517                            "i.e. %<friend %#T%>",
10518                            type);
10519             }
10520
10521           /* Only try to do this stuff if we didn't already give up.  */
10522           if (type != integer_type_node)
10523             {
10524               /* A friendly class?  */
10525               if (current_class_type)
10526                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10527                                    /*complain=*/true);
10528               else
10529                 error ("trying to make class %qT a friend of global scope",
10530                        type);
10531
10532               type = void_type_node;
10533             }
10534         }
10535       else if (memfn_quals || rqual)
10536         {
10537           if (ctype == NULL_TREE
10538               && TREE_CODE (type) == METHOD_TYPE)
10539             ctype = TYPE_METHOD_BASETYPE (type);
10540
10541           if (ctype)
10542             type = build_memfn_type (type, ctype, memfn_quals, rqual);
10543           /* Core issue #547: need to allow this in template type args.
10544              Allow it in general in C++11 for alias-declarations.  */
10545           else if ((template_type_arg || cxx_dialect >= cxx11)
10546                    && TREE_CODE (type) == FUNCTION_TYPE)
10547             type = apply_memfn_quals (type, memfn_quals, rqual);
10548           else
10549             error ("invalid qualifiers on non-member function type");
10550         }
10551
10552       return type;
10553     }
10554   else if (unqualified_id == NULL_TREE && decl_context != PARM
10555            && decl_context != CATCHPARM
10556            && TREE_CODE (type) != UNION_TYPE
10557            && ! bitfield)
10558     {
10559       error ("abstract declarator %qT used as declaration", type);
10560       return error_mark_node;
10561     }
10562
10563   /* Only functions may be declared using an operator-function-id.  */
10564   if (unqualified_id
10565       && IDENTIFIER_OPNAME_P (unqualified_id)
10566       && TREE_CODE (type) != FUNCTION_TYPE
10567       && TREE_CODE (type) != METHOD_TYPE)
10568     {
10569       error ("declaration of %qD as non-function", unqualified_id);
10570       return error_mark_node;
10571     }
10572
10573   /* We don't check parameter types here because we can emit a better
10574      error message later.  */
10575   if (decl_context != PARM)
10576     {
10577       type = check_var_type (unqualified_id, type);
10578       if (type == error_mark_node)
10579         return error_mark_node;
10580     }
10581
10582   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10583      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10584
10585   if (decl_context == PARM || decl_context == CATCHPARM)
10586     {
10587       if (ctype || in_namespace)
10588         error ("cannot use %<::%> in parameter declaration");
10589
10590       if (type_uses_auto (type))
10591         {
10592           if (cxx_dialect >= cxx14)
10593             error ("%<auto%> parameter not permitted in this context");
10594           else
10595             error ("parameter declared %<auto%>");
10596           type = error_mark_node;
10597         }
10598
10599       /* A parameter declared as an array of T is really a pointer to T.
10600          One declared as a function is really a pointer to a function.
10601          One declared as a member is really a pointer to member.  */
10602
10603       if (TREE_CODE (type) == ARRAY_TYPE)
10604         {
10605           /* Transfer const-ness of array into that of type pointed to.  */
10606           type = build_pointer_type (TREE_TYPE (type));
10607           type_quals = TYPE_UNQUALIFIED;
10608           array_parameter_p = true;
10609         }
10610       else if (TREE_CODE (type) == FUNCTION_TYPE)
10611         type = build_pointer_type (type);
10612     }
10613
10614   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10615       && !NEW_DELETE_OPNAME_P (unqualified_id))
10616     {
10617       cp_cv_quals real_quals = memfn_quals;
10618       if (cxx_dialect < cxx14 && constexpr_p
10619           && sfk != sfk_constructor && sfk != sfk_destructor)
10620         real_quals |= TYPE_QUAL_CONST;
10621       type = build_memfn_type (type, ctype, real_quals, rqual);
10622     }
10623
10624   {
10625     tree decl;
10626
10627     if (decl_context == PARM)
10628       {
10629         decl = cp_build_parm_decl (unqualified_id, type);
10630         DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
10631
10632         bad_specifiers (decl, BSP_PARM, virtualp,
10633                         memfn_quals != TYPE_UNQUALIFIED,
10634                         inlinep, friendp, raises != NULL_TREE);
10635       }
10636     else if (decl_context == FIELD)
10637       {
10638         if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE
10639             && type_uses_auto (type))
10640           {
10641             error ("non-static data member declared %<auto%>");
10642             type = error_mark_node;
10643           }
10644
10645         /* The C99 flexible array extension.  */
10646         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10647             && TYPE_DOMAIN (type) == NULL_TREE)
10648           {
10649             tree itype = compute_array_index_type (dname, integer_zero_node,
10650                                                    tf_warning_or_error);
10651             type = build_cplus_array_type (TREE_TYPE (type), itype);
10652           }
10653
10654         if (type == error_mark_node)
10655           {
10656             /* Happens when declaring arrays of sizes which
10657                are error_mark_node, for example.  */
10658             decl = NULL_TREE;
10659           }
10660         else if (in_namespace && !friendp)
10661           {
10662             /* Something like struct S { int N::j; };  */
10663             error ("invalid use of %<::%>");
10664             return error_mark_node;
10665           }
10666         else if (TREE_CODE (type) == FUNCTION_TYPE
10667                  || TREE_CODE (type) == METHOD_TYPE)
10668           {
10669             int publicp = 0;
10670             tree function_context;
10671
10672             if (friendp == 0)
10673               {
10674                 /* This should never happen in pure C++ (the check
10675                    could be an assert).  It could happen in
10676                    Objective-C++ if someone writes invalid code that
10677                    uses a function declaration for an instance
10678                    variable or property (instance variables and
10679                    properties are parsed as FIELD_DECLs, but they are
10680                    part of an Objective-C class, not a C++ class).
10681                    That code is invalid and is caught by this
10682                    check.  */
10683                 if (!ctype)
10684                   {
10685                     error ("declaration of function %qD in invalid context",
10686                            unqualified_id);
10687                     return error_mark_node;
10688                   }
10689
10690                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10691                    ARM 9.5 */
10692                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10693                   {
10694                     error ("function %qD declared virtual inside a union",
10695                            unqualified_id);
10696                     return error_mark_node;
10697                   }
10698
10699                 if (NEW_DELETE_OPNAME_P (unqualified_id))
10700                   {
10701                     if (virtualp)
10702                       {
10703                         error ("%qD cannot be declared virtual, since it "
10704                                "is always static",
10705                                unqualified_id);
10706                         virtualp = 0;
10707                       }
10708                   }
10709               }
10710
10711             /* Check that the name used for a destructor makes sense.  */
10712             if (sfk == sfk_destructor)
10713               {
10714                 tree uqname = id_declarator->u.id.unqualified_name;
10715
10716                 if (!ctype)
10717                   {
10718                     gcc_assert (friendp);
10719                     error ("expected qualified name in friend declaration "
10720                            "for destructor %qD", uqname);
10721                     return error_mark_node;
10722                   }
10723
10724                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10725                   {
10726                     error ("declaration of %qD as member of %qT",
10727                            uqname, ctype);
10728                     return error_mark_node;
10729                   }
10730                 if (constexpr_p)
10731                   {
10732                     error ("a destructor cannot be %<constexpr%>");
10733                     return error_mark_node;
10734                   }
10735               }
10736             else if (sfk == sfk_constructor && friendp && !ctype)
10737               {
10738                 error ("expected qualified name in friend declaration "
10739                        "for constructor %qD",
10740                        id_declarator->u.id.unqualified_name);
10741                 return error_mark_node;
10742               }
10743
10744             if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10745               {
10746                 tree tmpl = TREE_OPERAND (unqualified_id, 0);
10747                 if (variable_template_p (tmpl))
10748                   {
10749                     error ("specialization of variable template %qD "
10750                            "declared as function", tmpl);
10751                     inform (DECL_SOURCE_LOCATION (tmpl),
10752                             "variable template declared here");
10753                     return error_mark_node;
10754                   }
10755               }
10756
10757             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10758             function_context = (ctype != NULL_TREE) ?
10759               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10760             publicp = (! friendp || ! staticp)
10761               && function_context == NULL_TREE;
10762
10763             if (late_return_type_p)
10764               TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10765
10766             decl = grokfndecl (ctype, type,
10767                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10768                                ? unqualified_id : dname,
10769                                parms,
10770                                unqualified_id,
10771                                virtualp, flags, memfn_quals, rqual, raises,
10772                                friendp ? -1 : 0, friendp, publicp,
10773                                inlinep | (2 * constexpr_p),
10774                                initialized == SD_DELETED, sfk,
10775                                funcdef_flag, template_count, in_namespace,
10776                                attrlist, declarator->id_loc);
10777             decl = set_virt_specifiers (decl, virt_specifiers);
10778             if (decl == NULL_TREE)
10779               return error_mark_node;
10780 #if 0
10781             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10782             /* The decl and setting of decl_attr is also turned off.  */
10783             decl = build_decl_attribute_variant (decl, decl_attr);
10784 #endif
10785
10786             /* [class.conv.ctor]
10787
10788                A constructor declared without the function-specifier
10789                explicit that can be called with a single parameter
10790                specifies a conversion from the type of its first
10791                parameter to the type of its class.  Such a constructor
10792                is called a converting constructor.  */
10793             if (explicitp == 2)
10794               DECL_NONCONVERTING_P (decl) = 1;
10795           }
10796         else if (!staticp && !dependent_type_p (type)
10797                  && !COMPLETE_TYPE_P (complete_type (type))
10798                  && (TREE_CODE (type) != ARRAY_TYPE
10799                      || !COMPLETE_TYPE_P (TREE_TYPE (type))
10800                      || initialized == 0))
10801           {
10802             if (unqualified_id)
10803               {
10804                 error ("field %qD has incomplete type %qT",
10805                        unqualified_id, type);
10806                 cxx_incomplete_type_inform (strip_array_types (type));
10807               }
10808             else
10809               error ("name %qT has incomplete type", type);
10810
10811             type = error_mark_node;
10812             decl = NULL_TREE;
10813           }
10814         else
10815           {
10816             if (friendp)
10817               {
10818                 error ("%qE is neither function nor member function; "
10819                        "cannot be declared friend", unqualified_id);
10820                 friendp = 0;
10821               }
10822             decl = NULL_TREE;
10823           }
10824
10825         if (friendp)
10826           {
10827             /* Friends are treated specially.  */
10828             if (ctype == current_class_type)
10829               ;  /* We already issued a permerror.  */
10830             else if (decl && DECL_NAME (decl))
10831               {
10832                 if (template_class_depth (current_class_type) == 0)
10833                   {
10834                     decl = check_explicit_specialization
10835                       (unqualified_id, decl, template_count,
10836                        2 * funcdef_flag + 4);
10837                     if (decl == error_mark_node)
10838                       return error_mark_node;
10839                   }
10840
10841                 decl = do_friend (ctype, unqualified_id, decl,
10842                                   *attrlist, flags,
10843                                   funcdef_flag);
10844                 return decl;
10845               }
10846             else
10847               return error_mark_node;
10848           }
10849
10850         /* Structure field.  It may not be a function, except for C++.  */
10851
10852         if (decl == NULL_TREE)
10853           {
10854             if (staticp)
10855               {
10856                 /* C++ allows static class members.  All other work
10857                    for this is done by grokfield.  */
10858                 decl = build_lang_decl_loc (declarator
10859                                             ? declarator->id_loc
10860                                             : input_location,
10861                                             VAR_DECL, unqualified_id, type);
10862                 set_linkage_for_static_data_member (decl);
10863                 /* Even if there is an in-class initialization, DECL
10864                    is considered undefined until an out-of-class
10865                    definition is provided.  */
10866                 DECL_EXTERNAL (decl) = 1;
10867
10868                 if (thread_p)
10869                   {
10870                     set_decl_tls_model (decl, decl_default_tls_model (decl));
10871                     if (declspecs->gnu_thread_keyword_p)
10872                       DECL_GNU_TLS_P (decl) = true;
10873                   }
10874
10875                 if (constexpr_p && !initialized)
10876                   {
10877                     error ("constexpr static data member %qD must have an "
10878                            "initializer", decl);
10879                     constexpr_p = false;
10880                   }
10881               }
10882             else
10883               {
10884                 if (constexpr_p)
10885                   {
10886                     error ("non-static data member %qE declared %<constexpr%>",
10887                            unqualified_id);
10888                     constexpr_p = false;
10889                   }
10890                 decl = build_decl (input_location,
10891                                    FIELD_DECL, unqualified_id, type);
10892                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10893                 if (bitfield && !unqualified_id)
10894                   TREE_NO_WARNING (decl) = 1;
10895
10896                 if (storage_class == sc_mutable)
10897                   {
10898                     DECL_MUTABLE_P (decl) = 1;
10899                     storage_class = sc_none;
10900                   }
10901
10902                 if (initialized)
10903                   {
10904                     /* An attempt is being made to initialize a non-static
10905                        member.  This is new in C++11.  */
10906                     maybe_warn_cpp0x (CPP0X_NSDMI);
10907
10908                     /* If this has been parsed with static storage class, but
10909                        errors forced staticp to be cleared, ensure NSDMI is
10910                        not present.  */
10911                     if (declspecs->storage_class == sc_static)
10912                       DECL_INITIAL (decl) = error_mark_node;
10913                   }
10914               }
10915
10916             bad_specifiers (decl, BSP_FIELD, virtualp,
10917                             memfn_quals != TYPE_UNQUALIFIED,
10918                             inlinep, friendp, raises != NULL_TREE);
10919           }
10920       }
10921     else if (TREE_CODE (type) == FUNCTION_TYPE
10922              || TREE_CODE (type) == METHOD_TYPE)
10923       {
10924         tree original_name;
10925         int publicp = 0;
10926
10927         if (!unqualified_id)
10928           return error_mark_node;
10929
10930         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10931           original_name = dname;
10932         else
10933           original_name = unqualified_id;
10934
10935         if (storage_class == sc_auto)
10936           error ("storage class %<auto%> invalid for function %qs", name);
10937         else if (storage_class == sc_register)
10938           error ("storage class %<register%> invalid for function %qs", name);
10939         else if (thread_p)
10940           {
10941             if (declspecs->gnu_thread_keyword_p)
10942               error ("storage class %<__thread%> invalid for function %qs",
10943                      name);
10944             else
10945               error ("storage class %<thread_local%> invalid for function %qs",
10946                      name);
10947           }
10948
10949         if (virt_specifiers)
10950           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10951         /* Function declaration not at top level.
10952            Storage classes other than `extern' are not allowed
10953            and `extern' makes no difference.  */
10954         if (! toplevel_bindings_p ()
10955             && (storage_class == sc_static
10956                 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10957             && pedantic)
10958           {
10959             if (storage_class == sc_static)
10960               pedwarn (input_location, OPT_Wpedantic, 
10961                        "%<static%> specified invalid for function %qs "
10962                        "declared out of global scope", name);
10963             else
10964               pedwarn (input_location, OPT_Wpedantic, 
10965                        "%<inline%> specifier invalid for function %qs "
10966                        "declared out of global scope", name);
10967           }
10968
10969         if (ctype == NULL_TREE)
10970           {
10971             if (virtualp)
10972               {
10973                 error ("virtual non-class function %qs", name);
10974                 virtualp = 0;
10975               }
10976             else if (sfk == sfk_constructor
10977                      || sfk == sfk_destructor)
10978               {
10979                 error (funcdef_flag
10980                        ? G_("%qs defined in a non-class scope")
10981                        : G_("%qs declared in a non-class scope"), name);
10982                 sfk = sfk_none;
10983               }
10984           }
10985
10986         /* Record whether the function is public.  */
10987         publicp = (ctype != NULL_TREE
10988                    || storage_class != sc_static);
10989
10990         if (late_return_type_p)
10991           TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10992
10993         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10994                            virtualp, flags, memfn_quals, rqual, raises,
10995                            1, friendp,
10996                            publicp, inlinep | (2 * constexpr_p),
10997                            initialized == SD_DELETED, sfk,
10998                            funcdef_flag,
10999                            template_count, in_namespace, attrlist,
11000                            declarator->id_loc);
11001         if (decl == NULL_TREE)
11002           return error_mark_node;
11003
11004         if (staticp == 1)
11005           {
11006             int invalid_static = 0;
11007
11008             /* Don't allow a static member function in a class, and forbid
11009                declaring main to be static.  */
11010             if (TREE_CODE (type) == METHOD_TYPE)
11011               {
11012                 permerror (input_location, "cannot declare member function %qD to have "
11013                            "static linkage", decl);
11014                 invalid_static = 1;
11015               }
11016             else if (current_function_decl)
11017               {
11018                 /* FIXME need arm citation */
11019                 error ("cannot declare static function inside another function");
11020                 invalid_static = 1;
11021               }
11022
11023             if (invalid_static)
11024               {
11025                 staticp = 0;
11026                 storage_class = sc_none;
11027               }
11028           }
11029       }
11030     else
11031       {
11032         /* It's a variable.  */
11033
11034         /* An uninitialized decl with `extern' is a reference.  */
11035         decl = grokvardecl (type, dname, unqualified_id,
11036                             declspecs,
11037                             initialized,
11038                             (type_quals & TYPE_QUAL_CONST) != 0,
11039                             template_count,
11040                             ctype ? ctype : in_namespace);
11041         if (decl == NULL_TREE)
11042           return error_mark_node;
11043
11044         bad_specifiers (decl, BSP_VAR, virtualp,
11045                         memfn_quals != TYPE_UNQUALIFIED,
11046                         inlinep, friendp, raises != NULL_TREE);
11047
11048         if (ctype)
11049           {
11050             DECL_CONTEXT (decl) = ctype;
11051             if (staticp == 1)
11052               {
11053                 permerror (input_location, "%<static%> may not be used when defining "
11054                            "(as opposed to declaring) a static data member");
11055                 staticp = 0;
11056                 storage_class = sc_none;
11057               }
11058             if (storage_class == sc_register && TREE_STATIC (decl))
11059               {
11060                 error ("static member %qD declared %<register%>", decl);
11061                 storage_class = sc_none;
11062               }
11063             if (storage_class == sc_extern && pedantic)
11064               {
11065                 pedwarn (input_location, OPT_Wpedantic, 
11066                          "cannot explicitly declare member %q#D to have "
11067                          "extern linkage", decl);
11068                 storage_class = sc_none;
11069               }
11070           }
11071         else if (constexpr_p && DECL_EXTERNAL (decl))
11072           {
11073             error ("declaration of constexpr variable %qD is not a definition",
11074                    decl);
11075             constexpr_p = false;
11076           }
11077       }
11078
11079     if (storage_class == sc_extern && initialized && !funcdef_flag)
11080       {
11081         if (toplevel_bindings_p ())
11082           {
11083             /* It's common practice (and completely valid) to have a const
11084                be initialized and declared extern.  */
11085             if (!(type_quals & TYPE_QUAL_CONST))
11086               warning (0, "%qs initialized and declared %<extern%>", name);
11087           }
11088         else
11089           {
11090             error ("%qs has both %<extern%> and initializer", name);
11091             return error_mark_node;
11092           }
11093       }
11094
11095     /* Record `register' declaration for warnings on &
11096        and in case doing stupid register allocation.  */
11097
11098     if (storage_class == sc_register)
11099       DECL_REGISTER (decl) = 1;
11100     else if (storage_class == sc_extern)
11101       DECL_THIS_EXTERN (decl) = 1;
11102     else if (storage_class == sc_static)
11103       DECL_THIS_STATIC (decl) = 1;
11104
11105     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
11106     if (constexpr_p && VAR_P (decl))
11107       DECL_DECLARED_CONSTEXPR_P (decl) = true;
11108
11109     /* Record constancy and volatility on the DECL itself .  There's
11110        no need to do this when processing a template; we'll do this
11111        for the instantiated declaration based on the type of DECL.  */
11112     if (!processing_template_decl)
11113       cp_apply_type_quals_to_decl (type_quals, decl);
11114
11115     return decl;
11116   }
11117 }
11118 \f
11119 /* Subroutine of start_function.  Ensure that each of the parameter
11120    types (as listed in PARMS) is complete, as is required for a
11121    function definition.  */
11122
11123 static void
11124 require_complete_types_for_parms (tree parms)
11125 {
11126   for (; parms; parms = DECL_CHAIN (parms))
11127     {
11128       if (dependent_type_p (TREE_TYPE (parms)))
11129         continue;
11130       if (!VOID_TYPE_P (TREE_TYPE (parms))
11131           && complete_type_or_else (TREE_TYPE (parms), parms))
11132         {
11133           relayout_decl (parms);
11134           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11135         }
11136       else
11137         /* grokparms or complete_type_or_else will have already issued
11138            an error.  */
11139         TREE_TYPE (parms) = error_mark_node;
11140     }
11141 }
11142
11143 /* Returns nonzero if T is a local variable.  */
11144
11145 int
11146 local_variable_p (const_tree t)
11147 {
11148   if ((VAR_P (t)
11149        /* A VAR_DECL with a context that is a _TYPE is a static data
11150           member.  */
11151        && !TYPE_P (CP_DECL_CONTEXT (t))
11152        /* Any other non-local variable must be at namespace scope.  */
11153        && !DECL_NAMESPACE_SCOPE_P (t))
11154       || (TREE_CODE (t) == PARM_DECL))
11155     return 1;
11156
11157   return 0;
11158 }
11159
11160 /* Like local_variable_p, but suitable for use as a tree-walking
11161    function.  */
11162
11163 static tree
11164 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11165                          void * /*data*/)
11166 {
11167   if (local_variable_p (*tp)
11168       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11169     return *tp;
11170   else if (TYPE_P (*tp))
11171     *walk_subtrees = 0;
11172
11173   return NULL_TREE;
11174 }
11175
11176 /* Check that ARG, which is a default-argument expression for a
11177    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
11178    something goes wrong.  DECL may also be a _TYPE node, rather than a
11179    DECL, if there is no DECL available.  */
11180
11181 tree
11182 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11183 {
11184   tree var;
11185   tree decl_type;
11186
11187   if (TREE_CODE (arg) == DEFAULT_ARG)
11188     /* We get a DEFAULT_ARG when looking at an in-class declaration
11189        with a default argument.  Ignore the argument for now; we'll
11190        deal with it after the class is complete.  */
11191     return arg;
11192
11193   if (TYPE_P (decl))
11194     {
11195       decl_type = decl;
11196       decl = NULL_TREE;
11197     }
11198   else
11199     decl_type = TREE_TYPE (decl);
11200
11201   if (arg == error_mark_node
11202       || decl == error_mark_node
11203       || TREE_TYPE (arg) == error_mark_node
11204       || decl_type == error_mark_node)
11205     /* Something already went wrong.  There's no need to check
11206        further.  */
11207     return error_mark_node;
11208
11209   /* [dcl.fct.default]
11210
11211      A default argument expression is implicitly converted to the
11212      parameter type.  */
11213   ++cp_unevaluated_operand;
11214   perform_implicit_conversion_flags (decl_type, arg, complain,
11215                                      LOOKUP_IMPLICIT);
11216   --cp_unevaluated_operand;
11217
11218   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
11219      the call sites.  */
11220   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
11221       && null_ptr_cst_p (arg))
11222     return nullptr_node;
11223
11224   /* [dcl.fct.default]
11225
11226      Local variables shall not be used in default argument
11227      expressions.
11228
11229      The keyword `this' shall not be used in a default argument of a
11230      member function.  */
11231   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11232   if (var)
11233     {
11234       if (complain & tf_warning_or_error)
11235         {
11236           if (DECL_NAME (var) == this_identifier)
11237             permerror (input_location, "default argument %qE uses %qD",
11238                        arg, var);
11239           else
11240             error ("default argument %qE uses local variable %qD", arg, var);
11241         }
11242       return error_mark_node;
11243     }
11244
11245   /* All is well.  */
11246   return arg;
11247 }
11248
11249 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
11250
11251 static tree
11252 type_is_deprecated (tree type)
11253 {
11254   enum tree_code code;
11255   if (TREE_DEPRECATED (type))
11256     return type;
11257   if (TYPE_NAME (type)
11258       && TREE_DEPRECATED (TYPE_NAME (type)))
11259     return type;
11260
11261   /* Do warn about using typedefs to a deprecated class.  */
11262   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11263     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11264
11265   code = TREE_CODE (type);
11266
11267   if (code == POINTER_TYPE || code == REFERENCE_TYPE
11268       || code == OFFSET_TYPE || code == FUNCTION_TYPE
11269       || code == METHOD_TYPE || code == ARRAY_TYPE)
11270     return type_is_deprecated (TREE_TYPE (type));
11271
11272   if (TYPE_PTRMEMFUNC_P (type))
11273     return type_is_deprecated
11274       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11275
11276   return NULL_TREE;
11277 }
11278
11279 /* Decode the list of parameter types for a function type.
11280    Given the list of things declared inside the parens,
11281    return a list of types.
11282
11283    If this parameter does not end with an ellipsis, we append
11284    void_list_node.
11285
11286    *PARMS is set to the chain of PARM_DECLs created.  */
11287
11288 static tree
11289 grokparms (tree parmlist, tree *parms)
11290 {
11291   tree result = NULL_TREE;
11292   tree decls = NULL_TREE;
11293   tree parm;
11294   int any_error = 0;
11295
11296   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11297     {
11298       tree type = NULL_TREE;
11299       tree init = TREE_PURPOSE (parm);
11300       tree decl = TREE_VALUE (parm);
11301       const char *errmsg;
11302
11303       if (parm == void_list_node)
11304         break;
11305
11306       if (! decl || TREE_TYPE (decl) == error_mark_node)
11307         continue;
11308
11309       type = TREE_TYPE (decl);
11310       if (VOID_TYPE_P (type))
11311         {
11312           if (same_type_p (type, void_type_node)
11313               && !init
11314               && !DECL_NAME (decl) && !result
11315               && TREE_CHAIN (parm) == void_list_node)
11316             /* DR 577: A parameter list consisting of a single
11317                unnamed parameter of non-dependent type 'void'.  */
11318             break;
11319           else if (cv_qualified_p (type))
11320             error_at (DECL_SOURCE_LOCATION (decl),
11321                       "invalid use of cv-qualified type %qT in "
11322                       "parameter declaration", type);
11323           else
11324             error_at (DECL_SOURCE_LOCATION (decl),
11325                       "invalid use of type %<void%> in parameter "
11326                       "declaration");
11327           /* It's not a good idea to actually create parameters of
11328              type `void'; other parts of the compiler assume that a
11329              void type terminates the parameter list.  */
11330           type = error_mark_node;
11331           TREE_TYPE (decl) = error_mark_node;
11332         }
11333
11334       if (type != error_mark_node
11335           && TYPE_FOR_JAVA (type)
11336           && MAYBE_CLASS_TYPE_P (type))
11337         {
11338           error ("parameter %qD has Java class type", decl);
11339           type = error_mark_node;
11340           TREE_TYPE (decl) = error_mark_node;
11341           init = NULL_TREE;
11342         }
11343
11344       if (type != error_mark_node
11345           && (errmsg = targetm.invalid_parameter_type (type)))
11346         {
11347           error (errmsg);
11348           type = error_mark_node;
11349           TREE_TYPE (decl) = error_mark_node;
11350         }
11351
11352       if (type != error_mark_node)
11353         {
11354           if (deprecated_state != DEPRECATED_SUPPRESS)
11355             {
11356               tree deptype = type_is_deprecated (type);
11357               if (deptype)
11358                 warn_deprecated_use (deptype, NULL_TREE);
11359             }
11360
11361           /* Top-level qualifiers on the parameters are
11362              ignored for function types.  */
11363           type = cp_build_qualified_type (type, 0);
11364           if (TREE_CODE (type) == METHOD_TYPE)
11365             {
11366               error ("parameter %qD invalidly declared method type", decl);
11367               type = build_pointer_type (type);
11368               TREE_TYPE (decl) = type;
11369             }
11370           else if (abstract_virtuals_error (decl, type))
11371             any_error = 1;  /* Seems like a good idea.  */
11372           else if (POINTER_TYPE_P (type))
11373             {
11374               /* [dcl.fct]/6, parameter types cannot contain pointers
11375                  (references) to arrays of unknown bound.  */
11376               tree t = TREE_TYPE (type);
11377               int ptr = TYPE_PTR_P (type);
11378
11379               while (1)
11380                 {
11381                   if (TYPE_PTR_P (t))
11382                     ptr = 1;
11383                   else if (TREE_CODE (t) != ARRAY_TYPE)
11384                     break;
11385                   else if (!TYPE_DOMAIN (t))
11386                     break;
11387                   t = TREE_TYPE (t);
11388                 }
11389               if (TREE_CODE (t) == ARRAY_TYPE)
11390                 error (ptr
11391                        ? G_("parameter %qD includes pointer to array of "
11392                             "unknown bound %qT")
11393                        : G_("parameter %qD includes reference to array of "
11394                             "unknown bound %qT"),
11395                        decl, t);
11396             }
11397
11398           if (any_error)
11399             init = NULL_TREE;
11400           else if (init && !processing_template_decl)
11401             init = check_default_argument (decl, init, tf_warning_or_error);
11402         }
11403
11404       DECL_CHAIN (decl) = decls;
11405       decls = decl;
11406       result = tree_cons (init, type, result);
11407     }
11408   decls = nreverse (decls);
11409   result = nreverse (result);
11410   if (parm)
11411     result = chainon (result, void_list_node);
11412   *parms = decls;
11413
11414   return result;
11415 }
11416
11417 \f
11418 /* D is a constructor or overloaded `operator='.
11419
11420    Let T be the class in which D is declared. Then, this function
11421    returns:
11422
11423    -1 if D's is an ill-formed constructor or copy assignment operator
11424       whose first parameter is of type `T'.
11425    0  if D is not a copy constructor or copy assignment
11426       operator.
11427    1  if D is a copy constructor or copy assignment operator whose
11428       first parameter is a reference to non-const qualified T.
11429    2  if D is a copy constructor or copy assignment operator whose
11430       first parameter is a reference to const qualified T.
11431
11432    This function can be used as a predicate. Positive values indicate
11433    a copy constructor and nonzero values indicate a copy assignment
11434    operator.  */
11435
11436 int
11437 copy_fn_p (const_tree d)
11438 {
11439   tree args;
11440   tree arg_type;
11441   int result = 1;
11442
11443   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11444
11445   if (TREE_CODE (d) == TEMPLATE_DECL
11446       || (DECL_TEMPLATE_INFO (d)
11447           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11448     /* Instantiations of template member functions are never copy
11449        functions.  Note that member functions of templated classes are
11450        represented as template functions internally, and we must
11451        accept those as copy functions.  */
11452     return 0;
11453
11454   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11455   if (!args)
11456     return 0;
11457
11458   arg_type = TREE_VALUE (args);
11459   if (arg_type == error_mark_node)
11460     return 0;
11461
11462   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11463     {
11464       /* Pass by value copy assignment operator.  */
11465       result = -1;
11466     }
11467   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11468            && !TYPE_REF_IS_RVALUE (arg_type)
11469            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11470     {
11471       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11472         result = 2;
11473     }
11474   else
11475     return 0;
11476
11477   args = TREE_CHAIN (args);
11478
11479   if (args && args != void_list_node && !TREE_PURPOSE (args))
11480     /* There are more non-optional args.  */
11481     return 0;
11482
11483   return result;
11484 }
11485
11486 /* D is a constructor or overloaded `operator='.
11487
11488    Let T be the class in which D is declared. Then, this function
11489    returns true when D is a move constructor or move assignment
11490    operator, false otherwise.  */
11491
11492 bool
11493 move_fn_p (const_tree d)
11494 {
11495   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11496
11497   if (cxx_dialect == cxx98)
11498     /* There are no move constructors if we are in C++98 mode.  */
11499     return false;
11500
11501   if (TREE_CODE (d) == TEMPLATE_DECL
11502       || (DECL_TEMPLATE_INFO (d)
11503          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11504     /* Instantiations of template member functions are never move
11505        functions.  Note that member functions of templated classes are
11506        represented as template functions internally, and we must
11507        accept those as move functions.  */
11508     return 0;
11509
11510   return move_signature_fn_p (d);
11511 }
11512
11513 /* D is a constructor or overloaded `operator='.
11514
11515    Then, this function returns true when D has the same signature as a move
11516    constructor or move assignment operator (because either it is such a
11517    ctor/op= or it is a template specialization with the same signature),
11518    false otherwise.  */
11519
11520 bool
11521 move_signature_fn_p (const_tree d)
11522 {
11523   tree args;
11524   tree arg_type;
11525   bool result = false;
11526
11527   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11528   if (!args)
11529     return 0;
11530
11531   arg_type = TREE_VALUE (args);
11532   if (arg_type == error_mark_node)
11533     return 0;
11534
11535   if (TREE_CODE (arg_type) == REFERENCE_TYPE
11536       && TYPE_REF_IS_RVALUE (arg_type)
11537       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11538                       DECL_CONTEXT (d)))
11539     result = true;
11540
11541   args = TREE_CHAIN (args);
11542
11543   if (args && args != void_list_node && !TREE_PURPOSE (args))
11544     /* There are more non-optional args.  */
11545     return false;
11546
11547   return result;
11548 }
11549
11550 /* Remember any special properties of member function DECL.  */
11551
11552 void
11553 grok_special_member_properties (tree decl)
11554 {
11555   tree class_type;
11556
11557   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11558     return;
11559
11560   class_type = DECL_CONTEXT (decl);
11561   if (DECL_CONSTRUCTOR_P (decl))
11562     {
11563       int ctor = copy_fn_p (decl);
11564
11565       if (!DECL_ARTIFICIAL (decl))
11566         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11567
11568       if (ctor > 0)
11569         {
11570           /* [class.copy]
11571
11572              A non-template constructor for class X is a copy
11573              constructor if its first parameter is of type X&, const
11574              X&, volatile X& or const volatile X&, and either there
11575              are no other parameters or else all other parameters have
11576              default arguments.  */
11577           TYPE_HAS_COPY_CTOR (class_type) = 1;
11578           if (user_provided_p (decl))
11579             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11580           if (ctor > 1)
11581             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11582         }
11583       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11584         TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11585       else if (move_fn_p (decl) && user_provided_p (decl))
11586         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11587       else if (is_list_ctor (decl))
11588         TYPE_HAS_LIST_CTOR (class_type) = 1;
11589
11590       if (DECL_DECLARED_CONSTEXPR_P (decl)
11591           && !copy_fn_p (decl) && !move_fn_p (decl))
11592         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11593     }
11594   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11595     {
11596       /* [class.copy]
11597
11598          A non-template assignment operator for class X is a copy
11599          assignment operator if its parameter is of type X, X&, const
11600          X&, volatile X& or const volatile X&.  */
11601
11602       int assop = copy_fn_p (decl);
11603
11604       if (assop)
11605         {
11606           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11607           if (user_provided_p (decl))
11608             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11609           if (assop != 1)
11610             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11611         }
11612       else if (move_fn_p (decl) && user_provided_p (decl))
11613         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11614     }
11615   /* Destructors are handled in check_methods.  */
11616 }
11617
11618 /* Check a constructor DECL has the correct form.  Complains
11619    if the class has a constructor of the form X(X).  */
11620
11621 int
11622 grok_ctor_properties (const_tree ctype, const_tree decl)
11623 {
11624   int ctor_parm = copy_fn_p (decl);
11625
11626   if (ctor_parm < 0)
11627     {
11628       /* [class.copy]
11629
11630          A declaration of a constructor for a class X is ill-formed if
11631          its first parameter is of type (optionally cv-qualified) X
11632          and either there are no other parameters or else all other
11633          parameters have default arguments.
11634
11635          We *don't* complain about member template instantiations that
11636          have this form, though; they can occur as we try to decide
11637          what constructor to use during overload resolution.  Since
11638          overload resolution will never prefer such a constructor to
11639          the non-template copy constructor (which is either explicitly
11640          or implicitly defined), there's no need to worry about their
11641          existence.  Theoretically, they should never even be
11642          instantiated, but that's hard to forestall.  */
11643       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11644                 ctype, ctype);
11645       return 0;
11646     }
11647
11648   return 1;
11649 }
11650
11651 /* An operator with this code is unary, but can also be binary.  */
11652
11653 static int
11654 ambi_op_p (enum tree_code code)
11655 {
11656   return (code == INDIRECT_REF
11657           || code == ADDR_EXPR
11658           || code == UNARY_PLUS_EXPR
11659           || code == NEGATE_EXPR
11660           || code == PREINCREMENT_EXPR
11661           || code == PREDECREMENT_EXPR);
11662 }
11663
11664 /* An operator with this name can only be unary.  */
11665
11666 static int
11667 unary_op_p (enum tree_code code)
11668 {
11669   return (code == TRUTH_NOT_EXPR
11670           || code == BIT_NOT_EXPR
11671           || code == COMPONENT_REF
11672           || code == TYPE_EXPR);
11673 }
11674
11675 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11676    errors are issued for invalid declarations.  */
11677
11678 bool
11679 grok_op_properties (tree decl, bool complain)
11680 {
11681   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11682   tree argtype;
11683   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11684   tree name = DECL_NAME (decl);
11685   enum tree_code operator_code;
11686   int arity;
11687   bool ellipsis_p;
11688   tree class_type;
11689
11690   /* Count the number of arguments and check for ellipsis.  */
11691   for (argtype = argtypes, arity = 0;
11692        argtype && argtype != void_list_node;
11693        argtype = TREE_CHAIN (argtype))
11694     ++arity;
11695   ellipsis_p = !argtype;
11696
11697   class_type = DECL_CONTEXT (decl);
11698   if (class_type && !CLASS_TYPE_P (class_type))
11699     class_type = NULL_TREE;
11700
11701   if (DECL_CONV_FN_P (decl))
11702     operator_code = TYPE_EXPR;
11703   else
11704     do
11705       {
11706 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
11707         if (ansi_opname (CODE) == name)                         \
11708           {                                                     \
11709             operator_code = (CODE);                             \
11710             break;                                              \
11711           }                                                     \
11712         else if (ansi_assopname (CODE) == name)                 \
11713           {                                                     \
11714             operator_code = (CODE);                             \
11715             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
11716             break;                                              \
11717           }
11718
11719 #include "operators.def"
11720 #undef DEF_OPERATOR
11721
11722         gcc_unreachable ();
11723       }
11724     while (0);
11725   gcc_assert (operator_code != MAX_TREE_CODES);
11726   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11727
11728   if (class_type)
11729     switch (operator_code)
11730       {
11731       case NEW_EXPR:
11732         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11733         break;
11734
11735       case DELETE_EXPR:
11736         TYPE_GETS_DELETE (class_type) |= 1;
11737         break;
11738
11739       case VEC_NEW_EXPR:
11740         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11741         break;
11742
11743       case VEC_DELETE_EXPR:
11744         TYPE_GETS_DELETE (class_type) |= 2;
11745         break;
11746
11747       default:
11748         break;
11749       }
11750
11751     /* [basic.std.dynamic.allocation]/1:
11752
11753        A program is ill-formed if an allocation function is declared
11754        in a namespace scope other than global scope or declared static
11755        in global scope.
11756
11757        The same also holds true for deallocation functions.  */
11758   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11759       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11760     {
11761       if (DECL_NAMESPACE_SCOPE_P (decl))
11762         {
11763           if (CP_DECL_CONTEXT (decl) != global_namespace)
11764             {
11765               error ("%qD may not be declared within a namespace", decl);
11766               return false;
11767             }
11768           else if (!TREE_PUBLIC (decl))
11769             {
11770               error ("%qD may not be declared as static", decl);
11771               return false;
11772             }
11773           if (!flag_sized_deallocation && warn_cxx14_compat)
11774             {
11775               tree parm = FUNCTION_ARG_CHAIN (decl);
11776               if (parm && same_type_p (TREE_VALUE (parm), size_type_node)
11777                   && TREE_CHAIN (parm) == void_list_node)
11778                 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc__14_compat,
11779                             "%qD is a usual (non-placement) deallocation "
11780                             "function in C++14 (or with -fsized-deallocation)",
11781                             decl);
11782             }
11783         }
11784     }
11785
11786   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11787     {
11788       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11789       DECL_IS_OPERATOR_NEW (decl) = 1;
11790     }
11791   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11792     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11793   else
11794     {
11795       /* An operator function must either be a non-static member function
11796          or have at least one parameter of a class, a reference to a class,
11797          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11798       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11799         {
11800           if (operator_code == TYPE_EXPR
11801               || operator_code == CALL_EXPR
11802               || operator_code == COMPONENT_REF
11803               || operator_code == ARRAY_REF
11804               || operator_code == NOP_EXPR)
11805             {
11806               error ("%qD must be a nonstatic member function", decl);
11807               return false;
11808             }
11809           else
11810             {
11811               tree p;
11812
11813               if (DECL_STATIC_FUNCTION_P (decl))
11814                 {
11815                   error ("%qD must be either a non-static member "
11816                          "function or a non-member function", decl);
11817                   return false;
11818                 }
11819
11820               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11821                 {
11822                   tree arg = non_reference (TREE_VALUE (p));
11823                   if (arg == error_mark_node)
11824                     return false;
11825
11826                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11827                      because these checks are performed even on
11828                      template functions.  */
11829                   if (MAYBE_CLASS_TYPE_P (arg)
11830                       || TREE_CODE (arg) == ENUMERAL_TYPE)
11831                     break;
11832                 }
11833
11834               if (!p || p == void_list_node)
11835                 {
11836                   if (complain)
11837                     error ("%qD must have an argument of class or "
11838                            "enumerated type", decl);
11839                   return false;
11840                 }
11841             }
11842         }
11843
11844       /* There are no restrictions on the arguments to an overloaded
11845          "operator ()".  */
11846       if (operator_code == CALL_EXPR)
11847         return true;
11848
11849       /* Warn about conversion operators that will never be used.  */
11850       if (IDENTIFIER_TYPENAME_P (name)
11851           && ! DECL_TEMPLATE_INFO (decl)
11852           && warn_conversion
11853           /* Warn only declaring the function; there is no need to
11854              warn again about out-of-class definitions.  */
11855           && class_type == current_class_type)
11856         {
11857           tree t = TREE_TYPE (name);
11858           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11859
11860           if (ref)
11861             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11862
11863           if (VOID_TYPE_P (t))
11864             warning (OPT_Wconversion,
11865                      ref
11866                      ? G_("conversion to a reference to void "
11867                           "will never use a type conversion operator")
11868                      : G_("conversion to void "
11869                           "will never use a type conversion operator"));
11870           else if (class_type)
11871             {
11872               if (t == class_type)
11873                 warning (OPT_Wconversion,
11874                      ref
11875                      ? G_("conversion to a reference to the same type "
11876                           "will never use a type conversion operator")
11877                      : G_("conversion to the same type "
11878                           "will never use a type conversion operator"));                
11879               /* Don't force t to be complete here.  */
11880               else if (MAYBE_CLASS_TYPE_P (t)
11881                        && COMPLETE_TYPE_P (t)
11882                        && DERIVED_FROM_P (t, class_type))
11883                  warning (OPT_Wconversion,
11884                           ref
11885                           ? G_("conversion to a reference to a base class "
11886                                "will never use a type conversion operator")
11887                           : G_("conversion to a base class "
11888                                "will never use a type conversion operator"));           
11889             }
11890
11891         }
11892
11893       if (operator_code == COND_EXPR)
11894         {
11895           /* 13.4.0.3 */
11896           error ("ISO C++ prohibits overloading operator ?:");
11897           return false;
11898         }
11899       else if (ellipsis_p)
11900         {
11901           error ("%qD must not have variable number of arguments", decl);
11902           return false;
11903         }
11904       else if (ambi_op_p (operator_code))
11905         {
11906           if (arity == 1)
11907             /* We pick the one-argument operator codes by default, so
11908                we don't have to change anything.  */
11909             ;
11910           else if (arity == 2)
11911             {
11912               /* If we thought this was a unary operator, we now know
11913                  it to be a binary operator.  */
11914               switch (operator_code)
11915                 {
11916                 case INDIRECT_REF:
11917                   operator_code = MULT_EXPR;
11918                   break;
11919
11920                 case ADDR_EXPR:
11921                   operator_code = BIT_AND_EXPR;
11922                   break;
11923
11924                 case UNARY_PLUS_EXPR:
11925                   operator_code = PLUS_EXPR;
11926                   break;
11927
11928                 case NEGATE_EXPR:
11929                   operator_code = MINUS_EXPR;
11930                   break;
11931
11932                 case PREINCREMENT_EXPR:
11933                   operator_code = POSTINCREMENT_EXPR;
11934                   break;
11935
11936                 case PREDECREMENT_EXPR:
11937                   operator_code = POSTDECREMENT_EXPR;
11938                   break;
11939
11940                 default:
11941                   gcc_unreachable ();
11942                 }
11943
11944               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11945
11946               if ((operator_code == POSTINCREMENT_EXPR
11947                    || operator_code == POSTDECREMENT_EXPR)
11948                   && ! processing_template_decl
11949                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11950                 {
11951                   if (methodp)
11952                     error ("postfix %qD must take %<int%> as its argument",
11953                            decl);
11954                   else
11955                     error ("postfix %qD must take %<int%> as its second "
11956                            "argument", decl);
11957                   return false;
11958                 }
11959             }
11960           else
11961             {
11962               if (methodp)
11963                 error ("%qD must take either zero or one argument", decl);
11964               else
11965                 error ("%qD must take either one or two arguments", decl);
11966               return false;
11967             }
11968
11969           /* More Effective C++ rule 6.  */
11970           if (warn_ecpp
11971               && (operator_code == POSTINCREMENT_EXPR
11972                   || operator_code == POSTDECREMENT_EXPR
11973                   || operator_code == PREINCREMENT_EXPR
11974                   || operator_code == PREDECREMENT_EXPR))
11975             {
11976               tree arg = TREE_VALUE (argtypes);
11977               tree ret = TREE_TYPE (TREE_TYPE (decl));
11978               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11979                 arg = TREE_TYPE (arg);
11980               arg = TYPE_MAIN_VARIANT (arg);
11981               if (operator_code == PREINCREMENT_EXPR
11982                   || operator_code == PREDECREMENT_EXPR)
11983                 {
11984                   if (TREE_CODE (ret) != REFERENCE_TYPE
11985                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11986                                        arg))
11987                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11988                              build_reference_type (arg));
11989                 }
11990               else
11991                 {
11992                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11993                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11994                 }
11995             }
11996         }
11997       else if (unary_op_p (operator_code))
11998         {
11999           if (arity != 1)
12000             {
12001               if (methodp)
12002                 error ("%qD must take %<void%>", decl);
12003               else
12004                 error ("%qD must take exactly one argument", decl);
12005               return false;
12006             }
12007         }
12008       else /* if (binary_op_p (operator_code)) */
12009         {
12010           if (arity != 2)
12011             {
12012               if (methodp)
12013                 error ("%qD must take exactly one argument", decl);
12014               else
12015                 error ("%qD must take exactly two arguments", decl);
12016               return false;
12017             }
12018
12019           /* More Effective C++ rule 7.  */
12020           if (warn_ecpp
12021               && (operator_code == TRUTH_ANDIF_EXPR
12022                   || operator_code == TRUTH_ORIF_EXPR
12023                   || operator_code == COMPOUND_EXPR))
12024             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
12025                      decl);
12026         }
12027
12028       /* Effective C++ rule 23.  */
12029       if (warn_ecpp
12030           && arity == 2
12031           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
12032           && (operator_code == PLUS_EXPR
12033               || operator_code == MINUS_EXPR
12034               || operator_code == TRUNC_DIV_EXPR
12035               || operator_code == MULT_EXPR
12036               || operator_code == TRUNC_MOD_EXPR)
12037           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12038         warning (OPT_Weffc__, "%qD should return by value", decl);
12039
12040       /* [over.oper]/8 */
12041       for (; argtypes && argtypes != void_list_node;
12042           argtypes = TREE_CHAIN (argtypes))
12043         if (TREE_PURPOSE (argtypes))
12044           {
12045             TREE_PURPOSE (argtypes) = NULL_TREE;
12046             if (operator_code == POSTINCREMENT_EXPR
12047                 || operator_code == POSTDECREMENT_EXPR)
12048               {
12049                 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments", 
12050                          decl);
12051               }
12052             else
12053               {
12054                 error ("%qD cannot have default arguments", decl);
12055                 return false;
12056               }
12057           }
12058     }
12059   return true;
12060 }
12061 \f
12062 /* Return a string giving the keyword associate with CODE.  */
12063
12064 static const char *
12065 tag_name (enum tag_types code)
12066 {
12067   switch (code)
12068     {
12069     case record_type:
12070       return "struct";
12071     case class_type:
12072       return "class";
12073     case union_type:
12074       return "union";
12075     case enum_type:
12076       return "enum";
12077     case typename_type:
12078       return "typename";
12079     default:
12080       gcc_unreachable ();
12081     }
12082 }
12083
12084 /* Name lookup in an elaborated-type-specifier (after the keyword
12085    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
12086    elaborated-type-specifier is invalid, issue a diagnostic and return
12087    error_mark_node; otherwise, return the *_TYPE to which it referred.
12088    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
12089
12090 tree
12091 check_elaborated_type_specifier (enum tag_types tag_code,
12092                                  tree decl,
12093                                  bool allow_template_p)
12094 {
12095   tree type;
12096
12097   /* In the case of:
12098
12099        struct S { struct S *p; };
12100
12101      name lookup will find the TYPE_DECL for the implicit "S::S"
12102      typedef.  Adjust for that here.  */
12103   if (DECL_SELF_REFERENCE_P (decl))
12104     decl = TYPE_NAME (TREE_TYPE (decl));
12105
12106   type = TREE_TYPE (decl);
12107
12108   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
12109      is false for this case as well.  */
12110   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12111     {
12112       error ("using template type parameter %qT after %qs",
12113              type, tag_name (tag_code));
12114       return error_mark_node;
12115     }
12116   /* Accept template template parameters.  */
12117   else if (allow_template_p
12118            && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
12119                || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
12120     ;
12121   /*   [dcl.type.elab]
12122
12123        If the identifier resolves to a typedef-name or the
12124        simple-template-id resolves to an alias template
12125        specialization, the elaborated-type-specifier is ill-formed.
12126
12127      In other words, the only legitimate declaration to use in the
12128      elaborated type specifier is the implicit typedef created when
12129      the type is declared.  */
12130   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12131            && !DECL_SELF_REFERENCE_P (decl)
12132            && tag_code != typename_type)
12133     {
12134       if (alias_template_specialization_p (type))
12135         error ("using alias template specialization %qT after %qs",
12136                type, tag_name (tag_code));
12137       else
12138         error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12139       inform (DECL_SOURCE_LOCATION (decl),
12140               "%qD has a previous declaration here", decl);
12141       return error_mark_node;
12142     }
12143   else if (TREE_CODE (type) != RECORD_TYPE
12144            && TREE_CODE (type) != UNION_TYPE
12145            && tag_code != enum_type
12146            && tag_code != typename_type)
12147     {
12148       error ("%qT referred to as %qs", type, tag_name (tag_code));
12149       inform (input_location, "%q+T has a previous declaration here", type);
12150       return error_mark_node;
12151     }
12152   else if (TREE_CODE (type) != ENUMERAL_TYPE
12153            && tag_code == enum_type)
12154     {
12155       error ("%qT referred to as enum", type);
12156       inform (input_location, "%q+T has a previous declaration here", type);
12157       return error_mark_node;
12158     }
12159   else if (!allow_template_p
12160            && TREE_CODE (type) == RECORD_TYPE
12161            && CLASSTYPE_IS_TEMPLATE (type))
12162     {
12163       /* If a class template appears as elaborated type specifier
12164          without a template header such as:
12165
12166            template <class T> class C {};
12167            void f(class C);             // No template header here
12168
12169          then the required template argument is missing.  */
12170       error ("template argument required for %<%s %T%>",
12171              tag_name (tag_code),
12172              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12173       return error_mark_node;
12174     }
12175
12176   return type;
12177 }
12178
12179 /* Lookup NAME in elaborate type specifier in scope according to
12180    SCOPE and issue diagnostics if necessary.
12181    Return *_TYPE node upon success, NULL_TREE when the NAME is not
12182    found, and ERROR_MARK_NODE for type error.  */
12183
12184 static tree
12185 lookup_and_check_tag (enum tag_types tag_code, tree name,
12186                       tag_scope scope, bool template_header_p)
12187 {
12188   tree t;
12189   tree decl;
12190   if (scope == ts_global)
12191     {
12192       /* First try ordinary name lookup, ignoring hidden class name
12193          injected via friend declaration.  */
12194       decl = lookup_name_prefer_type (name, 2);
12195       decl = strip_using_decl (decl);
12196       /* If that fails, the name will be placed in the smallest
12197          non-class, non-function-prototype scope according to 3.3.1/5.
12198          We may already have a hidden name declared as friend in this
12199          scope.  So lookup again but not ignoring hidden names.
12200          If we find one, that name will be made visible rather than
12201          creating a new tag.  */
12202       if (!decl)
12203         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12204     }
12205   else
12206     decl = lookup_type_scope (name, scope);
12207
12208   if (decl
12209       && (DECL_CLASS_TEMPLATE_P (decl)
12210           /* If scope is ts_current we're defining a class, so ignore a
12211              template template parameter.  */
12212           || (scope != ts_current
12213               && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12214     decl = DECL_TEMPLATE_RESULT (decl);
12215
12216   if (decl && TREE_CODE (decl) == TYPE_DECL)
12217     {
12218       /* Look for invalid nested type:
12219            class C {
12220              class C {};
12221            };  */
12222       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12223         {
12224           error ("%qD has the same name as the class in which it is "
12225                  "declared",
12226                  decl);
12227           return error_mark_node;
12228         }
12229
12230       /* Two cases we need to consider when deciding if a class
12231          template is allowed as an elaborated type specifier:
12232          1. It is a self reference to its own class.
12233          2. It comes with a template header.
12234
12235          For example:
12236
12237            template <class T> class C {
12238              class C *c1;               // DECL_SELF_REFERENCE_P is true
12239              class D;
12240            };
12241            template <class U> class C; // template_header_p is true
12242            template <class T> class C<T>::D {
12243              class C *c2;               // DECL_SELF_REFERENCE_P is true
12244            };  */
12245
12246       t = check_elaborated_type_specifier (tag_code,
12247                                            decl,
12248                                            template_header_p
12249                                            | DECL_SELF_REFERENCE_P (decl));
12250       return t;
12251     }
12252   else if (decl && TREE_CODE (decl) == TREE_LIST)
12253     {
12254       error ("reference to %qD is ambiguous", name);
12255       print_candidates (decl);
12256       return error_mark_node;
12257     }
12258   else
12259     return NULL_TREE;
12260 }
12261
12262 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12263    Define the tag as a forward-reference if it is not defined.
12264
12265    If a declaration is given, process it here, and report an error if
12266    multiple declarations are not identical.
12267
12268    SCOPE is TS_CURRENT when this is also a definition.  Only look in
12269    the current frame for the name (since C++ allows new names in any
12270    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12271    declaration.  Only look beginning from the current scope outward up
12272    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
12273
12274    TEMPLATE_HEADER_P is true when this declaration is preceded by
12275    a set of template parameters.  */
12276
12277 static tree
12278 xref_tag_1 (enum tag_types tag_code, tree name,
12279             tag_scope orig_scope, bool template_header_p)
12280 {
12281   enum tree_code code;
12282   tree t;
12283   tree context = NULL_TREE;
12284   tag_scope scope;
12285
12286   gcc_assert (identifier_p (name));
12287
12288   switch (tag_code)
12289     {
12290     case record_type:
12291     case class_type:
12292       code = RECORD_TYPE;
12293       break;
12294     case union_type:
12295       code = UNION_TYPE;
12296       break;
12297     case enum_type:
12298       code = ENUMERAL_TYPE;
12299       break;
12300     default:
12301       gcc_unreachable ();
12302     }
12303
12304   if (orig_scope == ts_lambda)
12305     scope = ts_current;
12306   else
12307     scope = orig_scope;
12308
12309   /* In case of anonymous name, xref_tag is only called to
12310      make type node and push name.  Name lookup is not required.  */
12311   if (ANON_AGGRNAME_P (name))
12312     t = NULL_TREE;
12313   else
12314     t = lookup_and_check_tag  (tag_code, name,
12315                                scope, template_header_p);
12316
12317   if (t == error_mark_node)
12318     return error_mark_node;
12319
12320   if (scope != ts_current && t && current_class_type
12321       && template_class_depth (current_class_type)
12322       && template_header_p)
12323     {
12324       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12325         return t;
12326
12327       /* Since SCOPE is not TS_CURRENT, we are not looking at a
12328          definition of this tag.  Since, in addition, we are currently
12329          processing a (member) template declaration of a template
12330          class, we must be very careful; consider:
12331
12332            template <class X>
12333            struct S1
12334
12335            template <class U>
12336            struct S2
12337            { template <class V>
12338            friend struct S1; };
12339
12340          Here, the S2::S1 declaration should not be confused with the
12341          outer declaration.  In particular, the inner version should
12342          have a template parameter of level 2, not level 1.  This
12343          would be particularly important if the member declaration
12344          were instead:
12345
12346            template <class V = U> friend struct S1;
12347
12348          say, when we should tsubst into `U' when instantiating
12349          S2.  On the other hand, when presented with:
12350
12351            template <class T>
12352            struct S1 {
12353              template <class U>
12354              struct S2 {};
12355              template <class U>
12356              friend struct S2;
12357            };
12358
12359          we must find the inner binding eventually.  We
12360          accomplish this by making sure that the new type we
12361          create to represent this declaration has the right
12362          TYPE_CONTEXT.  */
12363       context = TYPE_CONTEXT (t);
12364       t = NULL_TREE;
12365     }
12366
12367   if (! t)
12368     {
12369       /* If no such tag is yet defined, create a forward-reference node
12370          and record it as the "definition".
12371          When a real declaration of this type is found,
12372          the forward-reference will be altered into a real type.  */
12373       if (code == ENUMERAL_TYPE)
12374         {
12375           error ("use of enum %q#D without previous declaration", name);
12376           return error_mark_node;
12377         }
12378       else
12379         {
12380           t = make_class_type (code);
12381           TYPE_CONTEXT (t) = context;
12382           if (orig_scope == ts_lambda)
12383             /* Remember that we're declaring a lambda to avoid bogus errors
12384                in push_template_decl.  */
12385             CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12386           t = pushtag (name, t, scope);
12387         }
12388     }
12389   else
12390     {
12391       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12392         {
12393           if (!redeclare_class_template (t, current_template_parms))
12394             return error_mark_node;
12395         }
12396       else if (!processing_template_decl
12397                && CLASS_TYPE_P (t)
12398                && CLASSTYPE_IS_TEMPLATE (t))
12399         {
12400           error ("redeclaration of %qT as a non-template", t);
12401           error ("previous declaration %q+D", t);
12402           return error_mark_node;
12403         }
12404
12405       /* Make injected friend class visible.  */
12406       if (scope != ts_within_enclosing_non_class
12407           && hidden_name_p (TYPE_NAME (t)))
12408         {
12409           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12410           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12411
12412           if (TYPE_TEMPLATE_INFO (t))
12413             {
12414               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12415               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12416             }
12417         }
12418     }
12419
12420   return t;
12421 }
12422
12423 /* Wrapper for xref_tag_1.  */
12424
12425 tree
12426 xref_tag (enum tag_types tag_code, tree name,
12427           tag_scope scope, bool template_header_p)
12428 {
12429   tree ret;
12430   bool subtime;
12431   subtime = timevar_cond_start (TV_NAME_LOOKUP);
12432   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12433   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12434   return ret;
12435 }
12436
12437
12438 tree
12439 xref_tag_from_type (tree old, tree id, tag_scope scope)
12440 {
12441   enum tag_types tag_kind;
12442
12443   if (TREE_CODE (old) == RECORD_TYPE)
12444     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12445   else
12446     tag_kind  = union_type;
12447
12448   if (id == NULL_TREE)
12449     id = TYPE_IDENTIFIER (old);
12450
12451   return xref_tag (tag_kind, id, scope, false);
12452 }
12453
12454 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12455    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
12456    access_* node, and the TREE_VALUE is the type of the base-class.
12457    Non-NULL TREE_TYPE indicates virtual inheritance.  
12458  
12459    Returns true if the binfo hierarchy was successfully created,
12460    false if an error was detected. */
12461
12462 bool
12463 xref_basetypes (tree ref, tree base_list)
12464 {
12465   tree *basep;
12466   tree binfo, base_binfo;
12467   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
12468   unsigned max_bases = 0;  /* Maximum direct bases.  */
12469   int i;
12470   tree default_access;
12471   tree igo_prev; /* Track Inheritance Graph Order.  */
12472
12473   if (ref == error_mark_node)
12474     return false;
12475
12476   /* The base of a derived class is private by default, all others are
12477      public.  */
12478   default_access = (TREE_CODE (ref) == RECORD_TYPE
12479                     && CLASSTYPE_DECLARED_CLASS (ref)
12480                     ? access_private_node : access_public_node);
12481
12482   /* First, make sure that any templates in base-classes are
12483      instantiated.  This ensures that if we call ourselves recursively
12484      we do not get confused about which classes are marked and which
12485      are not.  */
12486   basep = &base_list;
12487   while (*basep)
12488     {
12489       tree basetype = TREE_VALUE (*basep);
12490
12491       /* The dependent_type_p call below should really be dependent_scope_p
12492          so that we give a hard error about using an incomplete type as a
12493          base, but we allow it with a pedwarn for backward
12494          compatibility.  */
12495       if (processing_template_decl
12496           && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12497         cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12498       if (!dependent_type_p (basetype)
12499           && !complete_type_or_else (basetype, NULL))
12500         /* An incomplete type.  Remove it from the list.  */
12501         *basep = TREE_CHAIN (*basep);
12502       else
12503         {
12504           max_bases++;
12505           if (TREE_TYPE (*basep))
12506             max_vbases++;
12507           if (CLASS_TYPE_P (basetype))
12508             max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12509           basep = &TREE_CHAIN (*basep);
12510         }
12511     }
12512
12513   TYPE_MARKED_P (ref) = 1;
12514
12515   /* The binfo slot should be empty, unless this is an (ill-formed)
12516      redefinition.  */
12517   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12518     {
12519       error ("redefinition of %q#T", ref);
12520       return false;
12521     }
12522
12523   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12524
12525   binfo = make_tree_binfo (max_bases);
12526
12527   TYPE_BINFO (ref) = binfo;
12528   BINFO_OFFSET (binfo) = size_zero_node;
12529   BINFO_TYPE (binfo) = ref;
12530
12531   /* Apply base-class info set up to the variants of this type.  */
12532   fixup_type_variants (ref);
12533
12534   if (max_bases)
12535     {
12536       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12537       /* An aggregate cannot have baseclasses.  */
12538       CLASSTYPE_NON_AGGREGATE (ref) = 1;
12539
12540       if (TREE_CODE (ref) == UNION_TYPE)
12541         {
12542           error ("derived union %qT invalid", ref);
12543           return false;
12544         }
12545     }
12546
12547   if (max_bases > 1)
12548     {
12549       if (TYPE_FOR_JAVA (ref))
12550         {
12551           error ("Java class %qT cannot have multiple bases", ref);
12552           return false;
12553         }
12554     }
12555
12556   if (max_vbases)
12557     {
12558       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12559
12560       if (TYPE_FOR_JAVA (ref))
12561         {
12562           error ("Java class %qT cannot have virtual bases", ref);
12563           return false;
12564         }
12565     }
12566
12567   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12568     {
12569       tree access = TREE_PURPOSE (base_list);
12570       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12571       tree basetype = TREE_VALUE (base_list);
12572
12573       if (access == access_default_node)
12574         access = default_access;
12575
12576       if (PACK_EXPANSION_P (basetype))
12577         basetype = PACK_EXPANSION_PATTERN (basetype);
12578       if (TREE_CODE (basetype) == TYPE_DECL)
12579         basetype = TREE_TYPE (basetype);
12580       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12581         {
12582           error ("base type %qT fails to be a struct or class type",
12583                  basetype);
12584           return false;
12585         }
12586
12587       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12588         TYPE_FOR_JAVA (ref) = 1;
12589
12590       base_binfo = NULL_TREE;
12591       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12592         {
12593           base_binfo = TYPE_BINFO (basetype);
12594           /* The original basetype could have been a typedef'd type.  */
12595           basetype = BINFO_TYPE (base_binfo);
12596
12597           /* Inherit flags from the base.  */
12598           TYPE_HAS_NEW_OPERATOR (ref)
12599             |= TYPE_HAS_NEW_OPERATOR (basetype);
12600           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12601             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12602           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12603           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12604           CLASSTYPE_DIAMOND_SHAPED_P (ref)
12605             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12606           CLASSTYPE_REPEATED_BASE_P (ref)
12607             |= CLASSTYPE_REPEATED_BASE_P (basetype);
12608         }
12609
12610       /* We must do this test after we've seen through a typedef
12611          type.  */
12612       if (TYPE_MARKED_P (basetype))
12613         {
12614           if (basetype == ref)
12615             error ("recursive type %qT undefined", basetype);
12616           else
12617             error ("duplicate base type %qT invalid", basetype);
12618           return false;
12619         }
12620
12621       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12622         /* Regenerate the pack expansion for the bases. */
12623         basetype = make_pack_expansion (basetype);
12624
12625       TYPE_MARKED_P (basetype) = 1;
12626
12627       base_binfo = copy_binfo (base_binfo, basetype, ref,
12628                                &igo_prev, via_virtual);
12629       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12630         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12631
12632       BINFO_BASE_APPEND (binfo, base_binfo);
12633       BINFO_BASE_ACCESS_APPEND (binfo, access);
12634     }
12635
12636   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12637     /* If we didn't get max_vbases vbases, we must have shared at
12638        least one of them, and are therefore diamond shaped.  */
12639     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12640
12641   /* Unmark all the types.  */
12642   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12643     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12644   TYPE_MARKED_P (ref) = 0;
12645
12646   /* Now see if we have a repeated base type.  */
12647   if (!CLASSTYPE_REPEATED_BASE_P (ref))
12648     {
12649       for (base_binfo = binfo; base_binfo;
12650            base_binfo = TREE_CHAIN (base_binfo))
12651         {
12652           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12653             {
12654               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12655               break;
12656             }
12657           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12658         }
12659       for (base_binfo = binfo; base_binfo;
12660            base_binfo = TREE_CHAIN (base_binfo))
12661         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12662           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12663         else
12664           break;
12665     }
12666
12667   return true;
12668 }
12669
12670 \f
12671 /* Copies the enum-related properties from type SRC to type DST.
12672    Used with the underlying type of an enum and the enum itself.  */
12673 static void
12674 copy_type_enum (tree dst, tree src)
12675 {
12676   tree t;
12677   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12678     {
12679       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12680       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12681       TYPE_SIZE (t) = TYPE_SIZE (src);
12682       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12683       SET_TYPE_MODE (dst, TYPE_MODE (src));
12684       TYPE_PRECISION (t) = TYPE_PRECISION (src);
12685       TYPE_ALIGN (t) = TYPE_ALIGN (src);
12686       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12687       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12688     }
12689 }
12690
12691 /* Begin compiling the definition of an enumeration type.
12692    NAME is its name, 
12693
12694    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12695
12696    UNDERLYING_TYPE is the type that will be used as the storage for
12697    the enumeration type. This should be NULL_TREE if no storage type
12698    was specified.
12699
12700    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12701
12702    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12703
12704    Returns the type object, as yet incomplete.
12705    Also records info about it so that build_enumerator
12706    may be used to declare the individual values as they are read.  */
12707
12708 tree
12709 start_enum (tree name, tree enumtype, tree underlying_type,
12710             bool scoped_enum_p, bool *is_new)
12711 {
12712   tree prevtype = NULL_TREE;
12713   gcc_assert (identifier_p (name));
12714
12715   if (is_new)
12716     *is_new = false;
12717   /* [C++0x dcl.enum]p5:
12718
12719     If not explicitly specified, the underlying type of a scoped
12720     enumeration type is int.  */
12721   if (!underlying_type && scoped_enum_p)
12722     underlying_type = integer_type_node;
12723
12724   if (underlying_type)
12725     underlying_type = cv_unqualified (underlying_type);
12726
12727   /* If this is the real definition for a previous forward reference,
12728      fill in the contents in the same object that used to be the
12729      forward reference.  */
12730   if (!enumtype)
12731     enumtype = lookup_and_check_tag (enum_type, name,
12732                                      /*tag_scope=*/ts_current,
12733                                      /*template_header_p=*/false);
12734
12735   /* In case of a template_decl, the only check that should be deferred
12736      to instantiation time is the comparison of underlying types.  */
12737   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12738     {
12739       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12740         {
12741           error_at (input_location, "scoped/unscoped mismatch "
12742                     "in enum %q#T", enumtype);
12743           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12744                     "previous definition here");
12745           enumtype = error_mark_node;
12746         }
12747       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12748         {
12749           error_at (input_location, "underlying type mismatch "
12750                     "in enum %q#T", enumtype);
12751           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12752                     "previous definition here");
12753           enumtype = error_mark_node;
12754         }
12755       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12756                && !dependent_type_p (underlying_type)
12757                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12758                && !same_type_p (underlying_type,
12759                                 ENUM_UNDERLYING_TYPE (enumtype)))
12760         {
12761           error_at (input_location, "different underlying type "
12762                     "in enum %q#T", enumtype);
12763           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12764                     "previous definition here");
12765           underlying_type = NULL_TREE;
12766         }
12767     }
12768
12769   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12770       || processing_template_decl)
12771     {
12772       /* In case of error, make a dummy enum to allow parsing to
12773          continue.  */
12774       if (enumtype == error_mark_node)
12775         {
12776           name = make_anon_name ();
12777           enumtype = NULL_TREE;
12778         }
12779
12780       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12781          of an opaque enum, or an opaque enum of an already defined
12782          enumeration (C++0x only).
12783          In any other case, it'll be NULL_TREE. */
12784       if (!enumtype)
12785         {
12786           if (is_new)
12787             *is_new = true;
12788         }
12789       prevtype = enumtype;
12790
12791       /* Do not push the decl more than once, unless we need to
12792          compare underlying types at instantiation time */
12793       if (!enumtype
12794           || TREE_CODE (enumtype) != ENUMERAL_TYPE
12795           || (underlying_type
12796               && dependent_type_p (underlying_type))
12797           || (ENUM_UNDERLYING_TYPE (enumtype)
12798               && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12799         {
12800           enumtype = cxx_make_type (ENUMERAL_TYPE);
12801           enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12802         }
12803       else
12804           enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12805                                false);
12806
12807       if (enumtype == error_mark_node)
12808         return error_mark_node;
12809
12810       /* The enum is considered opaque until the opening '{' of the
12811          enumerator list.  */
12812       SET_OPAQUE_ENUM_P (enumtype, true);
12813       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12814     }
12815
12816   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12817
12818   if (underlying_type)
12819     {
12820       if (CP_INTEGRAL_TYPE_P (underlying_type))
12821         {
12822           copy_type_enum (enumtype, underlying_type);
12823           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12824         }
12825       else if (dependent_type_p (underlying_type))
12826         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12827       else
12828         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
12829                underlying_type, enumtype);
12830     }
12831
12832   /* If into a template class, the returned enum is always the first
12833      declaration (opaque or not) seen. This way all the references to
12834      this type will be to the same declaration. The following ones are used
12835      only to check for definition errors.  */
12836   if (prevtype && processing_template_decl)
12837     return prevtype;
12838   else
12839     return enumtype;
12840 }
12841
12842 /* After processing and defining all the values of an enumeration type,
12843    install their decls in the enumeration type.
12844    ENUMTYPE is the type object.  */
12845
12846 void
12847 finish_enum_value_list (tree enumtype)
12848 {
12849   tree values;
12850   tree underlying_type;
12851   tree decl;
12852   tree value;
12853   tree minnode, maxnode;
12854   tree t;
12855
12856   bool fixed_underlying_type_p 
12857     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12858
12859   /* We built up the VALUES in reverse order.  */
12860   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12861
12862   /* For an enum defined in a template, just set the type of the values;
12863      all further processing is postponed until the template is
12864      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12865      works.  */
12866   if (processing_template_decl)
12867     {
12868       for (values = TYPE_VALUES (enumtype);
12869            values;
12870            values = TREE_CHAIN (values))
12871         TREE_TYPE (TREE_VALUE (values)) = enumtype;
12872       return;
12873     }
12874
12875   /* Determine the minimum and maximum values of the enumerators.  */
12876   if (TYPE_VALUES (enumtype))
12877     {
12878       minnode = maxnode = NULL_TREE;
12879
12880       for (values = TYPE_VALUES (enumtype);
12881            values;
12882            values = TREE_CHAIN (values))
12883         {
12884           decl = TREE_VALUE (values);
12885
12886           /* [dcl.enum]: Following the closing brace of an enum-specifier,
12887              each enumerator has the type of its enumeration.  Prior to the
12888              closing brace, the type of each enumerator is the type of its
12889              initializing value.  */
12890           TREE_TYPE (decl) = enumtype;
12891
12892           /* Update the minimum and maximum values, if appropriate.  */
12893           value = DECL_INITIAL (decl);
12894           if (value == error_mark_node)
12895             value = integer_zero_node;
12896           /* Figure out what the minimum and maximum values of the
12897              enumerators are.  */
12898           if (!minnode)
12899             minnode = maxnode = value;
12900           else if (tree_int_cst_lt (maxnode, value))
12901             maxnode = value;
12902           else if (tree_int_cst_lt (value, minnode))
12903             minnode = value;
12904         }
12905     }
12906   else
12907     /* [dcl.enum]
12908
12909        If the enumerator-list is empty, the underlying type is as if
12910        the enumeration had a single enumerator with value 0.  */
12911     minnode = maxnode = integer_zero_node;
12912
12913   if (!fixed_underlying_type_p)
12914     {
12915       /* Compute the number of bits require to represent all values of the
12916          enumeration.  We must do this before the type of MINNODE and
12917          MAXNODE are transformed, since tree_int_cst_min_precision relies
12918          on the TREE_TYPE of the value it is passed.  */
12919       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
12920       int lowprec = tree_int_cst_min_precision (minnode, sgn);
12921       int highprec = tree_int_cst_min_precision (maxnode, sgn);
12922       int precision = MAX (lowprec, highprec);
12923       unsigned int itk;
12924       bool use_short_enum;
12925
12926       /* Determine the underlying type of the enumeration.
12927
12928          [dcl.enum]
12929
12930          The underlying type of an enumeration is an integral type that
12931          can represent all the enumerator values defined in the
12932          enumeration.  It is implementation-defined which integral type is
12933          used as the underlying type for an enumeration except that the
12934          underlying type shall not be larger than int unless the value of
12935          an enumerator cannot fit in an int or unsigned int.
12936
12937          We use "int" or an "unsigned int" as the underlying type, even if
12938          a smaller integral type would work, unless the user has
12939          explicitly requested that we use the smallest possible type.  The
12940          user can request that for all enumerations with a command line
12941          flag, or for just one enumeration with an attribute.  */
12942
12943       use_short_enum = flag_short_enums
12944         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12945
12946       for (itk = (use_short_enum ? itk_char : itk_int);
12947            itk != itk_none;
12948            itk++)
12949         {
12950           underlying_type = integer_types[itk];
12951           if (underlying_type != NULL_TREE
12952               && TYPE_PRECISION (underlying_type) >= precision
12953               && TYPE_SIGN (underlying_type) == sgn)
12954             break;
12955         }
12956       if (itk == itk_none)
12957         {
12958           /* DR 377
12959
12960              IF no integral type can represent all the enumerator values, the
12961              enumeration is ill-formed.  */
12962           error ("no integral type can represent all of the enumerator values "
12963                  "for %qT", enumtype);
12964           precision = TYPE_PRECISION (long_long_integer_type_node);
12965           underlying_type = integer_types[itk_unsigned_long_long];
12966         }
12967
12968       /* [dcl.enum]
12969
12970          The value of sizeof() applied to an enumeration type, an object
12971          of an enumeration type, or an enumerator, is the value of sizeof()
12972          applied to the underlying type.  */
12973       copy_type_enum (enumtype, underlying_type);
12974
12975       /* Compute the minimum and maximum values for the type.
12976
12977          [dcl.enum]
12978
12979          For an enumeration where emin is the smallest enumerator and emax
12980          is the largest, the values of the enumeration are the values of the
12981          underlying type in the range bmin to bmax, where bmin and bmax are,
12982          respectively, the smallest and largest values of the smallest bit-
12983          field that can store emin and emax.  */
12984
12985       /* The middle-end currently assumes that types with TYPE_PRECISION
12986          narrower than their underlying type are suitably zero or sign
12987          extended to fill their mode.  Similarly, it assumes that the front
12988          end assures that a value of a particular type must be within
12989          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12990
12991          We used to set these fields based on bmin and bmax, but that led
12992          to invalid assumptions like optimizing away bounds checking.  So
12993          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12994          TYPE_MAX_VALUE to the values for the mode above and only restrict
12995          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12996       ENUM_UNDERLYING_TYPE (enumtype)
12997         = build_distinct_type_copy (underlying_type);
12998       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12999       set_min_and_max_values_for_integral_type
13000         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
13001
13002       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
13003       if (flag_strict_enums)
13004         set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
13005     }
13006   else
13007     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
13008
13009   /* Convert each of the enumerators to the type of the underlying
13010      type of the enumeration.  */
13011   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13012     {
13013       location_t saved_location;
13014
13015       decl = TREE_VALUE (values);
13016       saved_location = input_location;
13017       input_location = DECL_SOURCE_LOCATION (decl);
13018       if (fixed_underlying_type_p)
13019         /* If the enumeration type has a fixed underlying type, we
13020            already checked all of the enumerator values.  */
13021         value = DECL_INITIAL (decl);
13022       else
13023         value = perform_implicit_conversion (underlying_type,
13024                                              DECL_INITIAL (decl),
13025                                              tf_warning_or_error);
13026       input_location = saved_location;
13027
13028       /* Do not clobber shared ints.  */
13029       value = copy_node (value);
13030
13031       TREE_TYPE (value) = enumtype;
13032       DECL_INITIAL (decl) = value;
13033     }
13034
13035   /* Fix up all variant types of this enum type.  */
13036   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13037     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13038
13039   if (at_class_scope_p ()
13040       && COMPLETE_TYPE_P (current_class_type)
13041       && UNSCOPED_ENUM_P (enumtype))
13042     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
13043                                                        current_class_type);
13044
13045   /* Finish debugging output for this type.  */
13046   rest_of_type_compilation (enumtype, namespace_bindings_p ());
13047 }
13048
13049 /* Finishes the enum type. This is called only the first time an
13050    enumeration is seen, be it opaque or odinary.
13051    ENUMTYPE is the type object.  */
13052
13053 void
13054 finish_enum (tree enumtype)
13055 {
13056   if (processing_template_decl)
13057     {
13058       if (at_function_scope_p ())
13059         add_stmt (build_min (TAG_DEFN, enumtype));
13060       return;
13061     }
13062
13063   /* If this is a forward declaration, there should not be any variants,
13064      though we can get a variant in the middle of an enum-specifier with
13065      wacky code like 'enum E { e = sizeof(const E*) };'  */
13066   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
13067               && (TYPE_VALUES (enumtype)
13068                   || !TYPE_NEXT_VARIANT (enumtype)));
13069 }
13070
13071 /* Build and install a CONST_DECL for an enumeration constant of the
13072    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13073    LOC is the location of NAME.
13074    Assignment of sequential values by default is handled here.  */
13075
13076 void
13077 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
13078 {
13079   tree decl;
13080   tree context;
13081   tree type;
13082
13083   /* scalar_constant_value will pull out this expression, so make sure
13084      it's folded as appropriate.  */
13085   if (processing_template_decl)
13086     value = fold_non_dependent_expr (value);
13087
13088   /* If the VALUE was erroneous, pretend it wasn't there; that will
13089      result in the enum being assigned the next value in sequence.  */
13090   if (value == error_mark_node)
13091     value = NULL_TREE;
13092
13093   /* Remove no-op casts from the value.  */
13094   if (value)
13095     STRIP_TYPE_NOPS (value);
13096
13097   if (! processing_template_decl)
13098     {
13099       /* Validate and default VALUE.  */
13100       if (value != NULL_TREE)
13101         {
13102           if (!ENUM_UNDERLYING_TYPE (enumtype))
13103             {
13104               tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
13105                                                            value, true);
13106               if (tmp_value)
13107                 value = tmp_value;
13108             }
13109           else if (! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13110             value = perform_implicit_conversion_flags
13111               (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
13112                LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
13113
13114           if (value == error_mark_node)
13115             value = NULL_TREE;
13116
13117           if (value != NULL_TREE)
13118             {
13119               value = cxx_constant_value (value);
13120
13121               if (TREE_CODE (value) != INTEGER_CST
13122                   || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13123                 {
13124                   error ("enumerator value for %qD is not an integer constant",
13125                          name);
13126                   value = NULL_TREE;
13127                 }
13128             }
13129         }
13130
13131       /* Default based on previous value.  */
13132       if (value == NULL_TREE)
13133         {
13134           if (TYPE_VALUES (enumtype))
13135             {
13136               tree prev_value;
13137               bool overflowed;
13138
13139               /* C++03 7.2/4: If no initializer is specified for the first
13140                  enumerator, the type is an unspecified integral
13141                  type. Otherwise the type is the same as the type of the
13142                  initializing value of the preceding enumerator unless the
13143                  incremented value is not representable in that type, in
13144                  which case the type is an unspecified integral type
13145                  sufficient to contain the incremented value.  */
13146               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13147               if (error_operand_p (prev_value))
13148                 value = error_mark_node;
13149               else
13150                 {
13151                   tree type = TREE_TYPE (prev_value);
13152                   signop sgn = TYPE_SIGN (type);
13153                   widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
13154                                            &overflowed);
13155                   if (!overflowed)
13156                     {
13157                       bool pos = !wi::neg_p (wi, sgn);
13158                       if (!wi::fits_to_tree_p (wi, type))
13159                         {
13160                           unsigned int itk;
13161                           for (itk = itk_int; itk != itk_none; itk++)
13162                             {
13163                               type = integer_types[itk];
13164                               if (type != NULL_TREE
13165                                   && (pos || !TYPE_UNSIGNED (type))
13166                                   && wi::fits_to_tree_p (wi, type))
13167                                 break;
13168                             }
13169                           if (type && cxx_dialect < cxx11
13170                               && itk > itk_unsigned_long)
13171                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
13172 incremented enumerator value is too large for %<unsigned long%>" :  "\
13173 incremented enumerator value is too large for %<long%>");
13174                         }
13175                       if (type == NULL_TREE)
13176                         overflowed = true;
13177                       else
13178                         value = wide_int_to_tree (type, wi);
13179                     }
13180
13181                   if (overflowed)
13182                     {
13183                       error ("overflow in enumeration values at %qD", name);
13184                       value = error_mark_node;
13185                     }
13186                 }
13187             }
13188           else
13189             value = integer_zero_node;
13190         }
13191
13192       /* Remove no-op casts from the value.  */
13193       STRIP_TYPE_NOPS (value);
13194
13195       /* If the underlying type of the enum is fixed, check whether
13196          the enumerator values fits in the underlying type.  If it
13197          does not fit, the program is ill-formed [C++0x dcl.enum].  */
13198       if (ENUM_UNDERLYING_TYPE (enumtype)
13199           && value
13200           && TREE_CODE (value) == INTEGER_CST)
13201         {
13202           if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13203             error ("enumerator value %E is outside the range of underlying "
13204                    "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13205
13206           /* Convert the value to the appropriate type.  */
13207           value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13208         }
13209     }
13210
13211   /* C++ associates enums with global, function, or class declarations.  */
13212   context = current_scope ();
13213
13214   /* Build the actual enumeration constant.  Note that the enumeration
13215      constants have the underlying type of the enum (if it is fixed)
13216      or the type of their initializer (if the underlying type of the
13217      enum is not fixed):
13218
13219       [ C++0x dcl.enum ]
13220
13221         If the underlying type is fixed, the type of each enumerator
13222         prior to the closing brace is the underlying type; if the
13223         initializing value of an enumerator cannot be represented by
13224         the underlying type, the program is ill-formed. If the
13225         underlying type is not fixed, the type of each enumerator is
13226         the type of its initializing value.
13227
13228     If the underlying type is not fixed, it will be computed by
13229     finish_enum and we will reset the type of this enumerator.  Of
13230     course, if we're processing a template, there may be no value.  */
13231   type = value ? TREE_TYPE (value) : NULL_TREE;
13232
13233   decl = build_decl (loc, CONST_DECL, name, type);
13234   
13235   DECL_CONTEXT (decl) = enumtype;
13236   TREE_CONSTANT (decl) = 1;
13237   TREE_READONLY (decl) = 1;
13238   DECL_INITIAL (decl) = value;
13239
13240   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13241     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13242        on the TYPE_FIELDS list for `S'.  (That's so that you can say
13243        things like `S::i' later.)  */
13244     finish_member_declaration (decl);
13245   else
13246     pushdecl (decl);
13247
13248   /* Add this enumeration constant to the list for this type.  */
13249   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13250 }
13251
13252 /* Look for an enumerator with the given NAME within the enumeration
13253    type ENUMTYPE.  This routine is used primarily for qualified name
13254    lookup into an enumerator in C++0x, e.g.,
13255
13256      enum class Color { Red, Green, Blue };
13257
13258      Color color = Color::Red;
13259
13260    Returns the value corresponding to the enumerator, or
13261    NULL_TREE if no such enumerator was found.  */
13262 tree
13263 lookup_enumerator (tree enumtype, tree name)
13264 {
13265   tree e;
13266   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13267
13268   e = purpose_member (name, TYPE_VALUES (enumtype));
13269   return e? TREE_VALUE (e) : NULL_TREE;
13270 }
13271
13272 \f
13273 /* We're defining DECL.  Make sure that its type is OK.  */
13274
13275 static void
13276 check_function_type (tree decl, tree current_function_parms)
13277 {
13278   tree fntype = TREE_TYPE (decl);
13279   tree return_type = complete_type (TREE_TYPE (fntype));
13280
13281   /* In a function definition, arg types must be complete.  */
13282   require_complete_types_for_parms (current_function_parms);
13283
13284   if (dependent_type_p (return_type)
13285       || type_uses_auto (return_type))
13286     return;
13287   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13288       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13289     {
13290       tree args = TYPE_ARG_TYPES (fntype);
13291
13292       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13293         error ("return type %q#T is incomplete", return_type);
13294       else
13295         error ("return type has Java class type %q#T", return_type);
13296
13297       /* Make it return void instead.  */
13298       if (TREE_CODE (fntype) == METHOD_TYPE)
13299         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13300                                              void_type_node,
13301                                              TREE_CHAIN (args));
13302       else
13303         fntype = build_function_type (void_type_node, args);
13304       fntype
13305         = build_exception_variant (fntype,
13306                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13307       fntype = (cp_build_type_attribute_variant
13308                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13309       TREE_TYPE (decl) = fntype;
13310     }
13311   else
13312     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13313 }
13314
13315 /* Create the FUNCTION_DECL for a function definition.
13316    DECLSPECS and DECLARATOR are the parts of the declaration;
13317    they describe the function's name and the type it returns,
13318    but twisted together in a fashion that parallels the syntax of C.
13319
13320    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13321    DECLARATOR is really the DECL for the function we are about to
13322    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13323    indicating that the function is an inline defined in-class.
13324
13325    This function creates a binding context for the function body
13326    as well as setting up the FUNCTION_DECL in current_function_decl.
13327
13328    For C++, we must first check whether that datum makes any sense.
13329    For example, "class A local_a(1,2);" means that variable local_a
13330    is an aggregate of type A, which should have a constructor
13331    applied to it with the argument list [1, 2].
13332
13333    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13334    or may be a BLOCK if the function has been defined previously
13335    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
13336    error_mark_node if the function has never been defined, or
13337    a BLOCK if the function has been defined somewhere.  */
13338
13339 bool
13340 start_preparsed_function (tree decl1, tree attrs, int flags)
13341 {
13342   tree ctype = NULL_TREE;
13343   tree fntype;
13344   tree restype;
13345   int doing_friend = 0;
13346   cp_binding_level *bl;
13347   tree current_function_parms;
13348   struct c_fileinfo *finfo
13349     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13350   bool honor_interface;
13351
13352   /* Sanity check.  */
13353   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13354   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13355
13356   fntype = TREE_TYPE (decl1);
13357   if (TREE_CODE (fntype) == METHOD_TYPE)
13358     ctype = TYPE_METHOD_BASETYPE (fntype);
13359
13360   /* ISO C++ 11.4/5.  A friend function defined in a class is in
13361      the (lexical) scope of the class in which it is defined.  */
13362   if (!ctype && DECL_FRIEND_P (decl1))
13363     {
13364       ctype = DECL_FRIEND_CONTEXT (decl1);
13365
13366       /* CTYPE could be null here if we're dealing with a template;
13367          for example, `inline friend float foo()' inside a template
13368          will have no CTYPE set.  */
13369       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13370         ctype = NULL_TREE;
13371       else
13372         doing_friend = 1;
13373     }
13374
13375   if (DECL_DECLARED_INLINE_P (decl1)
13376       && lookup_attribute ("noinline", attrs))
13377     warning (0, "inline function %q+D given attribute noinline", decl1);
13378
13379   /* Handle gnu_inline attribute.  */
13380   if (GNU_INLINE_P (decl1))
13381     {
13382       DECL_EXTERNAL (decl1) = 1;
13383       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13384       DECL_INTERFACE_KNOWN (decl1) = 1;
13385       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13386     }
13387
13388   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13389     /* This is a constructor, we must ensure that any default args
13390        introduced by this definition are propagated to the clones
13391        now. The clones are used directly in overload resolution.  */
13392     adjust_clone_args (decl1);
13393
13394   /* Sometimes we don't notice that a function is a static member, and
13395      build a METHOD_TYPE for it.  Fix that up now.  */
13396   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13397                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13398
13399   /* Set up current_class_type, and enter the scope of the class, if
13400      appropriate.  */
13401   if (ctype)
13402     push_nested_class (ctype);
13403   else if (DECL_STATIC_FUNCTION_P (decl1))
13404     push_nested_class (DECL_CONTEXT (decl1));
13405
13406   /* Now that we have entered the scope of the class, we must restore
13407      the bindings for any template parameters surrounding DECL1, if it
13408      is an inline member template.  (Order is important; consider the
13409      case where a template parameter has the same name as a field of
13410      the class.)  It is not until after this point that
13411      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13412   if (flags & SF_INCLASS_INLINE)
13413     maybe_begin_member_template_processing (decl1);
13414
13415   /* Effective C++ rule 15.  */
13416   if (warn_ecpp
13417       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13418       && VOID_TYPE_P (TREE_TYPE (fntype)))
13419     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13420
13421   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13422      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13423   if (!DECL_INITIAL (decl1))
13424     DECL_INITIAL (decl1) = error_mark_node;
13425
13426   /* This function exists in static storage.
13427      (This does not mean `static' in the C sense!)  */
13428   TREE_STATIC (decl1) = 1;
13429
13430   /* We must call push_template_decl after current_class_type is set
13431      up.  (If we are processing inline definitions after exiting a
13432      class scope, current_class_type will be NULL_TREE until set above
13433      by push_nested_class.)  */
13434   if (processing_template_decl)
13435     {
13436       tree newdecl1 = push_template_decl (decl1);
13437       if (newdecl1 == error_mark_node)
13438         {
13439           if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13440             pop_nested_class ();
13441           return false;
13442         }
13443       decl1 = newdecl1;
13444     }
13445
13446   /* We are now in the scope of the function being defined.  */
13447   current_function_decl = decl1;
13448
13449   /* Save the parm names or decls from this function's declarator
13450      where store_parm_decls will find them.  */
13451   current_function_parms = DECL_ARGUMENTS (decl1);
13452
13453   /* Make sure the parameter and return types are reasonable.  When
13454      you declare a function, these types can be incomplete, but they
13455      must be complete when you define the function.  */
13456   check_function_type (decl1, current_function_parms);
13457
13458   /* Build the return declaration for the function.  */
13459   restype = TREE_TYPE (fntype);
13460
13461   if (DECL_RESULT (decl1) == NULL_TREE)
13462     {
13463       tree resdecl;
13464
13465       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13466       DECL_ARTIFICIAL (resdecl) = 1;
13467       DECL_IGNORED_P (resdecl) = 1;
13468       DECL_RESULT (decl1) = resdecl;
13469
13470       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13471     }
13472
13473   /* Let the user know we're compiling this function.  */
13474   announce_function (decl1);
13475
13476   /* Record the decl so that the function name is defined.
13477      If we already have a decl for this name, and it is a FUNCTION_DECL,
13478      use the old decl.  */
13479   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13480     {
13481       /* A specialization is not used to guide overload resolution.  */
13482       if (!DECL_FUNCTION_MEMBER_P (decl1)
13483           && !(DECL_USE_TEMPLATE (decl1) &&
13484                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13485         {
13486           tree olddecl = pushdecl (decl1);
13487
13488           if (olddecl == error_mark_node)
13489             /* If something went wrong when registering the declaration,
13490                use DECL1; we have to have a FUNCTION_DECL to use when
13491                parsing the body of the function.  */
13492             ;
13493           else
13494             {
13495               /* Otherwise, OLDDECL is either a previous declaration
13496                  of the same function or DECL1 itself.  */
13497
13498               if (warn_missing_declarations
13499                   && olddecl == decl1
13500                   && !DECL_MAIN_P (decl1)
13501                   && TREE_PUBLIC (decl1)
13502                   && !DECL_DECLARED_INLINE_P (decl1))
13503                 {
13504                   tree context;
13505
13506                   /* Check whether DECL1 is in an anonymous
13507                      namespace.  */
13508                   for (context = DECL_CONTEXT (decl1);
13509                        context;
13510                        context = DECL_CONTEXT (context))
13511                     {
13512                       if (TREE_CODE (context) == NAMESPACE_DECL
13513                           && DECL_NAME (context) == NULL_TREE)
13514                         break;
13515                     }
13516
13517                   if (context == NULL)
13518                     warning (OPT_Wmissing_declarations,
13519                              "no previous declaration for %q+D", decl1);
13520                 }
13521
13522               decl1 = olddecl;
13523             }
13524         }
13525       else
13526         {
13527           /* We need to set the DECL_CONTEXT.  */
13528           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13529             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13530         }
13531       fntype = TREE_TYPE (decl1);
13532       restype = TREE_TYPE (fntype);
13533
13534       /* If #pragma weak applies, mark the decl appropriately now.
13535          The pragma only applies to global functions.  Because
13536          determining whether or not the #pragma applies involves
13537          computing the mangled name for the declaration, we cannot
13538          apply the pragma until after we have merged this declaration
13539          with any previous declarations; if the original declaration
13540          has a linkage specification, that specification applies to
13541          the definition as well, and may affect the mangled name.  */
13542       if (DECL_FILE_SCOPE_P (decl1))
13543         maybe_apply_pragma_weak (decl1);
13544     }
13545
13546   /* Reset this in case the call to pushdecl changed it.  */
13547   current_function_decl = decl1;
13548
13549   gcc_assert (DECL_INITIAL (decl1));
13550
13551   /* This function may already have been parsed, in which case just
13552      return; our caller will skip over the body without parsing.  */
13553   if (DECL_INITIAL (decl1) != error_mark_node)
13554     return true;
13555
13556   /* Initialize RTL machinery.  We cannot do this until
13557      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
13558      even when processing a template; this is how we get
13559      CFUN set up, and our per-function variables initialized.
13560      FIXME factor out the non-RTL stuff.  */
13561   bl = current_binding_level;
13562   allocate_struct_function (decl1, processing_template_decl);
13563
13564   /* Initialize the language data structures.  Whenever we start
13565      a new function, we destroy temporaries in the usual way.  */
13566   cfun->language = ggc_cleared_alloc<language_function> ();
13567   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13568   current_binding_level = bl;
13569
13570   if (!processing_template_decl && type_uses_auto (restype))
13571     {
13572       FNDECL_USED_AUTO (decl1) = true;
13573       current_function_auto_return_pattern = restype;
13574     }
13575
13576   /* Start the statement-tree, start the tree now.  */
13577   DECL_SAVED_TREE (decl1) = push_stmt_list ();
13578
13579   /* If we are (erroneously) defining a function that we have already
13580      defined before, wipe out what we knew before.  */
13581   if (!DECL_PENDING_INLINE_P (decl1))
13582     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13583
13584   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13585     {
13586       /* We know that this was set up by `grokclassfn'.  We do not
13587          wait until `store_parm_decls', since evil parse errors may
13588          never get us to that point.  Here we keep the consistency
13589          between `current_class_type' and `current_class_ptr'.  */
13590       tree t = DECL_ARGUMENTS (decl1);
13591
13592       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13593       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13594
13595       cp_function_chain->x_current_class_ref
13596         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13597       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
13598       cp_function_chain->x_current_class_ptr = t;
13599
13600       /* Constructors and destructors need to know whether they're "in
13601          charge" of initializing virtual base classes.  */
13602       t = DECL_CHAIN (t);
13603       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13604         {
13605           current_in_charge_parm = t;
13606           t = DECL_CHAIN (t);
13607         }
13608       if (DECL_HAS_VTT_PARM_P (decl1))
13609         {
13610           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13611           current_vtt_parm = t;
13612         }
13613     }
13614
13615   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13616                      /* Implicitly-defined methods (like the
13617                         destructor for a class in which no destructor
13618                         is explicitly declared) must not be defined
13619                         until their definition is needed.  So, we
13620                         ignore interface specifications for
13621                         compiler-generated functions.  */
13622                      && !DECL_ARTIFICIAL (decl1));
13623
13624   if (processing_template_decl)
13625     /* Don't mess with interface flags.  */;
13626   else if (DECL_INTERFACE_KNOWN (decl1))
13627     {
13628       tree ctx = decl_function_context (decl1);
13629
13630       if (DECL_NOT_REALLY_EXTERN (decl1))
13631         DECL_EXTERNAL (decl1) = 0;
13632
13633       if (ctx != NULL_TREE && vague_linkage_p (ctx))
13634         /* This is a function in a local class in an extern inline
13635            or template function.  */
13636         comdat_linkage (decl1);
13637     }
13638   /* If this function belongs to an interface, it is public.
13639      If it belongs to someone else's interface, it is also external.
13640      This only affects inlines and template instantiations.  */
13641   else if (!finfo->interface_unknown && honor_interface)
13642     {
13643       if (DECL_DECLARED_INLINE_P (decl1)
13644           || DECL_TEMPLATE_INSTANTIATION (decl1))
13645         {
13646           DECL_EXTERNAL (decl1)
13647             = (finfo->interface_only
13648                || (DECL_DECLARED_INLINE_P (decl1)
13649                    && ! flag_implement_inlines
13650                    && !DECL_VINDEX (decl1)));
13651
13652           /* For WIN32 we also want to put these in linkonce sections.  */
13653           maybe_make_one_only (decl1);
13654         }
13655       else
13656         DECL_EXTERNAL (decl1) = 0;
13657       DECL_INTERFACE_KNOWN (decl1) = 1;
13658       /* If this function is in an interface implemented in this file,
13659          make sure that the back end knows to emit this function
13660          here.  */
13661       if (!DECL_EXTERNAL (decl1))
13662         mark_needed (decl1);
13663     }
13664   else if (finfo->interface_unknown && finfo->interface_only
13665            && honor_interface)
13666     {
13667       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13668          interface, we will have both finfo->interface_unknown and
13669          finfo->interface_only set.  In that case, we don't want to
13670          use the normal heuristics because someone will supply a
13671          #pragma implementation elsewhere, and deducing it here would
13672          produce a conflict.  */
13673       comdat_linkage (decl1);
13674       DECL_EXTERNAL (decl1) = 0;
13675       DECL_INTERFACE_KNOWN (decl1) = 1;
13676       DECL_DEFER_OUTPUT (decl1) = 1;
13677     }
13678   else
13679     {
13680       /* This is a definition, not a reference.
13681          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
13682       if (!GNU_INLINE_P (decl1))
13683         DECL_EXTERNAL (decl1) = 0;
13684
13685       if ((DECL_DECLARED_INLINE_P (decl1)
13686            || DECL_TEMPLATE_INSTANTIATION (decl1))
13687           && ! DECL_INTERFACE_KNOWN (decl1))
13688         DECL_DEFER_OUTPUT (decl1) = 1;
13689       else
13690         DECL_INTERFACE_KNOWN (decl1) = 1;
13691     }
13692
13693   /* Determine the ELF visibility attribute for the function.  We must not
13694      do this before calling "pushdecl", as we must allow "duplicate_decls"
13695      to merge any attributes appropriately.  We also need to wait until
13696      linkage is set.  */
13697   if (!DECL_CLONED_FUNCTION_P (decl1))
13698     determine_visibility (decl1);
13699
13700   if (!processing_template_decl)
13701     maybe_instantiate_noexcept (decl1);
13702
13703   begin_scope (sk_function_parms, decl1);
13704
13705   ++function_depth;
13706
13707   if (DECL_DESTRUCTOR_P (decl1)
13708       || (DECL_CONSTRUCTOR_P (decl1)
13709           && targetm.cxx.cdtor_returns_this ()))
13710     {
13711       cdtor_label = create_artificial_label (input_location);
13712     }
13713
13714   start_fname_decls ();
13715
13716   store_parm_decls (current_function_parms);
13717
13718   return true;
13719 }
13720
13721
13722 /* Like start_preparsed_function, except that instead of a
13723    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13724
13725    Returns true on success.  If the DECLARATOR is not suitable
13726    for a function, we return false, which tells the parser to
13727    skip the entire function.  */
13728
13729 bool
13730 start_function (cp_decl_specifier_seq *declspecs,
13731                 const cp_declarator *declarator,
13732                 tree attrs)
13733 {
13734   tree decl1;
13735
13736   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13737   if (decl1 == error_mark_node)
13738     return false;
13739   /* If the declarator is not suitable for a function definition,
13740      cause a syntax error.  */
13741   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13742     {
13743       error ("invalid function declaration");
13744       return false;
13745     }
13746
13747   if (DECL_MAIN_P (decl1))
13748     /* main must return int.  grokfndecl should have corrected it
13749        (and issued a diagnostic) if the user got it wrong.  */
13750     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13751                              integer_type_node));
13752
13753   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13754 }
13755 \f
13756 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13757    FN.  */
13758
13759 static bool
13760 use_eh_spec_block (tree fn)
13761 {
13762   return (flag_exceptions && flag_enforce_eh_specs
13763           && !processing_template_decl
13764           && !type_throw_all_p (TREE_TYPE (fn))
13765           /* We insert the EH_SPEC_BLOCK only in the original
13766              function; then, it is copied automatically to the
13767              clones.  */
13768           && !DECL_CLONED_FUNCTION_P (fn)
13769           /* Implicitly-generated constructors and destructors have
13770              exception specifications.  However, those specifications
13771              are the union of the possible exceptions specified by the
13772              constructors/destructors for bases and members, so no
13773              unallowed exception will ever reach this function.  By
13774              not creating the EH_SPEC_BLOCK we save a little memory,
13775              and we avoid spurious warnings about unreachable
13776              code.  */
13777           && !DECL_DEFAULTED_FN (fn));
13778 }
13779
13780 /* Store the parameter declarations into the current function declaration.
13781    This is called after parsing the parameter declarations, before
13782    digesting the body of the function.
13783
13784    Also install to binding contour return value identifier, if any.  */
13785
13786 static void
13787 store_parm_decls (tree current_function_parms)
13788 {
13789   tree fndecl = current_function_decl;
13790   tree parm;
13791
13792   /* This is a chain of any other decls that came in among the parm
13793      declarations.  If a parm is declared with  enum {foo, bar} x;
13794      then CONST_DECLs for foo and bar are put here.  */
13795   tree nonparms = NULL_TREE;
13796
13797   if (current_function_parms)
13798     {
13799       /* This case is when the function was defined with an ANSI prototype.
13800          The parms already have decls, so we need not do anything here
13801          except record them as in effect
13802          and complain if any redundant old-style parm decls were written.  */
13803
13804       tree specparms = current_function_parms;
13805       tree next;
13806
13807       /* Must clear this because it might contain TYPE_DECLs declared
13808              at class level.  */
13809       current_binding_level->names = NULL;
13810
13811       /* If we're doing semantic analysis, then we'll call pushdecl
13812              for each of these.  We must do them in reverse order so that
13813              they end in the correct forward order.  */
13814       specparms = nreverse (specparms);
13815
13816       for (parm = specparms; parm; parm = next)
13817         {
13818           next = DECL_CHAIN (parm);
13819           if (TREE_CODE (parm) == PARM_DECL)
13820             {
13821               if (DECL_NAME (parm) == NULL_TREE
13822                   || !VOID_TYPE_P (parm))
13823                 pushdecl (parm);
13824               else
13825                 error ("parameter %qD declared void", parm);
13826             }
13827           else
13828             {
13829               /* If we find an enum constant or a type tag,
13830                  put it aside for the moment.  */
13831               TREE_CHAIN (parm) = NULL_TREE;
13832               nonparms = chainon (nonparms, parm);
13833             }
13834         }
13835
13836       /* Get the decls in their original chain order and record in the
13837          function.  This is all and only the PARM_DECLs that were
13838          pushed into scope by the loop above.  */
13839       DECL_ARGUMENTS (fndecl) = getdecls ();
13840     }
13841   else
13842     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13843
13844   /* Now store the final chain of decls for the arguments
13845      as the decl-chain of the current lexical scope.
13846      Put the enumerators in as well, at the front so that
13847      DECL_ARGUMENTS is not modified.  */
13848   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13849
13850   if (use_eh_spec_block (current_function_decl))
13851     current_eh_spec_block = begin_eh_spec_block ();
13852 }
13853
13854 \f
13855 /* We have finished doing semantic analysis on DECL, but have not yet
13856    generated RTL for its body.  Save away our current state, so that
13857    when we want to generate RTL later we know what to do.  */
13858
13859 static void
13860 save_function_data (tree decl)
13861 {
13862   struct language_function *f;
13863
13864   /* Save the language-specific per-function data so that we can
13865      get it back when we really expand this function.  */
13866   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13867
13868   /* Make a copy.  */
13869   f = ggc_alloc<language_function> ();
13870   memcpy (f, cp_function_chain, sizeof (struct language_function));
13871   DECL_SAVED_FUNCTION_DATA (decl) = f;
13872
13873   /* Clear out the bits we don't need.  */
13874   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13875   f->bindings = NULL;
13876   f->x_local_names = NULL;
13877   f->base.local_typedefs = NULL;
13878 }
13879
13880
13881 /* Set the return value of the constructor (if present).  */
13882
13883 static void
13884 finish_constructor_body (void)
13885 {
13886   tree val;
13887   tree exprstmt;
13888
13889   if (targetm.cxx.cdtor_returns_this ()
13890       && (! TYPE_FOR_JAVA (current_class_type)))
13891     {
13892       /* Any return from a constructor will end up here.  */
13893       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13894
13895       val = DECL_ARGUMENTS (current_function_decl);
13896       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13897                     DECL_RESULT (current_function_decl), val);
13898       /* Return the address of the object.  */
13899       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13900       add_stmt (exprstmt);
13901     }
13902 }
13903
13904 /* Do all the processing for the beginning of a destructor; set up the
13905    vtable pointers and cleanups for bases and members.  */
13906
13907 static void
13908 begin_destructor_body (void)
13909 {
13910   tree compound_stmt;
13911
13912   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13913      issued an error message.  We still want to try to process the
13914      body of the function, but initialize_vtbl_ptrs will crash if
13915      TYPE_BINFO is NULL.  */
13916   if (COMPLETE_TYPE_P (current_class_type))
13917     {
13918       compound_stmt = begin_compound_stmt (0);
13919       /* Make all virtual function table pointers in non-virtual base
13920          classes point to CURRENT_CLASS_TYPE's virtual function
13921          tables.  */
13922       initialize_vtbl_ptrs (current_class_ptr);
13923       finish_compound_stmt (compound_stmt);
13924
13925       if (flag_lifetime_dse)
13926         {
13927           /* Insert a cleanup to let the back end know that the object is dead
13928              when we exit the destructor, either normally or via exception.  */
13929           tree btype = CLASSTYPE_AS_BASE (current_class_type);
13930           tree clobber = build_constructor (btype, NULL);
13931           TREE_THIS_VOLATILE (clobber) = true;
13932           tree bref = build_nop (build_reference_type (btype),
13933                                  current_class_ptr);
13934           bref = convert_from_reference (bref);
13935           tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
13936           finish_decl_cleanup (NULL_TREE, exprstmt);
13937         }
13938
13939       /* And insert cleanups for our bases and members so that they
13940          will be properly destroyed if we throw.  */
13941       push_base_cleanups ();
13942     }
13943 }
13944
13945 /* At the end of every destructor we generate code to delete the object if
13946    necessary.  Do that now.  */
13947
13948 static void
13949 finish_destructor_body (void)
13950 {
13951   tree exprstmt;
13952
13953   /* Any return from a destructor will end up here; that way all base
13954      and member cleanups will be run when the function returns.  */
13955   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13956
13957   /* In a virtual destructor, we must call delete.  */
13958   if (DECL_VIRTUAL_P (current_function_decl))
13959     {
13960       tree if_stmt;
13961       tree virtual_size = cxx_sizeof (current_class_type);
13962
13963       /* [class.dtor]
13964
13965       At the point of definition of a virtual destructor (including
13966       an implicit definition), non-placement operator delete shall
13967       be looked up in the scope of the destructor's class and if
13968       found shall be accessible and unambiguous.  */
13969       exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13970                                        virtual_size,
13971                                        /*global_p=*/false,
13972                                        /*placement=*/NULL_TREE,
13973                                        /*alloc_fn=*/NULL_TREE,
13974                                        tf_warning_or_error);
13975
13976       if_stmt = begin_if_stmt ();
13977       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13978                                    current_in_charge_parm,
13979                                    integer_one_node),
13980                            if_stmt);
13981       finish_expr_stmt (exprstmt);
13982       finish_then_clause (if_stmt);
13983       finish_if_stmt (if_stmt);
13984     }
13985
13986   if (targetm.cxx.cdtor_returns_this ())
13987     {
13988       tree val;
13989
13990       val = DECL_ARGUMENTS (current_function_decl);
13991       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13992                     DECL_RESULT (current_function_decl), val);
13993       /* Return the address of the object.  */
13994       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13995       add_stmt (exprstmt);
13996     }
13997 }
13998
13999 /* Do the necessary processing for the beginning of a function body, which
14000    in this case includes member-initializers, but not the catch clauses of
14001    a function-try-block.  Currently, this means opening a binding level
14002    for the member-initializers (in a ctor), member cleanups (in a dtor),
14003    and capture proxies (in a lambda operator()).  */
14004
14005 tree
14006 begin_function_body (void)
14007 {
14008   tree stmt;
14009
14010   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
14011     return NULL_TREE;
14012
14013   if (processing_template_decl)
14014     /* Do nothing now.  */;
14015   else
14016     /* Always keep the BLOCK node associated with the outermost pair of
14017        curly braces of a function.  These are needed for correct
14018        operation of dwarfout.c.  */
14019     keep_next_level (true);
14020
14021   stmt = begin_compound_stmt (BCS_FN_BODY);
14022
14023   if (processing_template_decl)
14024     /* Do nothing now.  */;
14025   else if (DECL_DESTRUCTOR_P (current_function_decl))
14026     begin_destructor_body ();
14027
14028   return stmt;
14029 }
14030
14031 /* Do the processing for the end of a function body.  Currently, this means
14032    closing out the cleanups for fully-constructed bases and members, and in
14033    the case of the destructor, deleting the object if desired.  Again, this
14034    is only meaningful for [cd]tors, since they are the only functions where
14035    there is a significant distinction between the main body and any
14036    function catch clauses.  Handling, say, main() return semantics here
14037    would be wrong, as flowing off the end of a function catch clause for
14038    main() would also need to return 0.  */
14039
14040 void
14041 finish_function_body (tree compstmt)
14042 {
14043   if (compstmt == NULL_TREE)
14044     return;
14045
14046   /* Close the block.  */
14047   finish_compound_stmt (compstmt);
14048
14049   if (processing_template_decl)
14050     /* Do nothing now.  */;
14051   else if (DECL_CONSTRUCTOR_P (current_function_decl))
14052     finish_constructor_body ();
14053   else if (DECL_DESTRUCTOR_P (current_function_decl))
14054     finish_destructor_body ();
14055 }
14056
14057 /* Given a function, returns the BLOCK corresponding to the outermost level
14058    of curly braces, skipping the artificial block created for constructor
14059    initializers.  */
14060
14061 tree
14062 outer_curly_brace_block (tree fndecl)
14063 {
14064   tree block = DECL_INITIAL (fndecl);
14065   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14066     return block;
14067   block = BLOCK_SUBBLOCKS (block);
14068   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14069     return block;
14070   block = BLOCK_SUBBLOCKS (block);
14071   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
14072   return block;
14073 }
14074
14075 /* If FNDECL is a class's key method, add the class to the list of
14076    keyed classes that should be emitted.  */
14077
14078 static void
14079 record_key_method_defined (tree fndecl)
14080 {
14081   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14082       && DECL_VIRTUAL_P (fndecl)
14083       && !processing_template_decl)
14084     {
14085       tree fnclass = DECL_CONTEXT (fndecl);
14086       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14087         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14088     }
14089 }
14090
14091 /* Subroutine of finish_function.
14092    Save the body of constexpr functions for possible
14093    future compile time evaluation.  */
14094
14095 static void
14096 maybe_save_function_definition (tree fun)
14097 {
14098   if (!processing_template_decl
14099       && DECL_DECLARED_CONSTEXPR_P (fun)
14100       && !cp_function_chain->invalid_constexpr
14101       && !DECL_CLONED_FUNCTION_P (fun))
14102     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
14103 }
14104
14105 /* Finish up a function declaration and compile that function
14106    all the way to assembler language output.  The free the storage
14107    for the function definition.
14108
14109    FLAGS is a bitwise or of the following values:
14110      2 - INCLASS_INLINE
14111        We just finished processing the body of an in-class inline
14112        function definition.  (This processing will have taken place
14113        after the class definition is complete.)  */
14114
14115 tree
14116 finish_function (int flags)
14117 {
14118   tree fndecl = current_function_decl;
14119   tree fntype, ctype = NULL_TREE;
14120   int inclass_inline = (flags & 2) != 0;
14121
14122   /* When we get some parse errors, we can end up without a
14123      current_function_decl, so cope.  */
14124   if (fndecl == NULL_TREE)
14125     return error_mark_node;
14126
14127   if (c_dialect_objc ())
14128     objc_finish_function ();
14129
14130   gcc_assert (!defer_mark_used_calls);
14131   defer_mark_used_calls = true;
14132
14133   record_key_method_defined (fndecl);
14134
14135   fntype = TREE_TYPE (fndecl);
14136
14137   /*  TREE_READONLY (fndecl) = 1;
14138       This caused &foo to be of type ptr-to-const-function
14139       which then got a warning when stored in a ptr-to-function variable.  */
14140
14141   gcc_assert (building_stmt_list_p ());
14142   /* The current function is being defined, so its DECL_INITIAL should
14143      be set, and unless there's a multiple definition, it should be
14144      error_mark_node.  */
14145   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
14146
14147   /* For a cloned function, we've already got all the code we need;
14148      there's no need to add any extra bits.  */
14149   if (!DECL_CLONED_FUNCTION_P (fndecl))
14150     {
14151       /* Make it so that `main' always returns 0 by default.  */
14152       if (DECL_MAIN_P (current_function_decl))
14153         finish_return_stmt (integer_zero_node);
14154
14155       if (use_eh_spec_block (current_function_decl))
14156         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14157                               (TREE_TYPE (current_function_decl)),
14158                               current_eh_spec_block);
14159     }
14160
14161   /* If we're saving up tree structure, tie off the function now.  */
14162   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
14163
14164   if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
14165     cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
14166
14167   finish_fname_decls ();
14168
14169   /* If this function can't throw any exceptions, remember that.  */
14170   if (!processing_template_decl
14171       && !cp_function_chain->can_throw
14172       && !flag_non_call_exceptions
14173       && !decl_replaceable_p (fndecl))
14174     TREE_NOTHROW (fndecl) = 1;
14175
14176   /* This must come after expand_function_end because cleanups might
14177      have declarations (from inline functions) that need to go into
14178      this function's blocks.  */
14179
14180   /* If the current binding level isn't the outermost binding level
14181      for this function, either there is a bug, or we have experienced
14182      syntax errors and the statement tree is malformed.  */
14183   if (current_binding_level->kind != sk_function_parms)
14184     {
14185       /* Make sure we have already experienced errors.  */
14186       gcc_assert (errorcount);
14187
14188       /* Throw away the broken statement tree and extra binding
14189          levels.  */
14190       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14191
14192       while (current_binding_level->kind != sk_function_parms)
14193         {
14194           if (current_binding_level->kind == sk_class)
14195             pop_nested_class ();
14196           else
14197             poplevel (0, 0, 0);
14198         }
14199     }
14200   poplevel (1, 0, 1);
14201
14202   /* Statements should always be full-expressions at the outermost set
14203      of curly braces for a function.  */
14204   gcc_assert (stmts_are_full_exprs_p ());
14205
14206   /* If there are no return statements in a function with auto return type,
14207      the return type is void.  But if the declared type is something like
14208      auto*, this is an error.  */
14209   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14210       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14211     {
14212       if (!is_auto (current_function_auto_return_pattern)
14213           && !current_function_returns_value && !current_function_returns_null)
14214         {
14215           error ("no return statements in function returning %qT",
14216                  current_function_auto_return_pattern);
14217           inform (input_location, "only plain %<auto%> return type can be "
14218                   "deduced to %<void%>");
14219         }
14220       apply_deduced_return_type (fndecl, void_type_node);
14221       fntype = TREE_TYPE (fndecl);
14222     }
14223
14224   /* Save constexpr function body before it gets munged by
14225      the NRV transformation.   */
14226   maybe_save_function_definition (fndecl);
14227
14228   /* Set up the named return value optimization, if we can.  Candidate
14229      variables are selected in check_return_expr.  */
14230   if (current_function_return_value)
14231     {
14232       tree r = current_function_return_value;
14233       tree outer;
14234
14235       if (r != error_mark_node
14236           /* This is only worth doing for fns that return in memory--and
14237              simpler, since we don't have to worry about promoted modes.  */
14238           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14239           /* Only allow this for variables declared in the outer scope of
14240              the function so we know that their lifetime always ends with a
14241              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
14242              we were to do this optimization in tree-ssa.  */
14243           && (outer = outer_curly_brace_block (fndecl))
14244           && chain_member (r, BLOCK_VARS (outer)))
14245         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14246
14247       current_function_return_value = NULL_TREE;
14248     }
14249
14250   /* Remember that we were in class scope.  */
14251   if (current_class_name)
14252     ctype = current_class_type;
14253
14254   /* Must mark the RESULT_DECL as being in this function.  */
14255   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14256
14257   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14258      to the FUNCTION_DECL node itself.  */
14259   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14260
14261   /* Save away current state, if appropriate.  */
14262   if (!processing_template_decl)
14263     save_function_data (fndecl);
14264
14265   /* Complain if there's just no return statement.  */
14266   if (warn_return_type
14267       && !VOID_TYPE_P (TREE_TYPE (fntype))
14268       && !dependent_type_p (TREE_TYPE (fntype))
14269       && !current_function_returns_value && !current_function_returns_null
14270       /* Don't complain if we abort or throw.  */
14271       && !current_function_returns_abnormally
14272       /* Don't complain if there's an infinite loop.  */
14273       && !current_function_infinite_loop
14274       /* Don't complain if we are declared noreturn.  */
14275       && !TREE_THIS_VOLATILE (fndecl)
14276       && !DECL_NAME (DECL_RESULT (fndecl))
14277       && !TREE_NO_WARNING (fndecl)
14278       /* Structor return values (if any) are set by the compiler.  */
14279       && !DECL_CONSTRUCTOR_P (fndecl)
14280       && !DECL_DESTRUCTOR_P (fndecl)
14281       && targetm.warn_func_return (fndecl))
14282     {
14283       warning (OPT_Wreturn_type,
14284                "no return statement in function returning non-void");
14285       TREE_NO_WARNING (fndecl) = 1;
14286     }
14287
14288   /* Store the end of the function, so that we get good line number
14289      info for the epilogue.  */
14290   cfun->function_end_locus = input_location;
14291
14292   /* Complain about parameters that are only set, but never otherwise used.  */
14293   if (warn_unused_but_set_parameter
14294       && !processing_template_decl
14295       && errorcount == unused_but_set_errorcount
14296       && !DECL_CLONED_FUNCTION_P (fndecl))
14297     {
14298       tree decl;
14299
14300       for (decl = DECL_ARGUMENTS (fndecl);
14301            decl;
14302            decl = DECL_CHAIN (decl))
14303         if (TREE_USED (decl)
14304             && TREE_CODE (decl) == PARM_DECL
14305             && !DECL_READ_P (decl)
14306             && DECL_NAME (decl)
14307             && !DECL_ARTIFICIAL (decl)
14308             && !TREE_NO_WARNING (decl)
14309             && !DECL_IN_SYSTEM_HEADER (decl)
14310             && TREE_TYPE (decl) != error_mark_node
14311             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14312             && (!CLASS_TYPE_P (TREE_TYPE (decl))
14313                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14314           warning (OPT_Wunused_but_set_parameter,
14315                    "parameter %q+D set but not used", decl);
14316       unused_but_set_errorcount = errorcount;
14317     }
14318
14319   /* Complain about locally defined typedefs that are not used in this
14320      function.  */
14321   maybe_warn_unused_local_typedefs ();
14322
14323   /* Genericize before inlining.  */
14324   if (!processing_template_decl)
14325     {
14326       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14327       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14328       cp_genericize (fndecl);
14329       /* Clear out the bits we don't need.  */
14330       f->x_current_class_ptr = NULL;
14331       f->x_current_class_ref = NULL;
14332       f->x_eh_spec_block = NULL;
14333       f->x_in_charge_parm = NULL;
14334       f->x_vtt_parm = NULL;
14335       f->x_return_value = NULL;
14336       f->bindings = NULL;
14337       f->extern_decl_map = NULL;
14338       f->infinite_loops = NULL;
14339     }
14340   /* Clear out the bits we don't need.  */
14341   local_names = NULL;
14342
14343   /* We're leaving the context of this function, so zap cfun.  It's still in
14344      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
14345   set_cfun (NULL);
14346   current_function_decl = NULL;
14347
14348   /* If this is an in-class inline definition, we may have to pop the
14349      bindings for the template parameters that we added in
14350      maybe_begin_member_template_processing when start_function was
14351      called.  */
14352   if (inclass_inline)
14353     maybe_end_member_template_processing ();
14354
14355   /* Leave the scope of the class.  */
14356   if (ctype)
14357     pop_nested_class ();
14358
14359   --function_depth;
14360
14361   /* Clean up.  */
14362   current_function_decl = NULL_TREE;
14363
14364   defer_mark_used_calls = false;
14365   if (deferred_mark_used_calls)
14366     {
14367       unsigned int i;
14368       tree decl;
14369
14370       FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14371         mark_used (decl);
14372       vec_free (deferred_mark_used_calls);
14373     }
14374
14375   return fndecl;
14376 }
14377 \f
14378 /* Create the FUNCTION_DECL for a function definition.
14379    DECLSPECS and DECLARATOR are the parts of the declaration;
14380    they describe the return type and the name of the function,
14381    but twisted together in a fashion that parallels the syntax of C.
14382
14383    This function creates a binding context for the function body
14384    as well as setting up the FUNCTION_DECL in current_function_decl.
14385
14386    Returns a FUNCTION_DECL on success.
14387
14388    If the DECLARATOR is not suitable for a function (it defines a datum
14389    instead), we return 0, which tells yyparse to report a parse error.
14390
14391    May return void_type_node indicating that this method is actually
14392    a friend.  See grokfield for more details.
14393
14394    Came here with a `.pushlevel' .
14395
14396    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14397    CHANGES TO CODE IN `grokfield'.  */
14398
14399 tree
14400 grokmethod (cp_decl_specifier_seq *declspecs,
14401             const cp_declarator *declarator, tree attrlist)
14402 {
14403   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14404                                 &attrlist);
14405
14406   if (fndecl == error_mark_node)
14407     return error_mark_node;
14408
14409   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14410     {
14411       error ("invalid member function declaration");
14412       return error_mark_node;
14413     }
14414
14415   if (attrlist)
14416     cplus_decl_attributes (&fndecl, attrlist, 0);
14417
14418   /* Pass friends other than inline friend functions back.  */
14419   if (fndecl == void_type_node)
14420     return fndecl;
14421
14422   if (DECL_IN_AGGR_P (fndecl))
14423     {
14424       if (DECL_CLASS_SCOPE_P (fndecl))
14425         error ("%qD is already defined in class %qT", fndecl,
14426                DECL_CONTEXT (fndecl));
14427       return error_mark_node;
14428     }
14429
14430   check_template_shadow (fndecl);
14431
14432   DECL_COMDAT (fndecl) = 1;
14433   DECL_DECLARED_INLINE_P (fndecl) = 1;
14434   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14435
14436   /* We process method specializations in finish_struct_1.  */
14437   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14438     {
14439       fndecl = push_template_decl (fndecl);
14440       if (fndecl == error_mark_node)
14441         return fndecl;
14442     }
14443
14444   if (! DECL_FRIEND_P (fndecl))
14445     {
14446       if (DECL_CHAIN (fndecl))
14447         {
14448           fndecl = copy_node (fndecl);
14449           TREE_CHAIN (fndecl) = NULL_TREE;
14450         }
14451     }
14452
14453   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14454
14455   DECL_IN_AGGR_P (fndecl) = 1;
14456   return fndecl;
14457 }
14458 \f
14459
14460 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
14461    we can lay it out later, when and if its type becomes complete.
14462
14463    Also handle constexpr variables where the initializer involves
14464    an unlowered PTRMEM_CST because the class isn't complete yet.  */
14465
14466 void
14467 maybe_register_incomplete_var (tree var)
14468 {
14469   gcc_assert (VAR_P (var));
14470
14471   /* Keep track of variables with incomplete types.  */
14472   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14473       && DECL_EXTERNAL (var))
14474     {
14475       tree inner_type = TREE_TYPE (var);
14476
14477       while (TREE_CODE (inner_type) == ARRAY_TYPE)
14478         inner_type = TREE_TYPE (inner_type);
14479       inner_type = TYPE_MAIN_VARIANT (inner_type);
14480
14481       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14482           /* RTTI TD entries are created while defining the type_info.  */
14483           || (TYPE_LANG_SPECIFIC (inner_type)
14484               && TYPE_BEING_DEFINED (inner_type)))
14485         {
14486           incomplete_var iv = {var, inner_type};
14487           vec_safe_push (incomplete_vars, iv);
14488         }
14489       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
14490                && decl_constant_var_p (var)
14491                && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
14492         {
14493           /* When the outermost open class is complete we can resolve any
14494              pointers-to-members.  */
14495           tree context = outermost_open_class ();
14496           incomplete_var iv = {var, context};
14497           vec_safe_push (incomplete_vars, iv);
14498         }
14499     }
14500 }
14501
14502 /* Called when a class type (given by TYPE) is defined.  If there are
14503    any existing VAR_DECLs whose type has been completed by this
14504    declaration, update them now.  */
14505
14506 void
14507 complete_vars (tree type)
14508 {
14509   unsigned ix;
14510   incomplete_var *iv;
14511
14512   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14513     {
14514       if (same_type_p (type, iv->incomplete_type))
14515         {
14516           tree var = iv->decl;
14517           tree type = TREE_TYPE (var);
14518
14519           if (TYPE_MAIN_VARIANT (strip_array_types (type))
14520               == iv->incomplete_type)
14521             {
14522               /* Complete the type of the variable.  The VAR_DECL itself
14523                  will be laid out in expand_expr.  */
14524               complete_type (type);
14525               cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14526             }
14527
14528           if (DECL_INITIAL (var)
14529               && decl_constant_var_p (var))
14530             DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14531
14532           /* Remove this entry from the list.  */
14533           incomplete_vars->unordered_remove (ix);
14534         }
14535       else
14536         ix++;
14537     }
14538
14539   /* Check for pending declarations which may have abstract type.  */
14540   complete_type_check_abstract (type);
14541 }
14542
14543 /* If DECL is of a type which needs a cleanup, build and return an
14544    expression to perform that cleanup here.  Return NULL_TREE if no
14545    cleanup need be done.  */
14546
14547 tree
14548 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14549 {
14550   tree type;
14551   tree attr;
14552   tree cleanup;
14553
14554   /* Assume no cleanup is required.  */
14555   cleanup = NULL_TREE;
14556
14557   if (error_operand_p (decl))
14558     return cleanup;
14559
14560   /* Handle "__attribute__((cleanup))".  We run the cleanup function
14561      before the destructor since the destructor is what actually
14562      terminates the lifetime of the object.  */
14563   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14564   if (attr)
14565     {
14566       tree id;
14567       tree fn;
14568       tree arg;
14569
14570       /* Get the name specified by the user for the cleanup function.  */
14571       id = TREE_VALUE (TREE_VALUE (attr));
14572       /* Look up the name to find the cleanup function to call.  It is
14573          important to use lookup_name here because that is what is
14574          used in c-common.c:handle_cleanup_attribute when performing
14575          initial checks on the attribute.  Note that those checks
14576          include ensuring that the function found is not an overloaded
14577          function, or an object with an overloaded call operator,
14578          etc.; we can rely on the fact that the function found is an
14579          ordinary FUNCTION_DECL.  */
14580       fn = lookup_name (id);
14581       arg = build_address (decl);
14582       mark_used (decl);
14583       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14584       if (cleanup == error_mark_node)
14585         return error_mark_node;
14586     }
14587   /* Handle ordinary C++ destructors.  */
14588   type = TREE_TYPE (decl);
14589   if (type_build_dtor_call (type))
14590     {
14591       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14592       tree addr;
14593       tree call;
14594
14595       if (TREE_CODE (type) == ARRAY_TYPE)
14596         addr = decl;
14597       else
14598         addr = build_address (decl);
14599
14600       call = build_delete (TREE_TYPE (addr), addr,
14601                            sfk_complete_destructor, flags, 0, complain);
14602       if (call == error_mark_node)
14603         cleanup = error_mark_node;
14604       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14605         /* Discard the call.  */;
14606       else if (cleanup)
14607         cleanup = cp_build_compound_expr (cleanup, call, complain);
14608       else
14609         cleanup = call;
14610     }
14611
14612   /* build_delete sets the location of the destructor call to the
14613      current location, even though the destructor is going to be
14614      called later, at the end of the current scope.  This can lead to
14615      a "jumpy" behaviour for users of debuggers when they step around
14616      the end of the block.  So let's unset the location of the
14617      destructor call instead.  */
14618   if (cleanup != NULL && EXPR_P (cleanup))
14619     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14620
14621   if (cleanup
14622       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl))))
14623     /* Treat objects with destructors as used; the destructor may do
14624        something substantive.  */
14625     mark_used (decl);
14626
14627   return cleanup;
14628 }
14629
14630 \f
14631 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14632    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14633    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
14634
14635 tree
14636 static_fn_type (tree memfntype)
14637 {
14638   tree fntype;
14639   tree args;
14640
14641   if (TYPE_PTRMEMFUNC_P (memfntype))
14642     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14643   if (POINTER_TYPE_P (memfntype)
14644       || TREE_CODE (memfntype) == FUNCTION_DECL)
14645     memfntype = TREE_TYPE (memfntype);
14646   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14647     return memfntype;
14648   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14649   args = TYPE_ARG_TYPES (memfntype);
14650   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14651   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14652   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14653   fntype = (cp_build_type_attribute_variant
14654             (fntype, TYPE_ATTRIBUTES (memfntype)));
14655   fntype = (build_exception_variant
14656             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14657   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
14658     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
14659   return fntype;
14660 }
14661
14662 /* DECL was originally constructed as a non-static member function,
14663    but turned out to be static.  Update it accordingly.  */
14664
14665 void
14666 revert_static_member_fn (tree decl)
14667 {
14668   tree stype = static_fn_type (decl);
14669   cp_cv_quals quals = type_memfn_quals (stype);
14670   cp_ref_qualifier rqual = type_memfn_rqual (stype);
14671
14672   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14673     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14674
14675   TREE_TYPE (decl) = stype;
14676
14677   if (DECL_ARGUMENTS (decl))
14678     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14679   DECL_STATIC_FUNCTION_P (decl) = 1;
14680 }
14681
14682 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14683    one of the language-independent trees.  */
14684
14685 enum cp_tree_node_structure_enum
14686 cp_tree_node_structure (union lang_tree_node * t)
14687 {
14688   switch (TREE_CODE (&t->generic))
14689     {
14690     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
14691     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
14692     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
14693     case OVERLOAD:              return TS_CP_OVERLOAD;
14694     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
14695     case PTRMEM_CST:            return TS_CP_PTRMEM;
14696     case BASELINK:              return TS_CP_BASELINK;
14697     case TEMPLATE_DECL:         return TS_CP_TEMPLATE_DECL;
14698     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
14699     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
14700     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
14701     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
14702     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
14703     case USERDEF_LITERAL:       return TS_CP_USERDEF_LITERAL;
14704     default:                    return TS_CP_GENERIC;
14705     }
14706 }
14707
14708 /* Build the void_list_node (void_type_node having been created).  */
14709 tree
14710 build_void_list_node (void)
14711 {
14712   tree t = build_tree_list (NULL_TREE, void_type_node);
14713   return t;
14714 }
14715
14716 bool
14717 cp_missing_noreturn_ok_p (tree decl)
14718 {
14719   /* A missing noreturn is ok for the `main' function.  */
14720   return DECL_MAIN_P (decl);
14721 }
14722
14723 /* Return the decl used to identify the COMDAT group into which DECL should
14724    be placed.  */
14725
14726 tree
14727 cxx_comdat_group (tree decl)
14728 {
14729   /* Virtual tables, construction virtual tables, and virtual table
14730      tables all go in a single COMDAT group, named after the primary
14731      virtual table.  */
14732   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14733     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
14734   /* For all other DECLs, the COMDAT group is the mangled name of the
14735      declaration itself.  */
14736   else
14737     {
14738       while (DECL_THUNK_P (decl))
14739         {
14740           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14741              into the same section as the target function.  In that case
14742              we must return target's name.  */
14743           tree target = THUNK_TARGET (decl);
14744           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14745               && DECL_SECTION_NAME (target) != NULL
14746               && DECL_ONE_ONLY (target))
14747             decl = target;
14748           else
14749             break;
14750         }
14751     }
14752
14753   return decl;
14754 }
14755
14756 /* Returns the return type for FN as written by the user, which may include
14757    a placeholder for a deduced return type.  */
14758
14759 tree
14760 fndecl_declared_return_type (tree fn)
14761 {
14762   fn = STRIP_TEMPLATE (fn);
14763   if (FNDECL_USED_AUTO (fn))
14764     {
14765       struct language_function *f = NULL;
14766       if (DECL_STRUCT_FUNCTION (fn))
14767         f = DECL_STRUCT_FUNCTION (fn)->language;
14768       if (f == NULL)
14769         f = DECL_SAVED_FUNCTION_DATA (fn);
14770       return f->x_auto_return_pattern;
14771     }
14772   return TREE_TYPE (TREE_TYPE (fn));
14773 }
14774
14775 /* Returns true iff DECL was declared with an auto return type and it has
14776    not yet been deduced to a real type.  */
14777
14778 bool
14779 undeduced_auto_decl (tree decl)
14780 {
14781   if (cxx_dialect < cxx14)
14782     return false;
14783   return type_uses_auto (TREE_TYPE (decl));
14784 }
14785
14786 /* Complain if DECL has an undeduced return type.  */
14787
14788 void
14789 require_deduced_type (tree decl)
14790 {
14791   if (undeduced_auto_decl (decl))
14792     error ("use of %qD before deduction of %<auto%>", decl);
14793 }
14794
14795 #include "gt-cp-decl.h"