cde51d6663a551ac9e549177ba35e17bece0be3c
[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   TREE_PUBLIC (global_namespace) = 1;
3850   begin_scope (sk_namespace, global_namespace);
3851
3852   if (flag_visibility_ms_compat)
3853     default_visibility = VISIBILITY_HIDDEN;
3854
3855   /* Initially, C.  */
3856   current_lang_name = lang_name_c;
3857
3858   /* Create the `std' namespace.  */
3859   push_namespace (std_identifier);
3860   std_node = current_namespace;
3861   pop_namespace ();
3862
3863   c_common_nodes_and_builtins ();
3864
3865   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3866   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3867   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3868   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3869   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3870   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3871   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3872   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3873
3874   integer_two_node = build_int_cst (NULL_TREE, 2);
3875
3876   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3877   truthvalue_type_node = boolean_type_node;
3878   truthvalue_false_node = boolean_false_node;
3879   truthvalue_true_node = boolean_true_node;
3880
3881   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3882   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3883   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3884
3885 #if 0
3886   record_builtin_type (RID_MAX, NULL, string_type_node);
3887 #endif
3888
3889   delta_type_node = ptrdiff_type_node;
3890   vtable_index_type = ptrdiff_type_node;
3891
3892   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3893   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3894   void_ftype_ptr = build_function_type_list (void_type_node,
3895                                              ptr_type_node, NULL_TREE);
3896   void_ftype_ptr
3897     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3898
3899   /* C++ extensions */
3900
3901   unknown_type_node = make_node (LANG_TYPE);
3902   record_unknown_type (unknown_type_node, "unknown type");
3903
3904   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3905   TREE_TYPE (unknown_type_node) = unknown_type_node;
3906
3907   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3908      result.  */
3909   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3910   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3911
3912   init_list_type_node = make_node (LANG_TYPE);
3913   record_unknown_type (init_list_type_node, "init list");
3914
3915   {
3916     /* Make sure we get a unique function type, so we can give
3917        its pointer type a name.  (This wins for gdb.) */
3918     tree vfunc_type = make_node (FUNCTION_TYPE);
3919     TREE_TYPE (vfunc_type) = integer_type_node;
3920     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3921     layout_type (vfunc_type);
3922
3923     vtable_entry_type = build_pointer_type (vfunc_type);
3924   }
3925   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3926
3927   vtbl_type_node
3928     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3929   layout_type (vtbl_type_node);
3930   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3931   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3932   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3933   layout_type (vtbl_ptr_type_node);
3934   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3935
3936   push_namespace (get_identifier ("__cxxabiv1"));
3937   abi_node = current_namespace;
3938   pop_namespace ();
3939
3940   global_type_node = make_node (LANG_TYPE);
3941   record_unknown_type (global_type_node, "global type");
3942
3943   /* Now, C++.  */
3944   current_lang_name = lang_name_cplusplus;
3945
3946   {
3947     tree newattrs, extvisattr;
3948     tree newtype, deltype;
3949     tree ptr_ftype_sizetype;
3950     tree new_eh_spec;
3951
3952     ptr_ftype_sizetype
3953       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3954     if (cxx_dialect == cxx98)
3955       {
3956         tree bad_alloc_id;
3957         tree bad_alloc_type_node;
3958         tree bad_alloc_decl;
3959
3960         push_namespace (std_identifier);
3961         bad_alloc_id = get_identifier ("bad_alloc");
3962         bad_alloc_type_node = make_class_type (RECORD_TYPE);
3963         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3964         bad_alloc_decl
3965           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3966         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3967         pop_namespace ();
3968
3969         new_eh_spec
3970           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3971       }
3972     else
3973       new_eh_spec = noexcept_false_spec;
3974
3975     /* Ensure attribs.c is initialized.  */
3976     init_attributes ();
3977     extvisattr = build_tree_list (get_identifier ("externally_visible"),
3978                                   NULL_TREE);
3979     newattrs = tree_cons (get_identifier ("alloc_size"),
3980                           build_tree_list (NULL_TREE, integer_one_node),
3981                           extvisattr);
3982     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3983     newtype = build_exception_variant (newtype, new_eh_spec);
3984     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3985     deltype = build_exception_variant (deltype, empty_except_spec);
3986     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
3987     DECL_IS_MALLOC (opnew) = 1;
3988     DECL_IS_OPERATOR_NEW (opnew) = 1;
3989     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
3990     DECL_IS_MALLOC (opnew) = 1;
3991     DECL_IS_OPERATOR_NEW (opnew) = 1;
3992     push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3993     push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3994     if (flag_sized_deallocation)
3995       {
3996         /* Also push the sized deallocation variants:
3997              void operator delete(void*, std::size_t) throw();
3998              void operator delete[](void*, std::size_t) throw();  */
3999         tree void_ftype_ptr_size
4000           = build_function_type_list (void_type_node, ptr_type_node,
4001                                       size_type_node, NULL_TREE);
4002         deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4003                                                    extvisattr);
4004         deltype = build_exception_variant (deltype, empty_except_spec);
4005         push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4006         push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4007       }
4008
4009     nullptr_type_node = make_node (NULLPTR_TYPE);
4010     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4011     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4012     TYPE_UNSIGNED (nullptr_type_node) = 1;
4013     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4014     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4015     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4016     nullptr_node = build_int_cst (nullptr_type_node, 0);
4017   }
4018
4019   abort_fndecl
4020     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4021                             ECF_NORETURN | ECF_NOTHROW);
4022
4023   /* Perform other language dependent initializations.  */
4024   init_class_processing ();
4025   init_rtti_processing ();
4026   init_template_processing ();
4027
4028   if (flag_exceptions)
4029     init_exception_processing ();
4030
4031   if (! supports_one_only ())
4032     flag_weak = 0;
4033
4034   make_fname_decl = cp_make_fname_decl;
4035   start_fname_decls ();
4036
4037   /* Show we use EH for cleanups.  */
4038   if (flag_exceptions)
4039     using_eh_for_cleanups ();
4040 }
4041
4042 /* Generate an initializer for a function naming variable from
4043    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
4044    filled in with the type of the init.  */
4045
4046 tree
4047 cp_fname_init (const char* name, tree *type_p)
4048 {
4049   tree domain = NULL_TREE;
4050   tree type;
4051   tree init = NULL_TREE;
4052   size_t length = 0;
4053
4054   if (name)
4055     {
4056       length = strlen (name);
4057       domain = build_index_type (size_int (length));
4058       init = build_string (length + 1, name);
4059     }
4060
4061   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4062   type = build_cplus_array_type (type, domain);
4063
4064   *type_p = type;
4065
4066   if (init)
4067     TREE_TYPE (init) = type;
4068   else
4069     init = error_mark_node;
4070
4071   return init;
4072 }
4073
4074 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4075    the decl, LOC is the location to give the decl, NAME is the
4076    initialization string and TYPE_DEP indicates whether NAME depended
4077    on the type of the function. We make use of that to detect
4078    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4079    at the point of first use, so we mustn't push the decl now.  */
4080
4081 static tree
4082 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4083 {
4084   const char *const name = (type_dep && processing_template_decl
4085                             ? NULL : fname_as_string (type_dep));
4086   tree type;
4087   tree init = cp_fname_init (name, &type);
4088   tree decl = build_decl (loc, VAR_DECL, id, type);
4089
4090   if (name)
4091     free (CONST_CAST (char *, name));
4092
4093   /* As we're using pushdecl_with_scope, we must set the context.  */
4094   DECL_CONTEXT (decl) = current_function_decl;
4095
4096   TREE_STATIC (decl) = 1;
4097   TREE_READONLY (decl) = 1;
4098   DECL_ARTIFICIAL (decl) = 1;
4099
4100   TREE_USED (decl) = 1;
4101
4102   if (current_function_decl)
4103     {
4104       cp_binding_level *b = current_binding_level;
4105       if (b->kind == sk_function_parms)
4106         return error_mark_node;
4107       while (b->level_chain->kind != sk_function_parms)
4108         b = b->level_chain;
4109       pushdecl_with_scope (decl, b, /*is_friend=*/false);
4110       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4111                       LOOKUP_ONLYCONVERTING);
4112     }
4113   else
4114     {
4115       DECL_THIS_STATIC (decl) = true;
4116       pushdecl_top_level_and_finish (decl, init);
4117     }
4118
4119   return decl;
4120 }
4121
4122 static tree
4123 builtin_function_1 (tree decl, tree context, bool is_global)
4124 {
4125   tree          id = DECL_NAME (decl);
4126   const char *name = IDENTIFIER_POINTER (id);
4127
4128   retrofit_lang_decl (decl);
4129
4130   DECL_ARTIFICIAL (decl) = 1;
4131   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4132   SET_DECL_LANGUAGE (decl, lang_c);
4133   /* Runtime library routines are, by definition, available in an
4134      external shared object.  */
4135   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4136   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4137
4138   DECL_CONTEXT (decl) = context;
4139
4140   if (is_global)
4141     pushdecl_top_level (decl);
4142   else
4143     pushdecl (decl);
4144
4145   /* A function in the user's namespace should have an explicit
4146      declaration before it is used.  Mark the built-in function as
4147      anticipated but not actually declared.  */
4148   if (name[0] != '_' || name[1] != '_')
4149     DECL_ANTICIPATED (decl) = 1;
4150   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4151     {
4152       size_t len = strlen (name);
4153
4154       /* Treat __*_chk fortification functions as anticipated as well,
4155          unless they are __builtin_*.  */
4156       if (len > strlen ("___chk")
4157           && memcmp (name + len - strlen ("_chk"),
4158                      "_chk", strlen ("_chk") + 1) == 0)
4159         DECL_ANTICIPATED (decl) = 1;
4160     }
4161
4162   return decl;
4163 }
4164
4165 tree
4166 cxx_builtin_function (tree decl)
4167 {
4168   tree          id = DECL_NAME (decl);
4169   const char *name = IDENTIFIER_POINTER (id);
4170   /* All builtins that don't begin with an '_' should additionally
4171      go in the 'std' namespace.  */
4172   if (name[0] != '_')
4173     {
4174       tree decl2 = copy_node(decl);
4175       push_namespace (std_identifier);
4176       builtin_function_1 (decl2, std_node, false);
4177       pop_namespace ();
4178     }
4179
4180   return builtin_function_1 (decl, NULL_TREE, false);
4181 }
4182
4183 /* Like cxx_builtin_function, but guarantee the function is added to the global
4184    scope.  This is to allow function specific options to add new machine
4185    dependent builtins when the target ISA changes via attribute((target(...)))
4186    which saves space on program startup if the program does not use non-generic
4187    ISAs.  */
4188
4189 tree
4190 cxx_builtin_function_ext_scope (tree decl)
4191 {
4192
4193   tree          id = DECL_NAME (decl);
4194   const char *name = IDENTIFIER_POINTER (id);
4195   /* All builtins that don't begin with an '_' should additionally
4196      go in the 'std' namespace.  */
4197   if (name[0] != '_')
4198     {
4199       tree decl2 = copy_node(decl);
4200       push_namespace (std_identifier);
4201       builtin_function_1 (decl2, std_node, true);
4202       pop_namespace ();
4203     }
4204
4205   return builtin_function_1 (decl, NULL_TREE, true);
4206 }
4207
4208 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4209    function.  Not called directly.  */
4210
4211 static tree
4212 build_library_fn (tree name, enum tree_code operator_code, tree type,
4213                   int ecf_flags)
4214 {
4215   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4216   DECL_EXTERNAL (fn) = 1;
4217   TREE_PUBLIC (fn) = 1;
4218   DECL_ARTIFICIAL (fn) = 1;
4219   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4220   SET_DECL_LANGUAGE (fn, lang_c);
4221   /* Runtime library routines are, by definition, available in an
4222      external shared object.  */
4223   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4224   DECL_VISIBILITY_SPECIFIED (fn) = 1;
4225   set_call_expr_flags (fn, ecf_flags);
4226   return fn;
4227 }
4228
4229 /* Returns the _DECL for a library function with C++ linkage.  */
4230
4231 static tree
4232 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4233                      int ecf_flags)
4234 {
4235   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4236   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4237   SET_DECL_LANGUAGE (fn, lang_cplusplus);
4238   return fn;
4239 }
4240
4241 /* Like build_library_fn, but takes a C string instead of an
4242    IDENTIFIER_NODE.  */
4243
4244 tree
4245 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4246 {
4247   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4248 }
4249
4250 /* Like build_cp_library_fn, but takes a C string instead of an
4251    IDENTIFIER_NODE.  */
4252
4253 tree
4254 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4255 {
4256   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4257                               ecf_flags);
4258 }
4259
4260 /* Like build_library_fn, but also pushes the function so that we will
4261    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
4262    may throw exceptions listed in RAISES.  */
4263
4264 tree
4265 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4266 {
4267   tree fn;
4268
4269   if (raises)
4270     type = build_exception_variant (type, raises);
4271
4272   fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4273   pushdecl_top_level (fn);
4274   return fn;
4275 }
4276
4277 /* Like build_cp_library_fn, but also pushes the function so that it
4278    will be found by normal lookup.  */
4279
4280 static tree
4281 push_cp_library_fn (enum tree_code operator_code, tree type,
4282                     int ecf_flags)
4283 {
4284   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4285                                  operator_code,
4286                                  type, ecf_flags);
4287   pushdecl (fn);
4288   if (flag_tm)
4289     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4290   return fn;
4291 }
4292
4293 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4294    a FUNCTION_TYPE.  */
4295
4296 tree
4297 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4298 {
4299   tree type = build_function_type (void_type_node, parmtypes);
4300   return push_library_fn (name, type, NULL_TREE, ecf_flags);
4301 }
4302
4303 /* Like push_library_fn, but also note that this function throws
4304    and does not return.  Used for __throw_foo and the like.  */
4305
4306 tree
4307 push_throw_library_fn (tree name, tree type)
4308 {
4309   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4310   return fn;
4311 }
4312 \f
4313 /* When we call finish_struct for an anonymous union, we create
4314    default copy constructors and such.  But, an anonymous union
4315    shouldn't have such things; this function undoes the damage to the
4316    anonymous union type T.
4317
4318    (The reason that we create the synthesized methods is that we don't
4319    distinguish `union { int i; }' from `typedef union { int i; } U'.
4320    The first is an anonymous union; the second is just an ordinary
4321    union type.)  */
4322
4323 void
4324 fixup_anonymous_aggr (tree t)
4325 {
4326   tree *q;
4327
4328   /* Wipe out memory of synthesized methods.  */
4329   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4330   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4331   TYPE_HAS_COPY_CTOR (t) = 0;
4332   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4333   TYPE_HAS_COPY_ASSIGN (t) = 0;
4334   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4335
4336   /* Splice the implicitly generated functions out of the TYPE_METHODS
4337      list.  */
4338   q = &TYPE_METHODS (t);
4339   while (*q)
4340     {
4341       if (DECL_ARTIFICIAL (*q))
4342         *q = TREE_CHAIN (*q);
4343       else
4344         q = &DECL_CHAIN (*q);
4345     }
4346
4347   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4348   if (TYPE_METHODS (t))
4349     {
4350       tree decl = TYPE_MAIN_DECL (t);
4351
4352       if (TREE_CODE (t) != UNION_TYPE)
4353         error_at (DECL_SOURCE_LOCATION (decl), 
4354                   "an anonymous struct cannot have function members");
4355       else
4356         error_at (DECL_SOURCE_LOCATION (decl),
4357                   "an anonymous union cannot have function members");
4358     }
4359
4360   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4361      assignment operators (because they cannot have these methods themselves).
4362      For anonymous unions this is already checked because they are not allowed
4363      in any union, otherwise we have to check it.  */
4364   if (TREE_CODE (t) != UNION_TYPE)
4365     {
4366       tree field, type;
4367
4368       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4369         if (TREE_CODE (field) == FIELD_DECL)
4370           {
4371             type = TREE_TYPE (field);
4372             if (CLASS_TYPE_P (type))
4373               {
4374                 if (TYPE_NEEDS_CONSTRUCTING (type))
4375                   error ("member %q+#D with constructor not allowed "
4376                          "in anonymous aggregate", field);
4377                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4378                   error ("member %q+#D with destructor not allowed "
4379                          "in anonymous aggregate", field);
4380                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4381                   error ("member %q+#D with copy assignment operator "
4382                          "not allowed in anonymous aggregate", field);
4383               }
4384           }
4385     }
4386 }
4387
4388 /* Warn for an attribute located at LOCATION that appertains to the
4389    class type CLASS_TYPE that has not been properly placed after its
4390    class-key, in it class-specifier.  */
4391
4392 void
4393 warn_misplaced_attr_for_class_type (source_location location,
4394                                     tree class_type)
4395 {
4396   gcc_assert (OVERLOAD_TYPE_P (class_type));
4397
4398   if (warning_at (location, OPT_Wattributes,
4399                   "attribute ignored in declaration "
4400                   "of %q#T", class_type))
4401     inform (location,
4402             "attribute for %q#T must follow the %qs keyword",
4403             class_type, class_key_or_enum_as_string (class_type));
4404 }
4405
4406 /* Make sure that a declaration with no declarator is well-formed, i.e.
4407    just declares a tagged type or anonymous union.
4408
4409    Returns the type declared; or NULL_TREE if none.  */
4410
4411 tree
4412 check_tag_decl (cp_decl_specifier_seq *declspecs,
4413                 bool explicit_type_instantiation_p)
4414 {
4415   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4416   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4417   /* If a class, struct, or enum type is declared by the DECLSPECS
4418      (i.e, if a class-specifier, enum-specifier, or non-typename
4419      elaborated-type-specifier appears in the DECLSPECS),
4420      DECLARED_TYPE is set to the corresponding type.  */
4421   tree declared_type = NULL_TREE;
4422   bool error_p = false;
4423
4424   if (declspecs->multiple_types_p)
4425     error ("multiple types in one declaration");
4426   else if (declspecs->redefined_builtin_type)
4427     {
4428       if (!in_system_header_at (input_location))
4429         permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4430                    "redeclaration of C++ built-in type %qT",
4431                    declspecs->redefined_builtin_type);
4432       return NULL_TREE;
4433     }
4434
4435   if (declspecs->type
4436       && TYPE_P (declspecs->type)
4437       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4438            && MAYBE_CLASS_TYPE_P (declspecs->type))
4439           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4440     declared_type = declspecs->type;
4441   else if (declspecs->type == error_mark_node)
4442     error_p = true;
4443   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4444     permerror (input_location, "declaration does not declare anything");
4445   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4446     {
4447       error ("%<auto%> can only be specified for variables "
4448              "or function declarations");
4449       return error_mark_node;
4450     }
4451   /* Check for an anonymous union.  */
4452   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4453            && TYPE_ANONYMOUS_P (declared_type))
4454     {
4455       /* 7/3 In a simple-declaration, the optional init-declarator-list
4456          can be omitted only when declaring a class (clause 9) or
4457          enumeration (7.2), that is, when the decl-specifier-seq contains
4458          either a class-specifier, an elaborated-type-specifier with
4459          a class-key (9.1), or an enum-specifier.  In these cases and
4460          whenever a class-specifier or enum-specifier is present in the
4461          decl-specifier-seq, the identifiers in these specifiers are among
4462          the names being declared by the declaration (as class-name,
4463          enum-names, or enumerators, depending on the syntax).  In such
4464          cases, and except for the declaration of an unnamed bit-field (9.6),
4465          the decl-specifier-seq shall introduce one or more names into the
4466          program, or shall redeclare a name introduced by a previous
4467          declaration.  [Example:
4468              enum { };                  // ill-formed
4469              typedef class { };         // ill-formed
4470          --end example]  */
4471       if (saw_typedef)
4472         {
4473           error ("missing type-name in typedef-declaration");
4474           return NULL_TREE;
4475         }
4476       /* Anonymous unions are objects, so they can have specifiers.  */;
4477       SET_ANON_AGGR_TYPE_P (declared_type);
4478
4479       if (TREE_CODE (declared_type) != UNION_TYPE
4480           && !in_system_header_at (input_location))
4481         pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4482     }
4483
4484   else
4485     {
4486       if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4487           || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4488         error ("%qs can only be specified for functions",
4489                decl_spec_seq_has_spec_p (declspecs, ds_inline)
4490                ? "inline" : "virtual");
4491       else if (saw_friend
4492                && (!current_class_type
4493                    || current_scope () != current_class_type))
4494         error ("%<friend%> can only be specified inside a class");
4495       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4496         error ("%<explicit%> can only be specified for constructors");
4497       else if (declspecs->storage_class)
4498         error ("a storage class can only be specified for objects "
4499                "and functions");
4500       else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4501                || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4502                || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4503                || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4504         error ("qualifiers can only be specified for objects "
4505                "and functions");
4506       else if (saw_typedef)
4507         warning (0, "%<typedef%> was ignored in this declaration");
4508       else if (decl_spec_seq_has_spec_p (declspecs,  ds_constexpr))
4509         error ("%<constexpr%> cannot be used for type declarations");
4510     }
4511
4512   if (declspecs->attributes && warn_attributes && declared_type)
4513     {
4514       location_t loc;
4515       if (!CLASS_TYPE_P (declared_type)
4516           || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4517         /* For a non-template class, use the name location.  */
4518         loc = location_of (declared_type);
4519       else
4520         /* For a template class (an explicit instantiation), use the
4521            current location.  */
4522         loc = input_location;
4523
4524       if (explicit_type_instantiation_p)
4525         /* [dcl.attr.grammar]/4:
4526
4527                No attribute-specifier-seq shall appertain to an explicit
4528                instantiation.  */
4529         {
4530           if (warning_at (loc, OPT_Wattributes,
4531                           "attribute ignored in explicit instantiation %q#T",
4532                           declared_type))
4533             inform (loc,
4534                     "no attribute can be applied to "
4535                     "an explicit instantiation");
4536         }
4537       else
4538         warn_misplaced_attr_for_class_type (loc, declared_type);
4539     }
4540
4541   return declared_type;
4542 }
4543
4544 /* Called when a declaration is seen that contains no names to declare.
4545    If its type is a reference to a structure, union or enum inherited
4546    from a containing scope, shadow that tag name for the current scope
4547    with a forward reference.
4548    If its type defines a new named structure or union
4549    or defines an enum, it is valid but we need not do anything here.
4550    Otherwise, it is an error.
4551
4552    C++: may have to grok the declspecs to learn about static,
4553    complain for anonymous unions.
4554
4555    Returns the TYPE declared -- or NULL_TREE if none.  */
4556
4557 tree
4558 shadow_tag (cp_decl_specifier_seq *declspecs)
4559 {
4560   tree t = check_tag_decl (declspecs,
4561                            /*explicit_type_instantiation_p=*/false);
4562
4563   if (!t)
4564     return NULL_TREE;
4565
4566   if (maybe_process_partial_specialization (t) == error_mark_node)
4567     return NULL_TREE;
4568
4569   /* This is where the variables in an anonymous union are
4570      declared.  An anonymous union declaration looks like:
4571      union { ... } ;
4572      because there is no declarator after the union, the parser
4573      sends that declaration here.  */
4574   if (ANON_AGGR_TYPE_P (t))
4575     {
4576       fixup_anonymous_aggr (t);
4577
4578       if (TYPE_FIELDS (t))
4579         {
4580           tree decl = grokdeclarator (/*declarator=*/NULL,
4581                                       declspecs, NORMAL, 0, NULL);
4582           finish_anon_union (decl);
4583         }
4584     }
4585
4586   return t;
4587 }
4588 \f
4589 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4590
4591 tree
4592 groktypename (cp_decl_specifier_seq *type_specifiers,
4593               const cp_declarator *declarator,
4594               bool is_template_arg)
4595 {
4596   tree attrs;
4597   tree type;
4598   enum decl_context context
4599     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4600   attrs = type_specifiers->attributes;
4601   type_specifiers->attributes = NULL_TREE;
4602   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4603   if (attrs && type != error_mark_node)
4604     {
4605       if (CLASS_TYPE_P (type))
4606         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4607                  "outside of definition", type);
4608       else if (MAYBE_CLASS_TYPE_P (type))
4609         /* A template type parameter or other dependent type.  */
4610         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4611                  "type %qT without an associated declaration", type);
4612       else
4613         cplus_decl_attributes (&type, attrs, 0);
4614     }
4615   return type;
4616 }
4617
4618 /* Process a DECLARATOR for a function-scope variable declaration,
4619    namespace-scope variable declaration, or function declaration.
4620    (Function definitions go through start_function; class member
4621    declarations appearing in the body of the class go through
4622    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4623    If an error occurs, the error_mark_node is returned instead.
4624    
4625    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4626    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4627    for an explicitly defaulted function, or SD_DELETED for an explicitly
4628    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4629    implicitly initialized via a default constructor.  ATTRIBUTES and
4630    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4631
4632    The scope represented by the context of the returned DECL is pushed
4633    (if it is not the global namespace) and is assigned to
4634    *PUSHED_SCOPE_P.  The caller is then responsible for calling
4635    pop_scope on *PUSHED_SCOPE_P if it is set.  */
4636
4637 tree
4638 start_decl (const cp_declarator *declarator,
4639             cp_decl_specifier_seq *declspecs,
4640             int initialized,
4641             tree attributes,
4642             tree prefix_attributes,
4643             tree *pushed_scope_p)
4644 {
4645   tree decl;
4646   tree context;
4647   bool was_public;
4648   int flags;
4649   bool alias;
4650
4651   *pushed_scope_p = NULL_TREE;
4652
4653   /* An object declared as __attribute__((deprecated)) suppresses
4654      warnings of uses of other deprecated items.  */
4655   if (lookup_attribute ("deprecated", attributes))
4656     deprecated_state = DEPRECATED_SUPPRESS;
4657
4658   attributes = chainon (attributes, prefix_attributes);
4659
4660   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4661                          &attributes);
4662
4663   deprecated_state = DEPRECATED_NORMAL;
4664
4665   if (decl == NULL_TREE || VOID_TYPE_P (decl)
4666       || decl == error_mark_node)
4667     return error_mark_node;
4668
4669   context = CP_DECL_CONTEXT (decl);
4670   if (context != global_namespace)
4671     *pushed_scope_p = push_scope (context);
4672
4673   /* Is it valid for this decl to have an initializer at all?
4674      If not, set INITIALIZED to zero, which will indirectly
4675      tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4676   if (initialized
4677       && TREE_CODE (decl) == TYPE_DECL)
4678     {
4679       error ("typedef %qD is initialized (use decltype instead)", decl);
4680       return error_mark_node;
4681     }
4682
4683   if (initialized)
4684     {
4685       if (! toplevel_bindings_p ()
4686           && DECL_EXTERNAL (decl))
4687         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4688                  decl);
4689       DECL_EXTERNAL (decl) = 0;
4690       if (toplevel_bindings_p ())
4691         TREE_STATIC (decl) = 1;
4692     }
4693   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4694   
4695   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4696     record_key_method_defined (decl);
4697
4698   /* If this is a typedef that names the class for linkage purposes
4699      (7.1.3p8), apply any attributes directly to the type.  */
4700   if (TREE_CODE (decl) == TYPE_DECL
4701       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4702       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4703     flags = ATTR_FLAG_TYPE_IN_PLACE;
4704   else
4705     flags = 0;
4706
4707   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4708   cplus_decl_attributes (&decl, attributes, flags);
4709
4710   /* Dllimported symbols cannot be defined.  Static data members (which
4711      can be initialized in-class and dllimported) go through grokfield,
4712      not here, so we don't need to exclude those decls when checking for
4713      a definition.  */
4714   if (initialized && DECL_DLLIMPORT_P (decl))
4715     {
4716       error ("definition of %q#D is marked %<dllimport%>", decl);
4717       DECL_DLLIMPORT_P (decl) = 0;
4718     }
4719
4720   /* If #pragma weak was used, mark the decl weak now.  */
4721   if (!processing_template_decl)
4722     maybe_apply_pragma_weak (decl);
4723
4724   if (TREE_CODE (decl) == FUNCTION_DECL
4725       && DECL_DECLARED_INLINE_P (decl)
4726       && DECL_UNINLINABLE (decl)
4727       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4728     warning (0, "inline function %q+D given attribute noinline", decl);
4729
4730   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4731     {
4732       bool this_tmpl = (processing_template_decl
4733                         > template_class_depth (context));
4734       if (VAR_P (decl))
4735         {
4736           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4737           if (field == NULL_TREE
4738               || !(VAR_P (field) || variable_template_p (field)))
4739             error ("%q+#D is not a static data member of %q#T", decl, context);
4740           else if (variable_template_p (field) && !this_tmpl)
4741             {
4742               if (DECL_LANG_SPECIFIC (decl)
4743                   && DECL_TEMPLATE_SPECIALIZATION (decl))
4744                 /* OK, specialization was already checked.  */;
4745               else
4746                 {
4747                   error_at (DECL_SOURCE_LOCATION (decl),
4748                             "non-member-template declaration of %qD", decl);
4749                   inform (DECL_SOURCE_LOCATION (field), "does not match "
4750                           "member template declaration here");
4751                   return error_mark_node;
4752                 }
4753             }
4754           else
4755             {
4756               if (variable_template_p (field))
4757                 field = DECL_TEMPLATE_RESULT (field);
4758
4759               if (DECL_CONTEXT (field) != context)
4760                 {
4761                   if (!same_type_p (DECL_CONTEXT (field), context))
4762                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4763                                "to be defined as %<%T::%D%>",
4764                                DECL_CONTEXT (field), DECL_NAME (decl),
4765                                context, DECL_NAME (decl));
4766                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4767                 }
4768               /* Static data member are tricky; an in-class initialization
4769                  still doesn't provide a definition, so the in-class
4770                  declaration will have DECL_EXTERNAL set, but will have an
4771                  initialization.  Thus, duplicate_decls won't warn
4772                  about this situation, and so we check here.  */
4773               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4774                 error ("duplicate initialization of %qD", decl);
4775               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4776                 decl = field;
4777               if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4778                   && !DECL_DECLARED_CONSTEXPR_P (field))
4779                 error ("%qD declared %<constexpr%> outside its class", field);
4780             }
4781         }
4782       else
4783         {
4784           tree field = check_classfn (context, decl,
4785                                       this_tmpl
4786                                       ? current_template_parms
4787                                       : NULL_TREE);
4788           if (field && field != error_mark_node
4789               && duplicate_decls (decl, field,
4790                                  /*newdecl_is_friend=*/false))
4791             decl = field;
4792         }
4793
4794       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4795       DECL_IN_AGGR_P (decl) = 0;
4796       /* Do not mark DECL as an explicit specialization if it was not
4797          already marked as an instantiation; a declaration should
4798          never be marked as a specialization unless we know what
4799          template is being specialized.  */
4800       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4801         {
4802           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4803           if (TREE_CODE (decl) == FUNCTION_DECL)
4804             DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
4805                                   && DECL_DECLARED_INLINE_P (decl));
4806           else
4807             DECL_COMDAT (decl) = false;
4808
4809           /* [temp.expl.spec] An explicit specialization of a static data
4810              member of a template is a definition if the declaration
4811              includes an initializer; otherwise, it is a declaration.
4812
4813              We check for processing_specialization so this only applies
4814              to the new specialization syntax.  */
4815           if (!initialized && processing_specialization)
4816             DECL_EXTERNAL (decl) = 1;
4817         }
4818
4819       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4820           /* Aliases are definitions. */
4821           && !alias)
4822         permerror (input_location, "declaration of %q#D outside of class is not definition",
4823                    decl);
4824     }
4825
4826   was_public = TREE_PUBLIC (decl);
4827
4828   /* Enter this declaration into the symbol table.  Don't push the plain
4829      VAR_DECL for a variable template.  */
4830   if (!template_parm_scope_p ()
4831       || TREE_CODE (decl) != VAR_DECL)
4832     decl = maybe_push_decl (decl);
4833
4834   if (processing_template_decl)
4835     decl = push_template_decl (decl);
4836   if (decl == error_mark_node)
4837     return error_mark_node;
4838
4839   if (VAR_P (decl)
4840       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4841       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4842     {
4843       /* This is a const variable with implicit 'static'.  Set
4844          DECL_THIS_STATIC so we can tell it from variables that are
4845          !TREE_PUBLIC because of the anonymous namespace.  */
4846       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4847       DECL_THIS_STATIC (decl) = 1;
4848     }
4849
4850   if (current_function_decl && VAR_P (decl)
4851       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
4852     {
4853       bool ok = false;
4854       if (DECL_THREAD_LOCAL_P (decl))
4855         error ("%qD declared %<thread_local%> in %<constexpr%> function",
4856                decl);
4857       else if (TREE_STATIC (decl))
4858         error ("%qD declared %<static%> in %<constexpr%> function", decl);
4859       else
4860         ok = true;
4861       if (!ok)
4862         cp_function_chain->invalid_constexpr = true;
4863     }
4864
4865   if (!processing_template_decl && VAR_P (decl))
4866     start_decl_1 (decl, initialized);
4867
4868   return decl;
4869 }
4870
4871 /* Process the declaration of a variable DECL.  INITIALIZED is true
4872    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4873    variable is initialized via an implicitly-called constructor.)
4874    This function must be called for ordinary variables (including, for
4875    example, implicit instantiations of templates), but must not be
4876    called for template declarations.  */
4877
4878 void
4879 start_decl_1 (tree decl, bool initialized)
4880 {
4881   tree type;
4882   bool complete_p;
4883   bool aggregate_definition_p;
4884
4885   gcc_assert (!processing_template_decl);
4886
4887   if (error_operand_p (decl))
4888     return;
4889
4890   gcc_assert (VAR_P (decl));
4891
4892   type = TREE_TYPE (decl);
4893   complete_p = COMPLETE_TYPE_P (type);
4894   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4895
4896   /* If an explicit initializer is present, or if this is a definition
4897      of an aggregate, then we need a complete type at this point.
4898      (Scalars are always complete types, so there is nothing to
4899      check.)  This code just sets COMPLETE_P; errors (if necessary)
4900      are issued below.  */
4901   if ((initialized || aggregate_definition_p) 
4902       && !complete_p
4903       && COMPLETE_TYPE_P (complete_type (type)))
4904     {
4905       complete_p = true;
4906       /* We will not yet have set TREE_READONLY on DECL if the type
4907          was "const", but incomplete, before this point.  But, now, we
4908          have a complete type, so we can try again.  */
4909       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4910     }
4911
4912   if (initialized)
4913     /* Is it valid for this decl to have an initializer at all?  */
4914     {
4915       /* Don't allow initializations for incomplete types except for
4916          arrays which might be completed by the initialization.  */
4917       if (complete_p)
4918         ;                       /* A complete type is ok.  */
4919       else if (type_uses_auto (type))
4920         ;                       /* An auto type is ok.  */
4921       else if (TREE_CODE (type) != ARRAY_TYPE)
4922         {
4923           error ("variable %q#D has initializer but incomplete type", decl);
4924           type = TREE_TYPE (decl) = error_mark_node;
4925         }
4926       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4927         {
4928           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4929             error ("elements of array %q#D have incomplete type", decl);
4930           /* else we already gave an error in start_decl.  */
4931         }
4932     }
4933   else if (aggregate_definition_p && !complete_p)
4934     {
4935       if (type_uses_auto (type))
4936         error ("declaration of %q#D has no initializer", decl);
4937       else
4938         error ("aggregate %q#D has incomplete type and cannot be defined",
4939                decl);
4940       /* Change the type so that assemble_variable will give
4941          DECL an rtl we can live with: (mem (const_int 0)).  */
4942       type = TREE_TYPE (decl) = error_mark_node;
4943     }
4944
4945   /* Create a new scope to hold this declaration if necessary.
4946      Whether or not a new scope is necessary cannot be determined
4947      until after the type has been completed; if the type is a
4948      specialization of a class template it is not until after
4949      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4950      will be set correctly.  */
4951   maybe_push_cleanup_level (type);
4952 }
4953
4954 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4955    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4956    but will be set to a new CLEANUP_STMT if a temporary is created
4957    that must be destroyed subsequently.
4958
4959    Returns an initializer expression to use to initialize DECL, or
4960    NULL if the initialization can be performed statically.
4961
4962    Quotes on semantics can be found in ARM 8.4.3.  */
4963
4964 static tree
4965 grok_reference_init (tree decl, tree type, tree init, int flags)
4966 {
4967   if (init == NULL_TREE)
4968     {
4969       if ((DECL_LANG_SPECIFIC (decl) == 0
4970            || DECL_IN_AGGR_P (decl) == 0)
4971           && ! DECL_THIS_EXTERN (decl))
4972         error ("%qD declared as reference but not initialized", decl);
4973       return NULL_TREE;
4974     }
4975
4976   if (TREE_CODE (init) == TREE_LIST)
4977     init = build_x_compound_expr_from_list (init, ELK_INIT,
4978                                             tf_warning_or_error);
4979
4980   tree ttype = TREE_TYPE (type);
4981   if (TREE_CODE (ttype) != ARRAY_TYPE
4982       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4983     /* Note: default conversion is only called in very special cases.  */
4984     init = decay_conversion (init, tf_warning_or_error);
4985
4986   /* check_initializer handles this for non-reference variables, but for
4987      references we need to do it here or the initializer will get the
4988      incomplete array type and confuse later calls to
4989      cp_complete_array_type.  */
4990   if (TREE_CODE (ttype) == ARRAY_TYPE
4991       && TYPE_DOMAIN (ttype) == NULL_TREE
4992       && (BRACE_ENCLOSED_INITIALIZER_P (init)
4993           || TREE_CODE (init) == STRING_CST))
4994     {
4995       cp_complete_array_type (&ttype, init, false);
4996       if (ttype != TREE_TYPE (type))
4997         type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
4998     }
4999
5000   /* Convert INIT to the reference type TYPE.  This may involve the
5001      creation of a temporary, whose lifetime must be the same as that
5002      of the reference.  If so, a DECL_EXPR for the temporary will be
5003      added just after the DECL_EXPR for DECL.  That's why we don't set
5004      DECL_INITIAL for local references (instead assigning to them
5005      explicitly); we need to allow the temporary to be initialized
5006      first.  */
5007   return initialize_reference (type, init, flags,
5008                                tf_warning_or_error);
5009 }
5010
5011 /* Designated initializers in arrays are not supported in GNU C++.
5012    The parser cannot detect this error since it does not know whether
5013    a given brace-enclosed initializer is for a class type or for an
5014    array.  This function checks that CE does not use a designated
5015    initializer.  If it does, an error is issued.  Returns true if CE
5016    is valid, i.e., does not have a designated initializer.  */
5017
5018 static bool
5019 check_array_designated_initializer (constructor_elt *ce,
5020                                     unsigned HOST_WIDE_INT index)
5021 {
5022   /* Designated initializers for array elements are not supported.  */
5023   if (ce->index)
5024     {
5025       /* The parser only allows identifiers as designated
5026          initializers.  */
5027       if (ce->index == error_mark_node)
5028         {
5029           error ("name used in a GNU-style designated "
5030                  "initializer for an array");
5031           return false;
5032         }
5033       else if (identifier_p (ce->index))
5034         {
5035           error ("name %qD used in a GNU-style designated "
5036                  "initializer for an array", ce->index);
5037           return false;
5038         }
5039
5040       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5041                                                   ce->index, true);
5042       if (ce_index
5043           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5044           && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5045               == INTEGER_CST))
5046         {
5047           /* A C99 designator is OK if it matches the current index.  */
5048           if (wi::eq_p (ce_index, index))
5049             return true;
5050           else
5051             sorry ("non-trivial designated initializers not supported");
5052         }
5053       else
5054         error ("C99 designator %qE is not an integral constant-expression",
5055                ce->index);
5056
5057       return false;
5058     }
5059
5060   return true;
5061 }
5062
5063 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5064    array until we finish parsing the initializer.  If that's the
5065    situation we're in, update DECL accordingly.  */
5066
5067 static void
5068 maybe_deduce_size_from_array_init (tree decl, tree init)
5069 {
5070   tree type = TREE_TYPE (decl);
5071
5072   if (TREE_CODE (type) == ARRAY_TYPE
5073       && TYPE_DOMAIN (type) == NULL_TREE
5074       && TREE_CODE (decl) != TYPE_DECL)
5075     {
5076       /* do_default is really a C-ism to deal with tentative definitions.
5077          But let's leave it here to ease the eventual merge.  */
5078       int do_default = !DECL_EXTERNAL (decl);
5079       tree initializer = init ? init : DECL_INITIAL (decl);
5080       int failure = 0;
5081
5082       /* Check that there are no designated initializers in INIT, as
5083          those are not supported in GNU C++, and as the middle-end
5084          will crash if presented with a non-numeric designated
5085          initializer.  */
5086       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5087         {
5088           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5089           constructor_elt *ce;
5090           HOST_WIDE_INT i;
5091           FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5092             if (!check_array_designated_initializer (ce, i))
5093               failure = 1;
5094         }
5095
5096       if (!failure)
5097         {
5098           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5099                                             do_default);
5100           if (failure == 1)
5101             {
5102               error ("initializer fails to determine size of %qD", decl);
5103             }
5104           else if (failure == 2)
5105             {
5106               if (do_default)
5107                 {
5108                   error ("array size missing in %qD", decl);
5109                 }
5110               /* If a `static' var's size isn't known, make it extern as
5111                  well as static, so it does not get allocated.  If it's not
5112                  `static', then don't mark it extern; finish_incomplete_decl
5113                  will give it a default size and it will get allocated.  */
5114               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5115                 DECL_EXTERNAL (decl) = 1;
5116             }
5117           else if (failure == 3)
5118             {
5119               error ("zero-size array %qD", decl);
5120             }
5121         }
5122
5123       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5124
5125       relayout_decl (decl);
5126     }
5127 }
5128
5129 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5130    any appropriate error messages regarding the layout.  */
5131
5132 static void
5133 layout_var_decl (tree decl)
5134 {
5135   tree type;
5136
5137   type = TREE_TYPE (decl);
5138   if (type == error_mark_node)
5139     return;
5140
5141   /* If we haven't already laid out this declaration, do so now.
5142      Note that we must not call complete type for an external object
5143      because it's type might involve templates that we are not
5144      supposed to instantiate yet.  (And it's perfectly valid to say
5145      `extern X x' for some incomplete type `X'.)  */
5146   if (!DECL_EXTERNAL (decl))
5147     complete_type (type);
5148   if (!DECL_SIZE (decl)
5149       && TREE_TYPE (decl) != error_mark_node
5150       && (COMPLETE_TYPE_P (type)
5151           || (TREE_CODE (type) == ARRAY_TYPE
5152               && !TYPE_DOMAIN (type)
5153               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
5154     layout_decl (decl, 0);
5155
5156   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5157     {
5158       /* An automatic variable with an incomplete type: that is an error.
5159          Don't talk about array types here, since we took care of that
5160          message in grokdeclarator.  */
5161       error ("storage size of %qD isn%'t known", decl);
5162       TREE_TYPE (decl) = error_mark_node;
5163     }
5164 #if 0
5165   /* Keep this code around in case we later want to control debug info
5166      based on whether a type is "used".  (jason 1999-11-11) */
5167
5168   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5169     /* Let debugger know it should output info for this type.  */
5170     note_debug_info_needed (ttype);
5171
5172   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5173     note_debug_info_needed (DECL_CONTEXT (decl));
5174 #endif
5175
5176   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5177       && DECL_SIZE (decl) != NULL_TREE
5178       && ! TREE_CONSTANT (DECL_SIZE (decl)))
5179     {
5180       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5181         constant_expression_warning (DECL_SIZE (decl));
5182       else
5183         {
5184           error ("storage size of %qD isn%'t constant", decl);
5185           TREE_TYPE (decl) = error_mark_node;
5186         }
5187     }
5188 }
5189
5190 /* If a local static variable is declared in an inline function, or if
5191    we have a weak definition, we must endeavor to create only one
5192    instance of the variable at link-time.  */
5193
5194 void
5195 maybe_commonize_var (tree decl)
5196 {
5197   /* Static data in a function with comdat linkage also has comdat
5198      linkage.  */
5199   if (TREE_STATIC (decl)
5200       /* Don't mess with __FUNCTION__.  */
5201       && ! DECL_ARTIFICIAL (decl)
5202       && DECL_FUNCTION_SCOPE_P (decl)
5203       && vague_linkage_p (DECL_CONTEXT (decl)))
5204     {
5205       if (flag_weak)
5206         {
5207           /* With weak symbols, we simply make the variable COMDAT;
5208              that will cause copies in multiple translations units to
5209              be merged.  */
5210           comdat_linkage (decl);
5211         }
5212       else
5213         {
5214           if (DECL_INITIAL (decl) == NULL_TREE
5215               || DECL_INITIAL (decl) == error_mark_node)
5216             {
5217               /* Without weak symbols, we can use COMMON to merge
5218                  uninitialized variables.  */
5219               TREE_PUBLIC (decl) = 1;
5220               DECL_COMMON (decl) = 1;
5221             }
5222           else
5223             {
5224               /* While for initialized variables, we must use internal
5225                  linkage -- which means that multiple copies will not
5226                  be merged.  */
5227               TREE_PUBLIC (decl) = 0;
5228               DECL_COMMON (decl) = 0;
5229               if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5230                               "sorry: semantics of inline function static "
5231                               "data %q#D are wrong (you%'ll wind up "
5232                               "with multiple copies)", decl))
5233                 inform (DECL_SOURCE_LOCATION (decl),
5234                         "you can work around this by removing the initializer");
5235             }
5236         }
5237     }
5238 }
5239
5240 /* Issue an error message if DECL is an uninitialized const variable.  */
5241
5242 static void
5243 check_for_uninitialized_const_var (tree decl)
5244 {
5245   tree type = strip_array_types (TREE_TYPE (decl));
5246
5247   /* ``Unless explicitly declared extern, a const object does not have
5248      external linkage and must be initialized. ($8.4; $12.1)'' ARM
5249      7.1.6 */
5250   if (VAR_P (decl)
5251       && TREE_CODE (type) != REFERENCE_TYPE
5252       && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5253       && !DECL_INITIAL (decl))
5254     {
5255       tree field = default_init_uninitialized_part (type);
5256       if (!field)
5257         return;
5258
5259       if (CP_TYPE_CONST_P (type))
5260         permerror (DECL_SOURCE_LOCATION (decl),
5261                    "uninitialized const %qD", decl);
5262       else
5263         {
5264           error_at (DECL_SOURCE_LOCATION (decl),
5265                     "uninitialized variable %qD in %<constexpr%> function",
5266                     decl);
5267           cp_function_chain->invalid_constexpr = true;
5268         }
5269
5270       if (CLASS_TYPE_P (type))
5271         {
5272           tree defaulted_ctor;
5273
5274           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5275                   "%q#T has no user-provided default constructor", type);
5276           defaulted_ctor = in_class_defaulted_default_constructor (type);
5277           if (defaulted_ctor)
5278             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5279                     "constructor is not user-provided because it is "
5280                     "explicitly defaulted in the class body");
5281           inform (0, "and the implicitly-defined constructor does not "
5282                   "initialize %q+#D", field);
5283         }
5284     }
5285 }
5286 \f
5287 /* Structure holding the current initializer being processed by reshape_init.
5288    CUR is a pointer to the current element being processed, END is a pointer
5289    after the last element present in the initializer.  */
5290 typedef struct reshape_iterator_t
5291 {
5292   constructor_elt *cur;
5293   constructor_elt *end;
5294 } reshape_iter;
5295
5296 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5297
5298 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
5299    returned is the next FIELD_DECL (possibly FIELD itself) that can be
5300    initialized.  If there are no more such fields, the return value
5301    will be NULL.  */
5302
5303 tree
5304 next_initializable_field (tree field)
5305 {
5306   while (field
5307          && (TREE_CODE (field) != FIELD_DECL
5308              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5309              || DECL_ARTIFICIAL (field)))
5310     field = DECL_CHAIN (field);
5311
5312   return field;
5313 }
5314
5315 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5316    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5317    INTEGER_CST representing the size of the array minus one (the maximum index),
5318    or NULL_TREE if the array was declared without specifying the size. D is
5319    the iterator within the constructor.  */
5320
5321 static tree
5322 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5323                       tsubst_flags_t complain)
5324 {
5325   tree new_init;
5326   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5327   unsigned HOST_WIDE_INT max_index_cst = 0;
5328   unsigned HOST_WIDE_INT index;
5329
5330   /* The initializer for an array is always a CONSTRUCTOR.  */
5331   new_init = build_constructor (init_list_type_node, NULL);
5332
5333   if (sized_array_p)
5334     {
5335       /* Minus 1 is used for zero sized arrays.  */
5336       if (integer_all_onesp (max_index))
5337         return new_init;
5338
5339       if (tree_fits_uhwi_p (max_index))
5340         max_index_cst = tree_to_uhwi (max_index);
5341       /* sizetype is sign extended, not zero extended.  */
5342       else
5343         max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5344     }
5345
5346   /* Loop until there are no more initializers.  */
5347   for (index = 0;
5348        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5349        ++index)
5350     {
5351       tree elt_init;
5352       constructor_elt *old_cur = d->cur;
5353
5354       check_array_designated_initializer (d->cur, index);
5355       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5356                                  complain);
5357       if (elt_init == error_mark_node)
5358         return error_mark_node;
5359       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5360                               size_int (index), elt_init);
5361       if (!TREE_CONSTANT (elt_init))
5362         TREE_CONSTANT (new_init) = false;
5363
5364       /* This can happen with an invalid initializer (c++/54501).  */
5365       if (d->cur == old_cur && !sized_array_p)
5366         break;
5367     }
5368
5369   return new_init;
5370 }
5371
5372 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5373    Parameters are the same of reshape_init_r.  */
5374
5375 static tree
5376 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5377 {
5378   tree max_index = NULL_TREE;
5379
5380   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5381
5382   if (TYPE_DOMAIN (type))
5383     max_index = array_type_nelts (type);
5384
5385   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5386 }
5387
5388 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5389    Parameters are the same of reshape_init_r.  */
5390
5391 static tree
5392 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5393 {
5394   tree max_index = NULL_TREE;
5395
5396   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5397
5398   if (COMPOUND_LITERAL_P (d->cur->value))
5399     {
5400       tree value = d->cur->value;
5401       if (!same_type_p (TREE_TYPE (value), type))
5402         {
5403           if (complain & tf_error)
5404             error ("invalid type %qT as initializer for a vector of type %qT",
5405                    TREE_TYPE (d->cur->value), type);
5406           value = error_mark_node;
5407         }
5408       ++d->cur;
5409       return value;
5410     }
5411
5412   /* For a vector, we initialize it as an array of the appropriate size.  */
5413   if (TREE_CODE (type) == VECTOR_TYPE)
5414     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5415
5416   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5417 }
5418
5419 /* Subroutine of reshape_init_r, processes the initializers for classes
5420    or union. Parameters are the same of reshape_init_r.  */
5421
5422 static tree
5423 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5424                     tsubst_flags_t complain)
5425 {
5426   tree field;
5427   tree new_init;
5428
5429   gcc_assert (CLASS_TYPE_P (type));
5430
5431   /* The initializer for a class is always a CONSTRUCTOR.  */
5432   new_init = build_constructor (init_list_type_node, NULL);
5433   field = next_initializable_field (TYPE_FIELDS (type));
5434
5435   if (!field)
5436     {
5437       /* [dcl.init.aggr]
5438
5439         An initializer for an aggregate member that is an
5440         empty class shall have the form of an empty
5441         initializer-list {}.  */
5442       if (!first_initializer_p)
5443         {
5444           if (complain & tf_error)
5445             error ("initializer for %qT must be brace-enclosed", type);
5446           return error_mark_node;
5447         }
5448       return new_init;
5449     }
5450
5451   /* Loop through the initializable fields, gathering initializers.  */
5452   while (d->cur != d->end)
5453     {
5454       tree field_init;
5455       constructor_elt *old_cur = d->cur;
5456
5457       /* Handle designated initializers, as an extension.  */
5458       if (d->cur->index)
5459         {
5460           if (d->cur->index == error_mark_node)
5461             return error_mark_node;
5462
5463           if (TREE_CODE (d->cur->index) == FIELD_DECL)
5464             /* We already reshaped this.  */
5465             gcc_assert (d->cur->index == field);
5466           else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5467             field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5468           else
5469             {
5470               if (complain & tf_error)
5471                 error ("%<[%E] =%> used in a GNU-style designated initializer"
5472                        " for class %qT", d->cur->index, type);
5473               return error_mark_node;
5474             }
5475
5476           if (!field || TREE_CODE (field) != FIELD_DECL)
5477             {
5478               if (complain & tf_error)
5479                 error ("%qT has no non-static data member named %qD", type,
5480                        d->cur->index);
5481               return error_mark_node;
5482             }
5483         }
5484
5485       /* If we processed all the member of the class, we are done.  */
5486       if (!field)
5487         break;
5488
5489       field_init = reshape_init_r (TREE_TYPE (field), d,
5490                                    /*first_initializer_p=*/false, complain);
5491       if (field_init == error_mark_node)
5492         return error_mark_node;
5493
5494       if (d->cur == old_cur && d->cur->index)
5495         {
5496           /* This can happen with an invalid initializer for a flexible
5497              array member (c++/54441).  */
5498           if (complain & tf_error)
5499             error ("invalid initializer for %q#D", field);
5500           return error_mark_node;
5501         }
5502
5503       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5504
5505       /* [dcl.init.aggr]
5506
5507         When a union  is  initialized with a brace-enclosed
5508         initializer, the braces shall only contain an
5509         initializer for the first member of the union.  */
5510       if (TREE_CODE (type) == UNION_TYPE)
5511         break;
5512
5513       field = next_initializable_field (DECL_CHAIN (field));
5514     }
5515
5516   return new_init;
5517 }
5518
5519 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5520    designators are not valid; either complain or return true to indicate
5521    that reshape_init_r should return error_mark_node.  */
5522
5523 static bool
5524 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5525 {
5526   if (d->cur->index)
5527     {
5528       if (complain & tf_error)
5529         error ("C99 designator %qE outside aggregate initializer",
5530                d->cur->index);
5531       else
5532         return true;
5533     }
5534   return false;
5535 }
5536
5537 /* Subroutine of reshape_init, which processes a single initializer (part of
5538    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5539    iterator within the CONSTRUCTOR which points to the initializer to process.
5540    FIRST_INITIALIZER_P is true if this is the first initializer of the
5541    outermost CONSTRUCTOR node.  */
5542
5543 static tree
5544 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5545                 tsubst_flags_t complain)
5546 {
5547   tree init = d->cur->value;
5548
5549   if (error_operand_p (init))
5550     return error_mark_node;
5551
5552   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5553       && has_designator_problem (d, complain))
5554     return error_mark_node;
5555
5556   if (TREE_CODE (type) == COMPLEX_TYPE)
5557     {
5558       /* A complex type can be initialized from one or two initializers,
5559          but braces are not elided.  */
5560       d->cur++;
5561       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5562         {
5563           if (CONSTRUCTOR_NELTS (init) > 2)
5564             {
5565               if (complain & tf_error)
5566                 error ("too many initializers for %qT", type);
5567               else
5568                 return error_mark_node;
5569             }
5570         }
5571       else if (first_initializer_p && d->cur != d->end)
5572         {
5573           vec<constructor_elt, va_gc> *v = 0;
5574           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5575           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5576           if (has_designator_problem (d, complain))
5577             return error_mark_node;
5578           d->cur++;
5579           init = build_constructor (init_list_type_node, v);
5580         }
5581       return init;
5582     }
5583
5584   /* A non-aggregate type is always initialized with a single
5585      initializer.  */
5586   if (!CP_AGGREGATE_TYPE_P (type))
5587     {
5588       /* It is invalid to initialize a non-aggregate type with a
5589          brace-enclosed initializer before C++0x.
5590          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5591          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5592          a CONSTRUCTOR (with a record type).  */
5593       if (TREE_CODE (init) == CONSTRUCTOR
5594           /* Don't complain about a capture-init.  */
5595           && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5596           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5597         {
5598           if (SCALAR_TYPE_P (type))
5599             {
5600               if (cxx_dialect < cxx11
5601                   /* Isn't value-initialization.  */
5602                   || CONSTRUCTOR_NELTS (init) > 0)
5603                 {
5604                   if (complain & tf_error)
5605                     error ("braces around scalar initializer for type %qT",
5606                            type);
5607                   init = error_mark_node;
5608                 }
5609             }
5610           else
5611             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5612         }
5613
5614       d->cur++;
5615       return init;
5616     }
5617
5618   /* "If T is a class type and the initializer list has a single element of
5619      type cv U, where U is T or a class derived from T, the object is
5620      initialized from that element."  Even if T is an aggregate.  */
5621   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5622       && first_initializer_p
5623       && d->end - d->cur == 1
5624       && reference_related_p (type, TREE_TYPE (init)))
5625     {
5626       d->cur++;
5627       return init;
5628     }
5629
5630   /* [dcl.init.aggr]
5631
5632      All implicit type conversions (clause _conv_) are considered when
5633      initializing the aggregate member with an initializer from an
5634      initializer-list.  If the initializer can initialize a member,
5635      the member is initialized.  Otherwise, if the member is itself a
5636      non-empty subaggregate, brace elision is assumed and the
5637      initializer is considered for the initialization of the first
5638      member of the subaggregate.  */
5639   if (TREE_CODE (init) != CONSTRUCTOR
5640       /* But don't try this for the first initializer, since that would be
5641          looking through the outermost braces; A a2 = { a1 }; is not a
5642          valid aggregate initialization.  */
5643       && !first_initializer_p
5644       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5645           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5646                               complain)))
5647     {
5648       d->cur++;
5649       return init;
5650     }
5651
5652   /* [dcl.init.string]
5653
5654       A char array (whether plain char, signed char, or unsigned char)
5655       can be initialized by a string-literal (optionally enclosed in
5656       braces); a wchar_t array can be initialized by a wide
5657       string-literal (optionally enclosed in braces).  */
5658   if (TREE_CODE (type) == ARRAY_TYPE
5659       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5660     {
5661       tree str_init = init;
5662
5663       /* Strip one level of braces if and only if they enclose a single
5664          element (as allowed by [dcl.init.string]).  */
5665       if (!first_initializer_p
5666           && TREE_CODE (str_init) == CONSTRUCTOR
5667           && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5668         {
5669           str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5670         }
5671
5672       /* If it's a string literal, then it's the initializer for the array
5673          as a whole. Otherwise, continue with normal initialization for
5674          array types (one value per array element).  */
5675       if (TREE_CODE (str_init) == STRING_CST)
5676         {
5677           if (has_designator_problem (d, complain))
5678             return error_mark_node;
5679           d->cur++;
5680           return str_init;
5681         }
5682     }
5683
5684   /* The following cases are about aggregates. If we are not within a full
5685      initializer already, and there is not a CONSTRUCTOR, it means that there
5686      is a missing set of braces (that is, we are processing the case for
5687      which reshape_init exists).  */
5688   if (!first_initializer_p)
5689     {
5690       if (TREE_CODE (init) == CONSTRUCTOR)
5691         {
5692           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5693             /* There is no need to reshape pointer-to-member function
5694                initializers, as they are always constructed correctly
5695                by the front end.  */
5696            ;
5697           else if (COMPOUND_LITERAL_P (init))
5698           /* For a nested compound literal, there is no need to reshape since
5699              brace elision is not allowed. Even if we decided to allow it,
5700              we should add a call to reshape_init in finish_compound_literal,
5701              before calling digest_init, so changing this code would still
5702              not be necessary.  */
5703             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5704           else
5705             {
5706               ++d->cur;
5707               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5708               return reshape_init (type, init, complain);
5709             }
5710         }
5711
5712       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5713                type);
5714     }
5715
5716   /* Dispatch to specialized routines.  */
5717   if (CLASS_TYPE_P (type))
5718     return reshape_init_class (type, d, first_initializer_p, complain);
5719   else if (TREE_CODE (type) == ARRAY_TYPE)
5720     return reshape_init_array (type, d, complain);
5721   else if (TREE_CODE (type) == VECTOR_TYPE)
5722     return reshape_init_vector (type, d, complain);
5723   else
5724     gcc_unreachable();
5725 }
5726
5727 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5728    brace-enclosed aggregate initializer.
5729
5730    INIT is the CONSTRUCTOR containing the list of initializers describing
5731    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5732    It may not presently match the shape of the TYPE; for example:
5733
5734      struct S { int a; int b; };
5735      struct S a[] = { 1, 2, 3, 4 };
5736
5737    Here INIT will hold a vector of four elements, rather than a
5738    vector of two elements, each itself a vector of two elements.  This
5739    routine transforms INIT from the former form into the latter.  The
5740    revised CONSTRUCTOR node is returned.  */
5741
5742 tree
5743 reshape_init (tree type, tree init, tsubst_flags_t complain)
5744 {
5745   vec<constructor_elt, va_gc> *v;
5746   reshape_iter d;
5747   tree new_init;
5748
5749   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5750
5751   v = CONSTRUCTOR_ELTS (init);
5752
5753   /* An empty constructor does not need reshaping, and it is always a valid
5754      initializer.  */
5755   if (vec_safe_is_empty (v))
5756     return init;
5757
5758   /* Recurse on this CONSTRUCTOR.  */
5759   d.cur = &(*v)[0];
5760   d.end = d.cur + v->length ();
5761
5762   new_init = reshape_init_r (type, &d, true, complain);
5763   if (new_init == error_mark_node)
5764     return error_mark_node;
5765
5766   /* Make sure all the element of the constructor were used. Otherwise,
5767      issue an error about exceeding initializers.  */
5768   if (d.cur != d.end)
5769     {
5770       if (complain & tf_error)
5771         error ("too many initializers for %qT", type);
5772       else
5773         return error_mark_node;
5774     }
5775
5776   return new_init;
5777 }
5778
5779 /* Verify array initializer.  Returns true if errors have been reported.  */
5780
5781 bool
5782 check_array_initializer (tree decl, tree type, tree init)
5783 {
5784   tree element_type = TREE_TYPE (type);
5785
5786   /* The array type itself need not be complete, because the
5787      initializer may tell us how many elements are in the array.
5788      But, the elements of the array must be complete.  */
5789   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5790     {
5791       if (decl)
5792         error ("elements of array %q#D have incomplete type", decl);
5793       else
5794         error ("elements of array %q#T have incomplete type", type);
5795       return true;
5796     }
5797   /* A compound literal can't have variable size.  */
5798   if (init && !decl
5799       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5800           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5801     {
5802       error ("variable-sized compound literal");
5803       return true;
5804     }
5805   return false;
5806 }
5807
5808 /* Subroutine of check_initializer; args are passed down from that function.
5809    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5810
5811 static tree
5812 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5813      
5814 {
5815   gcc_assert (stmts_are_full_exprs_p ());
5816   return build_aggr_init (decl, init, flags, tf_warning_or_error);
5817 }
5818
5819 /* Verify INIT (the initializer for DECL), and record the
5820    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5821    grok_reference_init.
5822
5823    If the return value is non-NULL, it is an expression that must be
5824    evaluated dynamically to initialize DECL.  */
5825
5826 static tree
5827 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5828 {
5829   tree type = TREE_TYPE (decl);
5830   tree init_code = NULL;
5831   tree core_type;
5832
5833   /* Things that are going to be initialized need to have complete
5834      type.  */
5835   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5836
5837   if (DECL_HAS_VALUE_EXPR_P (decl))
5838     {
5839       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5840          it doesn't have storage to be initialized.  */
5841       gcc_assert (init == NULL_TREE);
5842       return NULL_TREE;
5843     }
5844
5845   if (type == error_mark_node)
5846     /* We will have already complained.  */
5847     return NULL_TREE;
5848
5849   if (TREE_CODE (type) == ARRAY_TYPE)
5850     {
5851       if (check_array_initializer (decl, type, init))
5852         return NULL_TREE;
5853     }
5854   else if (!COMPLETE_TYPE_P (type))
5855     {
5856       error ("%q#D has incomplete type", decl);
5857       TREE_TYPE (decl) = error_mark_node;
5858       return NULL_TREE;
5859     }
5860   else
5861     /* There is no way to make a variable-sized class type in GNU C++.  */
5862     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5863
5864   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5865     {
5866       int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5867       if (SCALAR_TYPE_P (type))
5868         {
5869           if (init_len == 0)
5870             {
5871               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5872               init = build_zero_init (type, NULL_TREE, false);
5873             }
5874           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5875             {
5876               error ("scalar object %qD requires one element in initializer",
5877                      decl);
5878               TREE_TYPE (decl) = error_mark_node;
5879               return NULL_TREE;
5880             }
5881         }
5882     }
5883
5884   if (TREE_CODE (decl) == CONST_DECL)
5885     {
5886       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5887
5888       DECL_INITIAL (decl) = init;
5889
5890       gcc_assert (init != NULL_TREE);
5891       init = NULL_TREE;
5892     }
5893   else if (!init && DECL_REALLY_EXTERN (decl))
5894     ;
5895   else if (init || type_build_ctor_call (type)
5896            || TREE_CODE (type) == REFERENCE_TYPE)
5897     {
5898       if (TREE_CODE (type) == REFERENCE_TYPE)
5899         {
5900           init = grok_reference_init (decl, type, init, flags);
5901           flags |= LOOKUP_ALREADY_DIGESTED;
5902         }
5903       else if (!init)
5904         check_for_uninitialized_const_var (decl);
5905       /* Do not reshape constructors of vectors (they don't need to be
5906          reshaped.  */
5907       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5908         {
5909           if (is_std_init_list (type))
5910             {
5911               init = perform_implicit_conversion (type, init,
5912                                                   tf_warning_or_error);
5913               flags |= LOOKUP_ALREADY_DIGESTED;
5914             }
5915           else if (TYPE_NON_AGGREGATE_CLASS (type))
5916             {
5917               /* Don't reshape if the class has constructors.  */
5918               if (cxx_dialect == cxx98)
5919                 error ("in C++98 %qD must be initialized by constructor, "
5920                        "not by %<{...}%>",
5921                        decl);
5922             }
5923           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5924             {
5925               error ("opaque vector types cannot be initialized");
5926               init = error_mark_node;
5927             }
5928           else
5929             {
5930               init = reshape_init (type, init, tf_warning_or_error);
5931               flags |= LOOKUP_NO_NARROWING;
5932             }
5933         }
5934       else if (TREE_CODE (init) == TREE_LIST
5935                && TREE_TYPE (init) != unknown_type_node
5936                && !MAYBE_CLASS_TYPE_P (type))
5937         {
5938           gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5939
5940           /* We get here with code like `int a (2);' */
5941           init = build_x_compound_expr_from_list (init, ELK_INIT,
5942                                                   tf_warning_or_error);
5943         }
5944
5945       /* If DECL has an array type without a specific bound, deduce the
5946          array size from the initializer.  */
5947       maybe_deduce_size_from_array_init (decl, init);
5948       type = TREE_TYPE (decl);
5949       if (type == error_mark_node)
5950         return NULL_TREE;
5951
5952       if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5953           && !(flags & LOOKUP_ALREADY_DIGESTED)
5954           && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5955                && CP_AGGREGATE_TYPE_P (type)
5956                && (CLASS_TYPE_P (type)
5957                    || !TYPE_NEEDS_CONSTRUCTING (type)
5958                    || type_has_extended_temps (type))))
5959         {
5960           init_code = build_aggr_init_full_exprs (decl, init, flags);
5961
5962           /* A constructor call is a non-trivial initializer even if
5963              it isn't explicitly written.  */
5964           if (TREE_SIDE_EFFECTS (init_code))
5965             DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5966
5967           /* If this is a constexpr initializer, expand_default_init will
5968              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5969              case, pull the initializer back out and pass it down into
5970              store_init_value.  */
5971           while (TREE_CODE (init_code) == EXPR_STMT
5972                  || TREE_CODE (init_code) == CONVERT_EXPR)
5973             init_code = TREE_OPERAND (init_code, 0);
5974           if (TREE_CODE (init_code) == INIT_EXPR)
5975             {
5976               init = TREE_OPERAND (init_code, 1);
5977               init_code = NULL_TREE;
5978               /* Don't call digest_init; it's unnecessary and will complain
5979                  about aggregate initialization of non-aggregate classes.  */
5980               flags |= LOOKUP_ALREADY_DIGESTED;
5981             }
5982           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5983             {
5984               /* Declared constexpr, but no suitable initializer; massage
5985                  init appropriately so we can pass it into store_init_value
5986                  for the error.  */
5987               if (CLASS_TYPE_P (type)
5988                   && (!init || TREE_CODE (init) == TREE_LIST))
5989                 {
5990                   init = build_functional_cast (type, init, tf_none);
5991                   if (TREE_CODE (init) == TARGET_EXPR)
5992                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5993                 }
5994               init_code = NULL_TREE;
5995             }
5996           else
5997             init = NULL_TREE;
5998         }
5999
6000       if (init && TREE_CODE (init) != TREE_VEC)
6001         {
6002           /* In aggregate initialization of a variable, each element
6003              initialization is a full-expression because there is no
6004              enclosing expression.  */
6005           gcc_assert (stmts_are_full_exprs_p ());
6006
6007           init_code = store_init_value (decl, init, cleanups, flags);
6008
6009           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6010               && DECL_INITIAL (decl)
6011               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6012               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6013             warning (0, "array %qD initialized by parenthesized string literal %qE",
6014                      decl, DECL_INITIAL (decl));
6015           init = NULL;
6016         }
6017     }
6018   else
6019     {
6020       if (CLASS_TYPE_P (core_type = strip_array_types (type))
6021           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6022               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6023         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6024                                                   /*complain=*/true);
6025
6026       check_for_uninitialized_const_var (decl);
6027     }
6028
6029   if (init && init != error_mark_node)
6030     init_code = build2 (INIT_EXPR, type, decl, init);
6031
6032   if (init_code)
6033     {
6034       /* We might have set these in cp_finish_decl.  */
6035       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6036       TREE_CONSTANT (decl) = false;
6037     }
6038
6039   if (init_code && DECL_IN_AGGR_P (decl))
6040     {
6041       static int explained = 0;
6042
6043       if (cxx_dialect < cxx11)
6044         error ("initializer invalid for static member with constructor");
6045       else
6046         error ("non-constant in-class initialization invalid for static "
6047                "member %qD", decl);
6048       if (!explained)
6049         {
6050           inform (input_location,
6051                   "(an out of class initialization is required)");
6052           explained = 1;
6053         }
6054       return NULL_TREE;
6055     }
6056
6057   return init_code;
6058 }
6059
6060 /* If DECL is not a local variable, give it RTL.  */
6061
6062 static void
6063 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6064 {
6065   int toplev = toplevel_bindings_p ();
6066   int defer_p;
6067
6068   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6069   if (asmspec)
6070     {
6071       /* The `register' keyword, when used together with an
6072          asm-specification, indicates that the variable should be
6073          placed in a particular register.  */
6074       if (VAR_P (decl) && DECL_REGISTER (decl))
6075         {
6076           set_user_assembler_name (decl, asmspec);
6077           DECL_HARD_REGISTER (decl) = 1;
6078         }
6079       else
6080         {
6081           if (TREE_CODE (decl) == FUNCTION_DECL
6082               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6083             set_builtin_user_assembler_name (decl, asmspec);
6084           set_user_assembler_name (decl, asmspec);
6085         }
6086     }
6087
6088   /* Handle non-variables up front.  */
6089   if (!VAR_P (decl))
6090     {
6091       rest_of_decl_compilation (decl, toplev, at_eof);
6092       return;
6093     }
6094
6095   /* If we see a class member here, it should be a static data
6096      member.  */
6097   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6098     {
6099       gcc_assert (TREE_STATIC (decl));
6100       /* An in-class declaration of a static data member should be
6101          external; it is only a declaration, and not a definition.  */
6102       if (init == NULL_TREE)
6103         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
6104     }
6105
6106   /* We don't create any RTL for local variables.  */
6107   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6108     return;
6109
6110   /* We defer emission of local statics until the corresponding
6111      DECL_EXPR is expanded.  */
6112   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
6113
6114   /* Defer template instantiations.  */
6115   if (DECL_LANG_SPECIFIC (decl)
6116       && DECL_IMPLICIT_INSTANTIATION (decl))
6117     defer_p = 1;
6118
6119   /* If we're not deferring, go ahead and assemble the variable.  */
6120   if (!defer_p)
6121     rest_of_decl_compilation (decl, toplev, at_eof);
6122 }
6123
6124 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6125
6126 static tree
6127 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6128 {
6129   /* Stop at types or full-expression boundaries.  */
6130   if (TYPE_P (*stmt_p)
6131       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6132     {
6133       *walk_subtrees = 0;
6134       return NULL_TREE;
6135     }
6136
6137   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6138     {
6139       tree guard = (tree)data;
6140       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6141
6142       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6143       /* Tell honor_protect_cleanup_actions to handle this as a separate
6144          cleanup.  */
6145       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6146  
6147       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6148     }
6149
6150   return NULL_TREE;
6151 }
6152
6153 /* We're initializing a local variable which has a cleanup GUARD.  If there
6154    are any temporaries used in the initializer INIT of this variable, we
6155    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6156    variable will be cleaned up properly if one of them throws.
6157
6158    Unfortunately, there's no way to express this properly in terms of
6159    nesting, as the regions for the temporaries overlap the region for the
6160    variable itself; if there are two temporaries, the variable needs to be
6161    the first thing destroyed if either of them throws.  However, we only
6162    want to run the variable's cleanup if it actually got constructed.  So
6163    we need to guard the temporary cleanups with the variable's cleanup if
6164    they are run on the normal path, but not if they are run on the
6165    exceptional path.  We implement this by telling
6166    honor_protect_cleanup_actions to strip the variable cleanup from the
6167    exceptional path.  */
6168
6169 static void
6170 wrap_temporary_cleanups (tree init, tree guard)
6171 {
6172   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6173 }
6174
6175 /* Generate code to initialize DECL (a local variable).  */
6176
6177 static void
6178 initialize_local_var (tree decl, tree init)
6179 {
6180   tree type = TREE_TYPE (decl);
6181   tree cleanup;
6182   int already_used;
6183
6184   gcc_assert (VAR_P (decl)
6185               || TREE_CODE (decl) == RESULT_DECL);
6186   gcc_assert (!TREE_STATIC (decl));
6187
6188   if (DECL_SIZE (decl) == NULL_TREE)
6189     {
6190       /* If we used it already as memory, it must stay in memory.  */
6191       DECL_INITIAL (decl) = NULL_TREE;
6192       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6193       return;
6194     }
6195
6196   if (type == error_mark_node)
6197     return;
6198
6199   /* Compute and store the initial value.  */
6200   already_used = TREE_USED (decl) || TREE_USED (type);
6201   if (TREE_USED (type))
6202     DECL_READ_P (decl) = 1;
6203
6204   /* Generate a cleanup, if necessary.  */
6205   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6206
6207   /* Perform the initialization.  */
6208   if (init)
6209     {
6210       tree rinit = (TREE_CODE (init) == INIT_EXPR
6211                     ? TREE_OPERAND (init, 1) : NULL_TREE);
6212       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6213         {
6214           /* Stick simple initializers in DECL_INITIAL so that
6215              -Wno-init-self works (c++/34772).  */
6216           gcc_assert (TREE_OPERAND (init, 0) == decl);
6217           DECL_INITIAL (decl) = rinit;
6218
6219           if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6220             {
6221               STRIP_NOPS (rinit);
6222               if (rinit == decl)
6223                 warning_at (DECL_SOURCE_LOCATION (decl),
6224                             OPT_Winit_self,
6225                             "reference %qD is initialized with itself", decl);
6226             }
6227         }
6228       else
6229         {
6230           int saved_stmts_are_full_exprs_p;
6231
6232           /* If we're only initializing a single object, guard the
6233              destructors of any temporaries used in its initializer with
6234              its destructor.  This isn't right for arrays because each
6235              element initialization is a full-expression.  */
6236           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6237             wrap_temporary_cleanups (init, cleanup);
6238
6239           gcc_assert (building_stmt_list_p ());
6240           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6241           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6242           finish_expr_stmt (init);
6243           current_stmt_tree ()->stmts_are_full_exprs_p =
6244             saved_stmts_are_full_exprs_p;
6245         }
6246     }
6247
6248   /* Set this to 0 so we can tell whether an aggregate which was
6249      initialized was ever used.  Don't do this if it has a
6250      destructor, so we don't complain about the 'resource
6251      allocation is initialization' idiom.  Now set
6252      attribute((unused)) on types so decls of that type will be
6253      marked used. (see TREE_USED, above.)  */
6254   if (TYPE_NEEDS_CONSTRUCTING (type)
6255       && ! already_used
6256       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6257       && DECL_NAME (decl))
6258     TREE_USED (decl) = 0;
6259   else if (already_used)
6260     TREE_USED (decl) = 1;
6261
6262   if (cleanup)
6263     finish_decl_cleanup (decl, cleanup);
6264 }
6265
6266 /* DECL is a VAR_DECL for a compiler-generated variable with static
6267    storage duration (like a virtual table) whose initializer is a
6268    compile-time constant.  Initialize the variable and provide it to the
6269    back end.  */
6270
6271 void
6272 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6273 {
6274   tree init;
6275   gcc_assert (DECL_ARTIFICIAL (decl));
6276   init = build_constructor (TREE_TYPE (decl), v);
6277   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6278   DECL_INITIAL (decl) = init;
6279   DECL_INITIALIZED_P (decl) = 1;
6280   determine_visibility (decl);
6281   layout_var_decl (decl);
6282   maybe_commonize_var (decl);
6283   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6284 }
6285
6286 /* INIT is the initializer for a variable, as represented by the
6287    parser.  Returns true iff INIT is type-dependent.  */
6288
6289 static bool
6290 type_dependent_init_p (tree init)
6291 {
6292   if (TREE_CODE (init) == TREE_LIST)
6293     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6294     return any_type_dependent_elements_p (init);
6295   else if (TREE_CODE (init) == CONSTRUCTOR)
6296   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6297     {
6298       vec<constructor_elt, va_gc> *elts;
6299       size_t nelts;
6300       size_t i;
6301
6302       elts = CONSTRUCTOR_ELTS (init);
6303       nelts = vec_safe_length (elts);
6304       for (i = 0; i < nelts; ++i)
6305         if (type_dependent_init_p ((*elts)[i].value))
6306           return true;
6307     }
6308   else
6309     /* It must be a simple expression, e.g., int i = 3;  */
6310     return type_dependent_expression_p (init);
6311
6312   return false;
6313 }
6314
6315 /* INIT is the initializer for a variable, as represented by the
6316    parser.  Returns true iff INIT is value-dependent.  */
6317
6318 static bool
6319 value_dependent_init_p (tree init)
6320 {
6321   if (TREE_CODE (init) == TREE_LIST)
6322     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6323     return any_value_dependent_elements_p (init);
6324   else if (TREE_CODE (init) == CONSTRUCTOR)
6325   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6326     {
6327       vec<constructor_elt, va_gc> *elts;
6328       size_t nelts;
6329       size_t i;
6330
6331       elts = CONSTRUCTOR_ELTS (init);
6332       nelts = vec_safe_length (elts);
6333       for (i = 0; i < nelts; ++i)
6334         if (value_dependent_init_p ((*elts)[i].value))
6335           return true;
6336     }
6337   else
6338     /* It must be a simple expression, e.g., int i = 3;  */
6339     return value_dependent_expression_p (init);
6340   
6341   return false;
6342 }
6343
6344 /* Finish processing of a declaration;
6345    install its line number and initial value.
6346    If the length of an array type is not known before,
6347    it must be determined now, from the initial value, or it is an error.
6348
6349    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6350    true, then INIT is an integral constant expression.
6351
6352    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6353    if the (init) syntax was used.  */
6354
6355 void
6356 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6357                 tree asmspec_tree, int flags)
6358 {
6359   tree type;
6360   vec<tree, va_gc> *cleanups = NULL;
6361   const char *asmspec = NULL;
6362   int was_readonly = 0;
6363   bool var_definition_p = false;
6364   tree auto_node;
6365
6366   if (decl == error_mark_node)
6367     return;
6368   else if (! decl)
6369     {
6370       if (init)
6371         error ("assignment (not initialization) in declaration");
6372       return;
6373     }
6374
6375   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6376   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6377   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6378
6379   type = TREE_TYPE (decl);
6380   if (type == error_mark_node)
6381     return;
6382
6383   /* If a name was specified, get the string.  */
6384   if (at_namespace_scope_p ())
6385     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6386   if (asmspec_tree && asmspec_tree != error_mark_node)
6387     asmspec = TREE_STRING_POINTER (asmspec_tree);
6388
6389   if (current_class_type
6390       && CP_DECL_CONTEXT (decl) == current_class_type
6391       && TYPE_BEING_DEFINED (current_class_type)
6392       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6393       && (DECL_INITIAL (decl) || init))
6394     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6395
6396   if (TREE_CODE (decl) != FUNCTION_DECL
6397       && (auto_node = type_uses_auto (type)))
6398     {
6399       tree d_init;
6400       if (init == NULL_TREE)
6401         {
6402           if (DECL_LANG_SPECIFIC (decl)
6403               && DECL_TEMPLATE_INSTANTIATION (decl)
6404               && !DECL_TEMPLATE_INSTANTIATED (decl))
6405             {
6406               /* init is null because we're deferring instantiating the
6407                  initializer until we need it.  Well, we need it now.  */
6408               instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6409               return;
6410             }
6411
6412           error ("declaration of %q#D has no initializer", decl);
6413           TREE_TYPE (decl) = error_mark_node;
6414           return;
6415         }
6416       d_init = init;
6417       if (TREE_CODE (d_init) == TREE_LIST)
6418         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6419                                                   tf_warning_or_error);
6420       d_init = resolve_nondeduced_context (d_init);
6421       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6422                                                    auto_node);
6423       if (type == error_mark_node)
6424         return;
6425       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6426     }
6427
6428   if (!ensure_literal_type_for_constexpr_object (decl))
6429     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6430
6431   if (VAR_P (decl)
6432       && DECL_CLASS_SCOPE_P (decl)
6433       && DECL_INITIALIZED_IN_CLASS_P (decl))
6434     check_static_variable_definition (decl, type);
6435
6436   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6437     {
6438       tree clone;
6439       if (init == ridpointers[(int)RID_DELETE])
6440         {
6441           /* FIXME check this is 1st decl.  */
6442           DECL_DELETED_FN (decl) = 1;
6443           DECL_DECLARED_INLINE_P (decl) = 1;
6444           DECL_INITIAL (decl) = error_mark_node;
6445           FOR_EACH_CLONE (clone, decl)
6446             {
6447               DECL_DELETED_FN (clone) = 1;
6448               DECL_DECLARED_INLINE_P (clone) = 1;
6449               DECL_INITIAL (clone) = error_mark_node;
6450             }
6451           init = NULL_TREE;
6452         }
6453       else if (init == ridpointers[(int)RID_DEFAULT])
6454         {
6455           if (defaultable_fn_check (decl))
6456             DECL_DEFAULTED_FN (decl) = 1;
6457           else
6458             DECL_INITIAL (decl) = NULL_TREE;
6459         }
6460     }
6461
6462   if (init && VAR_P (decl))
6463     {
6464       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6465       /* If DECL is a reference, then we want to know whether init is a
6466          reference constant; init_const_expr_p as passed tells us whether
6467          it's an rvalue constant.  */
6468       if (TREE_CODE (type) == REFERENCE_TYPE)
6469         init_const_expr_p = potential_constant_expression (init);
6470       if (init_const_expr_p)
6471         {
6472           /* Set these flags now for templates.  We'll update the flags in
6473              store_init_value for instantiations.  */
6474           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6475           if (decl_maybe_constant_var_p (decl))
6476             TREE_CONSTANT (decl) = 1;
6477         }
6478     }
6479
6480   if (processing_template_decl)
6481     {
6482       bool type_dependent_p;
6483
6484       /* Add this declaration to the statement-tree.  */
6485       if (at_function_scope_p ())
6486         add_decl_expr (decl);
6487
6488       type_dependent_p = dependent_type_p (type);
6489
6490       if (check_for_bare_parameter_packs (init))
6491         {
6492           init = NULL_TREE;
6493           DECL_INITIAL (decl) = NULL_TREE;
6494         }
6495
6496       /* Generally, initializers in templates are expanded when the
6497          template is instantiated.  But, if DECL is a variable constant
6498          then it can be used in future constant expressions, so its value
6499          must be available. */
6500
6501       if (!VAR_P (decl) || dependent_type_p (type))
6502         /* We can't do anything if the decl has dependent type.  */;
6503       else if (init
6504                && init_const_expr_p
6505                && !type_dependent_p
6506                && TREE_CODE (type) != REFERENCE_TYPE
6507                && decl_maybe_constant_var_p (decl)
6508                && !type_dependent_init_p (init)
6509                && !value_dependent_init_p (init))
6510         {
6511           /* This variable seems to be a non-dependent constant, so process
6512              its initializer.  If check_initializer returns non-null the
6513              initialization wasn't constant after all.  */
6514           tree init_code;
6515           cleanups = make_tree_vector ();
6516           init_code = check_initializer (decl, init, flags, &cleanups);
6517           if (init_code == NULL_TREE)
6518             init = NULL_TREE;
6519           release_tree_vector (cleanups);
6520         }
6521       else if (!DECL_PRETTY_FUNCTION_P (decl))
6522         {
6523           /* Deduce array size even if the initializer is dependent.  */
6524           maybe_deduce_size_from_array_init (decl, init);
6525           /* And complain about multiple initializers.  */
6526           if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6527               && !MAYBE_CLASS_TYPE_P (type))
6528             init = build_x_compound_expr_from_list (init, ELK_INIT,
6529                                                     tf_warning_or_error);
6530         }
6531
6532       if (init)
6533         DECL_INITIAL (decl) = init;
6534       return;
6535     }
6536
6537   /* Just store non-static data member initializers for later.  */
6538   if (init && TREE_CODE (decl) == FIELD_DECL)
6539     DECL_INITIAL (decl) = init;
6540
6541   /* Take care of TYPE_DECLs up front.  */
6542   if (TREE_CODE (decl) == TYPE_DECL)
6543     {
6544       if (type != error_mark_node
6545           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6546         {
6547           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6548             warning (0, "shadowing previous type declaration of %q#D", decl);
6549           set_identifier_type_value (DECL_NAME (decl), decl);
6550         }
6551
6552       /* If we have installed this as the canonical typedef for this
6553          type, and that type has not been defined yet, delay emitting
6554          the debug information for it, as we will emit it later.  */
6555       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6556           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6557         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6558
6559       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6560                                 at_eof);
6561       return;
6562     }
6563
6564   /* A reference will be modified here, as it is initialized.  */
6565   if (! DECL_EXTERNAL (decl)
6566       && TREE_READONLY (decl)
6567       && TREE_CODE (type) == REFERENCE_TYPE)
6568     {
6569       was_readonly = 1;
6570       TREE_READONLY (decl) = 0;
6571     }
6572
6573   if (VAR_P (decl))
6574     {
6575       /* If this is a local variable that will need a mangled name,
6576          register it now.  We must do this before processing the
6577          initializer for the variable, since the initialization might
6578          require a guard variable, and since the mangled name of the
6579          guard variable will depend on the mangled name of this
6580          variable.  */
6581       if (DECL_FUNCTION_SCOPE_P (decl)
6582           && TREE_STATIC (decl)
6583           && !DECL_ARTIFICIAL (decl))
6584         {
6585           push_local_name (decl);
6586           if (DECL_CONSTRUCTOR_P (current_function_decl)
6587               || DECL_DESTRUCTOR_P (current_function_decl))
6588             /* Normally local_decls is populated during GIMPLE lowering,
6589                but [cd]tors are never actually compiled directly.  We need
6590                to put statics on the list so we can deal with the label
6591                address extension.  FIXME.  */
6592             add_local_decl (cfun, decl);
6593         }
6594
6595       /* Convert the initializer to the type of DECL, if we have not
6596          already initialized DECL.  */
6597       if (!DECL_INITIALIZED_P (decl)
6598           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6599              case of a static data member initialized inside the
6600              class-specifier, there can be an initializer even if DECL
6601              is *not* defined.  */
6602           && (!DECL_EXTERNAL (decl) || init))
6603         {
6604           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6605             {
6606               tree jclass
6607                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6608               /* Allow libjava/prims.cc define primitive classes.  */
6609               if (init != NULL_TREE
6610                   || jclass == NULL_TREE
6611                   || TREE_CODE (jclass) != TYPE_DECL
6612                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6613                   || !same_type_ignoring_top_level_qualifiers_p
6614                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6615                 error ("Java object %qD not allocated with %<new%>", decl);
6616               init = NULL_TREE;
6617             }
6618           cleanups = make_tree_vector ();
6619           init = check_initializer (decl, init, flags, &cleanups);
6620
6621           /* Handle:
6622
6623              [dcl.init]
6624
6625              The memory occupied by any object of static storage
6626              duration is zero-initialized at program startup before
6627              any other initialization takes place.
6628
6629              We cannot create an appropriate initializer until after
6630              the type of DECL is finalized.  If DECL_INITIAL is set,
6631              then the DECL is statically initialized, and any
6632              necessary zero-initialization has already been performed.  */
6633           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6634             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6635                                                    /*nelts=*/NULL_TREE,
6636                                                    /*static_storage_p=*/true);
6637           /* Remember that the initialization for this variable has
6638              taken place.  */
6639           DECL_INITIALIZED_P (decl) = 1;
6640           /* This declaration is the definition of this variable,
6641              unless we are initializing a static data member within
6642              the class specifier.  */
6643           if (!DECL_EXTERNAL (decl))
6644             var_definition_p = true;
6645         }
6646       /* If the variable has an array type, lay out the type, even if
6647          there is no initializer.  It is valid to index through the
6648          array, and we must get TYPE_ALIGN set correctly on the array
6649          type.  */
6650       else if (TREE_CODE (type) == ARRAY_TYPE)
6651         layout_type (type);
6652
6653       if (TREE_STATIC (decl)
6654           && !at_function_scope_p ()
6655           && current_function_decl == NULL)
6656         /* So decl is a global variable or a static member of a
6657            non local class. Record the types it uses
6658            so that we can decide later to emit debug info for them.  */
6659         record_types_used_by_current_var_decl (decl);
6660     }
6661   else if (TREE_CODE (decl) == FIELD_DECL
6662            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6663     error ("non-static data member %qD has Java class type", decl);
6664
6665   /* Add this declaration to the statement-tree.  This needs to happen
6666      after the call to check_initializer so that the DECL_EXPR for a
6667      reference temp is added before the DECL_EXPR for the reference itself.  */
6668   if (DECL_FUNCTION_SCOPE_P (decl))
6669     {
6670       /* If we're building a variable sized type, and we might be
6671          reachable other than via the top of the current binding
6672          level, then create a new BIND_EXPR so that we deallocate
6673          the object at the right time.  */
6674       if (VAR_P (decl)
6675           && DECL_SIZE (decl)
6676           && !TREE_CONSTANT (DECL_SIZE (decl))
6677           && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6678         {
6679           tree bind;
6680           bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6681           TREE_SIDE_EFFECTS (bind) = 1;
6682           add_stmt (bind);
6683           BIND_EXPR_BODY (bind) = push_stmt_list ();
6684         }
6685       add_decl_expr (decl);
6686     }
6687
6688   /* Let the middle end know about variables and functions -- but not
6689      static data members in uninstantiated class templates.  */
6690   if (VAR_OR_FUNCTION_DECL_P (decl))
6691     {
6692       if (VAR_P (decl))
6693         {
6694           layout_var_decl (decl);
6695           maybe_commonize_var (decl);
6696         }
6697
6698       /* This needs to happen after the linkage is set. */
6699       determine_visibility (decl);
6700
6701       if (var_definition_p && TREE_STATIC (decl))
6702         {
6703           /* If a TREE_READONLY variable needs initialization
6704              at runtime, it is no longer readonly and we need to
6705              avoid MEM_READONLY_P being set on RTL created for it.  */
6706           if (init)
6707             {
6708               if (TREE_READONLY (decl))
6709                 TREE_READONLY (decl) = 0;
6710               was_readonly = 0;
6711             }
6712           else if (was_readonly)
6713             TREE_READONLY (decl) = 1;
6714
6715           /* Likewise if it needs destruction.  */
6716           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6717             TREE_READONLY (decl) = 0;
6718         }
6719
6720       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6721
6722       /* Check for abstractness of the type. Notice that there is no
6723          need to strip array types here since the check for those types
6724          is already done within create_array_type_for_decl.  */
6725       abstract_virtuals_error (decl, type);
6726
6727       if (TREE_TYPE (decl) == error_mark_node)
6728         /* No initialization required.  */
6729         ;
6730       else if (TREE_CODE (decl) == FUNCTION_DECL)
6731         {
6732           if (init)
6733             {
6734               if (init == ridpointers[(int)RID_DEFAULT])
6735                 {
6736                   /* An out-of-class default definition is defined at
6737                      the point where it is explicitly defaulted.  */
6738                   if (DECL_DELETED_FN (decl))
6739                     maybe_explain_implicit_delete (decl);
6740                   else if (DECL_INITIAL (decl) == error_mark_node)
6741                     synthesize_method (decl);
6742                 }
6743               else
6744                 error ("function %q#D is initialized like a variable", decl);
6745             }
6746           /* else no initialization required.  */
6747         }
6748       else if (DECL_EXTERNAL (decl)
6749                && ! (DECL_LANG_SPECIFIC (decl)
6750                      && DECL_NOT_REALLY_EXTERN (decl)))
6751         {
6752           if (init)
6753             DECL_INITIAL (decl) = init;
6754         }
6755       /* A variable definition.  */
6756       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6757         /* Initialize the local variable.  */
6758         initialize_local_var (decl, init);
6759
6760       /* If a variable is defined, and then a subsequent
6761          definition with external linkage is encountered, we will
6762          get here twice for the same variable.  We want to avoid
6763          calling expand_static_init more than once.  For variables
6764          that are not static data members, we can call
6765          expand_static_init only when we actually process the
6766          initializer.  It is not legal to redeclare a static data
6767          member, so this issue does not arise in that case.  */
6768       else if (var_definition_p && TREE_STATIC (decl))
6769         expand_static_init (decl, init);
6770     }
6771
6772   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6773      reference, insert it in the statement-tree now.  */
6774   if (cleanups)
6775     {
6776       unsigned i; tree t;
6777       FOR_EACH_VEC_ELT (*cleanups, i, t)
6778         push_cleanup (decl, t, false);
6779       release_tree_vector (cleanups);
6780     }
6781
6782   if (was_readonly)
6783     TREE_READONLY (decl) = 1;
6784
6785   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6786 }
6787
6788 /* Returns a declaration for a VAR_DECL as if:
6789
6790      extern "C" TYPE NAME;
6791
6792    had been seen.  Used to create compiler-generated global
6793    variables.  */
6794
6795 static tree
6796 declare_global_var (tree name, tree type)
6797 {
6798   tree decl;
6799
6800   push_to_top_level ();
6801   decl = build_decl (input_location, VAR_DECL, name, type);
6802   TREE_PUBLIC (decl) = 1;
6803   DECL_EXTERNAL (decl) = 1;
6804   DECL_ARTIFICIAL (decl) = 1;
6805   /* If the user has explicitly declared this variable (perhaps
6806      because the code we are compiling is part of a low-level runtime
6807      library), then it is possible that our declaration will be merged
6808      with theirs by pushdecl.  */
6809   decl = pushdecl (decl);
6810   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6811   pop_from_top_level ();
6812
6813   return decl;
6814 }
6815
6816 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6817    if "__cxa_atexit" is not being used) corresponding to the function
6818    to be called when the program exits.  */
6819
6820 static tree
6821 get_atexit_fn_ptr_type (void)
6822 {
6823   tree fn_type;
6824
6825   if (!atexit_fn_ptr_type_node)
6826     {
6827       tree arg_type;
6828       if (flag_use_cxa_atexit 
6829           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6830         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6831         arg_type = ptr_type_node;
6832       else
6833         /* The parameter to "atexit" is "void (*)(void)".  */
6834         arg_type = NULL_TREE;
6835       
6836       fn_type = build_function_type_list (void_type_node,
6837                                           arg_type, NULL_TREE);
6838       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6839     }
6840
6841   return atexit_fn_ptr_type_node;
6842 }
6843
6844 /* Returns a pointer to the `atexit' function.  Note that if
6845    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6846    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6847
6848 static tree
6849 get_atexit_node (void)
6850 {
6851   tree atexit_fndecl;
6852   tree fn_type;
6853   tree fn_ptr_type;
6854   const char *name;
6855   bool use_aeabi_atexit;
6856
6857   if (atexit_node)
6858     return atexit_node;
6859
6860   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6861     {
6862       /* The declaration for `__cxa_atexit' is:
6863
6864            int __cxa_atexit (void (*)(void *), void *, void *)
6865
6866          We build up the argument types and then the function type
6867          itself.  */
6868       tree argtype0, argtype1, argtype2;
6869
6870       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6871       /* First, build the pointer-to-function type for the first
6872          argument.  */
6873       fn_ptr_type = get_atexit_fn_ptr_type ();
6874       /* Then, build the rest of the argument types.  */
6875       argtype2 = ptr_type_node;
6876       if (use_aeabi_atexit)
6877         {
6878           argtype1 = fn_ptr_type;
6879           argtype0 = ptr_type_node;
6880         }
6881       else
6882         {
6883           argtype1 = ptr_type_node;
6884           argtype0 = fn_ptr_type;
6885         }
6886       /* And the final __cxa_atexit type.  */
6887       fn_type = build_function_type_list (integer_type_node,
6888                                           argtype0, argtype1, argtype2,
6889                                           NULL_TREE);
6890       if (use_aeabi_atexit)
6891         name = "__aeabi_atexit";
6892       else
6893         name = "__cxa_atexit";
6894     }
6895   else
6896     {
6897       /* The declaration for `atexit' is:
6898
6899            int atexit (void (*)());
6900
6901          We build up the argument types and then the function type
6902          itself.  */
6903       fn_ptr_type = get_atexit_fn_ptr_type ();
6904       /* Build the final atexit type.  */
6905       fn_type = build_function_type_list (integer_type_node,
6906                                           fn_ptr_type, NULL_TREE);
6907       name = "atexit";
6908     }
6909
6910   /* Now, build the function declaration.  */
6911   push_lang_context (lang_name_c);
6912   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6913   mark_used (atexit_fndecl);
6914   pop_lang_context ();
6915   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6916
6917   return atexit_node;
6918 }
6919
6920 /* Like get_atexit_node, but for thread-local cleanups.  */
6921
6922 static tree
6923 get_thread_atexit_node (void)
6924 {
6925   /* The declaration for `__cxa_thread_atexit' is:
6926
6927      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6928   tree fn_type = build_function_type_list (integer_type_node,
6929                                            get_atexit_fn_ptr_type (),
6930                                            ptr_type_node, ptr_type_node,
6931                                            NULL_TREE);
6932
6933   /* Now, build the function declaration.  */
6934   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6935                                              ECF_LEAF | ECF_NOTHROW);
6936   return decay_conversion (atexit_fndecl, tf_warning_or_error);
6937 }
6938
6939 /* Returns the __dso_handle VAR_DECL.  */
6940
6941 static tree
6942 get_dso_handle_node (void)
6943 {
6944   if (dso_handle_node)
6945     return dso_handle_node;
6946
6947   /* Declare the variable.  */
6948   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6949                                         ptr_type_node);
6950
6951 #ifdef HAVE_GAS_HIDDEN
6952   if (dso_handle_node != error_mark_node)
6953     {
6954       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6955       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6956     }
6957 #endif
6958
6959   return dso_handle_node;
6960 }
6961
6962 /* Begin a new function with internal linkage whose job will be simply
6963    to destroy some particular variable.  */
6964
6965 static GTY(()) int start_cleanup_cnt;
6966
6967 static tree
6968 start_cleanup_fn (void)
6969 {
6970   char name[32];
6971   tree fntype;
6972   tree fndecl;
6973   bool use_cxa_atexit = flag_use_cxa_atexit
6974                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6975
6976   push_to_top_level ();
6977
6978   /* No need to mangle this.  */
6979   push_lang_context (lang_name_c);
6980
6981   /* Build the name of the function.  */
6982   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6983   /* Build the function declaration.  */
6984   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6985   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6986   /* It's a function with internal linkage, generated by the
6987      compiler.  */
6988   TREE_PUBLIC (fndecl) = 0;
6989   DECL_ARTIFICIAL (fndecl) = 1;
6990   /* Make the function `inline' so that it is only emitted if it is
6991      actually needed.  It is unlikely that it will be inlined, since
6992      it is only called via a function pointer, but we avoid unnecessary
6993      emissions this way.  */
6994   DECL_DECLARED_INLINE_P (fndecl) = 1;
6995   DECL_INTERFACE_KNOWN (fndecl) = 1;
6996   /* Build the parameter.  */
6997   if (use_cxa_atexit)
6998     {
6999       tree parmdecl;
7000
7001       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
7002       DECL_CONTEXT (parmdecl) = fndecl;
7003       TREE_USED (parmdecl) = 1;
7004       DECL_READ_P (parmdecl) = 1;
7005       DECL_ARGUMENTS (fndecl) = parmdecl;
7006     }
7007
7008   pushdecl (fndecl);
7009   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7010
7011   pop_lang_context ();
7012
7013   return current_function_decl;
7014 }
7015
7016 /* Finish the cleanup function begun by start_cleanup_fn.  */
7017
7018 static void
7019 end_cleanup_fn (void)
7020 {
7021   expand_or_defer_fn (finish_function (0));
7022
7023   pop_from_top_level ();
7024 }
7025
7026 /* Generate code to handle the destruction of DECL, an object with
7027    static storage duration.  */
7028
7029 tree
7030 register_dtor_fn (tree decl)
7031 {
7032   tree cleanup;
7033   tree addr;
7034   tree compound_stmt;
7035   tree fcall;
7036   tree type;
7037   bool ob_parm, dso_parm, use_dtor;
7038   tree arg0, arg1, arg2;
7039   tree atex_node;
7040
7041   type = TREE_TYPE (decl);
7042   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7043     return void_node;
7044
7045   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7046      "__aeabi_atexit"), and DECL is a class object, we can just pass the
7047      destructor to "__cxa_atexit"; we don't have to build a temporary
7048      function to do the cleanup.  */
7049   dso_parm = (flag_use_cxa_atexit
7050               && !targetm.cxx.use_atexit_for_cxa_atexit ());
7051   ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
7052   use_dtor = ob_parm && CLASS_TYPE_P (type);
7053   if (use_dtor)
7054     {
7055       int idx;
7056
7057       /* Find the destructor.  */
7058       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
7059       gcc_assert (idx >= 0);
7060       cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
7061       /* Make sure it is accessible.  */
7062       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7063                                      tf_warning_or_error);
7064     }
7065   else
7066     {
7067       /* Call build_cleanup before we enter the anonymous function so
7068          that any access checks will be done relative to the current
7069          scope, rather than the scope of the anonymous function.  */
7070       build_cleanup (decl);
7071   
7072       /* Now start the function.  */
7073       cleanup = start_cleanup_fn ();
7074       
7075       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7076          to the original function, rather than the anonymous one.  That
7077          will make the back end think that nested functions are in use,
7078          which causes confusion.  */
7079       push_deferring_access_checks (dk_no_check);
7080       fcall = build_cleanup (decl);
7081       pop_deferring_access_checks ();
7082       
7083       /* Create the body of the anonymous function.  */
7084       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7085       finish_expr_stmt (fcall);
7086       finish_compound_stmt (compound_stmt);
7087       end_cleanup_fn ();
7088     }
7089
7090   /* Call atexit with the cleanup function.  */
7091   mark_used (cleanup);
7092   cleanup = build_address (cleanup);
7093
7094   if (DECL_THREAD_LOCAL_P (decl))
7095     atex_node = get_thread_atexit_node ();
7096   else
7097     atex_node = get_atexit_node ();
7098
7099   if (use_dtor)
7100     {
7101       /* We must convert CLEANUP to the type that "__cxa_atexit"
7102          expects.  */
7103       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7104       /* "__cxa_atexit" will pass the address of DECL to the
7105          cleanup function.  */
7106       mark_used (decl);
7107       addr = build_address (decl);
7108       /* The declared type of the parameter to "__cxa_atexit" is
7109          "void *".  For plain "T*", we could just let the
7110          machinery in cp_build_function_call convert it -- but if the
7111          type is "cv-qualified T *", then we need to convert it
7112          before passing it in, to avoid spurious errors.  */
7113       addr = build_nop (ptr_type_node, addr);
7114     }
7115   else
7116     /* Since the cleanup functions we build ignore the address
7117        they're given, there's no reason to pass the actual address
7118        in, and, in general, it's cheaper to pass NULL than any
7119        other value.  */
7120     addr = null_pointer_node;
7121
7122   if (dso_parm)
7123     arg2 = cp_build_addr_expr (get_dso_handle_node (),
7124                                tf_warning_or_error);
7125   else if (ob_parm)
7126     /* Just pass NULL to the dso handle parm if we don't actually
7127        have a DSO handle on this target.  */
7128     arg2 = null_pointer_node;
7129   else
7130     arg2 = NULL_TREE;
7131
7132   if (ob_parm)
7133     {
7134       if (!DECL_THREAD_LOCAL_P (decl)
7135           && targetm.cxx.use_aeabi_atexit ())
7136         {
7137           arg1 = cleanup;
7138           arg0 = addr;
7139         }
7140       else
7141         {
7142           arg1 = addr;
7143           arg0 = cleanup;
7144         }
7145     }
7146   else
7147     {
7148       arg0 = cleanup;
7149       arg1 = NULL_TREE;
7150     }
7151   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7152                                       arg0, arg1, arg2, NULL_TREE);
7153 }
7154
7155 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
7156    is its initializer.  Generate code to handle the construction
7157    and destruction of DECL.  */
7158
7159 static void
7160 expand_static_init (tree decl, tree init)
7161 {
7162   gcc_assert (VAR_P (decl));
7163   gcc_assert (TREE_STATIC (decl));
7164
7165   /* Some variables require no dynamic initialization.  */
7166   if (!init
7167       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7168     {
7169       /* Make sure the destructor is callable.  */
7170       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7171       return;
7172     }
7173
7174   if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7175       && !DECL_FUNCTION_SCOPE_P (decl))
7176     {
7177       if (init)
7178         error ("non-local variable %qD declared %<__thread%> "
7179                "needs dynamic initialization", decl);
7180       else
7181         error ("non-local variable %qD declared %<__thread%> "
7182                "has a non-trivial destructor", decl);
7183       static bool informed;
7184       if (!informed)
7185         {
7186           inform (DECL_SOURCE_LOCATION (decl),
7187                   "C++11 %<thread_local%> allows dynamic initialization "
7188                   "and destruction");
7189           informed = true;
7190         }
7191       return;
7192     }
7193
7194   if (DECL_FUNCTION_SCOPE_P (decl))
7195     {
7196       /* Emit code to perform this initialization but once.  */
7197       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7198       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7199       tree guard, guard_addr;
7200       tree flag, begin;
7201       /* We don't need thread-safety code for thread-local vars.  */
7202       bool thread_guard = (flag_threadsafe_statics
7203                            && !DECL_THREAD_LOCAL_P (decl));
7204
7205       /* Emit code to perform this initialization but once.  This code
7206          looks like:
7207
7208            static <type> guard;
7209            if (!guard.first_byte) {
7210              if (__cxa_guard_acquire (&guard)) {
7211                bool flag = false;
7212                try {
7213                  // Do initialization.
7214                  flag = true; __cxa_guard_release (&guard);
7215                  // Register variable for destruction at end of program.
7216                } catch {
7217                  if (!flag) __cxa_guard_abort (&guard);
7218                }
7219            }
7220
7221          Note that the `flag' variable is only set to 1 *after* the
7222          initialization is complete.  This ensures that an exception,
7223          thrown during the construction, will cause the variable to
7224          reinitialized when we pass through this code again, as per:
7225
7226            [stmt.dcl]
7227
7228            If the initialization exits by throwing an exception, the
7229            initialization is not complete, so it will be tried again
7230            the next time control enters the declaration.
7231
7232          This process should be thread-safe, too; multiple threads
7233          should not be able to initialize the variable more than
7234          once.  */
7235
7236       /* Create the guard variable.  */
7237       guard = get_guard (decl);
7238
7239       /* This optimization isn't safe on targets with relaxed memory
7240          consistency.  On such targets we force synchronization in
7241          __cxa_guard_acquire.  */
7242       if (!targetm.relaxed_ordering || !thread_guard)
7243         {
7244           /* Begin the conditional initialization.  */
7245           if_stmt = begin_if_stmt ();
7246           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7247           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7248         }
7249
7250       if (thread_guard)
7251         {
7252           tree vfntype = NULL_TREE;
7253           tree acquire_name, release_name, abort_name;
7254           tree acquire_fn, release_fn, abort_fn;
7255           guard_addr = build_address (guard);
7256
7257           acquire_name = get_identifier ("__cxa_guard_acquire");
7258           release_name = get_identifier ("__cxa_guard_release");
7259           abort_name = get_identifier ("__cxa_guard_abort");
7260           acquire_fn = identifier_global_value (acquire_name);
7261           release_fn = identifier_global_value (release_name);
7262           abort_fn = identifier_global_value (abort_name);
7263           if (!acquire_fn)
7264             acquire_fn = push_library_fn
7265               (acquire_name, build_function_type_list (integer_type_node,
7266                                                        TREE_TYPE (guard_addr),
7267                                                        NULL_TREE),
7268                NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7269           if (!release_fn || !abort_fn)
7270             vfntype = build_function_type_list (void_type_node,
7271                                                 TREE_TYPE (guard_addr),
7272                                                 NULL_TREE);
7273           if (!release_fn)
7274             release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7275                                            ECF_NOTHROW | ECF_LEAF);
7276           if (!abort_fn)
7277             abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7278                                         ECF_NOTHROW | ECF_LEAF);
7279
7280           inner_if_stmt = begin_if_stmt ();
7281           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7282                                inner_if_stmt);
7283
7284           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7285           begin = get_target_expr (boolean_false_node);
7286           flag = TARGET_EXPR_SLOT (begin);
7287
7288           TARGET_EXPR_CLEANUP (begin)
7289             = build3 (COND_EXPR, void_type_node, flag,
7290                       void_node,
7291                       build_call_n (abort_fn, 1, guard_addr));
7292           CLEANUP_EH_ONLY (begin) = 1;
7293
7294           /* Do the initialization itself.  */
7295           init = add_stmt_to_compound (begin, init);
7296           init = add_stmt_to_compound
7297             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7298           init = add_stmt_to_compound
7299             (init, build_call_n (release_fn, 1, guard_addr));
7300         }
7301       else
7302         init = add_stmt_to_compound (init, set_guard (guard));
7303
7304       /* Use atexit to register a function for destroying this static
7305          variable.  */
7306       init = add_stmt_to_compound (init, register_dtor_fn (decl));
7307
7308       finish_expr_stmt (init);
7309
7310       if (thread_guard)
7311         {
7312           finish_compound_stmt (inner_then_clause);
7313           finish_then_clause (inner_if_stmt);
7314           finish_if_stmt (inner_if_stmt);
7315         }
7316
7317       if (!targetm.relaxed_ordering || !thread_guard)
7318         {
7319           finish_compound_stmt (then_clause);
7320           finish_then_clause (if_stmt);
7321           finish_if_stmt (if_stmt);
7322         }
7323     }
7324   else if (DECL_THREAD_LOCAL_P (decl))
7325     tls_aggregates = tree_cons (init, decl, tls_aggregates);
7326   else
7327     static_aggregates = tree_cons (init, decl, static_aggregates);
7328 }
7329
7330 \f
7331 /* Make TYPE a complete type based on INITIAL_VALUE.
7332    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7333    2 if there was no information (in which case assume 0 if DO_DEFAULT),
7334    3 if the initializer list is empty (in pedantic mode). */
7335
7336 int
7337 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7338 {
7339   int failure;
7340   tree type, elt_type;
7341
7342   /* Don't get confused by a CONSTRUCTOR for some other type.  */
7343   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7344       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value))
7345     return 1;
7346
7347   if (initial_value)
7348     {
7349       unsigned HOST_WIDE_INT i;
7350       tree value;
7351
7352       /* An array of character type can be initialized from a
7353          brace-enclosed string constant.
7354
7355          FIXME: this code is duplicated from reshape_init. Probably
7356          we should just call reshape_init here?  */
7357       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7358           && TREE_CODE (initial_value) == CONSTRUCTOR
7359           && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7360         {
7361           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7362           tree value = (*v)[0].value;
7363
7364           if (TREE_CODE (value) == STRING_CST
7365               && v->length () == 1)
7366             initial_value = value;
7367         }
7368
7369       /* If any of the elements are parameter packs, we can't actually
7370          complete this type now because the array size is dependent.  */
7371       if (TREE_CODE (initial_value) == CONSTRUCTOR)
7372         {
7373           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
7374                                       i, value)
7375             {
7376               if (PACK_EXPANSION_P (value))
7377                 return 0;
7378             }
7379         }
7380     }
7381
7382   failure = complete_array_type (ptype, initial_value, do_default);
7383
7384   /* We can create the array before the element type is complete, which
7385      means that we didn't have these two bits set in the original type
7386      either.  In completing the type, we are expected to propagate these
7387      bits.  See also complete_type which does the same thing for arrays
7388      of fixed size.  */
7389   type = *ptype;
7390   if (TYPE_DOMAIN (type))
7391     {
7392       elt_type = TREE_TYPE (type);
7393       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7394       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7395         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7396     }
7397
7398   return failure;
7399 }
7400
7401 /* As above, but either give an error or reject zero-size arrays, depending
7402    on COMPLAIN.  */
7403
7404 int
7405 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7406                                  bool do_default, tsubst_flags_t complain)
7407 {
7408   int failure;
7409   bool sfinae = !(complain & tf_error);
7410   /* In SFINAE context we can't be lenient about zero-size arrays.  */
7411   if (sfinae)
7412     ++pedantic;
7413   failure = cp_complete_array_type (ptype, initial_value, do_default);
7414   if (sfinae)
7415     --pedantic;
7416   if (failure)
7417     {
7418       if (sfinae)
7419         /* Not an error.  */;
7420       else if (failure == 1)
7421         error ("initializer fails to determine size of %qT", *ptype);
7422       else if (failure == 2)
7423         {
7424           if (do_default)
7425             error ("array size missing in %qT", *ptype);
7426         }
7427       else if (failure == 3)
7428         error ("zero-size array %qT", *ptype);
7429       *ptype = error_mark_node;
7430     }
7431   return failure;
7432 }
7433 \f
7434 /* Return zero if something is declared to be a member of type
7435    CTYPE when in the context of CUR_TYPE.  STRING is the error
7436    message to print in that case.  Otherwise, quietly return 1.  */
7437
7438 static int
7439 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7440 {
7441   if (ctype && ctype != cur_type)
7442     {
7443       if (flags == DTOR_FLAG)
7444         error ("destructor for alien class %qT cannot be a member", ctype);
7445       else
7446         error ("constructor for alien class %qT cannot be a member", ctype);
7447       return 0;
7448     }
7449   return 1;
7450 }
7451 \f
7452 /* Subroutine of `grokdeclarator'.  */
7453
7454 /* Generate errors possibly applicable for a given set of specifiers.
7455    This is for ARM $7.1.2.  */
7456
7457 static void
7458 bad_specifiers (tree object,
7459                 enum bad_spec_place type,
7460                 int virtualp,
7461                 int quals,
7462                 int inlinep,
7463                 int friendp,
7464                 int raises)
7465 {
7466   switch (type)
7467     {
7468       case BSP_VAR:
7469         if (virtualp)
7470           error ("%qD declared as a %<virtual%> variable", object);
7471         if (inlinep)
7472           error ("%qD declared as an %<inline%> variable", object);
7473         if (quals)
7474           error ("%<const%> and %<volatile%> function specifiers on "
7475                  "%qD invalid in variable declaration", object);
7476         break;
7477       case BSP_PARM:
7478         if (virtualp)
7479           error ("%qD declared as a %<virtual%> parameter", object);
7480         if (inlinep)
7481           error ("%qD declared as an %<inline%> parameter", object);
7482         if (quals)
7483           error ("%<const%> and %<volatile%> function specifiers on "
7484                  "%qD invalid in parameter declaration", object);
7485         break;
7486       case BSP_TYPE:
7487         if (virtualp)
7488           error ("%qD declared as a %<virtual%> type", object);
7489         if (inlinep)
7490           error ("%qD declared as an %<inline%> type", object);
7491         if (quals)
7492           error ("%<const%> and %<volatile%> function specifiers on "
7493                  "%qD invalid in type declaration", object);
7494         break;
7495       case BSP_FIELD:
7496         if (virtualp)
7497           error ("%qD declared as a %<virtual%> field", object);
7498         if (inlinep)
7499           error ("%qD declared as an %<inline%> field", object);
7500         if (quals)
7501           error ("%<const%> and %<volatile%> function specifiers on "
7502                  "%qD invalid in field declaration", object);
7503         break;
7504       default:
7505         gcc_unreachable();
7506     }
7507   if (friendp)
7508     error ("%q+D declared as a friend", object);
7509   if (raises
7510       && (TREE_CODE (object) == TYPE_DECL
7511           || (!TYPE_PTRFN_P (TREE_TYPE (object))
7512               && !TYPE_REFFN_P (TREE_TYPE (object))
7513               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7514     error ("%q+D declared with an exception specification", object);
7515 }
7516
7517 /* DECL is a member function or static data member and is presently
7518    being defined.  Check that the definition is taking place in a
7519    valid namespace.  */
7520
7521 static void
7522 check_class_member_definition_namespace (tree decl)
7523 {
7524   /* These checks only apply to member functions and static data
7525      members.  */
7526   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7527   /* We check for problems with specializations in pt.c in
7528      check_specialization_namespace, where we can issue better
7529      diagnostics.  */
7530   if (processing_specialization)
7531     return;
7532   /* There are no restrictions on the placement of
7533      explicit instantiations.  */
7534   if (processing_explicit_instantiation)
7535     return;
7536   /* [class.mfct]
7537
7538      A member function definition that appears outside of the
7539      class definition shall appear in a namespace scope enclosing
7540      the class definition.
7541
7542      [class.static.data]
7543
7544      The definition for a static data member shall appear in a
7545      namespace scope enclosing the member's class definition.  */
7546   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7547     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7548                decl, DECL_CONTEXT (decl));
7549 }
7550
7551 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7552    METHOD_TYPE for a non-static member function; QUALS are the
7553    cv-qualifiers that apply to the function.  */
7554
7555 tree
7556 build_this_parm (tree type, cp_cv_quals quals)
7557 {
7558   tree this_type;
7559   tree qual_type;
7560   tree parm;
7561   cp_cv_quals this_quals;
7562
7563   if (CLASS_TYPE_P (type))
7564     {
7565       this_type
7566         = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7567       this_type = build_pointer_type (this_type);
7568     }
7569   else
7570     this_type = type_of_this_parm (type);
7571   /* The `this' parameter is implicitly `const'; it cannot be
7572      assigned to.  */
7573   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7574   qual_type = cp_build_qualified_type (this_type, this_quals);
7575   parm = build_artificial_parm (this_identifier, qual_type);
7576   cp_apply_type_quals_to_decl (this_quals, parm);
7577   return parm;
7578 }
7579
7580 /* DECL is a static member function.  Complain if it was declared
7581    with function-cv-quals.  */
7582
7583 static void
7584 check_static_quals (tree decl, cp_cv_quals quals)
7585 {
7586   if (quals != TYPE_UNQUALIFIED)
7587     error ("static member function %q#D declared with type qualifiers",
7588            decl);
7589 }
7590
7591 /* Helper function.  Replace the temporary this parameter injected
7592    during cp_finish_omp_declare_simd with the real this parameter.  */
7593
7594 static tree
7595 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7596 {
7597   tree this_parm = (tree) data;
7598   if (TREE_CODE (*tp) == PARM_DECL
7599       && DECL_NAME (*tp) == this_identifier
7600       && *tp != this_parm)
7601     *tp = this_parm;
7602   else if (TYPE_P (*tp))
7603     *walk_subtrees = 0;
7604   return NULL_TREE;
7605 }
7606
7607 /* CTYPE is class type, or null if non-class.
7608    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7609    or METHOD_TYPE.
7610    DECLARATOR is the function's name.
7611    PARMS is a chain of PARM_DECLs for the function.
7612    VIRTUALP is truthvalue of whether the function is virtual or not.
7613    FLAGS are to be passed through to `grokclassfn'.
7614    QUALS are qualifiers indicating whether the function is `const'
7615    or `volatile'.
7616    RAISES is a list of exceptions that this function can raise.
7617    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7618    not look, and -1 if we should not call `grokclassfn' at all.
7619
7620    SFK is the kind of special function (if any) for the new function.
7621
7622    Returns `NULL_TREE' if something goes wrong, after issuing
7623    applicable error messages.  */
7624
7625 static tree
7626 grokfndecl (tree ctype,
7627             tree type,
7628             tree declarator,
7629             tree parms,
7630             tree orig_declarator,
7631             int virtualp,
7632             enum overload_flags flags,
7633             cp_cv_quals quals,
7634             cp_ref_qualifier rqual,
7635             tree raises,
7636             int check,
7637             int friendp,
7638             int publicp,
7639             int inlinep,
7640             bool deletedp,
7641             special_function_kind sfk,
7642             bool funcdef_flag,
7643             int template_count,
7644             tree in_namespace,
7645             tree* attrlist,
7646             location_t location)
7647 {
7648   tree decl;
7649   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7650   tree t;
7651
7652   if (rqual)
7653     type = build_ref_qualified_type (type, rqual);
7654   if (raises)
7655     type = build_exception_variant (type, raises);
7656
7657   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7658
7659   /* If we have an explicit location, use it, otherwise use whatever
7660      build_lang_decl used (probably input_location).  */
7661   if (location != UNKNOWN_LOCATION)
7662     DECL_SOURCE_LOCATION (decl) = location;
7663
7664   if (TREE_CODE (type) == METHOD_TYPE)
7665     {
7666       tree parm;
7667       parm = build_this_parm (type, quals);
7668       DECL_CHAIN (parm) = parms;
7669       parms = parm;
7670     }
7671   DECL_ARGUMENTS (decl) = parms;
7672   for (t = parms; t; t = DECL_CHAIN (t))
7673     DECL_CONTEXT (t) = decl;
7674   /* Propagate volatile out from type to decl.  */
7675   if (TYPE_VOLATILE (type))
7676     TREE_THIS_VOLATILE (decl) = 1;
7677
7678   /* Setup decl according to sfk.  */
7679   switch (sfk)
7680     {
7681     case sfk_constructor:
7682     case sfk_copy_constructor:
7683     case sfk_move_constructor:
7684       DECL_CONSTRUCTOR_P (decl) = 1;
7685       break;
7686     case sfk_destructor:
7687       DECL_DESTRUCTOR_P (decl) = 1;
7688       break;
7689     default:
7690       break;
7691     }
7692
7693   /* If pointers to member functions use the least significant bit to
7694      indicate whether a function is virtual, ensure a pointer
7695      to this function will have that bit clear.  */
7696   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7697       && TREE_CODE (type) == METHOD_TYPE
7698       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7699     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7700
7701   if (friendp
7702       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7703     {
7704       if (funcdef_flag)
7705         error
7706           ("defining explicit specialization %qD in friend declaration",
7707            orig_declarator);
7708       else
7709         {
7710           tree fns = TREE_OPERAND (orig_declarator, 0);
7711           tree args = TREE_OPERAND (orig_declarator, 1);
7712
7713           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7714             {
7715               /* Something like `template <class T> friend void f<T>()'.  */
7716               error ("invalid use of template-id %qD in declaration "
7717                      "of primary template",
7718                      orig_declarator);
7719               return NULL_TREE;
7720             }
7721
7722
7723           /* A friend declaration of the form friend void f<>().  Record
7724              the information in the TEMPLATE_ID_EXPR.  */
7725           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7726
7727           gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7728           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7729
7730           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7731             if (TREE_PURPOSE (t)
7732                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7733             {
7734               error ("default arguments are not allowed in declaration "
7735                      "of friend template specialization %qD",
7736                      decl);
7737               return NULL_TREE;
7738             }
7739
7740           if (inlinep & 1)
7741             error ("%<inline%> is not allowed in declaration of friend "
7742                    "template specialization %qD",
7743                    decl);
7744           if (inlinep & 2)
7745             error ("%<constexpr%> is not allowed in declaration of friend "
7746                    "template specialization %qD",
7747                    decl);
7748           if (inlinep)
7749             return NULL_TREE;
7750         }
7751     }
7752
7753   /* If this decl has namespace scope, set that up.  */
7754   if (in_namespace)
7755     set_decl_namespace (decl, in_namespace, friendp);
7756   else if (!ctype)
7757     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7758
7759   /* `main' and builtins have implicit 'C' linkage.  */
7760   if ((MAIN_NAME_P (declarator)
7761        || (IDENTIFIER_LENGTH (declarator) > 10
7762            && IDENTIFIER_POINTER (declarator)[0] == '_'
7763            && IDENTIFIER_POINTER (declarator)[1] == '_'
7764            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7765        || (targetcm.cxx_implicit_extern_c
7766            && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7767       && current_lang_name == lang_name_cplusplus
7768       && ctype == NULL_TREE
7769       && DECL_FILE_SCOPE_P (decl))
7770     SET_DECL_LANGUAGE (decl, lang_c);
7771
7772   /* Should probably propagate const out from type to decl I bet (mrs).  */
7773   if (staticp)
7774     {
7775       DECL_STATIC_FUNCTION_P (decl) = 1;
7776       DECL_CONTEXT (decl) = ctype;
7777     }
7778
7779   if (deletedp)
7780     DECL_DELETED_FN (decl) = 1;
7781
7782   if (ctype)
7783     {
7784       DECL_CONTEXT (decl) = ctype;
7785       if (funcdef_flag)
7786         check_class_member_definition_namespace (decl);
7787     }
7788
7789   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7790     {
7791       if (PROCESSING_REAL_TEMPLATE_DECL_P())
7792         error ("cannot declare %<::main%> to be a template");
7793       if (inlinep & 1)
7794         error ("cannot declare %<::main%> to be inline");
7795       if (inlinep & 2)
7796         error ("cannot declare %<::main%> to be constexpr");
7797       if (!publicp)
7798         error ("cannot declare %<::main%> to be static");
7799       inlinep = 0;
7800       publicp = 1;
7801     }
7802
7803   /* Members of anonymous types and local classes have no linkage; make
7804      them internal.  If a typedef is made later, this will be changed.  */
7805   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7806                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7807     publicp = 0;
7808
7809   if (publicp && cxx_dialect == cxx98)
7810     {
7811       /* [basic.link]: A name with no linkage (notably, the name of a class
7812          or enumeration declared in a local scope) shall not be used to
7813          declare an entity with linkage.
7814
7815          DR 757 relaxes this restriction for C++0x.  */
7816       no_linkage_error (decl);
7817     }
7818
7819   TREE_PUBLIC (decl) = publicp;
7820   if (! publicp)
7821     {
7822       DECL_INTERFACE_KNOWN (decl) = 1;
7823       DECL_NOT_REALLY_EXTERN (decl) = 1;
7824     }
7825
7826   /* If the declaration was declared inline, mark it as such.  */
7827   if (inlinep)
7828     {
7829       DECL_DECLARED_INLINE_P (decl) = 1;
7830       if (publicp)
7831         DECL_COMDAT (decl) = 1;
7832     }
7833   if (inlinep & 2)
7834     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7835
7836   DECL_EXTERNAL (decl) = 1;
7837   if (TREE_CODE (type) == FUNCTION_TYPE)
7838     {
7839       if (quals)
7840         {
7841           error (ctype
7842                  ? G_("static member function %qD cannot have cv-qualifier")
7843                  : G_("non-member function %qD cannot have cv-qualifier"),
7844                  decl);
7845           quals = TYPE_UNQUALIFIED;
7846         }
7847
7848       if (rqual)
7849         {
7850           error (ctype
7851                  ? G_("static member function %qD cannot have ref-qualifier")
7852                  : G_("non-member function %qD cannot have ref-qualifier"),
7853                  decl);
7854           rqual = REF_QUAL_NONE;
7855         }
7856     }
7857
7858   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7859       && !grok_op_properties (decl, /*complain=*/true))
7860     return NULL_TREE;
7861   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7862     {
7863       bool long_long_unsigned_p;
7864       bool long_double_p;
7865       const char *suffix = NULL;
7866       /* [over.literal]/6: Literal operators shall not have C linkage. */
7867       if (DECL_LANGUAGE (decl) == lang_c)
7868         {
7869           error ("literal operator with C linkage");
7870           return NULL_TREE;
7871         }
7872
7873       if (DECL_NAMESPACE_SCOPE_P (decl))
7874         {
7875           if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7876                                             &long_double_p))
7877             {
7878               error ("%qD has invalid argument list", decl);
7879               return NULL_TREE;
7880             }
7881
7882           suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7883           if (long_long_unsigned_p)
7884             {
7885               if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7886                 warning (0, "integer suffix %<%s%>"
7887                             " shadowed by implementation", suffix);
7888             }
7889           else if (long_double_p)
7890             {
7891               if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7892                 warning (0, "floating point suffix %<%s%>"
7893                             " shadowed by implementation", suffix);
7894             }
7895         }
7896       else
7897         {
7898           error ("%qD must be a non-member function", decl);
7899           return NULL_TREE;
7900         }
7901     }
7902
7903   if (funcdef_flag)
7904     /* Make the init_value nonzero so pushdecl knows this is not
7905        tentative.  error_mark_node is replaced later with the BLOCK.  */
7906     DECL_INITIAL (decl) = error_mark_node;
7907
7908   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7909     TREE_NOTHROW (decl) = 1;
7910
7911   if (flag_openmp || flag_cilkplus)
7912     {
7913       /* Adjust "omp declare simd" attributes.  */
7914       tree ods = lookup_attribute ("omp declare simd", *attrlist);
7915       if (ods)
7916         {
7917           tree attr;
7918           for (attr = ods; attr;
7919                attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7920             {
7921               if (TREE_CODE (type) == METHOD_TYPE)
7922                 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7923                            DECL_ARGUMENTS (decl), NULL);
7924               if (TREE_VALUE (attr) != NULL_TREE)
7925                 {
7926                   tree cl = TREE_VALUE (TREE_VALUE (attr));
7927                   cl = c_omp_declare_simd_clauses_to_numbers
7928                                                 (DECL_ARGUMENTS (decl), cl);
7929                   if (cl)
7930                     TREE_VALUE (TREE_VALUE (attr)) = cl;
7931                   else
7932                     TREE_VALUE (attr) = NULL_TREE;
7933                 }
7934             }
7935         }
7936     }
7937
7938   /* Caller will do the rest of this.  */
7939   if (check < 0)
7940     return decl;
7941
7942   if (ctype != NULL_TREE)
7943     grokclassfn (ctype, decl, flags);
7944
7945   /* 12.4/3  */
7946   if (cxx_dialect >= cxx11
7947       && DECL_DESTRUCTOR_P (decl)
7948       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7949       && !processing_template_decl)
7950     deduce_noexcept_on_destructor (decl);
7951
7952   decl = check_explicit_specialization (orig_declarator, decl,
7953                                         template_count,
7954                                         2 * funcdef_flag +
7955                                         4 * (friendp != 0));
7956   if (decl == error_mark_node)
7957     return NULL_TREE;
7958
7959   if (DECL_STATIC_FUNCTION_P (decl))
7960     check_static_quals (decl, quals);
7961
7962   if (attrlist)
7963     {
7964       cplus_decl_attributes (&decl, *attrlist, 0);
7965       *attrlist = NULL_TREE;
7966     }
7967
7968   /* Check main's type after attributes have been applied.  */
7969   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7970     {
7971       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7972                         integer_type_node))
7973         {
7974           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7975           tree newtype;
7976           error ("%<::main%> must return %<int%>");
7977           newtype = build_function_type (integer_type_node, oldtypeargs);
7978           TREE_TYPE (decl) = newtype;
7979         }
7980       if (warn_main)
7981         check_main_parameter_types (decl);
7982     }
7983
7984   if (ctype != NULL_TREE
7985       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7986       && check)
7987     {
7988       tree old_decl = check_classfn (ctype, decl,
7989                                      (processing_template_decl
7990                                       > template_class_depth (ctype))
7991                                      ? current_template_parms
7992                                      : NULL_TREE);
7993
7994       if (old_decl == error_mark_node)
7995         return NULL_TREE;
7996
7997       if (old_decl)
7998         {
7999           tree ok;
8000           tree pushed_scope;
8001
8002           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8003             /* Because grokfndecl is always supposed to return a
8004                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8005                here.  We depend on our callers to figure out that its
8006                really a template that's being returned.  */
8007             old_decl = DECL_TEMPLATE_RESULT (old_decl);
8008
8009           if (DECL_STATIC_FUNCTION_P (old_decl)
8010               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8011             {
8012               /* Remove the `this' parm added by grokclassfn.  */
8013               revert_static_member_fn (decl);
8014               check_static_quals (decl, quals);
8015             }
8016           if (DECL_ARTIFICIAL (old_decl))
8017             {
8018               error ("definition of implicitly-declared %qD", old_decl);
8019               return NULL_TREE;
8020             }
8021           else if (DECL_DEFAULTED_FN (old_decl))
8022             {
8023               error ("definition of explicitly-defaulted %q+D", decl);
8024               error ("%q+#D explicitly defaulted here", old_decl);
8025               return NULL_TREE;
8026             }
8027
8028           /* Since we've smashed OLD_DECL to its
8029              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8030           if (TREE_CODE (decl) == TEMPLATE_DECL)
8031             decl = DECL_TEMPLATE_RESULT (decl);
8032
8033           /* Attempt to merge the declarations.  This can fail, in
8034              the case of some invalid specialization declarations.  */
8035           pushed_scope = push_scope (ctype);
8036           ok = duplicate_decls (decl, old_decl, friendp);
8037           if (pushed_scope)
8038             pop_scope (pushed_scope);
8039           if (!ok)
8040             {
8041               error ("no %q#D member function declared in class %qT",
8042                      decl, ctype);
8043               return NULL_TREE;
8044             }
8045           if (ok == error_mark_node)
8046             return NULL_TREE;
8047           return old_decl;
8048         }
8049     }
8050
8051   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8052     return NULL_TREE;
8053
8054   if (ctype == NULL_TREE || check)
8055     return decl;
8056
8057   if (virtualp)
8058     DECL_VIRTUAL_P (decl) = 1;
8059
8060   return decl;
8061 }
8062
8063 /* decl is a FUNCTION_DECL.
8064    specifiers are the parsed virt-specifiers.
8065
8066    Set flags to reflect the virt-specifiers.
8067
8068    Returns decl.  */
8069
8070 static tree
8071 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8072 {
8073   if (decl == NULL_TREE)
8074     return decl;
8075   if (specifiers & VIRT_SPEC_OVERRIDE)
8076     DECL_OVERRIDE_P (decl) = 1;
8077   if (specifiers & VIRT_SPEC_FINAL)
8078     DECL_FINAL_P (decl) = 1;
8079   return decl;
8080 }
8081
8082 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
8083    the linkage that DECL will receive in the object file.  */
8084
8085 static void
8086 set_linkage_for_static_data_member (tree decl)
8087 {
8088   /* A static data member always has static storage duration and
8089      external linkage.  Note that static data members are forbidden in
8090      local classes -- the only situation in which a class has
8091      non-external linkage.  */
8092   TREE_PUBLIC (decl) = 1;
8093   TREE_STATIC (decl) = 1;
8094   /* For non-template classes, static data members are always put
8095      out in exactly those files where they are defined, just as
8096      with ordinary namespace-scope variables.  */
8097   if (!processing_template_decl)
8098     DECL_INTERFACE_KNOWN (decl) = 1;
8099 }
8100
8101 /* Create a VAR_DECL named NAME with the indicated TYPE.
8102
8103    If SCOPE is non-NULL, it is the class type or namespace containing
8104    the variable.  If SCOPE is NULL, the variable should is created in
8105    the innermost enclosing scope.  */
8106
8107 static tree
8108 grokvardecl (tree type,
8109              tree name,
8110              tree orig_declarator,
8111              const cp_decl_specifier_seq *declspecs,
8112              int initialized,
8113              int constp,
8114              int template_count,
8115              tree scope)
8116 {
8117   tree decl;
8118   tree explicit_scope;
8119
8120   gcc_assert (!name || identifier_p (name));
8121
8122   /* Compute the scope in which to place the variable, but remember
8123      whether or not that scope was explicitly specified by the user.   */
8124   explicit_scope = scope;
8125   if (!scope)
8126     {
8127       /* An explicit "extern" specifier indicates a namespace-scope
8128          variable.  */
8129       if (declspecs->storage_class == sc_extern)
8130         scope = current_decl_namespace ();
8131       else if (!at_function_scope_p ())
8132         scope = current_scope ();
8133     }
8134
8135   if (scope
8136       && (/* If the variable is a namespace-scope variable declared in a
8137              template, we need DECL_LANG_SPECIFIC.  */
8138           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8139           /* Similarly for namespace-scope variables with language linkage
8140              other than C++.  */
8141           || (TREE_CODE (scope) == NAMESPACE_DECL
8142               && current_lang_name != lang_name_cplusplus)
8143           /* Similarly for static data members.  */
8144           || TYPE_P (scope)
8145           /* Similarly for explicit specializations.  */
8146           || (orig_declarator
8147               && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8148     decl = build_lang_decl (VAR_DECL, name, type);
8149   else
8150     decl = build_decl (input_location, VAR_DECL, name, type);
8151
8152   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8153     set_decl_namespace (decl, explicit_scope, 0);
8154   else
8155     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
8156
8157   if (declspecs->storage_class == sc_extern)
8158     {
8159       DECL_THIS_EXTERN (decl) = 1;
8160       DECL_EXTERNAL (decl) = !initialized;
8161     }
8162
8163   if (DECL_CLASS_SCOPE_P (decl))
8164     {
8165       set_linkage_for_static_data_member (decl);
8166       /* This function is only called with out-of-class definitions.  */
8167       DECL_EXTERNAL (decl) = 0;
8168       check_class_member_definition_namespace (decl);
8169     }
8170   /* At top level, either `static' or no s.c. makes a definition
8171      (perhaps tentative), and absence of `static' makes it public.  */
8172   else if (toplevel_bindings_p ())
8173     {
8174       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8175                             && (DECL_THIS_EXTERN (decl) || ! constp));
8176       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8177     }
8178   /* Not at top level, only `static' makes a static definition.  */
8179   else
8180     {
8181       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8182       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8183     }
8184
8185   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8186     {
8187       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8188         set_decl_tls_model (decl, decl_default_tls_model (decl));
8189       if (declspecs->gnu_thread_keyword_p)
8190         DECL_GNU_TLS_P (decl) = true;
8191     }
8192
8193   /* If the type of the decl has no linkage, make sure that we'll
8194      notice that in mark_used.  */
8195   if (cxx_dialect > cxx98
8196       && decl_linkage (decl) != lk_none
8197       && DECL_LANG_SPECIFIC (decl) == NULL
8198       && !DECL_EXTERN_C_P (decl)
8199       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8200     retrofit_lang_decl (decl);
8201
8202   if (TREE_PUBLIC (decl))
8203     {
8204       /* [basic.link]: A name with no linkage (notably, the name of a class
8205          or enumeration declared in a local scope) shall not be used to
8206          declare an entity with linkage.
8207
8208          DR 757 relaxes this restriction for C++0x.  */
8209       if (cxx_dialect < cxx11)
8210         no_linkage_error (decl);
8211     }
8212   else
8213     DECL_INTERFACE_KNOWN (decl) = 1;
8214
8215   // Handle explicit specializations and instantiations of variable templates.
8216   if (orig_declarator
8217       /* For GCC 5 fix 65646 this way.  */
8218       && current_tmpl_spec_kind (template_count) != tsk_none)
8219     decl = check_explicit_specialization (orig_declarator, decl,
8220                                           template_count, 0);
8221
8222   return decl != error_mark_node ? decl : NULL_TREE;
8223 }
8224
8225 /* Create and return a canonical pointer to member function type, for
8226    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8227
8228 tree
8229 build_ptrmemfunc_type (tree type)
8230 {
8231   tree field, fields;
8232   tree t;
8233
8234   if (type == error_mark_node)
8235     return type;
8236
8237   /* If a canonical type already exists for this type, use it.  We use
8238      this method instead of type_hash_canon, because it only does a
8239      simple equality check on the list of field members.  */
8240
8241   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8242     return t;
8243
8244   /* Make sure that we always have the unqualified pointer-to-member
8245      type first.  */
8246   if (cp_cv_quals quals = cp_type_quals (type))
8247     {
8248       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8249       return cp_build_qualified_type (unqual, quals);
8250     }
8251
8252   t = make_node (RECORD_TYPE);
8253
8254   /* Let the front end know this is a pointer to member function.  */
8255   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8256
8257   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8258   fields = field;
8259
8260   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
8261                       delta_type_node);
8262   DECL_CHAIN (field) = fields;
8263   fields = field;
8264
8265   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8266
8267   /* Zap out the name so that the back end will give us the debugging
8268      information for this anonymous RECORD_TYPE.  */
8269   TYPE_NAME (t) = NULL_TREE;
8270
8271   /* Cache this pointer-to-member type so that we can find it again
8272      later.  */
8273   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8274
8275   if (TYPE_STRUCTURAL_EQUALITY_P (type))
8276     SET_TYPE_STRUCTURAL_EQUALITY (t);
8277   else if (TYPE_CANONICAL (type) != type)
8278     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8279
8280   return t;
8281 }
8282
8283 /* Create and return a pointer to data member type.  */
8284
8285 tree
8286 build_ptrmem_type (tree class_type, tree member_type)
8287 {
8288   if (TREE_CODE (member_type) == METHOD_TYPE)
8289     {
8290       cp_cv_quals quals = type_memfn_quals (member_type);
8291       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8292       member_type = build_memfn_type (member_type, class_type, quals, rqual);
8293       return build_ptrmemfunc_type (build_pointer_type (member_type));
8294     }
8295   else
8296     {
8297       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8298       return build_offset_type (class_type, member_type);
8299     }
8300 }
8301
8302 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8303    Check to see that the definition is valid.  Issue appropriate error
8304    messages.  Return 1 if the definition is particularly bad, or 0
8305    otherwise.  */
8306
8307 static int
8308 check_static_variable_definition (tree decl, tree type)
8309 {
8310   /* Can't check yet if we don't know the type.  */
8311   if (dependent_type_p (type))
8312     return 0;
8313   /* If DECL is declared constexpr, we'll do the appropriate checks
8314      in check_initializer.  */
8315   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8316     return 0;
8317   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8318     {
8319       if (!COMPLETE_TYPE_P (type))
8320         error ("in-class initialization of static data member %q#D of "
8321                "incomplete type", decl);
8322       else if (literal_type_p (type))
8323         permerror (input_location,
8324                    "%<constexpr%> needed for in-class initialization of "
8325                    "static data member %q#D of non-integral type", decl);
8326       else
8327         error ("in-class initialization of static data member %q#D of "
8328                "non-literal type", decl);
8329       return 1;
8330     }
8331
8332   /* Motion 10 at San Diego: If a static const integral data member is
8333      initialized with an integral constant expression, the initializer
8334      may appear either in the declaration (within the class), or in
8335      the definition, but not both.  If it appears in the class, the
8336      member is a member constant.  The file-scope definition is always
8337      required.  */
8338   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8339     {
8340       error ("invalid in-class initialization of static data member "
8341              "of non-integral type %qT",
8342              type);
8343       return 1;
8344     }
8345   else if (!CP_TYPE_CONST_P (type))
8346     error ("ISO C++ forbids in-class initialization of non-const "
8347            "static member %qD",
8348            decl);
8349   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8350     pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8351              "%qD of non-integral type %qT", decl, type);
8352
8353   return 0;
8354 }
8355
8356 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
8357    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8358    expressions out into temporary variables so that walk_tree doesn't
8359    step into them (c++/15764).  */
8360
8361 static tree
8362 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8363 {
8364   hash_set<tree> *pset = (hash_set<tree> *)data;
8365   tree expr = *expr_p;
8366   if (TREE_CODE (expr) == SAVE_EXPR)
8367     {
8368       tree op = TREE_OPERAND (expr, 0);
8369       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8370       if (TREE_SIDE_EFFECTS (op))
8371         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8372       *walk_subtrees = 0;
8373     }
8374   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8375     *walk_subtrees = 0;
8376   return NULL;
8377 }
8378
8379 /* Entry point for the above.  */
8380
8381 static void
8382 stabilize_vla_size (tree size)
8383 {
8384   hash_set<tree> pset;
8385   /* Break out any function calls into temporary variables.  */
8386   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
8387 }
8388
8389 /* Helper function for compute_array_index_type.  Look for SIZEOF_EXPR
8390    not inside of SAVE_EXPR and fold them.  */
8391
8392 static tree
8393 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8394 {
8395   tree expr = *expr_p;
8396   if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8397     *walk_subtrees = 0;
8398   else if (TREE_CODE (expr) == SIZEOF_EXPR)
8399     {
8400       *(bool *)data = true;
8401       if (SIZEOF_EXPR_TYPE_P (expr))
8402         expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8403                                            SIZEOF_EXPR, false);
8404       else if (TYPE_P (TREE_OPERAND (expr, 0)))
8405         expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8406                                            false);
8407       else
8408         expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8409                                            false);
8410       if (expr == error_mark_node)
8411         expr = size_one_node;
8412       *expr_p = expr;
8413       *walk_subtrees = 0;
8414     }
8415   return NULL;
8416 }
8417
8418 /* Given the SIZE (i.e., number of elements) in an array, compute an
8419    appropriate index type for the array.  If non-NULL, NAME is the
8420    name of the thing being declared.  */
8421
8422 tree
8423 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8424 {
8425   tree itype;
8426   tree osize = size;
8427
8428   if (error_operand_p (size))
8429     return error_mark_node;
8430
8431   if (!type_dependent_expression_p (size))
8432     {
8433       tree type = TREE_TYPE (size);
8434
8435       mark_rvalue_use (size);
8436
8437       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8438           && TREE_SIDE_EFFECTS (size))
8439         /* In C++98, we mark a non-constant array bound with a magic
8440            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
8441       else
8442         {
8443           size = instantiate_non_dependent_expr_sfinae (size, complain);
8444
8445           if (CLASS_TYPE_P (type)
8446               && CLASSTYPE_LITERAL_P (type))
8447             {
8448               size = build_expr_type_conversion (WANT_INT, size, true);
8449               if (!size)
8450                 {
8451                   if (!(complain & tf_error))
8452                     return error_mark_node;
8453                   if (name)
8454                     error ("size of array %qD has non-integral type %qT",
8455                            name, type);
8456                   else
8457                     error ("size of array has non-integral type %qT", type);
8458                   size = integer_one_node;
8459                 }
8460               if (size == error_mark_node)
8461                 return error_mark_node;
8462               type = TREE_TYPE (size);
8463             }
8464
8465           if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8466             size = maybe_constant_value (size);
8467
8468           if (!TREE_CONSTANT (size))
8469             size = osize;
8470         }
8471
8472       if (error_operand_p (size))
8473         return error_mark_node;
8474
8475       /* The array bound must be an integer type.  */
8476       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8477         {
8478           if (!(complain & tf_error))
8479             return error_mark_node;
8480           if (name)
8481             error ("size of array %qD has non-integral type %qT", name, type);
8482           else
8483             error ("size of array has non-integral type %qT", type);
8484           size = integer_one_node;
8485           type = TREE_TYPE (size);
8486         }
8487     }
8488
8489   /* A type is dependent if it is...an array type constructed from any
8490      dependent type or whose size is specified by a constant expression
8491      that is value-dependent.  */
8492   /* We can only call value_dependent_expression_p on integral constant
8493      expressions; treat non-constant expressions as dependent, too.  */
8494   if (processing_template_decl
8495       && (type_dependent_expression_p (size)
8496           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8497     {
8498       /* We cannot do any checking for a SIZE that isn't known to be
8499          constant. Just build the index type and mark that it requires
8500          structural equality checks.  */
8501       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8502                                            size, size_one_node));
8503       TYPE_DEPENDENT_P (itype) = 1;
8504       TYPE_DEPENDENT_P_VALID (itype) = 1;
8505       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8506       return itype;
8507     }
8508   
8509   /* Normally, the array-bound will be a constant.  */
8510   if (TREE_CODE (size) == INTEGER_CST)
8511     {
8512       /* Check to see if the array bound overflowed.  Make that an
8513          error, no matter how generous we're being.  */
8514       constant_expression_error (size);
8515
8516       /* An array must have a positive number of elements.  */
8517       if (tree_int_cst_lt (size, integer_zero_node))
8518         {
8519           if (!(complain & tf_error))
8520             return error_mark_node;
8521           if (name)
8522             error ("size of array %qD is negative", name);
8523           else
8524             error ("size of array is negative");
8525           size = integer_one_node;
8526         }
8527       /* As an extension we allow zero-sized arrays.  */
8528       else if (integer_zerop (size))
8529         {
8530           if (!(complain & tf_error))
8531             /* We must fail if performing argument deduction (as
8532                indicated by the state of complain), so that
8533                another substitution can be found.  */
8534             return error_mark_node;
8535           else if (in_system_header_at (input_location))
8536             /* Allow them in system headers because glibc uses them.  */;
8537           else if (name)
8538             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8539           else
8540             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8541         }
8542     }
8543   else if (TREE_CONSTANT (size)
8544            /* We don't allow VLAs at non-function scopes, or during
8545               tentative template substitution.  */
8546            || !at_function_scope_p ()
8547            || !(complain & tf_error))
8548     {
8549       if (!(complain & tf_error))
8550         return error_mark_node;
8551       /* `(int) &fn' is not a valid array bound.  */
8552       if (name)
8553         error ("size of array %qD is not an integral constant-expression",
8554                name);
8555       else
8556         error ("size of array is not an integral constant-expression");
8557       size = integer_one_node;
8558     }
8559   else if (pedantic && warn_vla != 0)
8560     {
8561       if (name)
8562         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8563       else
8564         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8565     }
8566   else if (warn_vla > 0)
8567     {
8568       if (name)
8569         warning (OPT_Wvla, 
8570                  "variable length array %qD is used", name);
8571       else
8572         warning (OPT_Wvla, 
8573                  "variable length array is used");
8574     }
8575
8576   if (processing_template_decl && !TREE_CONSTANT (size))
8577     /* A variable sized array.  */
8578     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8579   else
8580     {
8581       HOST_WIDE_INT saved_processing_template_decl;
8582
8583       /* Compute the index of the largest element in the array.  It is
8584          one less than the number of elements in the array.  We save
8585          and restore PROCESSING_TEMPLATE_DECL so that computations in
8586          cp_build_binary_op will be appropriately folded.  */
8587       saved_processing_template_decl = processing_template_decl;
8588       processing_template_decl = 0;
8589       itype = cp_build_binary_op (input_location,
8590                                   MINUS_EXPR,
8591                                   cp_convert (ssizetype, size, complain),
8592                                   cp_convert (ssizetype, integer_one_node,
8593                                               complain),
8594                                   complain);
8595       itype = fold (itype);
8596       processing_template_decl = saved_processing_template_decl;
8597
8598       if (!TREE_CONSTANT (itype))
8599         {
8600           /* A variable sized array.  */
8601           itype = variable_size (itype);
8602
8603           if (TREE_CODE (itype) != SAVE_EXPR)
8604             {
8605               /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8606                  they might survive till gimplification.  */
8607               tree newitype = itype;
8608               bool found = false;
8609               cp_walk_tree_without_duplicates (&newitype,
8610                                                fold_sizeof_expr_r, &found);
8611               if (found)
8612                 itype = variable_size (fold (newitype));
8613             }
8614
8615           stabilize_vla_size (itype);
8616
8617           if (flag_sanitize & SANITIZE_VLA
8618               && do_ubsan_in_current_function ())
8619             {
8620               /* We have to add 1 -- in the ubsan routine we generate
8621                  LE_EXPR rather than LT_EXPR.  */
8622               tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8623                                     build_one_cst (TREE_TYPE (itype)));
8624               t = ubsan_instrument_vla (input_location, t);
8625               finish_expr_stmt (t);
8626             }
8627         }
8628       /* Make sure that there was no overflow when creating to a signed
8629          index type.  (For example, on a 32-bit machine, an array with
8630          size 2^32 - 1 is too big.)  */
8631       else if (TREE_CODE (itype) == INTEGER_CST
8632                && TREE_OVERFLOW (itype))
8633         {
8634           if (!(complain & tf_error))
8635             return error_mark_node;
8636           error ("overflow in array dimension");
8637           TREE_OVERFLOW (itype) = 0;
8638         }
8639     }
8640
8641   /* Create and return the appropriate index type.  */
8642   itype = build_index_type (itype);
8643
8644   /* If the index type were dependent, we would have returned early, so
8645      remember that it isn't.  */
8646   TYPE_DEPENDENT_P (itype) = 0;
8647   TYPE_DEPENDENT_P_VALID (itype) = 1;
8648   return itype;
8649 }
8650
8651 /* Returns the scope (if any) in which the entity declared by
8652    DECLARATOR will be located.  If the entity was declared with an
8653    unqualified name, NULL_TREE is returned.  */
8654
8655 tree
8656 get_scope_of_declarator (const cp_declarator *declarator)
8657 {
8658   while (declarator && declarator->kind != cdk_id)
8659     declarator = declarator->declarator;
8660
8661   /* If the declarator-id is a SCOPE_REF, the scope in which the
8662      declaration occurs is the first operand.  */
8663   if (declarator
8664       && declarator->u.id.qualifying_scope)
8665     return declarator->u.id.qualifying_scope;
8666
8667   /* Otherwise, the declarator is not a qualified name; the entity will
8668      be declared in the current scope.  */
8669   return NULL_TREE;
8670 }
8671
8672 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8673    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8674    with this type.  */
8675
8676 static tree
8677 create_array_type_for_decl (tree name, tree type, tree size)
8678 {
8679   tree itype = NULL_TREE;
8680
8681   /* If things have already gone awry, bail now.  */
8682   if (type == error_mark_node || size == error_mark_node)
8683     return error_mark_node;
8684
8685   /* 8.3.4/1: If the type of the identifier of D contains the auto
8686      type-specifier, the program is ill-formed.  */
8687   if (type_uses_auto (type))
8688     {
8689       error ("%qD declared as array of %qT", name, type);
8690       return error_mark_node;
8691     }
8692
8693   /* If there are some types which cannot be array elements,
8694      issue an error-message and return.  */
8695   switch (TREE_CODE (type))
8696     {
8697     case VOID_TYPE:
8698       if (name)
8699         error ("declaration of %qD as array of void", name);
8700       else
8701         error ("creating array of void");
8702       return error_mark_node;
8703
8704     case FUNCTION_TYPE:
8705       if (name)
8706         error ("declaration of %qD as array of functions", name);
8707       else
8708         error ("creating array of functions");
8709       return error_mark_node;
8710
8711     case REFERENCE_TYPE:
8712       if (name)
8713         error ("declaration of %qD as array of references", name);
8714       else
8715         error ("creating array of references");
8716       return error_mark_node;
8717
8718     case METHOD_TYPE:
8719       if (name)
8720         error ("declaration of %qD as array of function members", name);
8721       else
8722         error ("creating array of function members");
8723       return error_mark_node;
8724
8725     default:
8726       break;
8727     }
8728
8729   /* [dcl.array]
8730
8731      The constant expressions that specify the bounds of the arrays
8732      can be omitted only for the first member of the sequence.  */
8733   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8734     {
8735       if (name)
8736         error ("declaration of %qD as multidimensional array must "
8737                "have bounds for all dimensions except the first",
8738                name);
8739       else
8740         error ("multidimensional array must have bounds for all "
8741                "dimensions except the first");
8742
8743       return error_mark_node;
8744     }
8745
8746   /* Figure out the index type for the array.  */
8747   if (size)
8748     itype = compute_array_index_type (name, size, tf_warning_or_error);
8749
8750   /* [dcl.array]
8751      T is called the array element type; this type shall not be [...] an
8752      abstract class type.  */
8753   abstract_virtuals_error (name, type);
8754
8755   return build_cplus_array_type (type, itype);
8756 }
8757
8758 /* Check that it's OK to declare a function with the indicated TYPE.
8759    SFK indicates the kind of special function (if any) that this
8760    function is.  OPTYPE is the type given in a conversion operator
8761    declaration, or the class type for a constructor/destructor.
8762    Returns the actual return type of the function; that
8763    may be different than TYPE if an error occurs, or for certain
8764    special functions.  */
8765
8766 static tree
8767 check_special_function_return_type (special_function_kind sfk,
8768                                     tree type,
8769                                     tree optype)
8770 {
8771   switch (sfk)
8772     {
8773     case sfk_constructor:
8774       if (type)
8775         error ("return type specification for constructor invalid");
8776
8777       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8778         type = build_pointer_type (optype);
8779       else
8780         type = void_type_node;
8781       break;
8782
8783     case sfk_destructor:
8784       if (type)
8785         error ("return type specification for destructor invalid");
8786       /* We can't use the proper return type here because we run into
8787          problems with ambiguous bases and covariant returns.
8788          Java classes are left unchanged because (void *) isn't a valid
8789          Java type, and we don't want to change the Java ABI.  */
8790       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8791         type = build_pointer_type (void_type_node);
8792       else
8793         type = void_type_node;
8794       break;
8795
8796     case sfk_conversion:
8797       if (type)
8798         error ("return type specified for %<operator %T%>",  optype);
8799       type = optype;
8800       break;
8801
8802     default:
8803       gcc_unreachable ();
8804     }
8805
8806   return type;
8807 }
8808
8809 /* A variable or data member (whose unqualified name is IDENTIFIER)
8810    has been declared with the indicated TYPE.  If the TYPE is not
8811    acceptable, issue an error message and return a type to use for
8812    error-recovery purposes.  */
8813
8814 tree
8815 check_var_type (tree identifier, tree type)
8816 {
8817   if (VOID_TYPE_P (type))
8818     {
8819       if (!identifier)
8820         error ("unnamed variable or field declared void");
8821       else if (identifier_p (identifier))
8822         {
8823           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8824           error ("variable or field %qE declared void", identifier);
8825         }
8826       else
8827         error ("variable or field declared void");
8828       type = error_mark_node;
8829     }
8830
8831   return type;
8832 }
8833
8834 /* Given declspecs and a declarator (abstract or otherwise), determine
8835    the name and type of the object declared and construct a DECL node
8836    for it.
8837
8838    DECLSPECS points to the representation of declaration-specifier
8839    sequence that precedes declarator.
8840
8841    DECL_CONTEXT says which syntactic context this declaration is in:
8842      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8843      FUNCDEF for a function definition.  Like NORMAL but a few different
8844       error messages in each case.  Return value may be zero meaning
8845       this definition is too screwy to try to parse.
8846      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8847       handle member functions (which have FIELD context).
8848       Return value may be zero meaning this definition is too screwy to
8849       try to parse.
8850      PARM for a parameter declaration (either within a function prototype
8851       or before a function body).  Make a PARM_DECL, or return void_type_node.
8852      TPARM for a template parameter declaration.
8853      CATCHPARM for a parameter declaration before a catch clause.
8854      TYPENAME if for a typename (in a cast or sizeof).
8855       Don't make a DECL node; just return the ..._TYPE node.
8856      FIELD for a struct or union field; make a FIELD_DECL.
8857      BITFIELD for a field with specified width.
8858
8859    INITIALIZED is as for start_decl.
8860
8861    ATTRLIST is a pointer to the list of attributes, which may be NULL
8862    if there are none; *ATTRLIST may be modified if attributes from inside
8863    the declarator should be applied to the declaration.
8864
8865    When this function is called, scoping variables (such as
8866    CURRENT_CLASS_TYPE) should reflect the scope in which the
8867    declaration occurs, not the scope in which the new declaration will
8868    be placed.  For example, on:
8869
8870      void S::f() { ... }
8871
8872    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8873    should not be `S'.
8874
8875    Returns a DECL (if a declarator is present), a TYPE (if there is no
8876    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8877    error occurs. */
8878
8879 tree
8880 grokdeclarator (const cp_declarator *declarator,
8881                 cp_decl_specifier_seq *declspecs,
8882                 enum decl_context decl_context,
8883                 int initialized,
8884                 tree* attrlist)
8885 {
8886   tree type = NULL_TREE;
8887   int longlong = 0;
8888   int explicit_intN = 0;
8889   int virtualp, explicitp, friendp, inlinep, staticp;
8890   int explicit_int = 0;
8891   int explicit_char = 0;
8892   int defaulted_int = 0;
8893
8894   tree typedef_decl = NULL_TREE;
8895   const char *name = NULL;
8896   tree typedef_type = NULL_TREE;
8897   /* True if this declarator is a function definition.  */
8898   bool funcdef_flag = false;
8899   cp_declarator_kind innermost_code = cdk_error;
8900   int bitfield = 0;
8901 #if 0
8902   /* See the code below that used this.  */
8903   tree decl_attr = NULL_TREE;
8904 #endif
8905
8906   /* Keep track of what sort of function is being processed
8907      so that we can warn about default return values, or explicit
8908      return values which do not match prescribed defaults.  */
8909   special_function_kind sfk = sfk_none;
8910
8911   tree dname = NULL_TREE;
8912   tree ctor_return_type = NULL_TREE;
8913   enum overload_flags flags = NO_SPECIAL;
8914   /* cv-qualifiers that apply to the declarator, for a declaration of
8915      a member function.  */
8916   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8917   /* virt-specifiers that apply to the declarator, for a declaration of
8918      a member function.  */
8919   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8920   /* ref-qualifier that applies to the declarator, for a declaration of
8921      a member function.  */
8922   cp_ref_qualifier rqual = REF_QUAL_NONE;
8923   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8924   int type_quals;
8925   tree raises = NULL_TREE;
8926   int template_count = 0;
8927   tree returned_attrs = NULL_TREE;
8928   tree parms = NULL_TREE;
8929   const cp_declarator *id_declarator;
8930   /* The unqualified name of the declarator; either an
8931      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8932   tree unqualified_id;
8933   /* The class type, if any, in which this entity is located,
8934      or NULL_TREE if none.  Note that this value may be different from
8935      the current class type; for example if an attempt is made to declare
8936      "A::f" inside "B", this value will be "A".  */
8937   tree ctype = current_class_type;
8938   /* The NAMESPACE_DECL for the namespace in which this entity is
8939      located.  If an unqualified name is used to declare the entity,
8940      this value will be NULL_TREE, even if the entity is located at
8941      namespace scope.  */
8942   tree in_namespace = NULL_TREE;
8943   cp_storage_class storage_class;
8944   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8945   bool type_was_error_mark_node = false;
8946   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8947   bool template_type_arg = false;
8948   bool template_parm_flag = false;
8949   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8950   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8951   bool late_return_type_p = false;
8952   bool array_parameter_p = false;
8953   source_location saved_loc = input_location;
8954   const char *errmsg;
8955
8956   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8957   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8958   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8959   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8960   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8961   explicit_intN = declspecs->explicit_intN_p;
8962   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8963
8964   if (decl_context == FUNCDEF)
8965     funcdef_flag = true, decl_context = NORMAL;
8966   else if (decl_context == MEMFUNCDEF)
8967     funcdef_flag = true, decl_context = FIELD;
8968   else if (decl_context == BITFIELD)
8969     bitfield = 1, decl_context = FIELD;
8970   else if (decl_context == TEMPLATE_TYPE_ARG)
8971     template_type_arg = true, decl_context = TYPENAME;
8972   else if (decl_context == TPARM)
8973     template_parm_flag = true, decl_context = PARM;
8974
8975   if (initialized > 1)
8976     funcdef_flag = true;
8977
8978   /* Look inside a declarator for the name being declared
8979      and get it as a string, for an error message.  */
8980   for (id_declarator = declarator;
8981        id_declarator;
8982        id_declarator = id_declarator->declarator)
8983     {
8984       if (id_declarator->kind != cdk_id)
8985         innermost_code = id_declarator->kind;
8986
8987       switch (id_declarator->kind)
8988         {
8989         case cdk_function:
8990           if (id_declarator->declarator
8991               && id_declarator->declarator->kind == cdk_id)
8992             {
8993               sfk = id_declarator->declarator->u.id.sfk;
8994               if (sfk == sfk_destructor)
8995                 flags = DTOR_FLAG;
8996             }
8997           break;
8998
8999         case cdk_id:
9000           {
9001             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
9002             tree decl = id_declarator->u.id.unqualified_name;
9003             if (!decl)
9004               break;
9005             if (qualifying_scope)
9006               {
9007                 if (at_function_scope_p ())
9008                   {
9009                     /* [dcl.meaning] 
9010
9011                        A declarator-id shall not be qualified except
9012                        for ... 
9013
9014                        None of the cases are permitted in block
9015                        scope.  */
9016                     if (qualifying_scope == global_namespace)
9017                       error ("invalid use of qualified-name %<::%D%>",
9018                              decl);
9019                     else if (TYPE_P (qualifying_scope))
9020                       error ("invalid use of qualified-name %<%T::%D%>",
9021                              qualifying_scope, decl);
9022                     else 
9023                       error ("invalid use of qualified-name %<%D::%D%>",
9024                              qualifying_scope, decl);
9025                     return error_mark_node;
9026                   }
9027                 else if (TYPE_P (qualifying_scope))
9028                   {
9029                     ctype = qualifying_scope;
9030                     if (!MAYBE_CLASS_TYPE_P (ctype))
9031                       {
9032                         error ("%q#T is not a class or a namespace", ctype);
9033                         ctype = NULL_TREE;
9034                       }
9035                     else if (innermost_code != cdk_function
9036                              && current_class_type
9037                              && !uniquely_derived_from_p (ctype,
9038                                                           current_class_type))
9039                       {
9040                         error ("invalid use of qualified-name %<%T::%D%>",
9041                                qualifying_scope, decl);
9042                         return error_mark_node;
9043                       }
9044                   }
9045                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
9046                   in_namespace = qualifying_scope;
9047               }
9048             switch (TREE_CODE (decl))
9049               {
9050               case BIT_NOT_EXPR:
9051                 {
9052                   tree type;
9053
9054                   if (innermost_code != cdk_function)
9055                     {
9056                       error ("declaration of %qD as non-function", decl);
9057                       return error_mark_node;
9058                     }
9059                   else if (!qualifying_scope
9060                            && !(current_class_type && at_class_scope_p ()))
9061                     {
9062                       error ("declaration of %qD as non-member", decl);
9063                       return error_mark_node;
9064                     }
9065
9066                   type = TREE_OPERAND (decl, 0);
9067                   if (TYPE_P (type))
9068                     type = constructor_name (type);
9069                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
9070                   dname = decl;
9071                 }
9072                 break;
9073
9074               case TEMPLATE_ID_EXPR:
9075                 {
9076                   tree fns = TREE_OPERAND (decl, 0);
9077
9078                   dname = fns;
9079                   if (!identifier_p (dname))
9080                     {
9081                       if (variable_template_p (dname))
9082                         dname = DECL_NAME (dname);
9083                       else
9084                         {
9085                           gcc_assert (is_overloaded_fn (dname));
9086                           dname = DECL_NAME (get_first_fn (dname));
9087                         }
9088                     }
9089                 }
9090                 /* Fall through.  */
9091
9092               case IDENTIFIER_NODE:
9093                 if (identifier_p (decl))
9094                   dname = decl;
9095
9096                 if (C_IS_RESERVED_WORD (dname))
9097                   {
9098                     error ("declarator-id missing; using reserved word %qD",
9099                            dname);
9100                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9101                   }
9102                 else if (!IDENTIFIER_TYPENAME_P (dname))
9103                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9104                 else
9105                   {
9106                     gcc_assert (flags == NO_SPECIAL);
9107                     flags = TYPENAME_FLAG;
9108                     ctor_return_type = TREE_TYPE (dname);
9109                     sfk = sfk_conversion;
9110                     if (is_typename_at_global_scope (dname))
9111                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9112                     else
9113                       name = "<invalid operator>";
9114                   }
9115                 break;
9116
9117               default:
9118                 gcc_unreachable ();
9119               }
9120             break;
9121           }
9122
9123         case cdk_array:
9124         case cdk_pointer:
9125         case cdk_reference:
9126         case cdk_ptrmem:
9127           break;
9128
9129         case cdk_error:
9130           return error_mark_node;
9131
9132         default:
9133           gcc_unreachable ();
9134         }
9135       if (id_declarator->kind == cdk_id)
9136         break;
9137     }
9138
9139   /* [dcl.fct.edf]
9140
9141      The declarator in a function-definition shall have the form
9142      D1 ( parameter-declaration-clause) ...  */
9143   if (funcdef_flag && innermost_code != cdk_function)
9144     {
9145       error ("function definition does not declare parameters");
9146       return error_mark_node;
9147     }
9148
9149   if (flags == TYPENAME_FLAG
9150       && innermost_code != cdk_function
9151       && ! (ctype && !declspecs->any_specifiers_p))
9152     {
9153       error ("declaration of %qD as non-function", dname);
9154       return error_mark_node;
9155     }
9156
9157   if (dname
9158       && identifier_p (dname)
9159       && UDLIT_OPER_P (dname)
9160       && innermost_code != cdk_function)
9161     {
9162       error ("declaration of %qD as non-function", dname);
9163       return error_mark_node;
9164     }
9165
9166   if (dname && IDENTIFIER_OPNAME_P (dname))
9167     {
9168       if (typedef_p)
9169         {
9170           error ("declaration of %qD as %<typedef%>", dname);
9171           return error_mark_node;
9172         }
9173       else if (decl_context == PARM || decl_context == CATCHPARM)
9174         {
9175           error ("declaration of %qD as parameter", dname);
9176           return error_mark_node;
9177         }
9178     }
9179
9180   /* Anything declared one level down from the top level
9181      must be one of the parameters of a function
9182      (because the body is at least two levels down).  */
9183
9184   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9185      by not allowing C++ class definitions to specify their parameters
9186      with xdecls (must be spec.d in the parmlist).
9187
9188      Since we now wait to push a class scope until we are sure that
9189      we are in a legitimate method context, we must set oldcname
9190      explicitly (since current_class_name is not yet alive).
9191
9192      We also want to avoid calling this a PARM if it is in a namespace.  */
9193
9194   if (decl_context == NORMAL && !toplevel_bindings_p ())
9195     {
9196       cp_binding_level *b = current_binding_level;
9197       current_binding_level = b->level_chain;
9198       if (current_binding_level != 0 && toplevel_bindings_p ())
9199         decl_context = PARM;
9200       current_binding_level = b;
9201     }
9202
9203   if (name == NULL)
9204     name = decl_context == PARM ? "parameter" : "type name";
9205
9206   if (constexpr_p && typedef_p)
9207     {
9208       error ("%<constexpr%> cannot appear in a typedef declaration");
9209       return error_mark_node;
9210     }
9211
9212   /* If there were multiple types specified in the decl-specifier-seq,
9213      issue an error message.  */
9214   if (declspecs->multiple_types_p)
9215     {
9216       error ("two or more data types in declaration of %qs", name);
9217       return error_mark_node;
9218     }
9219
9220   if (declspecs->conflicting_specifiers_p)
9221     {
9222       error ("conflicting specifiers in declaration of %qs", name);
9223       return error_mark_node;
9224     }
9225
9226   /* Extract the basic type from the decl-specifier-seq.  */
9227   type = declspecs->type;
9228   if (type == error_mark_node)
9229     {
9230       type = NULL_TREE;
9231       type_was_error_mark_node = true;
9232     }
9233   /* If the entire declaration is itself tagged as deprecated then
9234      suppress reports of deprecated items.  */
9235   if (type && TREE_DEPRECATED (type)
9236       && deprecated_state != DEPRECATED_SUPPRESS)
9237     warn_deprecated_use (type, NULL_TREE);
9238   if (type && TREE_CODE (type) == TYPE_DECL)
9239     {
9240       typedef_decl = type;
9241       type = TREE_TYPE (typedef_decl);
9242       if (TREE_DEPRECATED (type)
9243           && DECL_ARTIFICIAL (typedef_decl)
9244           && deprecated_state != DEPRECATED_SUPPRESS)
9245         warn_deprecated_use (type, NULL_TREE);
9246     }
9247   /* No type at all: default to `int', and set DEFAULTED_INT
9248      because it was not a user-defined typedef.  */
9249   if (type == NULL_TREE)
9250     {
9251       if (signed_p || unsigned_p || long_p || short_p)
9252         {
9253           /* These imply 'int'.  */
9254           type = integer_type_node;
9255           defaulted_int = 1;
9256         }
9257       /* If we just have "complex", it is equivalent to "complex double".  */
9258       else if (!longlong && !explicit_intN
9259                && decl_spec_seq_has_spec_p (declspecs, ds_complex))
9260         {
9261           type = double_type_node;
9262           pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
9263                    "ISO C++ does not support plain %<complex%> meaning "
9264                    "%<double complex%>");
9265         }
9266     }
9267   /* Gather flags.  */
9268   explicit_int = declspecs->explicit_int_p;
9269   explicit_char = declspecs->explicit_char_p;
9270
9271 #if 0
9272   /* See the code below that used this.  */
9273   if (typedef_decl)
9274     decl_attr = DECL_ATTRIBUTES (typedef_decl);
9275 #endif
9276   typedef_type = type;
9277
9278
9279   if (sfk != sfk_conversion)
9280     ctor_return_type = ctype;
9281
9282   if (sfk != sfk_none)
9283     type = check_special_function_return_type (sfk, type,
9284                                                ctor_return_type);
9285   else if (type == NULL_TREE)
9286     {
9287       int is_main;
9288
9289       explicit_int = -1;
9290
9291       /* We handle `main' specially here, because 'main () { }' is so
9292          common.  With no options, it is allowed.  With -Wreturn-type,
9293          it is a warning.  It is only an error with -pedantic-errors.  */
9294       is_main = (funcdef_flag
9295                  && dname && identifier_p (dname)
9296                  && MAIN_NAME_P (dname)
9297                  && ctype == NULL_TREE
9298                  && in_namespace == NULL_TREE
9299                  && current_namespace == global_namespace);
9300
9301       if (type_was_error_mark_node)
9302         /* We've already issued an error, don't complain more.  */;
9303       else if (in_system_header_at (input_location) || flag_ms_extensions)
9304         /* Allow it, sigh.  */;
9305       else if (! is_main)
9306         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9307       else if (pedantic)
9308         pedwarn (input_location, OPT_Wpedantic,
9309                  "ISO C++ forbids declaration of %qs with no type", name);
9310       else
9311         warning (OPT_Wreturn_type,
9312                  "ISO C++ forbids declaration of %qs with no type", name);
9313
9314       type = integer_type_node;
9315     }
9316
9317   ctype = NULL_TREE;
9318
9319   if (explicit_intN)
9320     {
9321       if (! int_n_enabled_p[declspecs->int_n_idx])
9322        {
9323          error ("%<__int%d%> is not supported by this target",
9324                 int_n_data[declspecs->int_n_idx].bitsize);
9325          explicit_intN = false;
9326        }
9327       else if (pedantic && ! in_system_header_at (input_location))
9328        pedwarn (input_location, OPT_Wpedantic,
9329                 "ISO C++ does not support %<__int%d%> for %qs",
9330                 int_n_data[declspecs->int_n_idx].bitsize,  name);
9331     }
9332
9333   /* Now process the modifiers that were specified
9334      and check for invalid combinations.  */
9335
9336   /* Long double is a special combination.  */
9337   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9338     {
9339       long_p = false;
9340       type = cp_build_qualified_type (long_double_type_node,
9341                                       cp_type_quals (type));
9342     }
9343
9344   /* Check all other uses of type modifiers.  */
9345
9346   if (unsigned_p || signed_p || long_p || short_p)
9347     {
9348       int ok = 0;
9349
9350       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9351         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9352       else if (signed_p && unsigned_p)
9353         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9354       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9355         error ("%<long long%> invalid for %qs", name);
9356       else if (long_p && TREE_CODE (type) == REAL_TYPE)
9357         error ("%<long%> invalid for %qs", name);
9358       else if (short_p && TREE_CODE (type) == REAL_TYPE)
9359         error ("%<short%> invalid for %qs", name);
9360       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9361         error ("%<long%> or %<short%> invalid for %qs", name);
9362       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
9363         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9364       else if ((long_p || short_p) && explicit_char)
9365         error ("%<long%> or %<short%> specified with char for %qs", name);
9366       else if (long_p && short_p)
9367         error ("%<long%> and %<short%> specified together for %qs", name);
9368       else if (type == char16_type_node || type == char32_type_node)
9369         {
9370           if (signed_p || unsigned_p)
9371             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9372           else if (short_p || long_p)
9373             error ("%<short%> or %<long%> invalid for %qs", name);
9374         }
9375       else
9376         {
9377           ok = 1;
9378           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
9379             {
9380               pedwarn (input_location, OPT_Wpedantic, 
9381                        "long, short, signed or unsigned used invalidly for %qs",
9382                        name);
9383               if (flag_pedantic_errors)
9384                 ok = 0;
9385             }
9386         }
9387
9388       /* Discard the type modifiers if they are invalid.  */
9389       if (! ok)
9390         {
9391           unsigned_p = false;
9392           signed_p = false;
9393           long_p = false;
9394           short_p = false;
9395           longlong = 0;
9396         }
9397     }
9398
9399   /* Decide whether an integer type is signed or not.
9400      Optionally treat bitfields as signed by default.  */
9401   if (unsigned_p
9402       /* [class.bit]
9403
9404          It is implementation-defined whether a plain (neither
9405          explicitly signed or unsigned) char, short, int, or long
9406          bit-field is signed or unsigned.
9407
9408          Naturally, we extend this to long long as well.  Note that
9409          this does not include wchar_t.  */
9410       || (bitfield && !flag_signed_bitfields
9411           && !signed_p
9412           /* A typedef for plain `int' without `signed' can be
9413              controlled just like plain `int', but a typedef for
9414              `signed int' cannot be so controlled.  */
9415           && !(typedef_decl
9416                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9417           && TREE_CODE (type) == INTEGER_TYPE
9418           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9419     {
9420       if (explicit_intN)
9421         type = int_n_trees[declspecs->int_n_idx].unsigned_type;
9422       else if (longlong)
9423         type = long_long_unsigned_type_node;
9424       else if (long_p)
9425         type = long_unsigned_type_node;
9426       else if (short_p)
9427         type = short_unsigned_type_node;
9428       else if (type == char_type_node)
9429         type = unsigned_char_type_node;
9430       else if (typedef_decl)
9431         type = unsigned_type_for (type);
9432       else
9433         type = unsigned_type_node;
9434     }
9435   else if (signed_p && type == char_type_node)
9436     type = signed_char_type_node;
9437   else if (explicit_intN)
9438     type = int_n_trees[declspecs->int_n_idx].signed_type;
9439   else if (longlong)
9440     type = long_long_integer_type_node;
9441   else if (long_p)
9442     type = long_integer_type_node;
9443   else if (short_p)
9444     type = short_integer_type_node;
9445
9446   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9447     {
9448       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9449         error ("complex invalid for %qs", name);
9450       /* If a modifier is specified, the resulting complex is the complex
9451          form of TYPE.  E.g, "complex short" is "complex short int".  */
9452       else if (type == integer_type_node)
9453         type = complex_integer_type_node;
9454       else if (type == float_type_node)
9455         type = complex_float_type_node;
9456       else if (type == double_type_node)
9457         type = complex_double_type_node;
9458       else if (type == long_double_type_node)
9459         type = complex_long_double_type_node;
9460       else
9461         type = build_complex_type (type);
9462     }
9463
9464   type_quals = TYPE_UNQUALIFIED;
9465   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9466     type_quals |= TYPE_QUAL_CONST;
9467   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9468     type_quals |= TYPE_QUAL_VOLATILE;
9469   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9470     type_quals |= TYPE_QUAL_RESTRICT;
9471   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9472     error ("qualifiers are not allowed on declaration of %<operator %T%>",
9473            ctor_return_type);
9474
9475   /* If we're using the injected-class-name to form a compound type or a
9476      declaration, replace it with the underlying class so we don't get
9477      redundant typedefs in the debug output.  But if we are returning the
9478      type unchanged, leave it alone so that it's available to
9479      maybe_get_template_decl_from_type_decl.  */
9480   if (CLASS_TYPE_P (type)
9481       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9482       && type == TREE_TYPE (TYPE_NAME (type))
9483       && (declarator || type_quals))
9484     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9485
9486   type_quals |= cp_type_quals (type);
9487   type = cp_build_qualified_type_real
9488     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
9489                           || declspecs->decltype_p)
9490                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9491   /* We might have ignored or rejected some of the qualifiers.  */
9492   type_quals = cp_type_quals (type);
9493
9494   staticp = 0;
9495   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9496   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9497   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9498
9499   storage_class = declspecs->storage_class;
9500   if (storage_class == sc_static)
9501     staticp = 1 + (decl_context == FIELD);
9502
9503   if (virtualp && staticp == 2)
9504     {
9505       error ("member %qD cannot be declared both virtual and static", dname);
9506       storage_class = sc_none;
9507       staticp = 0;
9508     }
9509   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9510
9511   /* Issue errors about use of storage classes for parameters.  */
9512   if (decl_context == PARM)
9513     {
9514       if (typedef_p)
9515         {
9516           error ("typedef declaration invalid in parameter declaration");
9517           return error_mark_node;
9518         }
9519       else if (template_parm_flag && storage_class != sc_none)
9520         {
9521           error ("storage class specified for template parameter %qs", name);
9522           return error_mark_node;
9523         }
9524       else if (storage_class == sc_static
9525                || storage_class == sc_extern
9526                || thread_p)
9527         error ("storage class specifiers invalid in parameter declarations");
9528
9529       /* Function parameters cannot be constexpr.  If we saw one, moan
9530          and pretend it wasn't there.  */
9531       if (constexpr_p)
9532         {
9533           error ("a parameter cannot be declared %<constexpr%>");
9534           constexpr_p = 0;
9535         }
9536     }
9537
9538   /* Give error if `virtual' is used outside of class declaration.  */
9539   if (virtualp
9540       && (current_class_name == NULL_TREE || decl_context != FIELD))
9541     {
9542       error ("%<virtual%> outside class declaration");
9543       virtualp = 0;
9544     }
9545
9546   /* Static anonymous unions are dealt with here.  */
9547   if (staticp && decl_context == TYPENAME
9548       && declspecs->type
9549       && ANON_AGGR_TYPE_P (declspecs->type))
9550     decl_context = FIELD;
9551
9552   /* Warn about storage classes that are invalid for certain
9553      kinds of declarations (parameters, typenames, etc.).  */
9554   if (thread_p
9555       && ((storage_class
9556            && storage_class != sc_extern
9557            && storage_class != sc_static)
9558           || typedef_p))
9559     {
9560       error ("multiple storage classes in declaration of %qs", name);
9561       thread_p = false;
9562     }
9563   if (decl_context != NORMAL
9564       && ((storage_class != sc_none
9565            && storage_class != sc_mutable)
9566           || thread_p))
9567     {
9568       if ((decl_context == PARM || decl_context == CATCHPARM)
9569           && (storage_class == sc_register
9570               || storage_class == sc_auto))
9571         ;
9572       else if (typedef_p)
9573         ;
9574       else if (decl_context == FIELD
9575                /* C++ allows static class elements.  */
9576                && storage_class == sc_static)
9577         /* C++ also allows inlines and signed and unsigned elements,
9578            but in those cases we don't come in here.  */
9579         ;
9580       else
9581         {
9582           if (decl_context == FIELD)
9583             error ("storage class specified for %qs", name);
9584           else
9585             {
9586               if (decl_context == PARM || decl_context == CATCHPARM)
9587                 error ("storage class specified for parameter %qs", name);
9588               else
9589                 error ("storage class specified for typename");
9590             }
9591           if (storage_class == sc_register
9592               || storage_class == sc_auto
9593               || storage_class == sc_extern
9594               || thread_p)
9595             storage_class = sc_none;
9596         }
9597     }
9598   else if (storage_class == sc_extern && funcdef_flag
9599            && ! toplevel_bindings_p ())
9600     error ("nested function %qs declared %<extern%>", name);
9601   else if (toplevel_bindings_p ())
9602     {
9603       if (storage_class == sc_auto)
9604         error ("top-level declaration of %qs specifies %<auto%>", name);
9605     }
9606   else if (thread_p
9607            && storage_class != sc_extern
9608            && storage_class != sc_static)
9609     {
9610       if (declspecs->gnu_thread_keyword_p)
9611         pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9612                  "declared %<__thread%>", name);
9613
9614       /* When thread_local is applied to a variable of block scope the
9615          storage-class-specifier static is implied if it does not appear
9616          explicitly.  */
9617       storage_class = declspecs->storage_class = sc_static;
9618       staticp = 1;
9619     }
9620
9621   if (storage_class && friendp)
9622     {
9623       error ("storage class specifiers invalid in friend function declarations");
9624       storage_class = sc_none;
9625       staticp = 0;
9626     }
9627
9628   if (!id_declarator)
9629     unqualified_id = NULL_TREE;
9630   else
9631     {
9632       unqualified_id = id_declarator->u.id.unqualified_name;
9633       switch (TREE_CODE (unqualified_id))
9634         {
9635         case BIT_NOT_EXPR:
9636           unqualified_id = TREE_OPERAND (unqualified_id, 0);
9637           if (TYPE_P (unqualified_id))
9638             unqualified_id = constructor_name (unqualified_id);
9639           break;
9640
9641         case IDENTIFIER_NODE:
9642         case TEMPLATE_ID_EXPR:
9643           break;
9644
9645         default:
9646           gcc_unreachable ();
9647         }
9648     }
9649
9650   if (declspecs->std_attributes)
9651     {
9652       /* Apply the c++11 attributes to the type preceding them.  */
9653       input_location = declspecs->locations[ds_std_attribute];
9654       decl_attributes (&type, declspecs->std_attributes, 0);
9655       input_location = saved_loc;
9656     }
9657
9658   /* Determine the type of the entity declared by recurring on the
9659      declarator.  */
9660   for (; declarator; declarator = declarator->declarator)
9661     {
9662       const cp_declarator *inner_declarator;
9663       tree attrs;
9664
9665       if (type == error_mark_node)
9666         return error_mark_node;
9667
9668       attrs = declarator->attributes;
9669       if (attrs)
9670         {
9671           int attr_flags;
9672
9673           attr_flags = 0;
9674           if (declarator == NULL || declarator->kind == cdk_id)
9675             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9676           if (declarator->kind == cdk_function)
9677             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9678           if (declarator->kind == cdk_array)
9679             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9680           returned_attrs = decl_attributes (&type,
9681                                             chainon (returned_attrs, attrs),
9682                                             attr_flags);
9683         }
9684
9685       if (declarator->kind == cdk_id)
9686         break;
9687
9688       inner_declarator = declarator->declarator;
9689
9690       switch (declarator->kind)
9691         {
9692         case cdk_array:
9693           type = create_array_type_for_decl (dname, type,
9694                                              declarator->u.array.bounds);
9695           if (declarator->std_attributes)
9696             /* [dcl.array]/1:
9697
9698                The optional attribute-specifier-seq appertains to the
9699                array.  */
9700             returned_attrs = chainon (returned_attrs,
9701                                       declarator->std_attributes);
9702           break;
9703
9704         case cdk_function:
9705           {
9706             tree arg_types;
9707             int funcdecl_p;
9708
9709             /* Declaring a function type.
9710                Make sure we have a valid type for the function to return.  */
9711
9712             if (type_quals != TYPE_UNQUALIFIED)
9713               {
9714                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9715                   warning (OPT_Wignored_qualifiers,
9716                            "type qualifiers ignored on function return type");
9717                 /* We now know that the TYPE_QUALS don't apply to the
9718                    decl, but to its return type.  */
9719                 type_quals = TYPE_UNQUALIFIED;
9720               }
9721             errmsg = targetm.invalid_return_type (type);
9722             if (errmsg)
9723               {
9724                 error (errmsg);
9725                 type = integer_type_node;
9726               }
9727
9728             /* Error about some types functions can't return.  */
9729
9730             if (TREE_CODE (type) == FUNCTION_TYPE)
9731               {
9732                 error ("%qs declared as function returning a function", name);
9733                 return error_mark_node;
9734               }
9735             if (TREE_CODE (type) == ARRAY_TYPE)
9736               {
9737                 error ("%qs declared as function returning an array", name);
9738                 return error_mark_node;
9739               }
9740
9741             input_location = declspecs->locations[ds_type_spec];
9742             abstract_virtuals_error (ACU_RETURN, type);
9743             input_location = saved_loc;
9744
9745             /* Pick up type qualifiers which should be applied to `this'.  */
9746             memfn_quals = declarator->u.function.qualifiers;
9747             /* Pick up virt-specifiers.  */
9748             virt_specifiers = declarator->u.function.virt_specifiers;
9749             /* And ref-qualifier, too */
9750             rqual = declarator->u.function.ref_qualifier;
9751             /* Pick up the exception specifications.  */
9752             raises = declarator->u.function.exception_specification;
9753             /* If the exception-specification is ill-formed, let's pretend
9754                there wasn't one.  */
9755             if (raises == error_mark_node)
9756               raises = NULL_TREE;
9757
9758             /* Say it's a definition only for the CALL_EXPR
9759                closest to the identifier.  */
9760             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9761
9762             /* Handle a late-specified return type.  */
9763             if (funcdecl_p)
9764               {
9765                 if (type_uses_auto (type))
9766                   {
9767                     if (!declarator->u.function.late_return_type)
9768                       {
9769                         if (current_class_type
9770                             && LAMBDA_TYPE_P (current_class_type))
9771                           /* OK for C++11 lambdas.  */;
9772                         else if (cxx_dialect < cxx14)
9773                           {
9774                             error ("%qs function uses "
9775                                    "%<auto%> type specifier without trailing "
9776                                    "return type", name);
9777                             inform (input_location, "deduced return type "
9778                                     "only available with -std=c++14 or "
9779                                     "-std=gnu++14");
9780                           }
9781                         else if (virtualp)
9782                           {
9783                             error ("virtual function cannot "
9784                                    "have deduced return type");
9785                             virtualp = false;
9786                           }
9787                       }
9788                     else if (!is_auto (type))
9789                       {
9790                         error ("%qs function with trailing return type has"
9791                                " %qT as its type rather than plain %<auto%>",
9792                                name, type);
9793                         return error_mark_node;
9794                       }
9795                   }
9796                 else if (declarator->u.function.late_return_type)
9797                   {
9798                     if (cxx_dialect < cxx11)
9799                       /* Not using maybe_warn_cpp0x because this should
9800                          always be an error.  */
9801                       error ("trailing return type only available with "
9802                              "-std=c++11 or -std=gnu++11");
9803                     else
9804                       error ("%qs function with trailing return type not "
9805                              "declared with %<auto%> type specifier", name);
9806                     return error_mark_node;
9807                   }
9808               }
9809             type = splice_late_return_type
9810               (type, declarator->u.function.late_return_type);
9811             if (type == error_mark_node)
9812               return error_mark_node;
9813
9814             if (declarator->u.function.late_return_type)
9815               late_return_type_p = true;
9816
9817             if (ctype == NULL_TREE
9818                 && decl_context == FIELD
9819                 && funcdecl_p
9820                 && friendp == 0)
9821               ctype = current_class_type;
9822
9823             if (ctype && (sfk == sfk_constructor
9824                           || sfk == sfk_destructor))
9825               {
9826                 /* We are within a class's scope. If our declarator name
9827                    is the same as the class name, and we are defining
9828                    a function, then it is a constructor/destructor, and
9829                    therefore returns a void type.  */
9830
9831                 /* ISO C++ 12.4/2.  A destructor may not be declared
9832                    const or volatile.  A destructor may not be static.
9833                    A destructor may not be declared with ref-qualifier.
9834
9835                    ISO C++ 12.1.  A constructor may not be declared
9836                    const or volatile.  A constructor may not be
9837                    virtual.  A constructor may not be static.
9838                    A constructor may not be declared with ref-qualifier. */
9839                 if (staticp == 2)
9840                   error ((flags == DTOR_FLAG)
9841                          ? G_("destructor cannot be static member function")
9842                          : G_("constructor cannot be static member function"));
9843                 if (memfn_quals)
9844                   {
9845                     error ((flags == DTOR_FLAG)
9846                            ? G_("destructors may not be cv-qualified")
9847                            : G_("constructors may not be cv-qualified"));
9848                     memfn_quals = TYPE_UNQUALIFIED;
9849                   }
9850
9851                 if (rqual)
9852                   {
9853                     maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9854                     error ((flags == DTOR_FLAG)
9855                            ? "destructors may not be ref-qualified"
9856                            : "constructors may not be ref-qualified");
9857                     rqual = REF_QUAL_NONE;
9858                   }
9859
9860                 if (decl_context == FIELD
9861                     && !member_function_or_else (ctype,
9862                                                  current_class_type,
9863                                                  flags))
9864                   return error_mark_node;
9865
9866                 if (flags != DTOR_FLAG)
9867                   {
9868                     /* It's a constructor.  */
9869                     if (explicitp == 1)
9870                       explicitp = 2;
9871                     if (virtualp)
9872                       {
9873                         permerror (input_location, "constructors cannot be declared virtual");
9874                         virtualp = 0;
9875                       }
9876                     if (decl_context == FIELD
9877                         && sfk != sfk_constructor)
9878                       return error_mark_node;
9879                   }
9880                 if (decl_context == FIELD)
9881                   staticp = 0;
9882               }
9883             else if (friendp)
9884               {
9885                 if (virtualp)
9886                   {
9887                     /* Cannot be both friend and virtual.  */
9888                     error ("virtual functions cannot be friends");
9889                     friendp = 0;
9890                   }
9891                 if (decl_context == NORMAL)
9892                   error ("friend declaration not in class definition");
9893                 if (current_function_decl && funcdef_flag)
9894                   error ("can%'t define friend function %qs in a local "
9895                          "class definition",
9896                          name);
9897               }
9898             else if (ctype && sfk == sfk_conversion)
9899               {
9900                 if (explicitp == 1)
9901                   {
9902                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9903                     explicitp = 2;
9904                   }
9905               }
9906
9907             arg_types = grokparms (declarator->u.function.parameters,
9908                                    &parms);
9909
9910             if (inner_declarator
9911                 && inner_declarator->kind == cdk_id
9912                 && inner_declarator->u.id.sfk == sfk_destructor
9913                 && arg_types != void_list_node)
9914               {
9915                 error ("destructors may not have parameters");
9916                 arg_types = void_list_node;
9917                 parms = NULL_TREE;
9918               }
9919
9920             type = build_function_type (type, arg_types);
9921             if (declarator->std_attributes)
9922               /* [dcl.fct]/2:
9923
9924                  The optional attribute-specifier-seq appertains to
9925                  the function type.  */
9926               decl_attributes (&type, declarator->std_attributes,
9927                                0);
9928           }
9929           break;
9930
9931         case cdk_pointer:
9932         case cdk_reference:
9933         case cdk_ptrmem:
9934           /* Filter out pointers-to-references and references-to-references.
9935              We can get these if a TYPE_DECL is used.  */
9936
9937           if (TREE_CODE (type) == REFERENCE_TYPE)
9938             {
9939               if (declarator->kind != cdk_reference)
9940                 {
9941                   error ("cannot declare pointer to %q#T", type);
9942                   type = TREE_TYPE (type);
9943                 }
9944
9945               /* In C++0x, we allow reference to reference declarations
9946                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9947                  and template type arguments [14.3.1/4 temp.arg.type]. The
9948                  check for direct reference to reference declarations, which
9949                  are still forbidden, occurs below. Reasoning behind the change
9950                  can be found in DR106, DR540, and the rvalue reference
9951                  proposals. */
9952               else if (cxx_dialect == cxx98)
9953                 {
9954                   error ("cannot declare reference to %q#T", type);
9955                   type = TREE_TYPE (type);
9956                 }
9957             }
9958           else if (VOID_TYPE_P (type))
9959             {
9960               if (declarator->kind == cdk_reference)
9961                 error ("cannot declare reference to %q#T", type);
9962               else if (declarator->kind == cdk_ptrmem)
9963                 error ("cannot declare pointer to %q#T member", type);
9964             }
9965
9966           /* We now know that the TYPE_QUALS don't apply to the decl,
9967              but to the target of the pointer.  */
9968           type_quals = TYPE_UNQUALIFIED;
9969
9970           /* This code used to handle METHOD_TYPE, but I don't think it's
9971              possible to get it here anymore.  */
9972           gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9973           if (declarator->kind == cdk_ptrmem
9974               && TREE_CODE (type) == FUNCTION_TYPE)
9975             {
9976               memfn_quals |= type_memfn_quals (type);
9977               type = build_memfn_type (type,
9978                                        declarator->u.pointer.class_type,
9979                                        memfn_quals,
9980                                        rqual);
9981               if (type == error_mark_node)
9982                 return error_mark_node;
9983
9984               rqual = REF_QUAL_NONE;
9985               memfn_quals = TYPE_UNQUALIFIED;
9986             }
9987
9988           if (TREE_CODE (type) == FUNCTION_TYPE
9989               && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9990                   || type_memfn_rqual (type) != REF_QUAL_NONE))
9991             error (declarator->kind == cdk_reference
9992                    ? G_("cannot declare reference to qualified function type %qT")
9993                    : G_("cannot declare pointer to qualified function type %qT"),
9994                    type);
9995
9996           /* When the pointed-to type involves components of variable size,
9997              care must be taken to ensure that the size evaluation code is
9998              emitted early enough to dominate all the possible later uses
9999              and late enough for the variables on which it depends to have
10000              been assigned.
10001
10002              This is expected to happen automatically when the pointed-to
10003              type has a name/declaration of it's own, but special attention
10004              is required if the type is anonymous.
10005
10006              We handle the NORMAL and FIELD contexts here by inserting a
10007              dummy statement that just evaluates the size at a safe point
10008              and ensures it is not deferred until e.g. within a deeper
10009              conditional context (c++/43555).
10010
10011              We expect nothing to be needed here for PARM or TYPENAME.
10012              Evaluating the size at this point for TYPENAME would
10013              actually be incorrect, as we might be in the middle of an
10014              expression with side effects on the pointed-to type size
10015              "arguments" prior to the pointer declaration point and the
10016              size evaluation could end up prior to the side effects.  */
10017
10018           if (!TYPE_NAME (type)
10019               && (decl_context == NORMAL || decl_context == FIELD)
10020               && at_function_scope_p ()
10021               && variably_modified_type_p (type, NULL_TREE))
10022             /* Force evaluation of the SAVE_EXPR.  */
10023             finish_expr_stmt (TYPE_SIZE (type));
10024
10025           if (declarator->kind == cdk_reference)
10026             {
10027               /* In C++0x, the type we are creating a reference to might be
10028                  a typedef which is itself a reference type. In that case,
10029                  we follow the reference collapsing rules in
10030                  [7.1.3/8 dcl.typedef] to create the final reference type:
10031
10032                  "If a typedef TD names a type that is a reference to a type
10033                  T, an attempt to create the type 'lvalue reference to cv TD'
10034                  creates the type 'lvalue reference to T,' while an attempt
10035                  to create the type "rvalue reference to cv TD' creates the
10036                  type TD."
10037               */
10038               if (VOID_TYPE_P (type))
10039                 /* We already gave an error.  */;
10040               else if (TREE_CODE (type) == REFERENCE_TYPE)
10041                 {
10042                   if (declarator->u.reference.rvalue_ref)
10043                     /* Leave type alone.  */;
10044                   else
10045                     type = cp_build_reference_type (TREE_TYPE (type), false);
10046                 }
10047               else
10048                 type = cp_build_reference_type
10049                   (type, declarator->u.reference.rvalue_ref);
10050
10051               /* In C++0x, we need this check for direct reference to
10052                  reference declarations, which are forbidden by
10053                  [8.3.2/5 dcl.ref]. Reference to reference declarations
10054                  are only allowed indirectly through typedefs and template
10055                  type arguments. Example:
10056
10057                    void foo(int & &);      // invalid ref-to-ref decl
10058
10059                    typedef int & int_ref;
10060                    void foo(int_ref &);    // valid ref-to-ref decl
10061               */
10062               if (inner_declarator && inner_declarator->kind == cdk_reference)
10063                 error ("cannot declare reference to %q#T, which is not "
10064                        "a typedef or a template type argument", type);
10065             }
10066           else if (TREE_CODE (type) == METHOD_TYPE)
10067             type = build_ptrmemfunc_type (build_pointer_type (type));
10068           else if (declarator->kind == cdk_ptrmem)
10069             {
10070               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
10071                           != NAMESPACE_DECL);
10072               if (declarator->u.pointer.class_type == error_mark_node)
10073                 /* We will already have complained.  */
10074                 type = error_mark_node;
10075               else
10076                 type = build_ptrmem_type (declarator->u.pointer.class_type,
10077                                           type);
10078             }
10079           else
10080             type = build_pointer_type (type);
10081
10082           /* Process a list of type modifier keywords (such as
10083              const or volatile) that were given inside the `*' or `&'.  */
10084
10085           if (declarator->u.pointer.qualifiers)
10086             {
10087               type
10088                 = cp_build_qualified_type (type,
10089                                            declarator->u.pointer.qualifiers);
10090               type_quals = cp_type_quals (type);
10091             }
10092
10093           /* Apply C++11 attributes to the pointer, and not to the
10094              type pointed to.  This is unlike what is done for GNU
10095              attributes above.  It is to comply with [dcl.ptr]/1:
10096
10097                  [the optional attribute-specifier-seq (7.6.1) appertains
10098                   to the pointer and not to the object pointed to].  */
10099           if (declarator->std_attributes)
10100             decl_attributes (&type, declarator->std_attributes,
10101                              0);
10102
10103           ctype = NULL_TREE;
10104           break;
10105
10106         case cdk_error:
10107           break;
10108
10109         default:
10110           gcc_unreachable ();
10111         }
10112     }
10113
10114   /* A `constexpr' specifier used in an object declaration declares
10115      the object as `const'.  */
10116   if (constexpr_p && innermost_code != cdk_function)
10117     {
10118       /* DR1688 says that a `constexpr' specifier in combination with
10119          `volatile' is valid.  */
10120
10121       if (TREE_CODE (type) != REFERENCE_TYPE)
10122         {
10123           type_quals |= TYPE_QUAL_CONST;
10124           type = cp_build_qualified_type (type, type_quals);
10125         }
10126     }
10127
10128   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10129       && TREE_CODE (type) != FUNCTION_TYPE
10130       && TREE_CODE (type) != METHOD_TYPE
10131       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
10132     {
10133       error ("template-id %qD used as a declarator",
10134              unqualified_id);
10135       unqualified_id = dname;
10136     }
10137
10138   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10139      qualified with a class-name, turn it into a METHOD_TYPE, unless
10140      we know that the function is static.  We take advantage of this
10141      opportunity to do other processing that pertains to entities
10142      explicitly declared to be class members.  Note that if DECLARATOR
10143      is non-NULL, we know it is a cdk_id declarator; otherwise, we
10144      would not have exited the loop above.  */
10145   if (declarator
10146       && declarator->u.id.qualifying_scope
10147       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10148     {
10149       ctype = declarator->u.id.qualifying_scope;
10150       ctype = TYPE_MAIN_VARIANT (ctype);
10151       template_count = num_template_headers_for_class (ctype);
10152
10153       if (ctype == current_class_type)
10154         {
10155           if (friendp)
10156             {
10157               permerror (input_location, "member functions are implicitly friends of their class");
10158               friendp = 0;
10159             }
10160           else
10161             permerror (declarator->id_loc, 
10162                           "extra qualification %<%T::%> on member %qs",
10163                           ctype, name);
10164         }
10165       else if (/* If the qualifying type is already complete, then we
10166                   can skip the following checks.  */
10167                !COMPLETE_TYPE_P (ctype)
10168                && (/* If the function is being defined, then
10169                       qualifying type must certainly be complete.  */
10170                    funcdef_flag
10171                    /* A friend declaration of "T::f" is OK, even if
10172                       "T" is a template parameter.  But, if this
10173                       function is not a friend, the qualifying type
10174                       must be a class.  */
10175                    || (!friendp && !CLASS_TYPE_P (ctype))
10176                    /* For a declaration, the type need not be
10177                       complete, if either it is dependent (since there
10178                       is no meaningful definition of complete in that
10179                       case) or the qualifying class is currently being
10180                       defined.  */
10181                    || !(dependent_type_p (ctype)
10182                         || currently_open_class (ctype)))
10183                /* Check that the qualifying type is complete.  */
10184                && !complete_type_or_else (ctype, NULL_TREE))
10185         return error_mark_node;
10186       else if (TREE_CODE (type) == FUNCTION_TYPE)
10187         {
10188           if (current_class_type
10189               && (!friendp || funcdef_flag))
10190             {
10191               error (funcdef_flag
10192                      ? G_("cannot define member function %<%T::%s%> "
10193                           "within %<%T%>")
10194                      : G_("cannot declare member function %<%T::%s%> "
10195                           "within %<%T%>"),
10196                      ctype, name, current_class_type);
10197               return error_mark_node;
10198             }
10199         }
10200       else if (typedef_p && current_class_type)
10201         {
10202           error ("cannot declare member %<%T::%s%> within %qT",
10203                  ctype, name, current_class_type);
10204           return error_mark_node;
10205         }
10206     }
10207
10208   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10209     ctype = current_class_type;
10210
10211   /* Now TYPE has the actual type.  */
10212
10213   if (returned_attrs)
10214     {
10215       if (attrlist)
10216         *attrlist = chainon (returned_attrs, *attrlist);
10217       else
10218         attrlist = &returned_attrs;
10219     }
10220
10221   if (declarator
10222       && declarator->kind == cdk_id
10223       && declarator->std_attributes)
10224     /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10225        a declarator-id appertains to the entity that is declared.  */
10226     *attrlist = chainon (*attrlist, declarator->std_attributes);
10227
10228   /* Handle parameter packs. */
10229   if (parameter_pack_p)
10230     {
10231       if (decl_context == PARM)
10232         /* Turn the type into a pack expansion.*/
10233         type = make_pack_expansion (type);
10234       else
10235         error ("non-parameter %qs cannot be a parameter pack", name);
10236     }
10237
10238   /* Did array size calculations overflow or does the array cover more
10239      than half of the address-space?  */
10240   if (TREE_CODE (type) == ARRAY_TYPE
10241       && COMPLETE_TYPE_P (type)
10242       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10243       && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10244     {
10245       error ("size of array %qs is too large", name);
10246       /* If we proceed with the array type as it is, we'll eventually
10247          crash in tree_to_[su]hwi().  */
10248       type = error_mark_node;
10249     }
10250
10251   if ((decl_context == FIELD || decl_context == PARM)
10252       && !processing_template_decl
10253       && variably_modified_type_p (type, NULL_TREE))
10254     {
10255       if (decl_context == FIELD)
10256         error ("data member may not have variably modified type %qT", type);
10257       else
10258         error ("parameter may not have variably modified type %qT", type);
10259       type = error_mark_node;
10260     }
10261
10262   if (explicitp == 1 || (explicitp && friendp))
10263     {
10264       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10265          in the declaration of a constructor or conversion function within
10266          a class definition.  */
10267       if (!current_class_type)
10268         error ("%<explicit%> outside class declaration");
10269       else if (friendp)
10270         error ("%<explicit%> in friend declaration");
10271       else
10272         error ("only declarations of constructors and conversion operators "
10273                "can be %<explicit%>");
10274       explicitp = 0;
10275     }
10276
10277   if (storage_class == sc_mutable)
10278     {
10279       if (decl_context != FIELD || friendp)
10280         {
10281           error ("non-member %qs cannot be declared %<mutable%>", name);
10282           storage_class = sc_none;
10283         }
10284       else if (decl_context == TYPENAME || typedef_p)
10285         {
10286           error ("non-object member %qs cannot be declared %<mutable%>", name);
10287           storage_class = sc_none;
10288         }
10289       else if (TREE_CODE (type) == FUNCTION_TYPE
10290                || TREE_CODE (type) == METHOD_TYPE)
10291         {
10292           error ("function %qs cannot be declared %<mutable%>", name);
10293           storage_class = sc_none;
10294         }
10295       else if (staticp)
10296         {
10297           error ("static %qs cannot be declared %<mutable%>", name);
10298           storage_class = sc_none;
10299         }
10300       else if (type_quals & TYPE_QUAL_CONST)
10301         {
10302           error ("const %qs cannot be declared %<mutable%>", name);
10303           storage_class = sc_none;
10304         }
10305       else if (TREE_CODE (type) == REFERENCE_TYPE)
10306         {
10307           permerror (input_location, "reference %qs cannot be declared "
10308                      "%<mutable%>", name);
10309           storage_class = sc_none;
10310         }
10311     }
10312
10313   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10314   if (typedef_p && decl_context != TYPENAME)
10315     {
10316       tree decl;
10317
10318       /* Note that the grammar rejects storage classes
10319          in typenames, fields or parameters.  */
10320       if (current_lang_name == lang_name_java)
10321         TYPE_FOR_JAVA (type) = 1;
10322
10323       /* This declaration:
10324
10325            typedef void f(int) const;
10326
10327          declares a function type which is not a member of any
10328          particular class, but which is cv-qualified; for
10329          example "f S::*" declares a pointer to a const-qualified
10330          member function of S.  We record the cv-qualification in the
10331          function type.  */
10332       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10333         {
10334           type = apply_memfn_quals (type, memfn_quals, rqual);
10335           
10336           /* We have now dealt with these qualifiers.  */
10337           memfn_quals = TYPE_UNQUALIFIED;
10338           rqual = REF_QUAL_NONE;
10339         }
10340
10341       if (type_uses_auto (type))
10342         {
10343           error ("typedef declared %<auto%>");
10344           type = error_mark_node;
10345         }
10346
10347       if (decl_context == FIELD)
10348         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10349       else
10350         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10351       if (id_declarator && declarator->u.id.qualifying_scope) {
10352         error_at (DECL_SOURCE_LOCATION (decl), 
10353                   "typedef name may not be a nested-name-specifier");
10354         TREE_TYPE (decl) = error_mark_node;
10355       }
10356
10357       if (decl_context != FIELD)
10358         {
10359           if (!current_function_decl)
10360             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10361           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10362                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10363                        (current_function_decl)))
10364             /* The TYPE_DECL is "abstract" because there will be
10365                clones of this constructor/destructor, and there will
10366                be copies of this TYPE_DECL generated in those
10367                clones.  The decloning optimization (for space) may
10368                revert this subsequently if it determines that
10369                the clones should share a common implementation.  */
10370             DECL_ABSTRACT_P (decl) = true;
10371         }
10372       else if (current_class_type
10373                && constructor_name_p (unqualified_id, current_class_type))
10374         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10375                    "as enclosing class",
10376                    unqualified_id);
10377
10378       /* If the user declares "typedef struct {...} foo" then the
10379          struct will have an anonymous name.  Fill that name in now.
10380          Nothing can refer to it, so nothing needs know about the name
10381          change.  */
10382       if (type != error_mark_node
10383           && unqualified_id
10384           && TYPE_NAME (type)
10385           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10386           && TYPE_ANONYMOUS_P (type)
10387           && declspecs->type_definition_p
10388           && attributes_naming_typedef_ok (*attrlist)
10389           && cp_type_quals (type) == TYPE_UNQUALIFIED)
10390         {
10391           tree t;
10392
10393           /* Replace the anonymous name with the real name everywhere.  */
10394           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10395             {
10396               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10397                 /* We do not rename the debug info representing the
10398                    anonymous tagged type because the standard says in
10399                    [dcl.typedef] that the naming applies only for
10400                    linkage purposes.  */
10401                 /*debug_hooks->set_name (t, decl);*/
10402                 TYPE_NAME (t) = decl;
10403             }
10404
10405           if (TYPE_LANG_SPECIFIC (type))
10406             TYPE_WAS_ANONYMOUS (type) = 1;
10407
10408           /* If this is a typedef within a template class, the nested
10409              type is a (non-primary) template.  The name for the
10410              template needs updating as well.  */
10411           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10412             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10413               = TYPE_IDENTIFIER (type);
10414
10415           /* Adjust linkage now that we aren't anonymous anymore.  */
10416           reset_type_linkage (type);
10417
10418           /* FIXME remangle member functions; member functions of a
10419              type with external linkage have external linkage.  */
10420         }
10421
10422       if (signed_p
10423           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10424         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10425
10426       bad_specifiers (decl, BSP_TYPE, virtualp,
10427                       memfn_quals != TYPE_UNQUALIFIED,
10428                       inlinep, friendp, raises != NULL_TREE);
10429
10430       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10431         /* Acknowledge that this was written:
10432              `using analias = atype;'.  */
10433         TYPE_DECL_ALIAS_P (decl) = 1;
10434
10435       return decl;
10436     }
10437
10438   /* Detect the case of an array type of unspecified size
10439      which came, as such, direct from a typedef name.
10440      We must copy the type, so that the array's domain can be
10441      individually set by the object's initializer.  */
10442
10443   if (type && typedef_type
10444       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10445       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10446     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10447
10448   /* Detect where we're using a typedef of function type to declare a
10449      function. PARMS will not be set, so we must create it now.  */
10450
10451   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10452     {
10453       tree decls = NULL_TREE;
10454       tree args;
10455
10456       for (args = TYPE_ARG_TYPES (type);
10457            args && args != void_list_node;
10458            args = TREE_CHAIN (args))
10459         {
10460           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10461
10462           DECL_CHAIN (decl) = decls;
10463           decls = decl;
10464         }
10465
10466       parms = nreverse (decls);
10467
10468       if (decl_context != TYPENAME)
10469         {
10470           /* The qualifiers on the function type become the qualifiers on
10471              the non-static member function. */
10472           memfn_quals |= type_memfn_quals (type);
10473           rqual = type_memfn_rqual (type);
10474           type_quals = TYPE_UNQUALIFIED;
10475         }
10476     }
10477
10478   /* If this is a type name (such as, in a cast or sizeof),
10479      compute the type and return it now.  */
10480
10481   if (decl_context == TYPENAME)
10482     {
10483       /* Note that the grammar rejects storage classes
10484          in typenames, fields or parameters.  */
10485       if (type_quals != TYPE_UNQUALIFIED)
10486         type_quals = TYPE_UNQUALIFIED;
10487
10488       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10489       if (friendp)
10490         {
10491           if (type_quals != TYPE_UNQUALIFIED)
10492             {
10493               error ("type qualifiers specified for friend class declaration");
10494               type_quals = TYPE_UNQUALIFIED;
10495             }
10496           if (inlinep)
10497             {
10498               error ("%<inline%> specified for friend class declaration");
10499               inlinep = 0;
10500             }
10501
10502           if (!current_aggr)
10503             {
10504               /* Don't allow friend declaration without a class-key.  */
10505               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10506                 permerror (input_location, "template parameters cannot be friends");
10507               else if (TREE_CODE (type) == TYPENAME_TYPE)
10508                 permerror (input_location, "friend declaration requires class-key, "
10509                            "i.e. %<friend class %T::%D%>",
10510                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10511               else
10512                 permerror (input_location, "friend declaration requires class-key, "
10513                            "i.e. %<friend %#T%>",
10514                            type);
10515             }
10516
10517           /* Only try to do this stuff if we didn't already give up.  */
10518           if (type != integer_type_node)
10519             {
10520               /* A friendly class?  */
10521               if (current_class_type)
10522                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10523                                    /*complain=*/true);
10524               else
10525                 error ("trying to make class %qT a friend of global scope",
10526                        type);
10527
10528               type = void_type_node;
10529             }
10530         }
10531       else if (memfn_quals || rqual)
10532         {
10533           if (ctype == NULL_TREE
10534               && TREE_CODE (type) == METHOD_TYPE)
10535             ctype = TYPE_METHOD_BASETYPE (type);
10536
10537           if (ctype)
10538             type = build_memfn_type (type, ctype, memfn_quals, rqual);
10539           /* Core issue #547: need to allow this in template type args.
10540              Allow it in general in C++11 for alias-declarations.  */
10541           else if ((template_type_arg || cxx_dialect >= cxx11)
10542                    && TREE_CODE (type) == FUNCTION_TYPE)
10543             type = apply_memfn_quals (type, memfn_quals, rqual);
10544           else
10545             error ("invalid qualifiers on non-member function type");
10546         }
10547
10548       return type;
10549     }
10550   else if (unqualified_id == NULL_TREE && decl_context != PARM
10551            && decl_context != CATCHPARM
10552            && TREE_CODE (type) != UNION_TYPE
10553            && ! bitfield)
10554     {
10555       error ("abstract declarator %qT used as declaration", type);
10556       return error_mark_node;
10557     }
10558
10559   /* Only functions may be declared using an operator-function-id.  */
10560   if (unqualified_id
10561       && IDENTIFIER_OPNAME_P (unqualified_id)
10562       && TREE_CODE (type) != FUNCTION_TYPE
10563       && TREE_CODE (type) != METHOD_TYPE)
10564     {
10565       error ("declaration of %qD as non-function", unqualified_id);
10566       return error_mark_node;
10567     }
10568
10569   /* We don't check parameter types here because we can emit a better
10570      error message later.  */
10571   if (decl_context != PARM)
10572     {
10573       type = check_var_type (unqualified_id, type);
10574       if (type == error_mark_node)
10575         return error_mark_node;
10576     }
10577
10578   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10579      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10580
10581   if (decl_context == PARM || decl_context == CATCHPARM)
10582     {
10583       if (ctype || in_namespace)
10584         error ("cannot use %<::%> in parameter declaration");
10585
10586       if (type_uses_auto (type))
10587         {
10588           if (cxx_dialect >= cxx14)
10589             error ("%<auto%> parameter not permitted in this context");
10590           else
10591             error ("parameter declared %<auto%>");
10592           type = error_mark_node;
10593         }
10594
10595       /* A parameter declared as an array of T is really a pointer to T.
10596          One declared as a function is really a pointer to a function.
10597          One declared as a member is really a pointer to member.  */
10598
10599       if (TREE_CODE (type) == ARRAY_TYPE)
10600         {
10601           /* Transfer const-ness of array into that of type pointed to.  */
10602           type = build_pointer_type (TREE_TYPE (type));
10603           type_quals = TYPE_UNQUALIFIED;
10604           array_parameter_p = true;
10605         }
10606       else if (TREE_CODE (type) == FUNCTION_TYPE)
10607         type = build_pointer_type (type);
10608     }
10609
10610   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10611       && !NEW_DELETE_OPNAME_P (unqualified_id))
10612     {
10613       cp_cv_quals real_quals = memfn_quals;
10614       if (cxx_dialect < cxx14 && constexpr_p
10615           && sfk != sfk_constructor && sfk != sfk_destructor)
10616         real_quals |= TYPE_QUAL_CONST;
10617       type = build_memfn_type (type, ctype, real_quals, rqual);
10618     }
10619
10620   {
10621     tree decl;
10622
10623     if (decl_context == PARM)
10624       {
10625         decl = cp_build_parm_decl (unqualified_id, type);
10626         DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
10627
10628         bad_specifiers (decl, BSP_PARM, virtualp,
10629                         memfn_quals != TYPE_UNQUALIFIED,
10630                         inlinep, friendp, raises != NULL_TREE);
10631       }
10632     else if (decl_context == FIELD)
10633       {
10634         if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE
10635             && type_uses_auto (type))
10636           {
10637             error ("non-static data member declared %<auto%>");
10638             type = error_mark_node;
10639           }
10640
10641         /* The C99 flexible array extension.  */
10642         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10643             && TYPE_DOMAIN (type) == NULL_TREE)
10644           {
10645             tree itype = compute_array_index_type (dname, integer_zero_node,
10646                                                    tf_warning_or_error);
10647             type = build_cplus_array_type (TREE_TYPE (type), itype);
10648           }
10649
10650         if (type == error_mark_node)
10651           {
10652             /* Happens when declaring arrays of sizes which
10653                are error_mark_node, for example.  */
10654             decl = NULL_TREE;
10655           }
10656         else if (in_namespace && !friendp)
10657           {
10658             /* Something like struct S { int N::j; };  */
10659             error ("invalid use of %<::%>");
10660             return error_mark_node;
10661           }
10662         else if (TREE_CODE (type) == FUNCTION_TYPE
10663                  || TREE_CODE (type) == METHOD_TYPE)
10664           {
10665             int publicp = 0;
10666             tree function_context;
10667
10668             if (friendp == 0)
10669               {
10670                 /* This should never happen in pure C++ (the check
10671                    could be an assert).  It could happen in
10672                    Objective-C++ if someone writes invalid code that
10673                    uses a function declaration for an instance
10674                    variable or property (instance variables and
10675                    properties are parsed as FIELD_DECLs, but they are
10676                    part of an Objective-C class, not a C++ class).
10677                    That code is invalid and is caught by this
10678                    check.  */
10679                 if (!ctype)
10680                   {
10681                     error ("declaration of function %qD in invalid context",
10682                            unqualified_id);
10683                     return error_mark_node;
10684                   }
10685
10686                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10687                    ARM 9.5 */
10688                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10689                   {
10690                     error ("function %qD declared virtual inside a union",
10691                            unqualified_id);
10692                     return error_mark_node;
10693                   }
10694
10695                 if (NEW_DELETE_OPNAME_P (unqualified_id))
10696                   {
10697                     if (virtualp)
10698                       {
10699                         error ("%qD cannot be declared virtual, since it "
10700                                "is always static",
10701                                unqualified_id);
10702                         virtualp = 0;
10703                       }
10704                   }
10705               }
10706
10707             /* Check that the name used for a destructor makes sense.  */
10708             if (sfk == sfk_destructor)
10709               {
10710                 tree uqname = id_declarator->u.id.unqualified_name;
10711
10712                 if (!ctype)
10713                   {
10714                     gcc_assert (friendp);
10715                     error ("expected qualified name in friend declaration "
10716                            "for destructor %qD", uqname);
10717                     return error_mark_node;
10718                   }
10719
10720                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10721                   {
10722                     error ("declaration of %qD as member of %qT",
10723                            uqname, ctype);
10724                     return error_mark_node;
10725                   }
10726                 if (constexpr_p)
10727                   {
10728                     error ("a destructor cannot be %<constexpr%>");
10729                     return error_mark_node;
10730                   }
10731               }
10732             else if (sfk == sfk_constructor && friendp && !ctype)
10733               {
10734                 error ("expected qualified name in friend declaration "
10735                        "for constructor %qD",
10736                        id_declarator->u.id.unqualified_name);
10737                 return error_mark_node;
10738               }
10739
10740             if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10741               {
10742                 tree tmpl = TREE_OPERAND (unqualified_id, 0);
10743                 if (variable_template_p (tmpl))
10744                   {
10745                     error ("specialization of variable template %qD "
10746                            "declared as function", tmpl);
10747                     inform (DECL_SOURCE_LOCATION (tmpl),
10748                             "variable template declared here");
10749                     return error_mark_node;
10750                   }
10751               }
10752
10753             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10754             function_context = (ctype != NULL_TREE) ?
10755               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10756             publicp = (! friendp || ! staticp)
10757               && function_context == NULL_TREE;
10758
10759             if (late_return_type_p)
10760               TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10761
10762             decl = grokfndecl (ctype, type,
10763                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10764                                ? unqualified_id : dname,
10765                                parms,
10766                                unqualified_id,
10767                                virtualp, flags, memfn_quals, rqual, raises,
10768                                friendp ? -1 : 0, friendp, publicp,
10769                                inlinep | (2 * constexpr_p),
10770                                initialized == SD_DELETED, sfk,
10771                                funcdef_flag, template_count, in_namespace,
10772                                attrlist, declarator->id_loc);
10773             decl = set_virt_specifiers (decl, virt_specifiers);
10774             if (decl == NULL_TREE)
10775               return error_mark_node;
10776 #if 0
10777             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10778             /* The decl and setting of decl_attr is also turned off.  */
10779             decl = build_decl_attribute_variant (decl, decl_attr);
10780 #endif
10781
10782             /* [class.conv.ctor]
10783
10784                A constructor declared without the function-specifier
10785                explicit that can be called with a single parameter
10786                specifies a conversion from the type of its first
10787                parameter to the type of its class.  Such a constructor
10788                is called a converting constructor.  */
10789             if (explicitp == 2)
10790               DECL_NONCONVERTING_P (decl) = 1;
10791           }
10792         else if (!staticp && !dependent_type_p (type)
10793                  && !COMPLETE_TYPE_P (complete_type (type))
10794                  && (TREE_CODE (type) != ARRAY_TYPE
10795                      || !COMPLETE_TYPE_P (TREE_TYPE (type))
10796                      || initialized == 0))
10797           {
10798             if (unqualified_id)
10799               {
10800                 error ("field %qD has incomplete type %qT",
10801                        unqualified_id, type);
10802                 cxx_incomplete_type_inform (strip_array_types (type));
10803               }
10804             else
10805               error ("name %qT has incomplete type", type);
10806
10807             type = error_mark_node;
10808             decl = NULL_TREE;
10809           }
10810         else
10811           {
10812             if (friendp)
10813               {
10814                 error ("%qE is neither function nor member function; "
10815                        "cannot be declared friend", unqualified_id);
10816                 friendp = 0;
10817               }
10818             decl = NULL_TREE;
10819           }
10820
10821         if (friendp)
10822           {
10823             /* Friends are treated specially.  */
10824             if (ctype == current_class_type)
10825               ;  /* We already issued a permerror.  */
10826             else if (decl && DECL_NAME (decl))
10827               {
10828                 if (template_class_depth (current_class_type) == 0)
10829                   {
10830                     decl = check_explicit_specialization
10831                       (unqualified_id, decl, template_count,
10832                        2 * funcdef_flag + 4);
10833                     if (decl == error_mark_node)
10834                       return error_mark_node;
10835                   }
10836
10837                 decl = do_friend (ctype, unqualified_id, decl,
10838                                   *attrlist, flags,
10839                                   funcdef_flag);
10840                 return decl;
10841               }
10842             else
10843               return error_mark_node;
10844           }
10845
10846         /* Structure field.  It may not be a function, except for C++.  */
10847
10848         if (decl == NULL_TREE)
10849           {
10850             if (staticp)
10851               {
10852                 /* C++ allows static class members.  All other work
10853                    for this is done by grokfield.  */
10854                 decl = build_lang_decl_loc (declarator
10855                                             ? declarator->id_loc
10856                                             : input_location,
10857                                             VAR_DECL, unqualified_id, type);
10858                 set_linkage_for_static_data_member (decl);
10859                 /* Even if there is an in-class initialization, DECL
10860                    is considered undefined until an out-of-class
10861                    definition is provided.  */
10862                 DECL_EXTERNAL (decl) = 1;
10863
10864                 if (thread_p)
10865                   {
10866                     set_decl_tls_model (decl, decl_default_tls_model (decl));
10867                     if (declspecs->gnu_thread_keyword_p)
10868                       DECL_GNU_TLS_P (decl) = true;
10869                   }
10870
10871                 if (constexpr_p && !initialized)
10872                   {
10873                     error ("constexpr static data member %qD must have an "
10874                            "initializer", decl);
10875                     constexpr_p = false;
10876                   }
10877               }
10878             else
10879               {
10880                 if (constexpr_p)
10881                   {
10882                     error ("non-static data member %qE declared %<constexpr%>",
10883                            unqualified_id);
10884                     constexpr_p = false;
10885                   }
10886                 decl = build_decl (input_location,
10887                                    FIELD_DECL, unqualified_id, type);
10888                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10889                 if (bitfield && !unqualified_id)
10890                   TREE_NO_WARNING (decl) = 1;
10891
10892                 if (storage_class == sc_mutable)
10893                   {
10894                     DECL_MUTABLE_P (decl) = 1;
10895                     storage_class = sc_none;
10896                   }
10897
10898                 if (initialized)
10899                   {
10900                     /* An attempt is being made to initialize a non-static
10901                        member.  This is new in C++11.  */
10902                     maybe_warn_cpp0x (CPP0X_NSDMI);
10903
10904                     /* If this has been parsed with static storage class, but
10905                        errors forced staticp to be cleared, ensure NSDMI is
10906                        not present.  */
10907                     if (declspecs->storage_class == sc_static)
10908                       DECL_INITIAL (decl) = error_mark_node;
10909                   }
10910               }
10911
10912             bad_specifiers (decl, BSP_FIELD, virtualp,
10913                             memfn_quals != TYPE_UNQUALIFIED,
10914                             inlinep, friendp, raises != NULL_TREE);
10915           }
10916       }
10917     else if (TREE_CODE (type) == FUNCTION_TYPE
10918              || TREE_CODE (type) == METHOD_TYPE)
10919       {
10920         tree original_name;
10921         int publicp = 0;
10922
10923         if (!unqualified_id)
10924           return error_mark_node;
10925
10926         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10927           original_name = dname;
10928         else
10929           original_name = unqualified_id;
10930
10931         if (storage_class == sc_auto)
10932           error ("storage class %<auto%> invalid for function %qs", name);
10933         else if (storage_class == sc_register)
10934           error ("storage class %<register%> invalid for function %qs", name);
10935         else if (thread_p)
10936           {
10937             if (declspecs->gnu_thread_keyword_p)
10938               error ("storage class %<__thread%> invalid for function %qs",
10939                      name);
10940             else
10941               error ("storage class %<thread_local%> invalid for function %qs",
10942                      name);
10943           }
10944
10945         if (virt_specifiers)
10946           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10947         /* Function declaration not at top level.
10948            Storage classes other than `extern' are not allowed
10949            and `extern' makes no difference.  */
10950         if (! toplevel_bindings_p ()
10951             && (storage_class == sc_static
10952                 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10953             && pedantic)
10954           {
10955             if (storage_class == sc_static)
10956               pedwarn (input_location, OPT_Wpedantic, 
10957                        "%<static%> specified invalid for function %qs "
10958                        "declared out of global scope", name);
10959             else
10960               pedwarn (input_location, OPT_Wpedantic, 
10961                        "%<inline%> specifier invalid for function %qs "
10962                        "declared out of global scope", name);
10963           }
10964
10965         if (ctype == NULL_TREE)
10966           {
10967             if (virtualp)
10968               {
10969                 error ("virtual non-class function %qs", name);
10970                 virtualp = 0;
10971               }
10972             else if (sfk == sfk_constructor
10973                      || sfk == sfk_destructor)
10974               {
10975                 error (funcdef_flag
10976                        ? G_("%qs defined in a non-class scope")
10977                        : G_("%qs declared in a non-class scope"), name);
10978                 sfk = sfk_none;
10979               }
10980           }
10981
10982         /* Record whether the function is public.  */
10983         publicp = (ctype != NULL_TREE
10984                    || storage_class != sc_static);
10985
10986         if (late_return_type_p)
10987           TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10988
10989         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10990                            virtualp, flags, memfn_quals, rqual, raises,
10991                            1, friendp,
10992                            publicp, inlinep | (2 * constexpr_p),
10993                            initialized == SD_DELETED, sfk,
10994                            funcdef_flag,
10995                            template_count, in_namespace, attrlist,
10996                            declarator->id_loc);
10997         if (decl == NULL_TREE)
10998           return error_mark_node;
10999
11000         if (staticp == 1)
11001           {
11002             int invalid_static = 0;
11003
11004             /* Don't allow a static member function in a class, and forbid
11005                declaring main to be static.  */
11006             if (TREE_CODE (type) == METHOD_TYPE)
11007               {
11008                 permerror (input_location, "cannot declare member function %qD to have "
11009                            "static linkage", decl);
11010                 invalid_static = 1;
11011               }
11012             else if (current_function_decl)
11013               {
11014                 /* FIXME need arm citation */
11015                 error ("cannot declare static function inside another function");
11016                 invalid_static = 1;
11017               }
11018
11019             if (invalid_static)
11020               {
11021                 staticp = 0;
11022                 storage_class = sc_none;
11023               }
11024           }
11025       }
11026     else
11027       {
11028         /* It's a variable.  */
11029
11030         /* An uninitialized decl with `extern' is a reference.  */
11031         decl = grokvardecl (type, dname, unqualified_id,
11032                             declspecs,
11033                             initialized,
11034                             (type_quals & TYPE_QUAL_CONST) != 0,
11035                             template_count,
11036                             ctype ? ctype : in_namespace);
11037         if (decl == NULL_TREE)
11038           return error_mark_node;
11039
11040         bad_specifiers (decl, BSP_VAR, virtualp,
11041                         memfn_quals != TYPE_UNQUALIFIED,
11042                         inlinep, friendp, raises != NULL_TREE);
11043
11044         if (ctype)
11045           {
11046             DECL_CONTEXT (decl) = ctype;
11047             if (staticp == 1)
11048               {
11049                 permerror (input_location, "%<static%> may not be used when defining "
11050                            "(as opposed to declaring) a static data member");
11051                 staticp = 0;
11052                 storage_class = sc_none;
11053               }
11054             if (storage_class == sc_register && TREE_STATIC (decl))
11055               {
11056                 error ("static member %qD declared %<register%>", decl);
11057                 storage_class = sc_none;
11058               }
11059             if (storage_class == sc_extern && pedantic)
11060               {
11061                 pedwarn (input_location, OPT_Wpedantic, 
11062                          "cannot explicitly declare member %q#D to have "
11063                          "extern linkage", decl);
11064                 storage_class = sc_none;
11065               }
11066           }
11067         else if (constexpr_p && DECL_EXTERNAL (decl))
11068           {
11069             error ("declaration of constexpr variable %qD is not a definition",
11070                    decl);
11071             constexpr_p = false;
11072           }
11073       }
11074
11075     if (storage_class == sc_extern && initialized && !funcdef_flag)
11076       {
11077         if (toplevel_bindings_p ())
11078           {
11079             /* It's common practice (and completely valid) to have a const
11080                be initialized and declared extern.  */
11081             if (!(type_quals & TYPE_QUAL_CONST))
11082               warning (0, "%qs initialized and declared %<extern%>", name);
11083           }
11084         else
11085           {
11086             error ("%qs has both %<extern%> and initializer", name);
11087             return error_mark_node;
11088           }
11089       }
11090
11091     /* Record `register' declaration for warnings on &
11092        and in case doing stupid register allocation.  */
11093
11094     if (storage_class == sc_register)
11095       DECL_REGISTER (decl) = 1;
11096     else if (storage_class == sc_extern)
11097       DECL_THIS_EXTERN (decl) = 1;
11098     else if (storage_class == sc_static)
11099       DECL_THIS_STATIC (decl) = 1;
11100
11101     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
11102     if (constexpr_p && VAR_P (decl))
11103       DECL_DECLARED_CONSTEXPR_P (decl) = true;
11104
11105     /* Record constancy and volatility on the DECL itself .  There's
11106        no need to do this when processing a template; we'll do this
11107        for the instantiated declaration based on the type of DECL.  */
11108     if (!processing_template_decl)
11109       cp_apply_type_quals_to_decl (type_quals, decl);
11110
11111     return decl;
11112   }
11113 }
11114 \f
11115 /* Subroutine of start_function.  Ensure that each of the parameter
11116    types (as listed in PARMS) is complete, as is required for a
11117    function definition.  */
11118
11119 static void
11120 require_complete_types_for_parms (tree parms)
11121 {
11122   for (; parms; parms = DECL_CHAIN (parms))
11123     {
11124       if (dependent_type_p (TREE_TYPE (parms)))
11125         continue;
11126       if (!VOID_TYPE_P (TREE_TYPE (parms))
11127           && complete_type_or_else (TREE_TYPE (parms), parms))
11128         {
11129           relayout_decl (parms);
11130           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11131         }
11132       else
11133         /* grokparms or complete_type_or_else will have already issued
11134            an error.  */
11135         TREE_TYPE (parms) = error_mark_node;
11136     }
11137 }
11138
11139 /* Returns nonzero if T is a local variable.  */
11140
11141 int
11142 local_variable_p (const_tree t)
11143 {
11144   if ((VAR_P (t)
11145        /* A VAR_DECL with a context that is a _TYPE is a static data
11146           member.  */
11147        && !TYPE_P (CP_DECL_CONTEXT (t))
11148        /* Any other non-local variable must be at namespace scope.  */
11149        && !DECL_NAMESPACE_SCOPE_P (t))
11150       || (TREE_CODE (t) == PARM_DECL))
11151     return 1;
11152
11153   return 0;
11154 }
11155
11156 /* Like local_variable_p, but suitable for use as a tree-walking
11157    function.  */
11158
11159 static tree
11160 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11161                          void * /*data*/)
11162 {
11163   if (local_variable_p (*tp)
11164       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11165     return *tp;
11166   else if (TYPE_P (*tp))
11167     *walk_subtrees = 0;
11168
11169   return NULL_TREE;
11170 }
11171
11172 /* Check that ARG, which is a default-argument expression for a
11173    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
11174    something goes wrong.  DECL may also be a _TYPE node, rather than a
11175    DECL, if there is no DECL available.  */
11176
11177 tree
11178 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11179 {
11180   tree var;
11181   tree decl_type;
11182
11183   if (TREE_CODE (arg) == DEFAULT_ARG)
11184     /* We get a DEFAULT_ARG when looking at an in-class declaration
11185        with a default argument.  Ignore the argument for now; we'll
11186        deal with it after the class is complete.  */
11187     return arg;
11188
11189   if (TYPE_P (decl))
11190     {
11191       decl_type = decl;
11192       decl = NULL_TREE;
11193     }
11194   else
11195     decl_type = TREE_TYPE (decl);
11196
11197   if (arg == error_mark_node
11198       || decl == error_mark_node
11199       || TREE_TYPE (arg) == error_mark_node
11200       || decl_type == error_mark_node)
11201     /* Something already went wrong.  There's no need to check
11202        further.  */
11203     return error_mark_node;
11204
11205   /* [dcl.fct.default]
11206
11207      A default argument expression is implicitly converted to the
11208      parameter type.  */
11209   ++cp_unevaluated_operand;
11210   perform_implicit_conversion_flags (decl_type, arg, complain,
11211                                      LOOKUP_IMPLICIT);
11212   --cp_unevaluated_operand;
11213
11214   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
11215      the call sites.  */
11216   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
11217       && null_ptr_cst_p (arg))
11218     return nullptr_node;
11219
11220   /* [dcl.fct.default]
11221
11222      Local variables shall not be used in default argument
11223      expressions.
11224
11225      The keyword `this' shall not be used in a default argument of a
11226      member function.  */
11227   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11228   if (var)
11229     {
11230       if (complain & tf_warning_or_error)
11231         {
11232           if (DECL_NAME (var) == this_identifier)
11233             permerror (input_location, "default argument %qE uses %qD",
11234                        arg, var);
11235           else
11236             error ("default argument %qE uses local variable %qD", arg, var);
11237         }
11238       return error_mark_node;
11239     }
11240
11241   /* All is well.  */
11242   return arg;
11243 }
11244
11245 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
11246
11247 static tree
11248 type_is_deprecated (tree type)
11249 {
11250   enum tree_code code;
11251   if (TREE_DEPRECATED (type))
11252     return type;
11253   if (TYPE_NAME (type)
11254       && TREE_DEPRECATED (TYPE_NAME (type)))
11255     return type;
11256
11257   /* Do warn about using typedefs to a deprecated class.  */
11258   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11259     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11260
11261   code = TREE_CODE (type);
11262
11263   if (code == POINTER_TYPE || code == REFERENCE_TYPE
11264       || code == OFFSET_TYPE || code == FUNCTION_TYPE
11265       || code == METHOD_TYPE || code == ARRAY_TYPE)
11266     return type_is_deprecated (TREE_TYPE (type));
11267
11268   if (TYPE_PTRMEMFUNC_P (type))
11269     return type_is_deprecated
11270       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11271
11272   return NULL_TREE;
11273 }
11274
11275 /* Decode the list of parameter types for a function type.
11276    Given the list of things declared inside the parens,
11277    return a list of types.
11278
11279    If this parameter does not end with an ellipsis, we append
11280    void_list_node.
11281
11282    *PARMS is set to the chain of PARM_DECLs created.  */
11283
11284 static tree
11285 grokparms (tree parmlist, tree *parms)
11286 {
11287   tree result = NULL_TREE;
11288   tree decls = NULL_TREE;
11289   tree parm;
11290   int any_error = 0;
11291
11292   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11293     {
11294       tree type = NULL_TREE;
11295       tree init = TREE_PURPOSE (parm);
11296       tree decl = TREE_VALUE (parm);
11297       const char *errmsg;
11298
11299       if (parm == void_list_node)
11300         break;
11301
11302       if (! decl || TREE_TYPE (decl) == error_mark_node)
11303         continue;
11304
11305       type = TREE_TYPE (decl);
11306       if (VOID_TYPE_P (type))
11307         {
11308           if (same_type_p (type, void_type_node)
11309               && !init
11310               && !DECL_NAME (decl) && !result
11311               && TREE_CHAIN (parm) == void_list_node)
11312             /* DR 577: A parameter list consisting of a single
11313                unnamed parameter of non-dependent type 'void'.  */
11314             break;
11315           else if (cv_qualified_p (type))
11316             error_at (DECL_SOURCE_LOCATION (decl),
11317                       "invalid use of cv-qualified type %qT in "
11318                       "parameter declaration", type);
11319           else
11320             error_at (DECL_SOURCE_LOCATION (decl),
11321                       "invalid use of type %<void%> in parameter "
11322                       "declaration");
11323           /* It's not a good idea to actually create parameters of
11324              type `void'; other parts of the compiler assume that a
11325              void type terminates the parameter list.  */
11326           type = error_mark_node;
11327           TREE_TYPE (decl) = error_mark_node;
11328         }
11329
11330       if (type != error_mark_node
11331           && TYPE_FOR_JAVA (type)
11332           && MAYBE_CLASS_TYPE_P (type))
11333         {
11334           error ("parameter %qD has Java class type", decl);
11335           type = error_mark_node;
11336           TREE_TYPE (decl) = error_mark_node;
11337           init = NULL_TREE;
11338         }
11339
11340       if (type != error_mark_node
11341           && (errmsg = targetm.invalid_parameter_type (type)))
11342         {
11343           error (errmsg);
11344           type = error_mark_node;
11345           TREE_TYPE (decl) = error_mark_node;
11346         }
11347
11348       if (type != error_mark_node)
11349         {
11350           if (deprecated_state != DEPRECATED_SUPPRESS)
11351             {
11352               tree deptype = type_is_deprecated (type);
11353               if (deptype)
11354                 warn_deprecated_use (deptype, NULL_TREE);
11355             }
11356
11357           /* Top-level qualifiers on the parameters are
11358              ignored for function types.  */
11359           type = cp_build_qualified_type (type, 0);
11360           if (TREE_CODE (type) == METHOD_TYPE)
11361             {
11362               error ("parameter %qD invalidly declared method type", decl);
11363               type = build_pointer_type (type);
11364               TREE_TYPE (decl) = type;
11365             }
11366           else if (abstract_virtuals_error (decl, type))
11367             any_error = 1;  /* Seems like a good idea.  */
11368           else if (POINTER_TYPE_P (type))
11369             {
11370               /* [dcl.fct]/6, parameter types cannot contain pointers
11371                  (references) to arrays of unknown bound.  */
11372               tree t = TREE_TYPE (type);
11373               int ptr = TYPE_PTR_P (type);
11374
11375               while (1)
11376                 {
11377                   if (TYPE_PTR_P (t))
11378                     ptr = 1;
11379                   else if (TREE_CODE (t) != ARRAY_TYPE)
11380                     break;
11381                   else if (!TYPE_DOMAIN (t))
11382                     break;
11383                   t = TREE_TYPE (t);
11384                 }
11385               if (TREE_CODE (t) == ARRAY_TYPE)
11386                 error (ptr
11387                        ? G_("parameter %qD includes pointer to array of "
11388                             "unknown bound %qT")
11389                        : G_("parameter %qD includes reference to array of "
11390                             "unknown bound %qT"),
11391                        decl, t);
11392             }
11393
11394           if (any_error)
11395             init = NULL_TREE;
11396           else if (init && !processing_template_decl)
11397             init = check_default_argument (decl, init, tf_warning_or_error);
11398         }
11399
11400       DECL_CHAIN (decl) = decls;
11401       decls = decl;
11402       result = tree_cons (init, type, result);
11403     }
11404   decls = nreverse (decls);
11405   result = nreverse (result);
11406   if (parm)
11407     result = chainon (result, void_list_node);
11408   *parms = decls;
11409
11410   return result;
11411 }
11412
11413 \f
11414 /* D is a constructor or overloaded `operator='.
11415
11416    Let T be the class in which D is declared. Then, this function
11417    returns:
11418
11419    -1 if D's is an ill-formed constructor or copy assignment operator
11420       whose first parameter is of type `T'.
11421    0  if D is not a copy constructor or copy assignment
11422       operator.
11423    1  if D is a copy constructor or copy assignment operator whose
11424       first parameter is a reference to non-const qualified T.
11425    2  if D is a copy constructor or copy assignment operator whose
11426       first parameter is a reference to const qualified T.
11427
11428    This function can be used as a predicate. Positive values indicate
11429    a copy constructor and nonzero values indicate a copy assignment
11430    operator.  */
11431
11432 int
11433 copy_fn_p (const_tree d)
11434 {
11435   tree args;
11436   tree arg_type;
11437   int result = 1;
11438
11439   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11440
11441   if (TREE_CODE (d) == TEMPLATE_DECL
11442       || (DECL_TEMPLATE_INFO (d)
11443           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11444     /* Instantiations of template member functions are never copy
11445        functions.  Note that member functions of templated classes are
11446        represented as template functions internally, and we must
11447        accept those as copy functions.  */
11448     return 0;
11449
11450   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11451   if (!args)
11452     return 0;
11453
11454   arg_type = TREE_VALUE (args);
11455   if (arg_type == error_mark_node)
11456     return 0;
11457
11458   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11459     {
11460       /* Pass by value copy assignment operator.  */
11461       result = -1;
11462     }
11463   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11464            && !TYPE_REF_IS_RVALUE (arg_type)
11465            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11466     {
11467       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11468         result = 2;
11469     }
11470   else
11471     return 0;
11472
11473   args = TREE_CHAIN (args);
11474
11475   if (args && args != void_list_node && !TREE_PURPOSE (args))
11476     /* There are more non-optional args.  */
11477     return 0;
11478
11479   return result;
11480 }
11481
11482 /* D is a constructor or overloaded `operator='.
11483
11484    Let T be the class in which D is declared. Then, this function
11485    returns true when D is a move constructor or move assignment
11486    operator, false otherwise.  */
11487
11488 bool
11489 move_fn_p (const_tree d)
11490 {
11491   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11492
11493   if (cxx_dialect == cxx98)
11494     /* There are no move constructors if we are in C++98 mode.  */
11495     return false;
11496
11497   if (TREE_CODE (d) == TEMPLATE_DECL
11498       || (DECL_TEMPLATE_INFO (d)
11499          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11500     /* Instantiations of template member functions are never move
11501        functions.  Note that member functions of templated classes are
11502        represented as template functions internally, and we must
11503        accept those as move functions.  */
11504     return 0;
11505
11506   return move_signature_fn_p (d);
11507 }
11508
11509 /* D is a constructor or overloaded `operator='.
11510
11511    Then, this function returns true when D has the same signature as a move
11512    constructor or move assignment operator (because either it is such a
11513    ctor/op= or it is a template specialization with the same signature),
11514    false otherwise.  */
11515
11516 bool
11517 move_signature_fn_p (const_tree d)
11518 {
11519   tree args;
11520   tree arg_type;
11521   bool result = false;
11522
11523   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11524   if (!args)
11525     return 0;
11526
11527   arg_type = TREE_VALUE (args);
11528   if (arg_type == error_mark_node)
11529     return 0;
11530
11531   if (TREE_CODE (arg_type) == REFERENCE_TYPE
11532       && TYPE_REF_IS_RVALUE (arg_type)
11533       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11534                       DECL_CONTEXT (d)))
11535     result = true;
11536
11537   args = TREE_CHAIN (args);
11538
11539   if (args && args != void_list_node && !TREE_PURPOSE (args))
11540     /* There are more non-optional args.  */
11541     return false;
11542
11543   return result;
11544 }
11545
11546 /* Remember any special properties of member function DECL.  */
11547
11548 void
11549 grok_special_member_properties (tree decl)
11550 {
11551   tree class_type;
11552
11553   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11554     return;
11555
11556   class_type = DECL_CONTEXT (decl);
11557   if (DECL_CONSTRUCTOR_P (decl))
11558     {
11559       int ctor = copy_fn_p (decl);
11560
11561       if (!DECL_ARTIFICIAL (decl))
11562         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11563
11564       if (ctor > 0)
11565         {
11566           /* [class.copy]
11567
11568              A non-template constructor for class X is a copy
11569              constructor if its first parameter is of type X&, const
11570              X&, volatile X& or const volatile X&, and either there
11571              are no other parameters or else all other parameters have
11572              default arguments.  */
11573           TYPE_HAS_COPY_CTOR (class_type) = 1;
11574           if (user_provided_p (decl))
11575             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11576           if (ctor > 1)
11577             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11578         }
11579       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11580         TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11581       else if (move_fn_p (decl) && user_provided_p (decl))
11582         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11583       else if (is_list_ctor (decl))
11584         TYPE_HAS_LIST_CTOR (class_type) = 1;
11585
11586       if (DECL_DECLARED_CONSTEXPR_P (decl)
11587           && !copy_fn_p (decl) && !move_fn_p (decl))
11588         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11589     }
11590   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11591     {
11592       /* [class.copy]
11593
11594          A non-template assignment operator for class X is a copy
11595          assignment operator if its parameter is of type X, X&, const
11596          X&, volatile X& or const volatile X&.  */
11597
11598       int assop = copy_fn_p (decl);
11599
11600       if (assop)
11601         {
11602           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11603           if (user_provided_p (decl))
11604             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11605           if (assop != 1)
11606             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11607         }
11608       else if (move_fn_p (decl) && user_provided_p (decl))
11609         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11610     }
11611   /* Destructors are handled in check_methods.  */
11612 }
11613
11614 /* Check a constructor DECL has the correct form.  Complains
11615    if the class has a constructor of the form X(X).  */
11616
11617 int
11618 grok_ctor_properties (const_tree ctype, const_tree decl)
11619 {
11620   int ctor_parm = copy_fn_p (decl);
11621
11622   if (ctor_parm < 0)
11623     {
11624       /* [class.copy]
11625
11626          A declaration of a constructor for a class X is ill-formed if
11627          its first parameter is of type (optionally cv-qualified) X
11628          and either there are no other parameters or else all other
11629          parameters have default arguments.
11630
11631          We *don't* complain about member template instantiations that
11632          have this form, though; they can occur as we try to decide
11633          what constructor to use during overload resolution.  Since
11634          overload resolution will never prefer such a constructor to
11635          the non-template copy constructor (which is either explicitly
11636          or implicitly defined), there's no need to worry about their
11637          existence.  Theoretically, they should never even be
11638          instantiated, but that's hard to forestall.  */
11639       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11640                 ctype, ctype);
11641       return 0;
11642     }
11643
11644   return 1;
11645 }
11646
11647 /* An operator with this code is unary, but can also be binary.  */
11648
11649 static int
11650 ambi_op_p (enum tree_code code)
11651 {
11652   return (code == INDIRECT_REF
11653           || code == ADDR_EXPR
11654           || code == UNARY_PLUS_EXPR
11655           || code == NEGATE_EXPR
11656           || code == PREINCREMENT_EXPR
11657           || code == PREDECREMENT_EXPR);
11658 }
11659
11660 /* An operator with this name can only be unary.  */
11661
11662 static int
11663 unary_op_p (enum tree_code code)
11664 {
11665   return (code == TRUTH_NOT_EXPR
11666           || code == BIT_NOT_EXPR
11667           || code == COMPONENT_REF
11668           || code == TYPE_EXPR);
11669 }
11670
11671 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11672    errors are issued for invalid declarations.  */
11673
11674 bool
11675 grok_op_properties (tree decl, bool complain)
11676 {
11677   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11678   tree argtype;
11679   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11680   tree name = DECL_NAME (decl);
11681   enum tree_code operator_code;
11682   int arity;
11683   bool ellipsis_p;
11684   tree class_type;
11685
11686   /* Count the number of arguments and check for ellipsis.  */
11687   for (argtype = argtypes, arity = 0;
11688        argtype && argtype != void_list_node;
11689        argtype = TREE_CHAIN (argtype))
11690     ++arity;
11691   ellipsis_p = !argtype;
11692
11693   class_type = DECL_CONTEXT (decl);
11694   if (class_type && !CLASS_TYPE_P (class_type))
11695     class_type = NULL_TREE;
11696
11697   if (DECL_CONV_FN_P (decl))
11698     operator_code = TYPE_EXPR;
11699   else
11700     do
11701       {
11702 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
11703         if (ansi_opname (CODE) == name)                         \
11704           {                                                     \
11705             operator_code = (CODE);                             \
11706             break;                                              \
11707           }                                                     \
11708         else if (ansi_assopname (CODE) == name)                 \
11709           {                                                     \
11710             operator_code = (CODE);                             \
11711             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
11712             break;                                              \
11713           }
11714
11715 #include "operators.def"
11716 #undef DEF_OPERATOR
11717
11718         gcc_unreachable ();
11719       }
11720     while (0);
11721   gcc_assert (operator_code != MAX_TREE_CODES);
11722   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11723
11724   if (class_type)
11725     switch (operator_code)
11726       {
11727       case NEW_EXPR:
11728         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11729         break;
11730
11731       case DELETE_EXPR:
11732         TYPE_GETS_DELETE (class_type) |= 1;
11733         break;
11734
11735       case VEC_NEW_EXPR:
11736         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11737         break;
11738
11739       case VEC_DELETE_EXPR:
11740         TYPE_GETS_DELETE (class_type) |= 2;
11741         break;
11742
11743       default:
11744         break;
11745       }
11746
11747     /* [basic.std.dynamic.allocation]/1:
11748
11749        A program is ill-formed if an allocation function is declared
11750        in a namespace scope other than global scope or declared static
11751        in global scope.
11752
11753        The same also holds true for deallocation functions.  */
11754   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11755       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11756     {
11757       if (DECL_NAMESPACE_SCOPE_P (decl))
11758         {
11759           if (CP_DECL_CONTEXT (decl) != global_namespace)
11760             {
11761               error ("%qD may not be declared within a namespace", decl);
11762               return false;
11763             }
11764           else if (!TREE_PUBLIC (decl))
11765             {
11766               error ("%qD may not be declared as static", decl);
11767               return false;
11768             }
11769           if (!flag_sized_deallocation && warn_cxx14_compat)
11770             {
11771               tree parm = FUNCTION_ARG_CHAIN (decl);
11772               if (parm && same_type_p (TREE_VALUE (parm), size_type_node)
11773                   && TREE_CHAIN (parm) == void_list_node)
11774                 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc__14_compat,
11775                             "%qD is a usual (non-placement) deallocation "
11776                             "function in C++14 (or with -fsized-deallocation)",
11777                             decl);
11778             }
11779         }
11780     }
11781
11782   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11783     {
11784       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11785       DECL_IS_OPERATOR_NEW (decl) = 1;
11786     }
11787   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11788     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11789   else
11790     {
11791       /* An operator function must either be a non-static member function
11792          or have at least one parameter of a class, a reference to a class,
11793          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11794       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11795         {
11796           if (operator_code == TYPE_EXPR
11797               || operator_code == CALL_EXPR
11798               || operator_code == COMPONENT_REF
11799               || operator_code == ARRAY_REF
11800               || operator_code == NOP_EXPR)
11801             {
11802               error ("%qD must be a nonstatic member function", decl);
11803               return false;
11804             }
11805           else
11806             {
11807               tree p;
11808
11809               if (DECL_STATIC_FUNCTION_P (decl))
11810                 {
11811                   error ("%qD must be either a non-static member "
11812                          "function or a non-member function", decl);
11813                   return false;
11814                 }
11815
11816               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11817                 {
11818                   tree arg = non_reference (TREE_VALUE (p));
11819                   if (arg == error_mark_node)
11820                     return false;
11821
11822                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11823                      because these checks are performed even on
11824                      template functions.  */
11825                   if (MAYBE_CLASS_TYPE_P (arg)
11826                       || TREE_CODE (arg) == ENUMERAL_TYPE)
11827                     break;
11828                 }
11829
11830               if (!p || p == void_list_node)
11831                 {
11832                   if (complain)
11833                     error ("%qD must have an argument of class or "
11834                            "enumerated type", decl);
11835                   return false;
11836                 }
11837             }
11838         }
11839
11840       /* There are no restrictions on the arguments to an overloaded
11841          "operator ()".  */
11842       if (operator_code == CALL_EXPR)
11843         return true;
11844
11845       /* Warn about conversion operators that will never be used.  */
11846       if (IDENTIFIER_TYPENAME_P (name)
11847           && ! DECL_TEMPLATE_INFO (decl)
11848           && warn_conversion
11849           /* Warn only declaring the function; there is no need to
11850              warn again about out-of-class definitions.  */
11851           && class_type == current_class_type)
11852         {
11853           tree t = TREE_TYPE (name);
11854           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11855
11856           if (ref)
11857             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11858
11859           if (VOID_TYPE_P (t))
11860             warning (OPT_Wconversion,
11861                      ref
11862                      ? G_("conversion to a reference to void "
11863                           "will never use a type conversion operator")
11864                      : G_("conversion to void "
11865                           "will never use a type conversion operator"));
11866           else if (class_type)
11867             {
11868               if (t == class_type)
11869                 warning (OPT_Wconversion,
11870                      ref
11871                      ? G_("conversion to a reference to the same type "
11872                           "will never use a type conversion operator")
11873                      : G_("conversion to the same type "
11874                           "will never use a type conversion operator"));                
11875               /* Don't force t to be complete here.  */
11876               else if (MAYBE_CLASS_TYPE_P (t)
11877                        && COMPLETE_TYPE_P (t)
11878                        && DERIVED_FROM_P (t, class_type))
11879                  warning (OPT_Wconversion,
11880                           ref
11881                           ? G_("conversion to a reference to a base class "
11882                                "will never use a type conversion operator")
11883                           : G_("conversion to a base class "
11884                                "will never use a type conversion operator"));           
11885             }
11886
11887         }
11888
11889       if (operator_code == COND_EXPR)
11890         {
11891           /* 13.4.0.3 */
11892           error ("ISO C++ prohibits overloading operator ?:");
11893           return false;
11894         }
11895       else if (ellipsis_p)
11896         {
11897           error ("%qD must not have variable number of arguments", decl);
11898           return false;
11899         }
11900       else if (ambi_op_p (operator_code))
11901         {
11902           if (arity == 1)
11903             /* We pick the one-argument operator codes by default, so
11904                we don't have to change anything.  */
11905             ;
11906           else if (arity == 2)
11907             {
11908               /* If we thought this was a unary operator, we now know
11909                  it to be a binary operator.  */
11910               switch (operator_code)
11911                 {
11912                 case INDIRECT_REF:
11913                   operator_code = MULT_EXPR;
11914                   break;
11915
11916                 case ADDR_EXPR:
11917                   operator_code = BIT_AND_EXPR;
11918                   break;
11919
11920                 case UNARY_PLUS_EXPR:
11921                   operator_code = PLUS_EXPR;
11922                   break;
11923
11924                 case NEGATE_EXPR:
11925                   operator_code = MINUS_EXPR;
11926                   break;
11927
11928                 case PREINCREMENT_EXPR:
11929                   operator_code = POSTINCREMENT_EXPR;
11930                   break;
11931
11932                 case PREDECREMENT_EXPR:
11933                   operator_code = POSTDECREMENT_EXPR;
11934                   break;
11935
11936                 default:
11937                   gcc_unreachable ();
11938                 }
11939
11940               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11941
11942               if ((operator_code == POSTINCREMENT_EXPR
11943                    || operator_code == POSTDECREMENT_EXPR)
11944                   && ! processing_template_decl
11945                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11946                 {
11947                   if (methodp)
11948                     error ("postfix %qD must take %<int%> as its argument",
11949                            decl);
11950                   else
11951                     error ("postfix %qD must take %<int%> as its second "
11952                            "argument", decl);
11953                   return false;
11954                 }
11955             }
11956           else
11957             {
11958               if (methodp)
11959                 error ("%qD must take either zero or one argument", decl);
11960               else
11961                 error ("%qD must take either one or two arguments", decl);
11962               return false;
11963             }
11964
11965           /* More Effective C++ rule 6.  */
11966           if (warn_ecpp
11967               && (operator_code == POSTINCREMENT_EXPR
11968                   || operator_code == POSTDECREMENT_EXPR
11969                   || operator_code == PREINCREMENT_EXPR
11970                   || operator_code == PREDECREMENT_EXPR))
11971             {
11972               tree arg = TREE_VALUE (argtypes);
11973               tree ret = TREE_TYPE (TREE_TYPE (decl));
11974               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11975                 arg = TREE_TYPE (arg);
11976               arg = TYPE_MAIN_VARIANT (arg);
11977               if (operator_code == PREINCREMENT_EXPR
11978                   || operator_code == PREDECREMENT_EXPR)
11979                 {
11980                   if (TREE_CODE (ret) != REFERENCE_TYPE
11981                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11982                                        arg))
11983                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11984                              build_reference_type (arg));
11985                 }
11986               else
11987                 {
11988                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11989                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11990                 }
11991             }
11992         }
11993       else if (unary_op_p (operator_code))
11994         {
11995           if (arity != 1)
11996             {
11997               if (methodp)
11998                 error ("%qD must take %<void%>", decl);
11999               else
12000                 error ("%qD must take exactly one argument", decl);
12001               return false;
12002             }
12003         }
12004       else /* if (binary_op_p (operator_code)) */
12005         {
12006           if (arity != 2)
12007             {
12008               if (methodp)
12009                 error ("%qD must take exactly one argument", decl);
12010               else
12011                 error ("%qD must take exactly two arguments", decl);
12012               return false;
12013             }
12014
12015           /* More Effective C++ rule 7.  */
12016           if (warn_ecpp
12017               && (operator_code == TRUTH_ANDIF_EXPR
12018                   || operator_code == TRUTH_ORIF_EXPR
12019                   || operator_code == COMPOUND_EXPR))
12020             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
12021                      decl);
12022         }
12023
12024       /* Effective C++ rule 23.  */
12025       if (warn_ecpp
12026           && arity == 2
12027           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
12028           && (operator_code == PLUS_EXPR
12029               || operator_code == MINUS_EXPR
12030               || operator_code == TRUNC_DIV_EXPR
12031               || operator_code == MULT_EXPR
12032               || operator_code == TRUNC_MOD_EXPR)
12033           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12034         warning (OPT_Weffc__, "%qD should return by value", decl);
12035
12036       /* [over.oper]/8 */
12037       for (; argtypes && argtypes != void_list_node;
12038           argtypes = TREE_CHAIN (argtypes))
12039         if (TREE_PURPOSE (argtypes))
12040           {
12041             TREE_PURPOSE (argtypes) = NULL_TREE;
12042             if (operator_code == POSTINCREMENT_EXPR
12043                 || operator_code == POSTDECREMENT_EXPR)
12044               {
12045                 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments", 
12046                          decl);
12047               }
12048             else
12049               {
12050                 error ("%qD cannot have default arguments", decl);
12051                 return false;
12052               }
12053           }
12054     }
12055   return true;
12056 }
12057 \f
12058 /* Return a string giving the keyword associate with CODE.  */
12059
12060 static const char *
12061 tag_name (enum tag_types code)
12062 {
12063   switch (code)
12064     {
12065     case record_type:
12066       return "struct";
12067     case class_type:
12068       return "class";
12069     case union_type:
12070       return "union";
12071     case enum_type:
12072       return "enum";
12073     case typename_type:
12074       return "typename";
12075     default:
12076       gcc_unreachable ();
12077     }
12078 }
12079
12080 /* Name lookup in an elaborated-type-specifier (after the keyword
12081    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
12082    elaborated-type-specifier is invalid, issue a diagnostic and return
12083    error_mark_node; otherwise, return the *_TYPE to which it referred.
12084    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
12085
12086 tree
12087 check_elaborated_type_specifier (enum tag_types tag_code,
12088                                  tree decl,
12089                                  bool allow_template_p)
12090 {
12091   tree type;
12092
12093   /* In the case of:
12094
12095        struct S { struct S *p; };
12096
12097      name lookup will find the TYPE_DECL for the implicit "S::S"
12098      typedef.  Adjust for that here.  */
12099   if (DECL_SELF_REFERENCE_P (decl))
12100     decl = TYPE_NAME (TREE_TYPE (decl));
12101
12102   type = TREE_TYPE (decl);
12103
12104   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
12105      is false for this case as well.  */
12106   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12107     {
12108       error ("using template type parameter %qT after %qs",
12109              type, tag_name (tag_code));
12110       return error_mark_node;
12111     }
12112   /* Accept template template parameters.  */
12113   else if (allow_template_p
12114            && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
12115                || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
12116     ;
12117   /*   [dcl.type.elab]
12118
12119        If the identifier resolves to a typedef-name or the
12120        simple-template-id resolves to an alias template
12121        specialization, the elaborated-type-specifier is ill-formed.
12122
12123      In other words, the only legitimate declaration to use in the
12124      elaborated type specifier is the implicit typedef created when
12125      the type is declared.  */
12126   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12127            && !DECL_SELF_REFERENCE_P (decl)
12128            && tag_code != typename_type)
12129     {
12130       if (alias_template_specialization_p (type))
12131         error ("using alias template specialization %qT after %qs",
12132                type, tag_name (tag_code));
12133       else
12134         error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12135       inform (DECL_SOURCE_LOCATION (decl),
12136               "%qD has a previous declaration here", decl);
12137       return error_mark_node;
12138     }
12139   else if (TREE_CODE (type) != RECORD_TYPE
12140            && TREE_CODE (type) != UNION_TYPE
12141            && tag_code != enum_type
12142            && tag_code != typename_type)
12143     {
12144       error ("%qT referred to as %qs", type, tag_name (tag_code));
12145       inform (input_location, "%q+T has a previous declaration here", type);
12146       return error_mark_node;
12147     }
12148   else if (TREE_CODE (type) != ENUMERAL_TYPE
12149            && tag_code == enum_type)
12150     {
12151       error ("%qT referred to as enum", type);
12152       inform (input_location, "%q+T has a previous declaration here", type);
12153       return error_mark_node;
12154     }
12155   else if (!allow_template_p
12156            && TREE_CODE (type) == RECORD_TYPE
12157            && CLASSTYPE_IS_TEMPLATE (type))
12158     {
12159       /* If a class template appears as elaborated type specifier
12160          without a template header such as:
12161
12162            template <class T> class C {};
12163            void f(class C);             // No template header here
12164
12165          then the required template argument is missing.  */
12166       error ("template argument required for %<%s %T%>",
12167              tag_name (tag_code),
12168              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12169       return error_mark_node;
12170     }
12171
12172   return type;
12173 }
12174
12175 /* Lookup NAME in elaborate type specifier in scope according to
12176    SCOPE and issue diagnostics if necessary.
12177    Return *_TYPE node upon success, NULL_TREE when the NAME is not
12178    found, and ERROR_MARK_NODE for type error.  */
12179
12180 static tree
12181 lookup_and_check_tag (enum tag_types tag_code, tree name,
12182                       tag_scope scope, bool template_header_p)
12183 {
12184   tree t;
12185   tree decl;
12186   if (scope == ts_global)
12187     {
12188       /* First try ordinary name lookup, ignoring hidden class name
12189          injected via friend declaration.  */
12190       decl = lookup_name_prefer_type (name, 2);
12191       decl = strip_using_decl (decl);
12192       /* If that fails, the name will be placed in the smallest
12193          non-class, non-function-prototype scope according to 3.3.1/5.
12194          We may already have a hidden name declared as friend in this
12195          scope.  So lookup again but not ignoring hidden names.
12196          If we find one, that name will be made visible rather than
12197          creating a new tag.  */
12198       if (!decl)
12199         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12200     }
12201   else
12202     decl = lookup_type_scope (name, scope);
12203
12204   if (decl
12205       && (DECL_CLASS_TEMPLATE_P (decl)
12206           /* If scope is ts_current we're defining a class, so ignore a
12207              template template parameter.  */
12208           || (scope != ts_current
12209               && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12210     decl = DECL_TEMPLATE_RESULT (decl);
12211
12212   if (decl && TREE_CODE (decl) == TYPE_DECL)
12213     {
12214       /* Look for invalid nested type:
12215            class C {
12216              class C {};
12217            };  */
12218       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12219         {
12220           error ("%qD has the same name as the class in which it is "
12221                  "declared",
12222                  decl);
12223           return error_mark_node;
12224         }
12225
12226       /* Two cases we need to consider when deciding if a class
12227          template is allowed as an elaborated type specifier:
12228          1. It is a self reference to its own class.
12229          2. It comes with a template header.
12230
12231          For example:
12232
12233            template <class T> class C {
12234              class C *c1;               // DECL_SELF_REFERENCE_P is true
12235              class D;
12236            };
12237            template <class U> class C; // template_header_p is true
12238            template <class T> class C<T>::D {
12239              class C *c2;               // DECL_SELF_REFERENCE_P is true
12240            };  */
12241
12242       t = check_elaborated_type_specifier (tag_code,
12243                                            decl,
12244                                            template_header_p
12245                                            | DECL_SELF_REFERENCE_P (decl));
12246       return t;
12247     }
12248   else if (decl && TREE_CODE (decl) == TREE_LIST)
12249     {
12250       error ("reference to %qD is ambiguous", name);
12251       print_candidates (decl);
12252       return error_mark_node;
12253     }
12254   else
12255     return NULL_TREE;
12256 }
12257
12258 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12259    Define the tag as a forward-reference if it is not defined.
12260
12261    If a declaration is given, process it here, and report an error if
12262    multiple declarations are not identical.
12263
12264    SCOPE is TS_CURRENT when this is also a definition.  Only look in
12265    the current frame for the name (since C++ allows new names in any
12266    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12267    declaration.  Only look beginning from the current scope outward up
12268    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
12269
12270    TEMPLATE_HEADER_P is true when this declaration is preceded by
12271    a set of template parameters.  */
12272
12273 static tree
12274 xref_tag_1 (enum tag_types tag_code, tree name,
12275             tag_scope orig_scope, bool template_header_p)
12276 {
12277   enum tree_code code;
12278   tree t;
12279   tree context = NULL_TREE;
12280   tag_scope scope;
12281
12282   gcc_assert (identifier_p (name));
12283
12284   switch (tag_code)
12285     {
12286     case record_type:
12287     case class_type:
12288       code = RECORD_TYPE;
12289       break;
12290     case union_type:
12291       code = UNION_TYPE;
12292       break;
12293     case enum_type:
12294       code = ENUMERAL_TYPE;
12295       break;
12296     default:
12297       gcc_unreachable ();
12298     }
12299
12300   if (orig_scope == ts_lambda)
12301     scope = ts_current;
12302   else
12303     scope = orig_scope;
12304
12305   /* In case of anonymous name, xref_tag is only called to
12306      make type node and push name.  Name lookup is not required.  */
12307   if (ANON_AGGRNAME_P (name))
12308     t = NULL_TREE;
12309   else
12310     t = lookup_and_check_tag  (tag_code, name,
12311                                scope, template_header_p);
12312
12313   if (t == error_mark_node)
12314     return error_mark_node;
12315
12316   if (scope != ts_current && t && current_class_type
12317       && template_class_depth (current_class_type)
12318       && template_header_p)
12319     {
12320       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12321         return t;
12322
12323       /* Since SCOPE is not TS_CURRENT, we are not looking at a
12324          definition of this tag.  Since, in addition, we are currently
12325          processing a (member) template declaration of a template
12326          class, we must be very careful; consider:
12327
12328            template <class X>
12329            struct S1
12330
12331            template <class U>
12332            struct S2
12333            { template <class V>
12334            friend struct S1; };
12335
12336          Here, the S2::S1 declaration should not be confused with the
12337          outer declaration.  In particular, the inner version should
12338          have a template parameter of level 2, not level 1.  This
12339          would be particularly important if the member declaration
12340          were instead:
12341
12342            template <class V = U> friend struct S1;
12343
12344          say, when we should tsubst into `U' when instantiating
12345          S2.  On the other hand, when presented with:
12346
12347            template <class T>
12348            struct S1 {
12349              template <class U>
12350              struct S2 {};
12351              template <class U>
12352              friend struct S2;
12353            };
12354
12355          we must find the inner binding eventually.  We
12356          accomplish this by making sure that the new type we
12357          create to represent this declaration has the right
12358          TYPE_CONTEXT.  */
12359       context = TYPE_CONTEXT (t);
12360       t = NULL_TREE;
12361     }
12362
12363   if (! t)
12364     {
12365       /* If no such tag is yet defined, create a forward-reference node
12366          and record it as the "definition".
12367          When a real declaration of this type is found,
12368          the forward-reference will be altered into a real type.  */
12369       if (code == ENUMERAL_TYPE)
12370         {
12371           error ("use of enum %q#D without previous declaration", name);
12372           return error_mark_node;
12373         }
12374       else
12375         {
12376           t = make_class_type (code);
12377           TYPE_CONTEXT (t) = context;
12378           if (orig_scope == ts_lambda)
12379             /* Remember that we're declaring a lambda to avoid bogus errors
12380                in push_template_decl.  */
12381             CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12382           t = pushtag (name, t, scope);
12383         }
12384     }
12385   else
12386     {
12387       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12388         {
12389           if (!redeclare_class_template (t, current_template_parms))
12390             return error_mark_node;
12391         }
12392       else if (!processing_template_decl
12393                && CLASS_TYPE_P (t)
12394                && CLASSTYPE_IS_TEMPLATE (t))
12395         {
12396           error ("redeclaration of %qT as a non-template", t);
12397           error ("previous declaration %q+D", t);
12398           return error_mark_node;
12399         }
12400
12401       /* Make injected friend class visible.  */
12402       if (scope != ts_within_enclosing_non_class
12403           && hidden_name_p (TYPE_NAME (t)))
12404         {
12405           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12406           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12407
12408           if (TYPE_TEMPLATE_INFO (t))
12409             {
12410               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12411               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12412             }
12413         }
12414     }
12415
12416   return t;
12417 }
12418
12419 /* Wrapper for xref_tag_1.  */
12420
12421 tree
12422 xref_tag (enum tag_types tag_code, tree name,
12423           tag_scope scope, bool template_header_p)
12424 {
12425   tree ret;
12426   bool subtime;
12427   subtime = timevar_cond_start (TV_NAME_LOOKUP);
12428   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12429   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12430   return ret;
12431 }
12432
12433
12434 tree
12435 xref_tag_from_type (tree old, tree id, tag_scope scope)
12436 {
12437   enum tag_types tag_kind;
12438
12439   if (TREE_CODE (old) == RECORD_TYPE)
12440     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12441   else
12442     tag_kind  = union_type;
12443
12444   if (id == NULL_TREE)
12445     id = TYPE_IDENTIFIER (old);
12446
12447   return xref_tag (tag_kind, id, scope, false);
12448 }
12449
12450 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12451    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
12452    access_* node, and the TREE_VALUE is the type of the base-class.
12453    Non-NULL TREE_TYPE indicates virtual inheritance.  
12454  
12455    Returns true if the binfo hierarchy was successfully created,
12456    false if an error was detected. */
12457
12458 bool
12459 xref_basetypes (tree ref, tree base_list)
12460 {
12461   tree *basep;
12462   tree binfo, base_binfo;
12463   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
12464   unsigned max_bases = 0;  /* Maximum direct bases.  */
12465   int i;
12466   tree default_access;
12467   tree igo_prev; /* Track Inheritance Graph Order.  */
12468
12469   if (ref == error_mark_node)
12470     return false;
12471
12472   /* The base of a derived class is private by default, all others are
12473      public.  */
12474   default_access = (TREE_CODE (ref) == RECORD_TYPE
12475                     && CLASSTYPE_DECLARED_CLASS (ref)
12476                     ? access_private_node : access_public_node);
12477
12478   /* First, make sure that any templates in base-classes are
12479      instantiated.  This ensures that if we call ourselves recursively
12480      we do not get confused about which classes are marked and which
12481      are not.  */
12482   basep = &base_list;
12483   while (*basep)
12484     {
12485       tree basetype = TREE_VALUE (*basep);
12486
12487       /* The dependent_type_p call below should really be dependent_scope_p
12488          so that we give a hard error about using an incomplete type as a
12489          base, but we allow it with a pedwarn for backward
12490          compatibility.  */
12491       if (processing_template_decl
12492           && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12493         cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12494       if (!dependent_type_p (basetype)
12495           && !complete_type_or_else (basetype, NULL))
12496         /* An incomplete type.  Remove it from the list.  */
12497         *basep = TREE_CHAIN (*basep);
12498       else
12499         {
12500           max_bases++;
12501           if (TREE_TYPE (*basep))
12502             max_vbases++;
12503           if (CLASS_TYPE_P (basetype))
12504             max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12505           basep = &TREE_CHAIN (*basep);
12506         }
12507     }
12508
12509   TYPE_MARKED_P (ref) = 1;
12510
12511   /* The binfo slot should be empty, unless this is an (ill-formed)
12512      redefinition.  */
12513   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12514     {
12515       error ("redefinition of %q#T", ref);
12516       return false;
12517     }
12518
12519   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12520
12521   binfo = make_tree_binfo (max_bases);
12522
12523   TYPE_BINFO (ref) = binfo;
12524   BINFO_OFFSET (binfo) = size_zero_node;
12525   BINFO_TYPE (binfo) = ref;
12526
12527   /* Apply base-class info set up to the variants of this type.  */
12528   fixup_type_variants (ref);
12529
12530   if (max_bases)
12531     {
12532       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12533       /* An aggregate cannot have baseclasses.  */
12534       CLASSTYPE_NON_AGGREGATE (ref) = 1;
12535
12536       if (TREE_CODE (ref) == UNION_TYPE)
12537         {
12538           error ("derived union %qT invalid", ref);
12539           return false;
12540         }
12541     }
12542
12543   if (max_bases > 1)
12544     {
12545       if (TYPE_FOR_JAVA (ref))
12546         {
12547           error ("Java class %qT cannot have multiple bases", ref);
12548           return false;
12549         }
12550     }
12551
12552   if (max_vbases)
12553     {
12554       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12555
12556       if (TYPE_FOR_JAVA (ref))
12557         {
12558           error ("Java class %qT cannot have virtual bases", ref);
12559           return false;
12560         }
12561     }
12562
12563   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12564     {
12565       tree access = TREE_PURPOSE (base_list);
12566       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12567       tree basetype = TREE_VALUE (base_list);
12568
12569       if (access == access_default_node)
12570         access = default_access;
12571
12572       if (PACK_EXPANSION_P (basetype))
12573         basetype = PACK_EXPANSION_PATTERN (basetype);
12574       if (TREE_CODE (basetype) == TYPE_DECL)
12575         basetype = TREE_TYPE (basetype);
12576       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12577         {
12578           error ("base type %qT fails to be a struct or class type",
12579                  basetype);
12580           return false;
12581         }
12582
12583       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12584         TYPE_FOR_JAVA (ref) = 1;
12585
12586       base_binfo = NULL_TREE;
12587       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12588         {
12589           base_binfo = TYPE_BINFO (basetype);
12590           /* The original basetype could have been a typedef'd type.  */
12591           basetype = BINFO_TYPE (base_binfo);
12592
12593           /* Inherit flags from the base.  */
12594           TYPE_HAS_NEW_OPERATOR (ref)
12595             |= TYPE_HAS_NEW_OPERATOR (basetype);
12596           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12597             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12598           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12599           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12600           CLASSTYPE_DIAMOND_SHAPED_P (ref)
12601             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12602           CLASSTYPE_REPEATED_BASE_P (ref)
12603             |= CLASSTYPE_REPEATED_BASE_P (basetype);
12604         }
12605
12606       /* We must do this test after we've seen through a typedef
12607          type.  */
12608       if (TYPE_MARKED_P (basetype))
12609         {
12610           if (basetype == ref)
12611             error ("recursive type %qT undefined", basetype);
12612           else
12613             error ("duplicate base type %qT invalid", basetype);
12614           return false;
12615         }
12616
12617       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12618         /* Regenerate the pack expansion for the bases. */
12619         basetype = make_pack_expansion (basetype);
12620
12621       TYPE_MARKED_P (basetype) = 1;
12622
12623       base_binfo = copy_binfo (base_binfo, basetype, ref,
12624                                &igo_prev, via_virtual);
12625       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12626         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12627
12628       BINFO_BASE_APPEND (binfo, base_binfo);
12629       BINFO_BASE_ACCESS_APPEND (binfo, access);
12630     }
12631
12632   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12633     /* If we didn't get max_vbases vbases, we must have shared at
12634        least one of them, and are therefore diamond shaped.  */
12635     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12636
12637   /* Unmark all the types.  */
12638   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12639     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12640   TYPE_MARKED_P (ref) = 0;
12641
12642   /* Now see if we have a repeated base type.  */
12643   if (!CLASSTYPE_REPEATED_BASE_P (ref))
12644     {
12645       for (base_binfo = binfo; base_binfo;
12646            base_binfo = TREE_CHAIN (base_binfo))
12647         {
12648           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12649             {
12650               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12651               break;
12652             }
12653           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12654         }
12655       for (base_binfo = binfo; base_binfo;
12656            base_binfo = TREE_CHAIN (base_binfo))
12657         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12658           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12659         else
12660           break;
12661     }
12662
12663   return true;
12664 }
12665
12666 \f
12667 /* Copies the enum-related properties from type SRC to type DST.
12668    Used with the underlying type of an enum and the enum itself.  */
12669 static void
12670 copy_type_enum (tree dst, tree src)
12671 {
12672   tree t;
12673   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12674     {
12675       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12676       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12677       TYPE_SIZE (t) = TYPE_SIZE (src);
12678       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12679       SET_TYPE_MODE (dst, TYPE_MODE (src));
12680       TYPE_PRECISION (t) = TYPE_PRECISION (src);
12681       TYPE_ALIGN (t) = TYPE_ALIGN (src);
12682       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12683       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12684     }
12685 }
12686
12687 /* Begin compiling the definition of an enumeration type.
12688    NAME is its name, 
12689
12690    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12691
12692    UNDERLYING_TYPE is the type that will be used as the storage for
12693    the enumeration type. This should be NULL_TREE if no storage type
12694    was specified.
12695
12696    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12697
12698    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12699
12700    Returns the type object, as yet incomplete.
12701    Also records info about it so that build_enumerator
12702    may be used to declare the individual values as they are read.  */
12703
12704 tree
12705 start_enum (tree name, tree enumtype, tree underlying_type,
12706             bool scoped_enum_p, bool *is_new)
12707 {
12708   tree prevtype = NULL_TREE;
12709   gcc_assert (identifier_p (name));
12710
12711   if (is_new)
12712     *is_new = false;
12713   /* [C++0x dcl.enum]p5:
12714
12715     If not explicitly specified, the underlying type of a scoped
12716     enumeration type is int.  */
12717   if (!underlying_type && scoped_enum_p)
12718     underlying_type = integer_type_node;
12719
12720   if (underlying_type)
12721     underlying_type = cv_unqualified (underlying_type);
12722
12723   /* If this is the real definition for a previous forward reference,
12724      fill in the contents in the same object that used to be the
12725      forward reference.  */
12726   if (!enumtype)
12727     enumtype = lookup_and_check_tag (enum_type, name,
12728                                      /*tag_scope=*/ts_current,
12729                                      /*template_header_p=*/false);
12730
12731   /* In case of a template_decl, the only check that should be deferred
12732      to instantiation time is the comparison of underlying types.  */
12733   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12734     {
12735       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12736         {
12737           error_at (input_location, "scoped/unscoped mismatch "
12738                     "in enum %q#T", enumtype);
12739           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12740                     "previous definition here");
12741           enumtype = error_mark_node;
12742         }
12743       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12744         {
12745           error_at (input_location, "underlying type mismatch "
12746                     "in enum %q#T", enumtype);
12747           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12748                     "previous definition here");
12749           enumtype = error_mark_node;
12750         }
12751       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12752                && !dependent_type_p (underlying_type)
12753                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12754                && !same_type_p (underlying_type,
12755                                 ENUM_UNDERLYING_TYPE (enumtype)))
12756         {
12757           error_at (input_location, "different underlying type "
12758                     "in enum %q#T", enumtype);
12759           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12760                     "previous definition here");
12761           underlying_type = NULL_TREE;
12762         }
12763     }
12764
12765   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12766       || processing_template_decl)
12767     {
12768       /* In case of error, make a dummy enum to allow parsing to
12769          continue.  */
12770       if (enumtype == error_mark_node)
12771         {
12772           name = make_anon_name ();
12773           enumtype = NULL_TREE;
12774         }
12775
12776       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12777          of an opaque enum, or an opaque enum of an already defined
12778          enumeration (C++0x only).
12779          In any other case, it'll be NULL_TREE. */
12780       if (!enumtype)
12781         {
12782           if (is_new)
12783             *is_new = true;
12784         }
12785       prevtype = enumtype;
12786
12787       /* Do not push the decl more than once, unless we need to
12788          compare underlying types at instantiation time */
12789       if (!enumtype
12790           || TREE_CODE (enumtype) != ENUMERAL_TYPE
12791           || (underlying_type
12792               && dependent_type_p (underlying_type))
12793           || (ENUM_UNDERLYING_TYPE (enumtype)
12794               && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12795         {
12796           enumtype = cxx_make_type (ENUMERAL_TYPE);
12797           enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12798         }
12799       else
12800           enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12801                                false);
12802
12803       if (enumtype == error_mark_node)
12804         return error_mark_node;
12805
12806       /* The enum is considered opaque until the opening '{' of the
12807          enumerator list.  */
12808       SET_OPAQUE_ENUM_P (enumtype, true);
12809       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12810     }
12811
12812   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12813
12814   if (underlying_type)
12815     {
12816       if (CP_INTEGRAL_TYPE_P (underlying_type))
12817         {
12818           copy_type_enum (enumtype, underlying_type);
12819           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12820         }
12821       else if (dependent_type_p (underlying_type))
12822         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12823       else
12824         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
12825                underlying_type, enumtype);
12826     }
12827
12828   /* If into a template class, the returned enum is always the first
12829      declaration (opaque or not) seen. This way all the references to
12830      this type will be to the same declaration. The following ones are used
12831      only to check for definition errors.  */
12832   if (prevtype && processing_template_decl)
12833     return prevtype;
12834   else
12835     return enumtype;
12836 }
12837
12838 /* After processing and defining all the values of an enumeration type,
12839    install their decls in the enumeration type.
12840    ENUMTYPE is the type object.  */
12841
12842 void
12843 finish_enum_value_list (tree enumtype)
12844 {
12845   tree values;
12846   tree underlying_type;
12847   tree decl;
12848   tree value;
12849   tree minnode, maxnode;
12850   tree t;
12851
12852   bool fixed_underlying_type_p 
12853     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12854
12855   /* We built up the VALUES in reverse order.  */
12856   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12857
12858   /* For an enum defined in a template, just set the type of the values;
12859      all further processing is postponed until the template is
12860      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12861      works.  */
12862   if (processing_template_decl)
12863     {
12864       for (values = TYPE_VALUES (enumtype);
12865            values;
12866            values = TREE_CHAIN (values))
12867         TREE_TYPE (TREE_VALUE (values)) = enumtype;
12868       return;
12869     }
12870
12871   /* Determine the minimum and maximum values of the enumerators.  */
12872   if (TYPE_VALUES (enumtype))
12873     {
12874       minnode = maxnode = NULL_TREE;
12875
12876       for (values = TYPE_VALUES (enumtype);
12877            values;
12878            values = TREE_CHAIN (values))
12879         {
12880           decl = TREE_VALUE (values);
12881
12882           /* [dcl.enum]: Following the closing brace of an enum-specifier,
12883              each enumerator has the type of its enumeration.  Prior to the
12884              closing brace, the type of each enumerator is the type of its
12885              initializing value.  */
12886           TREE_TYPE (decl) = enumtype;
12887
12888           /* Update the minimum and maximum values, if appropriate.  */
12889           value = DECL_INITIAL (decl);
12890           if (value == error_mark_node)
12891             value = integer_zero_node;
12892           /* Figure out what the minimum and maximum values of the
12893              enumerators are.  */
12894           if (!minnode)
12895             minnode = maxnode = value;
12896           else if (tree_int_cst_lt (maxnode, value))
12897             maxnode = value;
12898           else if (tree_int_cst_lt (value, minnode))
12899             minnode = value;
12900         }
12901     }
12902   else
12903     /* [dcl.enum]
12904
12905        If the enumerator-list is empty, the underlying type is as if
12906        the enumeration had a single enumerator with value 0.  */
12907     minnode = maxnode = integer_zero_node;
12908
12909   if (!fixed_underlying_type_p)
12910     {
12911       /* Compute the number of bits require to represent all values of the
12912          enumeration.  We must do this before the type of MINNODE and
12913          MAXNODE are transformed, since tree_int_cst_min_precision relies
12914          on the TREE_TYPE of the value it is passed.  */
12915       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
12916       int lowprec = tree_int_cst_min_precision (minnode, sgn);
12917       int highprec = tree_int_cst_min_precision (maxnode, sgn);
12918       int precision = MAX (lowprec, highprec);
12919       unsigned int itk;
12920       bool use_short_enum;
12921
12922       /* Determine the underlying type of the enumeration.
12923
12924          [dcl.enum]
12925
12926          The underlying type of an enumeration is an integral type that
12927          can represent all the enumerator values defined in the
12928          enumeration.  It is implementation-defined which integral type is
12929          used as the underlying type for an enumeration except that the
12930          underlying type shall not be larger than int unless the value of
12931          an enumerator cannot fit in an int or unsigned int.
12932
12933          We use "int" or an "unsigned int" as the underlying type, even if
12934          a smaller integral type would work, unless the user has
12935          explicitly requested that we use the smallest possible type.  The
12936          user can request that for all enumerations with a command line
12937          flag, or for just one enumeration with an attribute.  */
12938
12939       use_short_enum = flag_short_enums
12940         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12941
12942       for (itk = (use_short_enum ? itk_char : itk_int);
12943            itk != itk_none;
12944            itk++)
12945         {
12946           underlying_type = integer_types[itk];
12947           if (underlying_type != NULL_TREE
12948               && TYPE_PRECISION (underlying_type) >= precision
12949               && TYPE_SIGN (underlying_type) == sgn)
12950             break;
12951         }
12952       if (itk == itk_none)
12953         {
12954           /* DR 377
12955
12956              IF no integral type can represent all the enumerator values, the
12957              enumeration is ill-formed.  */
12958           error ("no integral type can represent all of the enumerator values "
12959                  "for %qT", enumtype);
12960           precision = TYPE_PRECISION (long_long_integer_type_node);
12961           underlying_type = integer_types[itk_unsigned_long_long];
12962         }
12963
12964       /* [dcl.enum]
12965
12966          The value of sizeof() applied to an enumeration type, an object
12967          of an enumeration type, or an enumerator, is the value of sizeof()
12968          applied to the underlying type.  */
12969       copy_type_enum (enumtype, underlying_type);
12970
12971       /* Compute the minimum and maximum values for the type.
12972
12973          [dcl.enum]
12974
12975          For an enumeration where emin is the smallest enumerator and emax
12976          is the largest, the values of the enumeration are the values of the
12977          underlying type in the range bmin to bmax, where bmin and bmax are,
12978          respectively, the smallest and largest values of the smallest bit-
12979          field that can store emin and emax.  */
12980
12981       /* The middle-end currently assumes that types with TYPE_PRECISION
12982          narrower than their underlying type are suitably zero or sign
12983          extended to fill their mode.  Similarly, it assumes that the front
12984          end assures that a value of a particular type must be within
12985          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12986
12987          We used to set these fields based on bmin and bmax, but that led
12988          to invalid assumptions like optimizing away bounds checking.  So
12989          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12990          TYPE_MAX_VALUE to the values for the mode above and only restrict
12991          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12992       ENUM_UNDERLYING_TYPE (enumtype)
12993         = build_distinct_type_copy (underlying_type);
12994       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12995       set_min_and_max_values_for_integral_type
12996         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
12997
12998       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12999       if (flag_strict_enums)
13000         set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
13001     }
13002   else
13003     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
13004
13005   /* Convert each of the enumerators to the type of the underlying
13006      type of the enumeration.  */
13007   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13008     {
13009       location_t saved_location;
13010
13011       decl = TREE_VALUE (values);
13012       saved_location = input_location;
13013       input_location = DECL_SOURCE_LOCATION (decl);
13014       if (fixed_underlying_type_p)
13015         /* If the enumeration type has a fixed underlying type, we
13016            already checked all of the enumerator values.  */
13017         value = DECL_INITIAL (decl);
13018       else
13019         value = perform_implicit_conversion (underlying_type,
13020                                              DECL_INITIAL (decl),
13021                                              tf_warning_or_error);
13022       input_location = saved_location;
13023
13024       /* Do not clobber shared ints.  */
13025       value = copy_node (value);
13026
13027       TREE_TYPE (value) = enumtype;
13028       DECL_INITIAL (decl) = value;
13029     }
13030
13031   /* Fix up all variant types of this enum type.  */
13032   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13033     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13034
13035   if (at_class_scope_p ()
13036       && COMPLETE_TYPE_P (current_class_type)
13037       && UNSCOPED_ENUM_P (enumtype))
13038     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
13039                                                        current_class_type);
13040
13041   /* Finish debugging output for this type.  */
13042   rest_of_type_compilation (enumtype, namespace_bindings_p ());
13043 }
13044
13045 /* Finishes the enum type. This is called only the first time an
13046    enumeration is seen, be it opaque or odinary.
13047    ENUMTYPE is the type object.  */
13048
13049 void
13050 finish_enum (tree enumtype)
13051 {
13052   if (processing_template_decl)
13053     {
13054       if (at_function_scope_p ())
13055         add_stmt (build_min (TAG_DEFN, enumtype));
13056       return;
13057     }
13058
13059   /* If this is a forward declaration, there should not be any variants,
13060      though we can get a variant in the middle of an enum-specifier with
13061      wacky code like 'enum E { e = sizeof(const E*) };'  */
13062   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
13063               && (TYPE_VALUES (enumtype)
13064                   || !TYPE_NEXT_VARIANT (enumtype)));
13065 }
13066
13067 /* Build and install a CONST_DECL for an enumeration constant of the
13068    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13069    LOC is the location of NAME.
13070    Assignment of sequential values by default is handled here.  */
13071
13072 void
13073 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
13074 {
13075   tree decl;
13076   tree context;
13077   tree type;
13078
13079   /* scalar_constant_value will pull out this expression, so make sure
13080      it's folded as appropriate.  */
13081   if (processing_template_decl)
13082     value = fold_non_dependent_expr (value);
13083
13084   /* If the VALUE was erroneous, pretend it wasn't there; that will
13085      result in the enum being assigned the next value in sequence.  */
13086   if (value == error_mark_node)
13087     value = NULL_TREE;
13088
13089   /* Remove no-op casts from the value.  */
13090   if (value)
13091     STRIP_TYPE_NOPS (value);
13092
13093   if (! processing_template_decl)
13094     {
13095       /* Validate and default VALUE.  */
13096       if (value != NULL_TREE)
13097         {
13098           if (!ENUM_UNDERLYING_TYPE (enumtype))
13099             {
13100               tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
13101                                                            value, true);
13102               if (tmp_value)
13103                 value = tmp_value;
13104             }
13105           else if (! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13106             value = perform_implicit_conversion_flags
13107               (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
13108                LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
13109
13110           if (value == error_mark_node)
13111             value = NULL_TREE;
13112
13113           if (value != NULL_TREE)
13114             {
13115               value = cxx_constant_value (value);
13116
13117               if (TREE_CODE (value) != INTEGER_CST
13118                   || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13119                 {
13120                   error ("enumerator value for %qD is not an integer constant",
13121                          name);
13122                   value = NULL_TREE;
13123                 }
13124             }
13125         }
13126
13127       /* Default based on previous value.  */
13128       if (value == NULL_TREE)
13129         {
13130           if (TYPE_VALUES (enumtype))
13131             {
13132               tree prev_value;
13133               bool overflowed;
13134
13135               /* C++03 7.2/4: If no initializer is specified for the first
13136                  enumerator, the type is an unspecified integral
13137                  type. Otherwise the type is the same as the type of the
13138                  initializing value of the preceding enumerator unless the
13139                  incremented value is not representable in that type, in
13140                  which case the type is an unspecified integral type
13141                  sufficient to contain the incremented value.  */
13142               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13143               if (error_operand_p (prev_value))
13144                 value = error_mark_node;
13145               else
13146                 {
13147                   tree type = TREE_TYPE (prev_value);
13148                   signop sgn = TYPE_SIGN (type);
13149                   widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
13150                                            &overflowed);
13151                   if (!overflowed)
13152                     {
13153                       bool pos = !wi::neg_p (wi, sgn);
13154                       if (!wi::fits_to_tree_p (wi, type))
13155                         {
13156                           unsigned int itk;
13157                           for (itk = itk_int; itk != itk_none; itk++)
13158                             {
13159                               type = integer_types[itk];
13160                               if (type != NULL_TREE
13161                                   && (pos || !TYPE_UNSIGNED (type))
13162                                   && wi::fits_to_tree_p (wi, type))
13163                                 break;
13164                             }
13165                           if (type && cxx_dialect < cxx11
13166                               && itk > itk_unsigned_long)
13167                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
13168 incremented enumerator value is too large for %<unsigned long%>" :  "\
13169 incremented enumerator value is too large for %<long%>");
13170                         }
13171                       if (type == NULL_TREE)
13172                         overflowed = true;
13173                       else
13174                         value = wide_int_to_tree (type, wi);
13175                     }
13176
13177                   if (overflowed)
13178                     {
13179                       error ("overflow in enumeration values at %qD", name);
13180                       value = error_mark_node;
13181                     }
13182                 }
13183             }
13184           else
13185             value = integer_zero_node;
13186         }
13187
13188       /* Remove no-op casts from the value.  */
13189       STRIP_TYPE_NOPS (value);
13190
13191       /* If the underlying type of the enum is fixed, check whether
13192          the enumerator values fits in the underlying type.  If it
13193          does not fit, the program is ill-formed [C++0x dcl.enum].  */
13194       if (ENUM_UNDERLYING_TYPE (enumtype)
13195           && value
13196           && TREE_CODE (value) == INTEGER_CST)
13197         {
13198           if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13199             error ("enumerator value %E is outside the range of underlying "
13200                    "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13201
13202           /* Convert the value to the appropriate type.  */
13203           value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13204         }
13205     }
13206
13207   /* C++ associates enums with global, function, or class declarations.  */
13208   context = current_scope ();
13209
13210   /* Build the actual enumeration constant.  Note that the enumeration
13211      constants have the underlying type of the enum (if it is fixed)
13212      or the type of their initializer (if the underlying type of the
13213      enum is not fixed):
13214
13215       [ C++0x dcl.enum ]
13216
13217         If the underlying type is fixed, the type of each enumerator
13218         prior to the closing brace is the underlying type; if the
13219         initializing value of an enumerator cannot be represented by
13220         the underlying type, the program is ill-formed. If the
13221         underlying type is not fixed, the type of each enumerator is
13222         the type of its initializing value.
13223
13224     If the underlying type is not fixed, it will be computed by
13225     finish_enum and we will reset the type of this enumerator.  Of
13226     course, if we're processing a template, there may be no value.  */
13227   type = value ? TREE_TYPE (value) : NULL_TREE;
13228
13229   decl = build_decl (loc, CONST_DECL, name, type);
13230   
13231   DECL_CONTEXT (decl) = enumtype;
13232   TREE_CONSTANT (decl) = 1;
13233   TREE_READONLY (decl) = 1;
13234   DECL_INITIAL (decl) = value;
13235
13236   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13237     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13238        on the TYPE_FIELDS list for `S'.  (That's so that you can say
13239        things like `S::i' later.)  */
13240     finish_member_declaration (decl);
13241   else
13242     pushdecl (decl);
13243
13244   /* Add this enumeration constant to the list for this type.  */
13245   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13246 }
13247
13248 /* Look for an enumerator with the given NAME within the enumeration
13249    type ENUMTYPE.  This routine is used primarily for qualified name
13250    lookup into an enumerator in C++0x, e.g.,
13251
13252      enum class Color { Red, Green, Blue };
13253
13254      Color color = Color::Red;
13255
13256    Returns the value corresponding to the enumerator, or
13257    NULL_TREE if no such enumerator was found.  */
13258 tree
13259 lookup_enumerator (tree enumtype, tree name)
13260 {
13261   tree e;
13262   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13263
13264   e = purpose_member (name, TYPE_VALUES (enumtype));
13265   return e? TREE_VALUE (e) : NULL_TREE;
13266 }
13267
13268 \f
13269 /* We're defining DECL.  Make sure that its type is OK.  */
13270
13271 static void
13272 check_function_type (tree decl, tree current_function_parms)
13273 {
13274   tree fntype = TREE_TYPE (decl);
13275   tree return_type = complete_type (TREE_TYPE (fntype));
13276
13277   /* In a function definition, arg types must be complete.  */
13278   require_complete_types_for_parms (current_function_parms);
13279
13280   if (dependent_type_p (return_type)
13281       || type_uses_auto (return_type))
13282     return;
13283   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13284       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13285     {
13286       tree args = TYPE_ARG_TYPES (fntype);
13287
13288       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13289         error ("return type %q#T is incomplete", return_type);
13290       else
13291         error ("return type has Java class type %q#T", return_type);
13292
13293       /* Make it return void instead.  */
13294       if (TREE_CODE (fntype) == METHOD_TYPE)
13295         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13296                                              void_type_node,
13297                                              TREE_CHAIN (args));
13298       else
13299         fntype = build_function_type (void_type_node, args);
13300       fntype
13301         = build_exception_variant (fntype,
13302                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13303       fntype = (cp_build_type_attribute_variant
13304                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13305       TREE_TYPE (decl) = fntype;
13306     }
13307   else
13308     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13309 }
13310
13311 /* Create the FUNCTION_DECL for a function definition.
13312    DECLSPECS and DECLARATOR are the parts of the declaration;
13313    they describe the function's name and the type it returns,
13314    but twisted together in a fashion that parallels the syntax of C.
13315
13316    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13317    DECLARATOR is really the DECL for the function we are about to
13318    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13319    indicating that the function is an inline defined in-class.
13320
13321    This function creates a binding context for the function body
13322    as well as setting up the FUNCTION_DECL in current_function_decl.
13323
13324    For C++, we must first check whether that datum makes any sense.
13325    For example, "class A local_a(1,2);" means that variable local_a
13326    is an aggregate of type A, which should have a constructor
13327    applied to it with the argument list [1, 2].
13328
13329    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13330    or may be a BLOCK if the function has been defined previously
13331    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
13332    error_mark_node if the function has never been defined, or
13333    a BLOCK if the function has been defined somewhere.  */
13334
13335 bool
13336 start_preparsed_function (tree decl1, tree attrs, int flags)
13337 {
13338   tree ctype = NULL_TREE;
13339   tree fntype;
13340   tree restype;
13341   int doing_friend = 0;
13342   cp_binding_level *bl;
13343   tree current_function_parms;
13344   struct c_fileinfo *finfo
13345     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13346   bool honor_interface;
13347
13348   /* Sanity check.  */
13349   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13350   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13351
13352   fntype = TREE_TYPE (decl1);
13353   if (TREE_CODE (fntype) == METHOD_TYPE)
13354     ctype = TYPE_METHOD_BASETYPE (fntype);
13355
13356   /* ISO C++ 11.4/5.  A friend function defined in a class is in
13357      the (lexical) scope of the class in which it is defined.  */
13358   if (!ctype && DECL_FRIEND_P (decl1))
13359     {
13360       ctype = DECL_FRIEND_CONTEXT (decl1);
13361
13362       /* CTYPE could be null here if we're dealing with a template;
13363          for example, `inline friend float foo()' inside a template
13364          will have no CTYPE set.  */
13365       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13366         ctype = NULL_TREE;
13367       else
13368         doing_friend = 1;
13369     }
13370
13371   if (DECL_DECLARED_INLINE_P (decl1)
13372       && lookup_attribute ("noinline", attrs))
13373     warning (0, "inline function %q+D given attribute noinline", decl1);
13374
13375   /* Handle gnu_inline attribute.  */
13376   if (GNU_INLINE_P (decl1))
13377     {
13378       DECL_EXTERNAL (decl1) = 1;
13379       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13380       DECL_INTERFACE_KNOWN (decl1) = 1;
13381       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13382     }
13383
13384   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13385     /* This is a constructor, we must ensure that any default args
13386        introduced by this definition are propagated to the clones
13387        now. The clones are used directly in overload resolution.  */
13388     adjust_clone_args (decl1);
13389
13390   /* Sometimes we don't notice that a function is a static member, and
13391      build a METHOD_TYPE for it.  Fix that up now.  */
13392   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13393                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13394
13395   /* Set up current_class_type, and enter the scope of the class, if
13396      appropriate.  */
13397   if (ctype)
13398     push_nested_class (ctype);
13399   else if (DECL_STATIC_FUNCTION_P (decl1))
13400     push_nested_class (DECL_CONTEXT (decl1));
13401
13402   /* Now that we have entered the scope of the class, we must restore
13403      the bindings for any template parameters surrounding DECL1, if it
13404      is an inline member template.  (Order is important; consider the
13405      case where a template parameter has the same name as a field of
13406      the class.)  It is not until after this point that
13407      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13408   if (flags & SF_INCLASS_INLINE)
13409     maybe_begin_member_template_processing (decl1);
13410
13411   /* Effective C++ rule 15.  */
13412   if (warn_ecpp
13413       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13414       && VOID_TYPE_P (TREE_TYPE (fntype)))
13415     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13416
13417   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13418      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13419   if (!DECL_INITIAL (decl1))
13420     DECL_INITIAL (decl1) = error_mark_node;
13421
13422   /* This function exists in static storage.
13423      (This does not mean `static' in the C sense!)  */
13424   TREE_STATIC (decl1) = 1;
13425
13426   /* We must call push_template_decl after current_class_type is set
13427      up.  (If we are processing inline definitions after exiting a
13428      class scope, current_class_type will be NULL_TREE until set above
13429      by push_nested_class.)  */
13430   if (processing_template_decl)
13431     {
13432       tree newdecl1 = push_template_decl (decl1);
13433       if (newdecl1 == error_mark_node)
13434         {
13435           if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13436             pop_nested_class ();
13437           return false;
13438         }
13439       decl1 = newdecl1;
13440     }
13441
13442   /* We are now in the scope of the function being defined.  */
13443   current_function_decl = decl1;
13444
13445   /* Save the parm names or decls from this function's declarator
13446      where store_parm_decls will find them.  */
13447   current_function_parms = DECL_ARGUMENTS (decl1);
13448
13449   /* Make sure the parameter and return types are reasonable.  When
13450      you declare a function, these types can be incomplete, but they
13451      must be complete when you define the function.  */
13452   check_function_type (decl1, current_function_parms);
13453
13454   /* Build the return declaration for the function.  */
13455   restype = TREE_TYPE (fntype);
13456
13457   if (DECL_RESULT (decl1) == NULL_TREE)
13458     {
13459       tree resdecl;
13460
13461       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13462       DECL_ARTIFICIAL (resdecl) = 1;
13463       DECL_IGNORED_P (resdecl) = 1;
13464       DECL_RESULT (decl1) = resdecl;
13465
13466       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13467     }
13468
13469   /* Let the user know we're compiling this function.  */
13470   announce_function (decl1);
13471
13472   /* Record the decl so that the function name is defined.
13473      If we already have a decl for this name, and it is a FUNCTION_DECL,
13474      use the old decl.  */
13475   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13476     {
13477       /* A specialization is not used to guide overload resolution.  */
13478       if (!DECL_FUNCTION_MEMBER_P (decl1)
13479           && !(DECL_USE_TEMPLATE (decl1) &&
13480                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13481         {
13482           tree olddecl = pushdecl (decl1);
13483
13484           if (olddecl == error_mark_node)
13485             /* If something went wrong when registering the declaration,
13486                use DECL1; we have to have a FUNCTION_DECL to use when
13487                parsing the body of the function.  */
13488             ;
13489           else
13490             {
13491               /* Otherwise, OLDDECL is either a previous declaration
13492                  of the same function or DECL1 itself.  */
13493
13494               if (warn_missing_declarations
13495                   && olddecl == decl1
13496                   && !DECL_MAIN_P (decl1)
13497                   && TREE_PUBLIC (decl1)
13498                   && !DECL_DECLARED_INLINE_P (decl1))
13499                 {
13500                   tree context;
13501
13502                   /* Check whether DECL1 is in an anonymous
13503                      namespace.  */
13504                   for (context = DECL_CONTEXT (decl1);
13505                        context;
13506                        context = DECL_CONTEXT (context))
13507                     {
13508                       if (TREE_CODE (context) == NAMESPACE_DECL
13509                           && DECL_NAME (context) == NULL_TREE)
13510                         break;
13511                     }
13512
13513                   if (context == NULL)
13514                     warning (OPT_Wmissing_declarations,
13515                              "no previous declaration for %q+D", decl1);
13516                 }
13517
13518               decl1 = olddecl;
13519             }
13520         }
13521       else
13522         {
13523           /* We need to set the DECL_CONTEXT.  */
13524           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13525             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13526         }
13527       fntype = TREE_TYPE (decl1);
13528       restype = TREE_TYPE (fntype);
13529
13530       /* If #pragma weak applies, mark the decl appropriately now.
13531          The pragma only applies to global functions.  Because
13532          determining whether or not the #pragma applies involves
13533          computing the mangled name for the declaration, we cannot
13534          apply the pragma until after we have merged this declaration
13535          with any previous declarations; if the original declaration
13536          has a linkage specification, that specification applies to
13537          the definition as well, and may affect the mangled name.  */
13538       if (DECL_FILE_SCOPE_P (decl1))
13539         maybe_apply_pragma_weak (decl1);
13540     }
13541
13542   /* Reset this in case the call to pushdecl changed it.  */
13543   current_function_decl = decl1;
13544
13545   gcc_assert (DECL_INITIAL (decl1));
13546
13547   /* This function may already have been parsed, in which case just
13548      return; our caller will skip over the body without parsing.  */
13549   if (DECL_INITIAL (decl1) != error_mark_node)
13550     return true;
13551
13552   /* Initialize RTL machinery.  We cannot do this until
13553      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
13554      even when processing a template; this is how we get
13555      CFUN set up, and our per-function variables initialized.
13556      FIXME factor out the non-RTL stuff.  */
13557   bl = current_binding_level;
13558   allocate_struct_function (decl1, processing_template_decl);
13559
13560   /* Initialize the language data structures.  Whenever we start
13561      a new function, we destroy temporaries in the usual way.  */
13562   cfun->language = ggc_cleared_alloc<language_function> ();
13563   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13564   current_binding_level = bl;
13565
13566   if (!processing_template_decl && type_uses_auto (restype))
13567     {
13568       FNDECL_USED_AUTO (decl1) = true;
13569       current_function_auto_return_pattern = restype;
13570     }
13571
13572   /* Start the statement-tree, start the tree now.  */
13573   DECL_SAVED_TREE (decl1) = push_stmt_list ();
13574
13575   /* If we are (erroneously) defining a function that we have already
13576      defined before, wipe out what we knew before.  */
13577   if (!DECL_PENDING_INLINE_P (decl1))
13578     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13579
13580   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13581     {
13582       /* We know that this was set up by `grokclassfn'.  We do not
13583          wait until `store_parm_decls', since evil parse errors may
13584          never get us to that point.  Here we keep the consistency
13585          between `current_class_type' and `current_class_ptr'.  */
13586       tree t = DECL_ARGUMENTS (decl1);
13587
13588       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13589       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13590
13591       cp_function_chain->x_current_class_ref
13592         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13593       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
13594       cp_function_chain->x_current_class_ptr = t;
13595
13596       /* Constructors and destructors need to know whether they're "in
13597          charge" of initializing virtual base classes.  */
13598       t = DECL_CHAIN (t);
13599       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13600         {
13601           current_in_charge_parm = t;
13602           t = DECL_CHAIN (t);
13603         }
13604       if (DECL_HAS_VTT_PARM_P (decl1))
13605         {
13606           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13607           current_vtt_parm = t;
13608         }
13609     }
13610
13611   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13612                      /* Implicitly-defined methods (like the
13613                         destructor for a class in which no destructor
13614                         is explicitly declared) must not be defined
13615                         until their definition is needed.  So, we
13616                         ignore interface specifications for
13617                         compiler-generated functions.  */
13618                      && !DECL_ARTIFICIAL (decl1));
13619
13620   if (processing_template_decl)
13621     /* Don't mess with interface flags.  */;
13622   else if (DECL_INTERFACE_KNOWN (decl1))
13623     {
13624       tree ctx = decl_function_context (decl1);
13625
13626       if (DECL_NOT_REALLY_EXTERN (decl1))
13627         DECL_EXTERNAL (decl1) = 0;
13628
13629       if (ctx != NULL_TREE && vague_linkage_p (ctx))
13630         /* This is a function in a local class in an extern inline
13631            or template function.  */
13632         comdat_linkage (decl1);
13633     }
13634   /* If this function belongs to an interface, it is public.
13635      If it belongs to someone else's interface, it is also external.
13636      This only affects inlines and template instantiations.  */
13637   else if (!finfo->interface_unknown && honor_interface)
13638     {
13639       if (DECL_DECLARED_INLINE_P (decl1)
13640           || DECL_TEMPLATE_INSTANTIATION (decl1))
13641         {
13642           DECL_EXTERNAL (decl1)
13643             = (finfo->interface_only
13644                || (DECL_DECLARED_INLINE_P (decl1)
13645                    && ! flag_implement_inlines
13646                    && !DECL_VINDEX (decl1)));
13647
13648           /* For WIN32 we also want to put these in linkonce sections.  */
13649           maybe_make_one_only (decl1);
13650         }
13651       else
13652         DECL_EXTERNAL (decl1) = 0;
13653       DECL_INTERFACE_KNOWN (decl1) = 1;
13654       /* If this function is in an interface implemented in this file,
13655          make sure that the back end knows to emit this function
13656          here.  */
13657       if (!DECL_EXTERNAL (decl1))
13658         mark_needed (decl1);
13659     }
13660   else if (finfo->interface_unknown && finfo->interface_only
13661            && honor_interface)
13662     {
13663       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13664          interface, we will have both finfo->interface_unknown and
13665          finfo->interface_only set.  In that case, we don't want to
13666          use the normal heuristics because someone will supply a
13667          #pragma implementation elsewhere, and deducing it here would
13668          produce a conflict.  */
13669       comdat_linkage (decl1);
13670       DECL_EXTERNAL (decl1) = 0;
13671       DECL_INTERFACE_KNOWN (decl1) = 1;
13672       DECL_DEFER_OUTPUT (decl1) = 1;
13673     }
13674   else
13675     {
13676       /* This is a definition, not a reference.
13677          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
13678       if (!GNU_INLINE_P (decl1))
13679         DECL_EXTERNAL (decl1) = 0;
13680
13681       if ((DECL_DECLARED_INLINE_P (decl1)
13682            || DECL_TEMPLATE_INSTANTIATION (decl1))
13683           && ! DECL_INTERFACE_KNOWN (decl1))
13684         DECL_DEFER_OUTPUT (decl1) = 1;
13685       else
13686         DECL_INTERFACE_KNOWN (decl1) = 1;
13687     }
13688
13689   /* Determine the ELF visibility attribute for the function.  We must not
13690      do this before calling "pushdecl", as we must allow "duplicate_decls"
13691      to merge any attributes appropriately.  We also need to wait until
13692      linkage is set.  */
13693   if (!DECL_CLONED_FUNCTION_P (decl1))
13694     determine_visibility (decl1);
13695
13696   if (!processing_template_decl)
13697     maybe_instantiate_noexcept (decl1);
13698
13699   begin_scope (sk_function_parms, decl1);
13700
13701   ++function_depth;
13702
13703   if (DECL_DESTRUCTOR_P (decl1)
13704       || (DECL_CONSTRUCTOR_P (decl1)
13705           && targetm.cxx.cdtor_returns_this ()))
13706     {
13707       cdtor_label = create_artificial_label (input_location);
13708     }
13709
13710   start_fname_decls ();
13711
13712   store_parm_decls (current_function_parms);
13713
13714   return true;
13715 }
13716
13717
13718 /* Like start_preparsed_function, except that instead of a
13719    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13720
13721    Returns true on success.  If the DECLARATOR is not suitable
13722    for a function, we return false, which tells the parser to
13723    skip the entire function.  */
13724
13725 bool
13726 start_function (cp_decl_specifier_seq *declspecs,
13727                 const cp_declarator *declarator,
13728                 tree attrs)
13729 {
13730   tree decl1;
13731
13732   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13733   if (decl1 == error_mark_node)
13734     return false;
13735   /* If the declarator is not suitable for a function definition,
13736      cause a syntax error.  */
13737   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13738     {
13739       error ("invalid function declaration");
13740       return false;
13741     }
13742
13743   if (DECL_MAIN_P (decl1))
13744     /* main must return int.  grokfndecl should have corrected it
13745        (and issued a diagnostic) if the user got it wrong.  */
13746     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13747                              integer_type_node));
13748
13749   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13750 }
13751 \f
13752 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13753    FN.  */
13754
13755 static bool
13756 use_eh_spec_block (tree fn)
13757 {
13758   return (flag_exceptions && flag_enforce_eh_specs
13759           && !processing_template_decl
13760           && !type_throw_all_p (TREE_TYPE (fn))
13761           /* We insert the EH_SPEC_BLOCK only in the original
13762              function; then, it is copied automatically to the
13763              clones.  */
13764           && !DECL_CLONED_FUNCTION_P (fn)
13765           /* Implicitly-generated constructors and destructors have
13766              exception specifications.  However, those specifications
13767              are the union of the possible exceptions specified by the
13768              constructors/destructors for bases and members, so no
13769              unallowed exception will ever reach this function.  By
13770              not creating the EH_SPEC_BLOCK we save a little memory,
13771              and we avoid spurious warnings about unreachable
13772              code.  */
13773           && !DECL_DEFAULTED_FN (fn));
13774 }
13775
13776 /* Store the parameter declarations into the current function declaration.
13777    This is called after parsing the parameter declarations, before
13778    digesting the body of the function.
13779
13780    Also install to binding contour return value identifier, if any.  */
13781
13782 static void
13783 store_parm_decls (tree current_function_parms)
13784 {
13785   tree fndecl = current_function_decl;
13786   tree parm;
13787
13788   /* This is a chain of any other decls that came in among the parm
13789      declarations.  If a parm is declared with  enum {foo, bar} x;
13790      then CONST_DECLs for foo and bar are put here.  */
13791   tree nonparms = NULL_TREE;
13792
13793   if (current_function_parms)
13794     {
13795       /* This case is when the function was defined with an ANSI prototype.
13796          The parms already have decls, so we need not do anything here
13797          except record them as in effect
13798          and complain if any redundant old-style parm decls were written.  */
13799
13800       tree specparms = current_function_parms;
13801       tree next;
13802
13803       /* Must clear this because it might contain TYPE_DECLs declared
13804              at class level.  */
13805       current_binding_level->names = NULL;
13806
13807       /* If we're doing semantic analysis, then we'll call pushdecl
13808              for each of these.  We must do them in reverse order so that
13809              they end in the correct forward order.  */
13810       specparms = nreverse (specparms);
13811
13812       for (parm = specparms; parm; parm = next)
13813         {
13814           next = DECL_CHAIN (parm);
13815           if (TREE_CODE (parm) == PARM_DECL)
13816             {
13817               if (DECL_NAME (parm) == NULL_TREE
13818                   || !VOID_TYPE_P (parm))
13819                 pushdecl (parm);
13820               else
13821                 error ("parameter %qD declared void", parm);
13822             }
13823           else
13824             {
13825               /* If we find an enum constant or a type tag,
13826                  put it aside for the moment.  */
13827               TREE_CHAIN (parm) = NULL_TREE;
13828               nonparms = chainon (nonparms, parm);
13829             }
13830         }
13831
13832       /* Get the decls in their original chain order and record in the
13833          function.  This is all and only the PARM_DECLs that were
13834          pushed into scope by the loop above.  */
13835       DECL_ARGUMENTS (fndecl) = getdecls ();
13836     }
13837   else
13838     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13839
13840   /* Now store the final chain of decls for the arguments
13841      as the decl-chain of the current lexical scope.
13842      Put the enumerators in as well, at the front so that
13843      DECL_ARGUMENTS is not modified.  */
13844   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13845
13846   if (use_eh_spec_block (current_function_decl))
13847     current_eh_spec_block = begin_eh_spec_block ();
13848 }
13849
13850 \f
13851 /* We have finished doing semantic analysis on DECL, but have not yet
13852    generated RTL for its body.  Save away our current state, so that
13853    when we want to generate RTL later we know what to do.  */
13854
13855 static void
13856 save_function_data (tree decl)
13857 {
13858   struct language_function *f;
13859
13860   /* Save the language-specific per-function data so that we can
13861      get it back when we really expand this function.  */
13862   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13863
13864   /* Make a copy.  */
13865   f = ggc_alloc<language_function> ();
13866   memcpy (f, cp_function_chain, sizeof (struct language_function));
13867   DECL_SAVED_FUNCTION_DATA (decl) = f;
13868
13869   /* Clear out the bits we don't need.  */
13870   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13871   f->bindings = NULL;
13872   f->x_local_names = NULL;
13873   f->base.local_typedefs = NULL;
13874 }
13875
13876
13877 /* Set the return value of the constructor (if present).  */
13878
13879 static void
13880 finish_constructor_body (void)
13881 {
13882   tree val;
13883   tree exprstmt;
13884
13885   if (targetm.cxx.cdtor_returns_this ()
13886       && (! TYPE_FOR_JAVA (current_class_type)))
13887     {
13888       /* Any return from a constructor will end up here.  */
13889       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13890
13891       val = DECL_ARGUMENTS (current_function_decl);
13892       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13893                     DECL_RESULT (current_function_decl), val);
13894       /* Return the address of the object.  */
13895       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13896       add_stmt (exprstmt);
13897     }
13898 }
13899
13900 /* Do all the processing for the beginning of a destructor; set up the
13901    vtable pointers and cleanups for bases and members.  */
13902
13903 static void
13904 begin_destructor_body (void)
13905 {
13906   tree compound_stmt;
13907
13908   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13909      issued an error message.  We still want to try to process the
13910      body of the function, but initialize_vtbl_ptrs will crash if
13911      TYPE_BINFO is NULL.  */
13912   if (COMPLETE_TYPE_P (current_class_type))
13913     {
13914       compound_stmt = begin_compound_stmt (0);
13915       /* Make all virtual function table pointers in non-virtual base
13916          classes point to CURRENT_CLASS_TYPE's virtual function
13917          tables.  */
13918       initialize_vtbl_ptrs (current_class_ptr);
13919       finish_compound_stmt (compound_stmt);
13920
13921       if (flag_lifetime_dse)
13922         {
13923           /* Insert a cleanup to let the back end know that the object is dead
13924              when we exit the destructor, either normally or via exception.  */
13925           tree btype = CLASSTYPE_AS_BASE (current_class_type);
13926           tree clobber = build_constructor (btype, NULL);
13927           TREE_THIS_VOLATILE (clobber) = true;
13928           tree bref = build_nop (build_reference_type (btype),
13929                                  current_class_ptr);
13930           bref = convert_from_reference (bref);
13931           tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
13932           finish_decl_cleanup (NULL_TREE, exprstmt);
13933         }
13934
13935       /* And insert cleanups for our bases and members so that they
13936          will be properly destroyed if we throw.  */
13937       push_base_cleanups ();
13938     }
13939 }
13940
13941 /* At the end of every destructor we generate code to delete the object if
13942    necessary.  Do that now.  */
13943
13944 static void
13945 finish_destructor_body (void)
13946 {
13947   tree exprstmt;
13948
13949   /* Any return from a destructor will end up here; that way all base
13950      and member cleanups will be run when the function returns.  */
13951   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13952
13953   /* In a virtual destructor, we must call delete.  */
13954   if (DECL_VIRTUAL_P (current_function_decl))
13955     {
13956       tree if_stmt;
13957       tree virtual_size = cxx_sizeof (current_class_type);
13958
13959       /* [class.dtor]
13960
13961       At the point of definition of a virtual destructor (including
13962       an implicit definition), non-placement operator delete shall
13963       be looked up in the scope of the destructor's class and if
13964       found shall be accessible and unambiguous.  */
13965       exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13966                                        virtual_size,
13967                                        /*global_p=*/false,
13968                                        /*placement=*/NULL_TREE,
13969                                        /*alloc_fn=*/NULL_TREE,
13970                                        tf_warning_or_error);
13971
13972       if_stmt = begin_if_stmt ();
13973       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13974                                    current_in_charge_parm,
13975                                    integer_one_node),
13976                            if_stmt);
13977       finish_expr_stmt (exprstmt);
13978       finish_then_clause (if_stmt);
13979       finish_if_stmt (if_stmt);
13980     }
13981
13982   if (targetm.cxx.cdtor_returns_this ())
13983     {
13984       tree val;
13985
13986       val = DECL_ARGUMENTS (current_function_decl);
13987       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13988                     DECL_RESULT (current_function_decl), val);
13989       /* Return the address of the object.  */
13990       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13991       add_stmt (exprstmt);
13992     }
13993 }
13994
13995 /* Do the necessary processing for the beginning of a function body, which
13996    in this case includes member-initializers, but not the catch clauses of
13997    a function-try-block.  Currently, this means opening a binding level
13998    for the member-initializers (in a ctor), member cleanups (in a dtor),
13999    and capture proxies (in a lambda operator()).  */
14000
14001 tree
14002 begin_function_body (void)
14003 {
14004   tree stmt;
14005
14006   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
14007     return NULL_TREE;
14008
14009   if (processing_template_decl)
14010     /* Do nothing now.  */;
14011   else
14012     /* Always keep the BLOCK node associated with the outermost pair of
14013        curly braces of a function.  These are needed for correct
14014        operation of dwarfout.c.  */
14015     keep_next_level (true);
14016
14017   stmt = begin_compound_stmt (BCS_FN_BODY);
14018
14019   if (processing_template_decl)
14020     /* Do nothing now.  */;
14021   else if (DECL_DESTRUCTOR_P (current_function_decl))
14022     begin_destructor_body ();
14023
14024   return stmt;
14025 }
14026
14027 /* Do the processing for the end of a function body.  Currently, this means
14028    closing out the cleanups for fully-constructed bases and members, and in
14029    the case of the destructor, deleting the object if desired.  Again, this
14030    is only meaningful for [cd]tors, since they are the only functions where
14031    there is a significant distinction between the main body and any
14032    function catch clauses.  Handling, say, main() return semantics here
14033    would be wrong, as flowing off the end of a function catch clause for
14034    main() would also need to return 0.  */
14035
14036 void
14037 finish_function_body (tree compstmt)
14038 {
14039   if (compstmt == NULL_TREE)
14040     return;
14041
14042   /* Close the block.  */
14043   finish_compound_stmt (compstmt);
14044
14045   if (processing_template_decl)
14046     /* Do nothing now.  */;
14047   else if (DECL_CONSTRUCTOR_P (current_function_decl))
14048     finish_constructor_body ();
14049   else if (DECL_DESTRUCTOR_P (current_function_decl))
14050     finish_destructor_body ();
14051 }
14052
14053 /* Given a function, returns the BLOCK corresponding to the outermost level
14054    of curly braces, skipping the artificial block created for constructor
14055    initializers.  */
14056
14057 tree
14058 outer_curly_brace_block (tree fndecl)
14059 {
14060   tree block = DECL_INITIAL (fndecl);
14061   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14062     return block;
14063   block = BLOCK_SUBBLOCKS (block);
14064   if (BLOCK_OUTER_CURLY_BRACE_P (block))
14065     return block;
14066   block = BLOCK_SUBBLOCKS (block);
14067   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
14068   return block;
14069 }
14070
14071 /* If FNDECL is a class's key method, add the class to the list of
14072    keyed classes that should be emitted.  */
14073
14074 static void
14075 record_key_method_defined (tree fndecl)
14076 {
14077   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14078       && DECL_VIRTUAL_P (fndecl)
14079       && !processing_template_decl)
14080     {
14081       tree fnclass = DECL_CONTEXT (fndecl);
14082       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14083         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14084     }
14085 }
14086
14087 /* Subroutine of finish_function.
14088    Save the body of constexpr functions for possible
14089    future compile time evaluation.  */
14090
14091 static void
14092 maybe_save_function_definition (tree fun)
14093 {
14094   if (!processing_template_decl
14095       && DECL_DECLARED_CONSTEXPR_P (fun)
14096       && !cp_function_chain->invalid_constexpr
14097       && !DECL_CLONED_FUNCTION_P (fun))
14098     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
14099 }
14100
14101 /* Finish up a function declaration and compile that function
14102    all the way to assembler language output.  The free the storage
14103    for the function definition.
14104
14105    FLAGS is a bitwise or of the following values:
14106      2 - INCLASS_INLINE
14107        We just finished processing the body of an in-class inline
14108        function definition.  (This processing will have taken place
14109        after the class definition is complete.)  */
14110
14111 tree
14112 finish_function (int flags)
14113 {
14114   tree fndecl = current_function_decl;
14115   tree fntype, ctype = NULL_TREE;
14116   int inclass_inline = (flags & 2) != 0;
14117
14118   /* When we get some parse errors, we can end up without a
14119      current_function_decl, so cope.  */
14120   if (fndecl == NULL_TREE)
14121     return error_mark_node;
14122
14123   if (c_dialect_objc ())
14124     objc_finish_function ();
14125
14126   gcc_assert (!defer_mark_used_calls);
14127   defer_mark_used_calls = true;
14128
14129   record_key_method_defined (fndecl);
14130
14131   fntype = TREE_TYPE (fndecl);
14132
14133   /*  TREE_READONLY (fndecl) = 1;
14134       This caused &foo to be of type ptr-to-const-function
14135       which then got a warning when stored in a ptr-to-function variable.  */
14136
14137   gcc_assert (building_stmt_list_p ());
14138   /* The current function is being defined, so its DECL_INITIAL should
14139      be set, and unless there's a multiple definition, it should be
14140      error_mark_node.  */
14141   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
14142
14143   /* For a cloned function, we've already got all the code we need;
14144      there's no need to add any extra bits.  */
14145   if (!DECL_CLONED_FUNCTION_P (fndecl))
14146     {
14147       /* Make it so that `main' always returns 0 by default.  */
14148       if (DECL_MAIN_P (current_function_decl))
14149         finish_return_stmt (integer_zero_node);
14150
14151       if (use_eh_spec_block (current_function_decl))
14152         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14153                               (TREE_TYPE (current_function_decl)),
14154                               current_eh_spec_block);
14155     }
14156
14157   /* If we're saving up tree structure, tie off the function now.  */
14158   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
14159
14160   if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
14161     cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
14162
14163   finish_fname_decls ();
14164
14165   /* If this function can't throw any exceptions, remember that.  */
14166   if (!processing_template_decl
14167       && !cp_function_chain->can_throw
14168       && !flag_non_call_exceptions
14169       && !decl_replaceable_p (fndecl))
14170     TREE_NOTHROW (fndecl) = 1;
14171
14172   /* This must come after expand_function_end because cleanups might
14173      have declarations (from inline functions) that need to go into
14174      this function's blocks.  */
14175
14176   /* If the current binding level isn't the outermost binding level
14177      for this function, either there is a bug, or we have experienced
14178      syntax errors and the statement tree is malformed.  */
14179   if (current_binding_level->kind != sk_function_parms)
14180     {
14181       /* Make sure we have already experienced errors.  */
14182       gcc_assert (errorcount);
14183
14184       /* Throw away the broken statement tree and extra binding
14185          levels.  */
14186       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14187
14188       while (current_binding_level->kind != sk_function_parms)
14189         {
14190           if (current_binding_level->kind == sk_class)
14191             pop_nested_class ();
14192           else
14193             poplevel (0, 0, 0);
14194         }
14195     }
14196   poplevel (1, 0, 1);
14197
14198   /* Statements should always be full-expressions at the outermost set
14199      of curly braces for a function.  */
14200   gcc_assert (stmts_are_full_exprs_p ());
14201
14202   /* If there are no return statements in a function with auto return type,
14203      the return type is void.  But if the declared type is something like
14204      auto*, this is an error.  */
14205   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14206       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14207     {
14208       if (!is_auto (current_function_auto_return_pattern)
14209           && !current_function_returns_value && !current_function_returns_null)
14210         {
14211           error ("no return statements in function returning %qT",
14212                  current_function_auto_return_pattern);
14213           inform (input_location, "only plain %<auto%> return type can be "
14214                   "deduced to %<void%>");
14215         }
14216       apply_deduced_return_type (fndecl, void_type_node);
14217       fntype = TREE_TYPE (fndecl);
14218     }
14219
14220   /* Save constexpr function body before it gets munged by
14221      the NRV transformation.   */
14222   maybe_save_function_definition (fndecl);
14223
14224   /* Set up the named return value optimization, if we can.  Candidate
14225      variables are selected in check_return_expr.  */
14226   if (current_function_return_value)
14227     {
14228       tree r = current_function_return_value;
14229       tree outer;
14230
14231       if (r != error_mark_node
14232           /* This is only worth doing for fns that return in memory--and
14233              simpler, since we don't have to worry about promoted modes.  */
14234           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14235           /* Only allow this for variables declared in the outer scope of
14236              the function so we know that their lifetime always ends with a
14237              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
14238              we were to do this optimization in tree-ssa.  */
14239           && (outer = outer_curly_brace_block (fndecl))
14240           && chain_member (r, BLOCK_VARS (outer)))
14241         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14242
14243       current_function_return_value = NULL_TREE;
14244     }
14245
14246   /* Remember that we were in class scope.  */
14247   if (current_class_name)
14248     ctype = current_class_type;
14249
14250   /* Must mark the RESULT_DECL as being in this function.  */
14251   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14252
14253   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14254      to the FUNCTION_DECL node itself.  */
14255   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14256
14257   /* Save away current state, if appropriate.  */
14258   if (!processing_template_decl)
14259     save_function_data (fndecl);
14260
14261   /* Complain if there's just no return statement.  */
14262   if (warn_return_type
14263       && !VOID_TYPE_P (TREE_TYPE (fntype))
14264       && !dependent_type_p (TREE_TYPE (fntype))
14265       && !current_function_returns_value && !current_function_returns_null
14266       /* Don't complain if we abort or throw.  */
14267       && !current_function_returns_abnormally
14268       /* Don't complain if there's an infinite loop.  */
14269       && !current_function_infinite_loop
14270       /* Don't complain if we are declared noreturn.  */
14271       && !TREE_THIS_VOLATILE (fndecl)
14272       && !DECL_NAME (DECL_RESULT (fndecl))
14273       && !TREE_NO_WARNING (fndecl)
14274       /* Structor return values (if any) are set by the compiler.  */
14275       && !DECL_CONSTRUCTOR_P (fndecl)
14276       && !DECL_DESTRUCTOR_P (fndecl)
14277       && targetm.warn_func_return (fndecl))
14278     {
14279       warning (OPT_Wreturn_type,
14280                "no return statement in function returning non-void");
14281       TREE_NO_WARNING (fndecl) = 1;
14282     }
14283
14284   /* Store the end of the function, so that we get good line number
14285      info for the epilogue.  */
14286   cfun->function_end_locus = input_location;
14287
14288   /* Complain about parameters that are only set, but never otherwise used.  */
14289   if (warn_unused_but_set_parameter
14290       && !processing_template_decl
14291       && errorcount == unused_but_set_errorcount
14292       && !DECL_CLONED_FUNCTION_P (fndecl))
14293     {
14294       tree decl;
14295
14296       for (decl = DECL_ARGUMENTS (fndecl);
14297            decl;
14298            decl = DECL_CHAIN (decl))
14299         if (TREE_USED (decl)
14300             && TREE_CODE (decl) == PARM_DECL
14301             && !DECL_READ_P (decl)
14302             && DECL_NAME (decl)
14303             && !DECL_ARTIFICIAL (decl)
14304             && !TREE_NO_WARNING (decl)
14305             && !DECL_IN_SYSTEM_HEADER (decl)
14306             && TREE_TYPE (decl) != error_mark_node
14307             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14308             && (!CLASS_TYPE_P (TREE_TYPE (decl))
14309                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14310           warning (OPT_Wunused_but_set_parameter,
14311                    "parameter %q+D set but not used", decl);
14312       unused_but_set_errorcount = errorcount;
14313     }
14314
14315   /* Complain about locally defined typedefs that are not used in this
14316      function.  */
14317   maybe_warn_unused_local_typedefs ();
14318
14319   /* Genericize before inlining.  */
14320   if (!processing_template_decl)
14321     {
14322       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14323       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14324       cp_genericize (fndecl);
14325       /* Clear out the bits we don't need.  */
14326       f->x_current_class_ptr = NULL;
14327       f->x_current_class_ref = NULL;
14328       f->x_eh_spec_block = NULL;
14329       f->x_in_charge_parm = NULL;
14330       f->x_vtt_parm = NULL;
14331       f->x_return_value = NULL;
14332       f->bindings = NULL;
14333       f->extern_decl_map = NULL;
14334       f->infinite_loops = NULL;
14335     }
14336   /* Clear out the bits we don't need.  */
14337   local_names = NULL;
14338
14339   /* We're leaving the context of this function, so zap cfun.  It's still in
14340      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
14341   set_cfun (NULL);
14342   current_function_decl = NULL;
14343
14344   /* If this is an in-class inline definition, we may have to pop the
14345      bindings for the template parameters that we added in
14346      maybe_begin_member_template_processing when start_function was
14347      called.  */
14348   if (inclass_inline)
14349     maybe_end_member_template_processing ();
14350
14351   /* Leave the scope of the class.  */
14352   if (ctype)
14353     pop_nested_class ();
14354
14355   --function_depth;
14356
14357   /* Clean up.  */
14358   current_function_decl = NULL_TREE;
14359
14360   defer_mark_used_calls = false;
14361   if (deferred_mark_used_calls)
14362     {
14363       unsigned int i;
14364       tree decl;
14365
14366       FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14367         mark_used (decl);
14368       vec_free (deferred_mark_used_calls);
14369     }
14370
14371   return fndecl;
14372 }
14373 \f
14374 /* Create the FUNCTION_DECL for a function definition.
14375    DECLSPECS and DECLARATOR are the parts of the declaration;
14376    they describe the return type and the name of the function,
14377    but twisted together in a fashion that parallels the syntax of C.
14378
14379    This function creates a binding context for the function body
14380    as well as setting up the FUNCTION_DECL in current_function_decl.
14381
14382    Returns a FUNCTION_DECL on success.
14383
14384    If the DECLARATOR is not suitable for a function (it defines a datum
14385    instead), we return 0, which tells yyparse to report a parse error.
14386
14387    May return void_type_node indicating that this method is actually
14388    a friend.  See grokfield for more details.
14389
14390    Came here with a `.pushlevel' .
14391
14392    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14393    CHANGES TO CODE IN `grokfield'.  */
14394
14395 tree
14396 grokmethod (cp_decl_specifier_seq *declspecs,
14397             const cp_declarator *declarator, tree attrlist)
14398 {
14399   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14400                                 &attrlist);
14401
14402   if (fndecl == error_mark_node)
14403     return error_mark_node;
14404
14405   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14406     {
14407       error ("invalid member function declaration");
14408       return error_mark_node;
14409     }
14410
14411   if (attrlist)
14412     cplus_decl_attributes (&fndecl, attrlist, 0);
14413
14414   /* Pass friends other than inline friend functions back.  */
14415   if (fndecl == void_type_node)
14416     return fndecl;
14417
14418   if (DECL_IN_AGGR_P (fndecl))
14419     {
14420       if (DECL_CLASS_SCOPE_P (fndecl))
14421         error ("%qD is already defined in class %qT", fndecl,
14422                DECL_CONTEXT (fndecl));
14423       return error_mark_node;
14424     }
14425
14426   check_template_shadow (fndecl);
14427
14428   DECL_COMDAT (fndecl) = 1;
14429   DECL_DECLARED_INLINE_P (fndecl) = 1;
14430   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14431
14432   /* We process method specializations in finish_struct_1.  */
14433   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14434     {
14435       fndecl = push_template_decl (fndecl);
14436       if (fndecl == error_mark_node)
14437         return fndecl;
14438     }
14439
14440   if (! DECL_FRIEND_P (fndecl))
14441     {
14442       if (DECL_CHAIN (fndecl))
14443         {
14444           fndecl = copy_node (fndecl);
14445           TREE_CHAIN (fndecl) = NULL_TREE;
14446         }
14447     }
14448
14449   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14450
14451   DECL_IN_AGGR_P (fndecl) = 1;
14452   return fndecl;
14453 }
14454 \f
14455
14456 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
14457    we can lay it out later, when and if its type becomes complete.
14458
14459    Also handle constexpr variables where the initializer involves
14460    an unlowered PTRMEM_CST because the class isn't complete yet.  */
14461
14462 void
14463 maybe_register_incomplete_var (tree var)
14464 {
14465   gcc_assert (VAR_P (var));
14466
14467   /* Keep track of variables with incomplete types.  */
14468   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14469       && DECL_EXTERNAL (var))
14470     {
14471       tree inner_type = TREE_TYPE (var);
14472
14473       while (TREE_CODE (inner_type) == ARRAY_TYPE)
14474         inner_type = TREE_TYPE (inner_type);
14475       inner_type = TYPE_MAIN_VARIANT (inner_type);
14476
14477       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14478           /* RTTI TD entries are created while defining the type_info.  */
14479           || (TYPE_LANG_SPECIFIC (inner_type)
14480               && TYPE_BEING_DEFINED (inner_type)))
14481         {
14482           incomplete_var iv = {var, inner_type};
14483           vec_safe_push (incomplete_vars, iv);
14484         }
14485       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
14486                && decl_constant_var_p (var)
14487                && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
14488         {
14489           /* When the outermost open class is complete we can resolve any
14490              pointers-to-members.  */
14491           tree context = outermost_open_class ();
14492           incomplete_var iv = {var, context};
14493           vec_safe_push (incomplete_vars, iv);
14494         }
14495     }
14496 }
14497
14498 /* Called when a class type (given by TYPE) is defined.  If there are
14499    any existing VAR_DECLs whose type has been completed by this
14500    declaration, update them now.  */
14501
14502 void
14503 complete_vars (tree type)
14504 {
14505   unsigned ix;
14506   incomplete_var *iv;
14507
14508   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14509     {
14510       if (same_type_p (type, iv->incomplete_type))
14511         {
14512           tree var = iv->decl;
14513           tree type = TREE_TYPE (var);
14514
14515           if (TYPE_MAIN_VARIANT (strip_array_types (type))
14516               == iv->incomplete_type)
14517             {
14518               /* Complete the type of the variable.  The VAR_DECL itself
14519                  will be laid out in expand_expr.  */
14520               complete_type (type);
14521               cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14522             }
14523
14524           if (DECL_INITIAL (var)
14525               && decl_constant_var_p (var))
14526             DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14527
14528           /* Remove this entry from the list.  */
14529           incomplete_vars->unordered_remove (ix);
14530         }
14531       else
14532         ix++;
14533     }
14534
14535   /* Check for pending declarations which may have abstract type.  */
14536   complete_type_check_abstract (type);
14537 }
14538
14539 /* If DECL is of a type which needs a cleanup, build and return an
14540    expression to perform that cleanup here.  Return NULL_TREE if no
14541    cleanup need be done.  */
14542
14543 tree
14544 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14545 {
14546   tree type;
14547   tree attr;
14548   tree cleanup;
14549
14550   /* Assume no cleanup is required.  */
14551   cleanup = NULL_TREE;
14552
14553   if (error_operand_p (decl))
14554     return cleanup;
14555
14556   /* Handle "__attribute__((cleanup))".  We run the cleanup function
14557      before the destructor since the destructor is what actually
14558      terminates the lifetime of the object.  */
14559   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14560   if (attr)
14561     {
14562       tree id;
14563       tree fn;
14564       tree arg;
14565
14566       /* Get the name specified by the user for the cleanup function.  */
14567       id = TREE_VALUE (TREE_VALUE (attr));
14568       /* Look up the name to find the cleanup function to call.  It is
14569          important to use lookup_name here because that is what is
14570          used in c-common.c:handle_cleanup_attribute when performing
14571          initial checks on the attribute.  Note that those checks
14572          include ensuring that the function found is not an overloaded
14573          function, or an object with an overloaded call operator,
14574          etc.; we can rely on the fact that the function found is an
14575          ordinary FUNCTION_DECL.  */
14576       fn = lookup_name (id);
14577       arg = build_address (decl);
14578       mark_used (decl);
14579       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14580       if (cleanup == error_mark_node)
14581         return error_mark_node;
14582     }
14583   /* Handle ordinary C++ destructors.  */
14584   type = TREE_TYPE (decl);
14585   if (type_build_dtor_call (type))
14586     {
14587       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14588       tree addr;
14589       tree call;
14590
14591       if (TREE_CODE (type) == ARRAY_TYPE)
14592         addr = decl;
14593       else
14594         addr = build_address (decl);
14595
14596       call = build_delete (TREE_TYPE (addr), addr,
14597                            sfk_complete_destructor, flags, 0, complain);
14598       if (call == error_mark_node)
14599         cleanup = error_mark_node;
14600       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14601         /* Discard the call.  */;
14602       else if (cleanup)
14603         cleanup = cp_build_compound_expr (cleanup, call, complain);
14604       else
14605         cleanup = call;
14606     }
14607
14608   /* build_delete sets the location of the destructor call to the
14609      current location, even though the destructor is going to be
14610      called later, at the end of the current scope.  This can lead to
14611      a "jumpy" behaviour for users of debuggers when they step around
14612      the end of the block.  So let's unset the location of the
14613      destructor call instead.  */
14614   if (cleanup != NULL && EXPR_P (cleanup))
14615     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14616
14617   if (cleanup
14618       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl))))
14619     /* Treat objects with destructors as used; the destructor may do
14620        something substantive.  */
14621     mark_used (decl);
14622
14623   return cleanup;
14624 }
14625
14626 \f
14627 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14628    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14629    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
14630
14631 tree
14632 static_fn_type (tree memfntype)
14633 {
14634   tree fntype;
14635   tree args;
14636
14637   if (TYPE_PTRMEMFUNC_P (memfntype))
14638     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14639   if (POINTER_TYPE_P (memfntype)
14640       || TREE_CODE (memfntype) == FUNCTION_DECL)
14641     memfntype = TREE_TYPE (memfntype);
14642   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14643     return memfntype;
14644   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14645   args = TYPE_ARG_TYPES (memfntype);
14646   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14647   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14648   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14649   fntype = (cp_build_type_attribute_variant
14650             (fntype, TYPE_ATTRIBUTES (memfntype)));
14651   fntype = (build_exception_variant
14652             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14653   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
14654     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
14655   return fntype;
14656 }
14657
14658 /* DECL was originally constructed as a non-static member function,
14659    but turned out to be static.  Update it accordingly.  */
14660
14661 void
14662 revert_static_member_fn (tree decl)
14663 {
14664   tree stype = static_fn_type (decl);
14665   cp_cv_quals quals = type_memfn_quals (stype);
14666   cp_ref_qualifier rqual = type_memfn_rqual (stype);
14667
14668   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14669     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14670
14671   TREE_TYPE (decl) = stype;
14672
14673   if (DECL_ARGUMENTS (decl))
14674     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14675   DECL_STATIC_FUNCTION_P (decl) = 1;
14676 }
14677
14678 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14679    one of the language-independent trees.  */
14680
14681 enum cp_tree_node_structure_enum
14682 cp_tree_node_structure (union lang_tree_node * t)
14683 {
14684   switch (TREE_CODE (&t->generic))
14685     {
14686     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
14687     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
14688     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
14689     case OVERLOAD:              return TS_CP_OVERLOAD;
14690     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
14691     case PTRMEM_CST:            return TS_CP_PTRMEM;
14692     case BASELINK:              return TS_CP_BASELINK;
14693     case TEMPLATE_DECL:         return TS_CP_TEMPLATE_DECL;
14694     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
14695     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
14696     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
14697     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
14698     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
14699     case USERDEF_LITERAL:       return TS_CP_USERDEF_LITERAL;
14700     default:                    return TS_CP_GENERIC;
14701     }
14702 }
14703
14704 /* Build the void_list_node (void_type_node having been created).  */
14705 tree
14706 build_void_list_node (void)
14707 {
14708   tree t = build_tree_list (NULL_TREE, void_type_node);
14709   return t;
14710 }
14711
14712 bool
14713 cp_missing_noreturn_ok_p (tree decl)
14714 {
14715   /* A missing noreturn is ok for the `main' function.  */
14716   return DECL_MAIN_P (decl);
14717 }
14718
14719 /* Return the decl used to identify the COMDAT group into which DECL should
14720    be placed.  */
14721
14722 tree
14723 cxx_comdat_group (tree decl)
14724 {
14725   /* Virtual tables, construction virtual tables, and virtual table
14726      tables all go in a single COMDAT group, named after the primary
14727      virtual table.  */
14728   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14729     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
14730   /* For all other DECLs, the COMDAT group is the mangled name of the
14731      declaration itself.  */
14732   else
14733     {
14734       while (DECL_THUNK_P (decl))
14735         {
14736           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14737              into the same section as the target function.  In that case
14738              we must return target's name.  */
14739           tree target = THUNK_TARGET (decl);
14740           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14741               && DECL_SECTION_NAME (target) != NULL
14742               && DECL_ONE_ONLY (target))
14743             decl = target;
14744           else
14745             break;
14746         }
14747     }
14748
14749   return decl;
14750 }
14751
14752 /* Returns the return type for FN as written by the user, which may include
14753    a placeholder for a deduced return type.  */
14754
14755 tree
14756 fndecl_declared_return_type (tree fn)
14757 {
14758   fn = STRIP_TEMPLATE (fn);
14759   if (FNDECL_USED_AUTO (fn))
14760     {
14761       struct language_function *f = NULL;
14762       if (DECL_STRUCT_FUNCTION (fn))
14763         f = DECL_STRUCT_FUNCTION (fn)->language;
14764       if (f == NULL)
14765         f = DECL_SAVED_FUNCTION_DATA (fn);
14766       return f->x_auto_return_pattern;
14767     }
14768   return TREE_TYPE (TREE_TYPE (fn));
14769 }
14770
14771 /* Returns true iff DECL was declared with an auto return type and it has
14772    not yet been deduced to a real type.  */
14773
14774 bool
14775 undeduced_auto_decl (tree decl)
14776 {
14777   if (cxx_dialect < cxx14)
14778     return false;
14779   return type_uses_auto (TREE_TYPE (decl));
14780 }
14781
14782 /* Complain if DECL has an undeduced return type.  */
14783
14784 void
14785 require_deduced_type (tree decl)
14786 {
14787   if (undeduced_auto_decl (decl))
14788     error ("use of %qD before deduction of %<auto%>", decl);
14789 }
14790
14791 #include "gt-cp-decl.h"