Merge branch 'vendor/GCC50' - gcc 5.0 snapshot 1 FEB 2015
[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   if (keep == 1 || functionbody)
614     block = make_node (BLOCK);
615   if (block != NULL_TREE)
616     {
617       BLOCK_VARS (block) = decls;
618       BLOCK_SUBBLOCKS (block) = subblocks;
619     }
620
621   /* In each subblock, record that this is its superior.  */
622   if (keep >= 0)
623     for (link = subblocks; link; link = BLOCK_CHAIN (link))
624       BLOCK_SUPERCONTEXT (link) = block;
625
626   /* We still support the old for-scope rules, whereby the variables
627      in a for-init statement were in scope after the for-statement
628      ended.  We only use the new rules if flag_new_for_scope is
629      nonzero.  */
630   leaving_for_scope
631     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
632
633   /* Before we remove the declarations first check for unused variables.  */
634   if ((warn_unused_variable || warn_unused_but_set_variable)
635       && current_binding_level->kind != sk_template_parms
636       && !processing_template_decl)
637     for (tree d = getdecls (); d; d = TREE_CHAIN (d))
638       {
639         /* There are cases where D itself is a TREE_LIST.  See in
640            push_local_binding where the list of decls returned by
641            getdecls is built.  */
642         decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
643         tree type = TREE_TYPE (decl);
644         if (VAR_P (decl)
645             && (! TREE_USED (decl) || !DECL_READ_P (decl))
646             && ! DECL_IN_SYSTEM_HEADER (decl)
647             && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
648             && type != error_mark_node
649             && (!CLASS_TYPE_P (type)
650                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
651                 || lookup_attribute ("warn_unused",
652                                      TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
653           {
654             if (! TREE_USED (decl))
655               warning (OPT_Wunused_variable, "unused variable %q+D", decl);
656             else if (DECL_CONTEXT (decl) == current_function_decl
657                      // For -Wunused-but-set-variable leave references alone.
658                      && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
659                      && errorcount == unused_but_set_errorcount)
660               {
661                 warning (OPT_Wunused_but_set_variable,
662                          "variable %q+D set but not used", decl);
663                 unused_but_set_errorcount = errorcount;
664               }
665           }
666       }
667
668   /* Remove declarations for all the DECLs in this level.  */
669   for (link = decls; link; link = TREE_CHAIN (link))
670     {
671       if (leaving_for_scope && VAR_P (link)
672           /* It's hard to make this ARM compatibility hack play nicely with
673              lambdas, and it really isn't necessary in C++11 mode.  */
674           && cxx_dialect < cxx11
675           && DECL_NAME (link))
676         {
677           tree name = DECL_NAME (link);
678           cxx_binding *ob;
679           tree ns_binding;
680
681           ob = outer_binding (name,
682                               IDENTIFIER_BINDING (name),
683                               /*class_p=*/true);
684           if (!ob)
685             ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
686           else
687             ns_binding = NULL_TREE;
688
689           if (ob && ob->scope == current_binding_level->level_chain)
690             /* We have something like:
691
692                  int i;
693                  for (int i; ;);
694
695                and we are leaving the `for' scope.  There's no reason to
696                keep the binding of the inner `i' in this case.  */
697             pop_binding (name, link);
698           else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
699                    || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
700             /* Here, we have something like:
701
702                  typedef int I;
703
704                  void f () {
705                    for (int I; ;);
706                  }
707
708                We must pop the for-scope binding so we know what's a
709                type and what isn't.  */
710             pop_binding (name, link);
711           else
712             {
713               /* Mark this VAR_DECL as dead so that we can tell we left it
714                  there only for backward compatibility.  */
715               DECL_DEAD_FOR_LOCAL (link) = 1;
716
717               /* Keep track of what should have happened when we
718                  popped the binding.  */
719               if (ob && ob->value)
720                 {
721                   SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
722                   DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
723                 }
724
725               /* Add it to the list of dead variables in the next
726                  outermost binding to that we can remove these when we
727                  leave that binding.  */
728               vec_safe_push (
729                   current_binding_level->level_chain->dead_vars_from_for,
730                   link);
731
732               /* Although we don't pop the cxx_binding, we do clear
733                  its SCOPE since the scope is going away now.  */
734               IDENTIFIER_BINDING (name)->scope
735                 = current_binding_level->level_chain;
736             }
737         }
738       else
739         {
740           tree name;
741
742           /* Remove the binding.  */
743           decl = link;
744
745           if (TREE_CODE (decl) == TREE_LIST)
746             decl = TREE_VALUE (decl);
747           name = decl;
748
749           if (TREE_CODE (name) == OVERLOAD)
750             name = OVL_FUNCTION (name);
751
752           gcc_assert (DECL_P (name));
753           pop_binding (DECL_NAME (name), decl);
754         }
755     }
756
757   /* Remove declarations for any `for' variables from inner scopes
758      that we kept around.  */
759   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
760                                  ix, decl)
761     pop_binding (DECL_NAME (decl), decl);
762
763   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
764   for (link = current_binding_level->type_shadowed;
765        link; link = TREE_CHAIN (link))
766     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
767
768   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
769   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->shadowed_labels,
770                                  ix, label_bind)
771     pop_local_label (label_bind->label, label_bind->prev_value);
772
773   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
774      list if a `using' declaration put them there.  The debugging
775      back ends won't understand OVERLOAD, so we remove them here.
776      Because the BLOCK_VARS are (temporarily) shared with
777      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
778      popped all the bindings.  */
779   if (block)
780     {
781       tree* d;
782
783       for (d = &BLOCK_VARS (block); *d; )
784         {
785           if (TREE_CODE (*d) == TREE_LIST)
786             *d = TREE_CHAIN (*d);
787           else
788             d = &DECL_CHAIN (*d);
789         }
790     }
791
792   /* If the level being exited is the top level of a function,
793      check over all the labels.  */
794   if (functionbody)
795     {
796       /* Since this is the top level block of a function, the vars are
797          the function's parameters.  Don't leave them in the BLOCK
798          because they are found in the FUNCTION_DECL instead.  */
799       BLOCK_VARS (block) = 0;
800       pop_labels (block);
801     }
802
803   kind = current_binding_level->kind;
804   if (kind == sk_cleanup)
805     {
806       tree stmt;
807
808       /* If this is a temporary binding created for a cleanup, then we'll
809          have pushed a statement list level.  Pop that, create a new
810          BIND_EXPR for the block, and insert it into the stream.  */
811       stmt = pop_stmt_list (current_binding_level->statement_list);
812       stmt = c_build_bind_expr (input_location, block, stmt);
813       add_stmt (stmt);
814     }
815
816   leave_scope ();
817   if (functionbody)
818     {
819       /* The current function is being defined, so its DECL_INITIAL
820          should be error_mark_node.  */
821       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
822       DECL_INITIAL (current_function_decl) = block;
823     }
824   else if (block)
825     current_binding_level->blocks
826       = block_chainon (current_binding_level->blocks, block);
827
828   /* If we did not make a block for the level just exited,
829      any blocks made for inner levels
830      (since they cannot be recorded as subblocks in that level)
831      must be carried forward so they will later become subblocks
832      of something else.  */
833   else if (subblocks)
834     current_binding_level->blocks
835       = block_chainon (current_binding_level->blocks, subblocks);
836
837   /* Each and every BLOCK node created here in `poplevel' is important
838      (e.g. for proper debugging information) so if we created one
839      earlier, mark it as "used".  */
840   if (block)
841     TREE_USED (block) = 1;
842
843   /* All temporary bindings created for cleanups are popped silently.  */
844   if (kind == sk_cleanup)
845     goto restart;
846
847   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
848   return block;
849 }
850
851 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
852    itself, calling F for each.  The DATA is passed to F as well.  */
853
854 static int
855 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
856 {
857   int result = 0;
858   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
859
860   result |= (*f) (name_space, data);
861
862   for (; current; current = DECL_CHAIN (current))
863     result |= walk_namespaces_r (current, f, data);
864
865   return result;
866 }
867
868 /* Walk all the namespaces, calling F for each.  The DATA is passed to
869    F as well.  */
870
871 int
872 walk_namespaces (walk_namespaces_fn f, void* data)
873 {
874   return walk_namespaces_r (global_namespace, f, data);
875 }
876
877 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
878    DATA is non-NULL, this is the last time we will call
879    wrapup_global_declarations for this NAMESPACE.  */
880
881 int
882 wrapup_globals_for_namespace (tree name_space, void* data)
883 {
884   cp_binding_level *level = NAMESPACE_LEVEL (name_space);
885   vec<tree, va_gc> *statics = level->static_decls;
886   tree *vec = statics->address ();
887   int len = statics->length ();
888   int last_time = (data != 0);
889
890   if (last_time)
891     {
892       check_global_declarations (vec, len);
893       emit_debug_global_declarations (vec, len);
894       return 0;
895     }
896
897   /* Write out any globals that need to be output.  */
898   return wrapup_global_declarations (vec, len);
899 }
900
901 \f
902 /* In C++, you don't have to write `struct S' to refer to `S'; you
903    can just use `S'.  We accomplish this by creating a TYPE_DECL as
904    if the user had written `typedef struct S S'.  Create and return
905    the TYPE_DECL for TYPE.  */
906
907 tree
908 create_implicit_typedef (tree name, tree type)
909 {
910   tree decl;
911
912   decl = build_decl (input_location, TYPE_DECL, name, type);
913   DECL_ARTIFICIAL (decl) = 1;
914   /* There are other implicit type declarations, like the one *within*
915      a class that allows you to write `S::S'.  We must distinguish
916      amongst these.  */
917   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
918   TYPE_NAME (type) = decl;
919   TYPE_STUB_DECL (type) = decl;
920
921   return decl;
922 }
923
924 /* Remember a local name for name-mangling purposes.  */
925
926 static void
927 push_local_name (tree decl)
928 {
929   size_t i, nelts;
930   tree t, name;
931
932   timevar_start (TV_NAME_LOOKUP);
933
934   name = DECL_NAME (decl);
935
936   nelts = vec_safe_length (local_names);
937   for (i = 0; i < nelts; i++)
938     {
939       t = (*local_names)[i];
940       if (DECL_NAME (t) == name)
941         {
942           if (!DECL_LANG_SPECIFIC (decl))
943             retrofit_lang_decl (decl);
944           DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
945           if (DECL_DISCRIMINATOR_SET_P (t))
946             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
947           else
948             DECL_DISCRIMINATOR (decl) = 1;
949
950           (*local_names)[i] = decl;
951           timevar_stop (TV_NAME_LOOKUP);
952           return;
953         }
954     }
955
956   vec_safe_push (local_names, decl);
957   timevar_stop (TV_NAME_LOOKUP);
958 }
959 \f
960 /* Subroutine of duplicate_decls: return truthvalue of whether
961    or not types of these decls match.
962
963    For C++, we must compare the parameter list so that `int' can match
964    `int&' in a parameter position, but `int&' is not confused with
965    `const int&'.  */
966
967 int
968 decls_match (tree newdecl, tree olddecl)
969 {
970   int types_match;
971
972   if (newdecl == olddecl)
973     return 1;
974
975   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
976     /* If the two DECLs are not even the same kind of thing, we're not
977        interested in their types.  */
978     return 0;
979
980   gcc_assert (DECL_P (newdecl));
981
982   if (TREE_CODE (newdecl) == FUNCTION_DECL)
983     {
984       tree f1 = TREE_TYPE (newdecl);
985       tree f2 = TREE_TYPE (olddecl);
986       tree p1 = TYPE_ARG_TYPES (f1);
987       tree p2 = TYPE_ARG_TYPES (f2);
988       tree r2;
989
990       /* Specializations of different templates are different functions
991          even if they have the same type.  */
992       tree t1 = (DECL_USE_TEMPLATE (newdecl)
993                  ? DECL_TI_TEMPLATE (newdecl)
994                  : NULL_TREE);
995       tree t2 = (DECL_USE_TEMPLATE (olddecl)
996                  ? DECL_TI_TEMPLATE (olddecl)
997                  : NULL_TREE);
998       if (t1 != t2)
999         return 0;
1000
1001       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1002           && ! (DECL_EXTERN_C_P (newdecl)
1003                 && DECL_EXTERN_C_P (olddecl)))
1004         return 0;
1005
1006       /* A new declaration doesn't match a built-in one unless it
1007          is also extern "C".  */
1008       if (DECL_IS_BUILTIN (olddecl)
1009           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1010         return 0;
1011
1012       if (TREE_CODE (f1) != TREE_CODE (f2))
1013         return 0;
1014
1015       /* A declaration with deduced return type should use its pre-deduction
1016          type for declaration matching.  */
1017       r2 = fndecl_declared_return_type (olddecl);
1018
1019       if (same_type_p (TREE_TYPE (f1), r2))
1020         {
1021           if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1022               && (DECL_BUILT_IN (olddecl)
1023 #ifndef NO_IMPLICIT_EXTERN_C
1024                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1025                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1026 #endif
1027               ))
1028             {
1029               types_match = self_promoting_args_p (p1);
1030               if (p1 == void_list_node)
1031                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1032             }
1033 #ifndef NO_IMPLICIT_EXTERN_C
1034           else if (!prototype_p (f1)
1035                    && (DECL_EXTERN_C_P (olddecl)
1036                        && DECL_IN_SYSTEM_HEADER (olddecl)
1037                        && !DECL_CLASS_SCOPE_P (olddecl))
1038                    && (DECL_EXTERN_C_P (newdecl)
1039                        && DECL_IN_SYSTEM_HEADER (newdecl)
1040                        && !DECL_CLASS_SCOPE_P (newdecl)))
1041             {
1042               types_match = self_promoting_args_p (p2);
1043               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1044             }
1045 #endif
1046           else
1047             types_match =
1048               compparms (p1, p2)
1049               && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1050               && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1051                   || comp_type_attributes (TREE_TYPE (newdecl),
1052                                            TREE_TYPE (olddecl)) != 0);
1053         }
1054       else
1055         types_match = 0;
1056
1057       /* The decls dont match if they correspond to two different versions
1058          of the same function.   Disallow extern "C" functions to be
1059          versions for now.  */
1060       if (types_match
1061           && !DECL_EXTERN_C_P (newdecl)
1062           && !DECL_EXTERN_C_P (olddecl)
1063           && targetm.target_option.function_versions (newdecl, olddecl))
1064         {
1065           /* Mark functions as versions if necessary.  Modify the mangled decl
1066              name if necessary.  */
1067           if (DECL_FUNCTION_VERSIONED (newdecl)
1068               && DECL_FUNCTION_VERSIONED (olddecl))
1069             return 0;
1070           if (!DECL_FUNCTION_VERSIONED (newdecl))
1071             {
1072               DECL_FUNCTION_VERSIONED (newdecl) = 1;
1073               if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1074                 mangle_decl (newdecl);
1075             }
1076           if (!DECL_FUNCTION_VERSIONED (olddecl))
1077             {
1078               DECL_FUNCTION_VERSIONED (olddecl) = 1;
1079               if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1080                mangle_decl (olddecl);
1081             }
1082           cgraph_node::record_function_versions (olddecl, newdecl);
1083           return 0;
1084         }
1085     }
1086   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1087     {
1088       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1089           != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1090         return 0;
1091
1092       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1093                                 DECL_TEMPLATE_PARMS (olddecl)))
1094         return 0;
1095
1096       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1097         types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1098                                    TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1099       else
1100         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1101                                    DECL_TEMPLATE_RESULT (newdecl));
1102     }
1103   else
1104     {
1105       /* Need to check scope for variable declaration (VAR_DECL).
1106          For typedef (TYPE_DECL), scope is ignored.  */
1107       if (VAR_P (newdecl)
1108           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1109           /* [dcl.link]
1110              Two declarations for an object with C language linkage
1111              with the same name (ignoring the namespace that qualify
1112              it) that appear in different namespace scopes refer to
1113              the same object.  */
1114           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1115         return 0;
1116
1117       if (TREE_TYPE (newdecl) == error_mark_node)
1118         types_match = TREE_TYPE (olddecl) == error_mark_node;
1119       else if (TREE_TYPE (olddecl) == NULL_TREE)
1120         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1121       else if (TREE_TYPE (newdecl) == NULL_TREE)
1122         types_match = 0;
1123       else
1124         types_match = comptypes (TREE_TYPE (newdecl),
1125                                  TREE_TYPE (olddecl),
1126                                  COMPARE_REDECLARATION);
1127     }
1128
1129   return types_match;
1130 }
1131
1132 /* If NEWDECL is `static' and an `extern' was seen previously,
1133    warn about it.  OLDDECL is the previous declaration.
1134
1135    Note that this does not apply to the C++ case of declaring
1136    a variable `extern const' and then later `const'.
1137
1138    Don't complain about built-in functions, since they are beyond
1139    the user's control.  */
1140
1141 void
1142 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1143 {
1144   if (TREE_CODE (newdecl) == TYPE_DECL
1145       || TREE_CODE (newdecl) == TEMPLATE_DECL
1146       || TREE_CODE (newdecl) == CONST_DECL
1147       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1148     return;
1149
1150   /* Don't get confused by static member functions; that's a different
1151      use of `static'.  */
1152   if (TREE_CODE (newdecl) == FUNCTION_DECL
1153       && DECL_STATIC_FUNCTION_P (newdecl))
1154     return;
1155
1156   /* If the old declaration was `static', or the new one isn't, then
1157      everything is OK.  */
1158   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1159     return;
1160
1161   /* It's OK to declare a builtin function as `static'.  */
1162   if (TREE_CODE (olddecl) == FUNCTION_DECL
1163       && DECL_ARTIFICIAL (olddecl))
1164     return;
1165
1166   if (permerror (input_location,
1167                  "%qD was declared %<extern%> and later %<static%>", newdecl))
1168     inform (input_location, "previous declaration of %q+D", olddecl);
1169 }
1170
1171 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1172    function templates.  If their exception specifications do not
1173    match, issue a diagnostic.  */
1174
1175 static void
1176 check_redeclaration_exception_specification (tree new_decl,
1177                                              tree old_decl)
1178 {
1179   tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1180   tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1181
1182   /* Two default specs are equivalent, don't force evaluation.  */
1183   if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1184       && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1185     return;
1186
1187   maybe_instantiate_noexcept (new_decl);
1188   maybe_instantiate_noexcept (old_decl);
1189   new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1190   old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1191
1192   /* [except.spec]
1193
1194      If any declaration of a function has an exception-specification,
1195      all declarations, including the definition and an explicit
1196      specialization, of that function shall have an
1197      exception-specification with the same set of type-ids.  */
1198   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1199       && ! DECL_IS_BUILTIN (old_decl)
1200       && flag_exceptions
1201       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1202     {
1203       error ("declaration of %qF has a different exception specifier",
1204              new_decl);
1205       error ("from previous declaration %q+F", old_decl);
1206     }
1207 }
1208
1209 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1210    Otherwise issue diagnostics.  */
1211
1212 static bool
1213 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1214 {
1215   old_decl = STRIP_TEMPLATE (old_decl);
1216   new_decl = STRIP_TEMPLATE (new_decl);
1217   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1218       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1219     return true;
1220   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1221       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1222     return true;
1223   if (TREE_CODE (old_decl) == FUNCTION_DECL)
1224     {
1225       if (DECL_BUILT_IN (old_decl))
1226         {
1227           /* Hide a built-in declaration.  */
1228           DECL_DECLARED_CONSTEXPR_P (old_decl)
1229             = DECL_DECLARED_CONSTEXPR_P (new_decl);
1230           return true;
1231         }
1232       /* 7.1.5 [dcl.constexpr]
1233          Note: An explicit specialization can differ from the template
1234          declaration with respect to the constexpr specifier.  */
1235       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1236           && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1237         return true;
1238
1239       error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1240       error ("from previous declaration %q+D", old_decl);
1241       return false;
1242     }
1243   return true;
1244 }
1245
1246 /* DECL is a redeclaration of a function or function template.  If
1247    it does have default arguments issue a diagnostic.  Note: this
1248    function is used to enforce the requirements in C++11 8.3.6 about
1249    no default arguments in redeclarations.  */
1250
1251 static void
1252 check_redeclaration_no_default_args (tree decl)
1253 {
1254   gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1255
1256   for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1257        t && t != void_list_node; t = TREE_CHAIN (t))
1258     if (TREE_PURPOSE (t))
1259       {
1260         permerror (input_location,
1261                    "redeclaration of %q#D may not have default "
1262                    "arguments", decl);
1263         return;
1264       }
1265 }
1266
1267 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1268                           && lookup_attribute ("gnu_inline",            \
1269                                                DECL_ATTRIBUTES (fn)))
1270
1271 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1272    If the redeclaration is invalid, a diagnostic is issued, and the
1273    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1274
1275    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1276    returned.
1277
1278    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1279
1280 tree
1281 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1282 {
1283   unsigned olddecl_uid = DECL_UID (olddecl);
1284   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1285   int new_defines_function = 0;
1286   tree new_template_info;
1287
1288   if (newdecl == olddecl)
1289     return olddecl;
1290
1291   types_match = decls_match (newdecl, olddecl);
1292
1293   /* If either the type of the new decl or the type of the old decl is an
1294      error_mark_node, then that implies that we have already issued an
1295      error (earlier) for some bogus type specification, and in that case,
1296      it is rather pointless to harass the user with yet more error message
1297      about the same declaration, so just pretend the types match here.  */
1298   if (TREE_TYPE (newdecl) == error_mark_node
1299       || TREE_TYPE (olddecl) == error_mark_node)
1300     return error_mark_node;
1301
1302   if (UDLIT_OPER_P (DECL_NAME (newdecl))
1303       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1304     {
1305       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1306           && TREE_CODE (olddecl) != TEMPLATE_DECL
1307           && check_raw_literal_operator (olddecl))
1308         error ("literal operator template %q+D conflicts with"
1309                " raw literal operator %qD", newdecl, olddecl);
1310       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1311                && TREE_CODE (olddecl) == TEMPLATE_DECL
1312                && check_raw_literal_operator (newdecl))
1313         error ("raw literal operator %q+D conflicts with"
1314                " literal operator template %qD", newdecl, olddecl);
1315     }
1316
1317   if (DECL_P (olddecl)
1318       && TREE_CODE (newdecl) == FUNCTION_DECL
1319       && TREE_CODE (olddecl) == FUNCTION_DECL
1320       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1321     {
1322       if (DECL_DECLARED_INLINE_P (newdecl)
1323           && DECL_UNINLINABLE (newdecl)
1324           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1325         /* Already warned elsewhere.  */;
1326       else if (DECL_DECLARED_INLINE_P (olddecl)
1327                && DECL_UNINLINABLE (olddecl)
1328                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1329         /* Already warned.  */;
1330       else if (DECL_DECLARED_INLINE_P (newdecl)
1331                && DECL_UNINLINABLE (olddecl)
1332                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1333         {
1334           if (warning (OPT_Wattributes, "function %q+D redeclared as inline",
1335                        newdecl))
1336             inform (DECL_SOURCE_LOCATION (olddecl),
1337                     "previous declaration of %qD with attribute noinline",
1338                     olddecl);
1339         }
1340       else if (DECL_DECLARED_INLINE_P (olddecl)
1341                && DECL_UNINLINABLE (newdecl)
1342                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1343         {
1344           if (warning (OPT_Wattributes, "function %q+D redeclared with "
1345                        "attribute noinline", newdecl))
1346             inform (DECL_SOURCE_LOCATION (olddecl),
1347                     "previous declaration of %qD was inline",
1348                     olddecl);
1349         }
1350     }
1351
1352   /* Check for redeclaration and other discrepancies.  */
1353   if (TREE_CODE (olddecl) == FUNCTION_DECL
1354       && DECL_ARTIFICIAL (olddecl))
1355     {
1356       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1357       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1358         {
1359           /* Avoid warnings redeclaring built-ins which have not been
1360              explicitly declared.  */
1361           if (DECL_ANTICIPATED (olddecl))
1362             return NULL_TREE;
1363
1364           /* If you declare a built-in or predefined function name as static,
1365              the old definition is overridden, but optionally warn this was a
1366              bad choice of name.  */
1367           if (! TREE_PUBLIC (newdecl))
1368             {
1369               warning (OPT_Wshadow, 
1370                        DECL_BUILT_IN (olddecl)
1371                        ? G_("shadowing built-in function %q#D")
1372                        : G_("shadowing library function %q#D"), olddecl);
1373               /* Discard the old built-in function.  */
1374               return NULL_TREE;
1375             }
1376           /* If the built-in is not ansi, then programs can override
1377              it even globally without an error.  */
1378           else if (! DECL_BUILT_IN (olddecl))
1379             warning (0, "library function %q#D redeclared as non-function %q#D",
1380                      olddecl, newdecl);
1381           else
1382             error ("declaration of %q#D conflicts with built-in "
1383                    "declaration %q#D", newdecl, olddecl);
1384           return NULL_TREE;
1385         }
1386       else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1387         {
1388           gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1389           error_at (DECL_SOURCE_LOCATION (newdecl),
1390                     "redeclaration of %<pragma omp declare reduction%>");
1391           inform (DECL_SOURCE_LOCATION (olddecl),
1392                   "previous %<pragma omp declare reduction%> declaration");
1393           return error_mark_node;
1394         }
1395       else if (!types_match)
1396         {
1397           /* Avoid warnings redeclaring built-ins which have not been
1398              explicitly declared.  */
1399           if (DECL_ANTICIPATED (olddecl))
1400             {
1401               /* Deal with fileptr_type_node.  FILE type is not known
1402                  at the time we create the builtins.  */
1403               tree t1, t2;
1404
1405               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1406                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1407                    t1 || t2;
1408                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1409                 if (!t1 || !t2)
1410                   break;
1411                 else if (TREE_VALUE (t2) == fileptr_type_node)
1412                   {
1413                     tree t = TREE_VALUE (t1);
1414
1415                     if (TYPE_PTR_P (t)
1416                         && TYPE_IDENTIFIER (TREE_TYPE (t))
1417                            == get_identifier ("FILE")
1418                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1419                       {
1420                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1421
1422                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1423                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1424                         types_match = decls_match (newdecl, olddecl);
1425                         if (types_match)
1426                           return duplicate_decls (newdecl, olddecl,
1427                                                   newdecl_is_friend);
1428                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1429                       }
1430                   }
1431                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1432                   break;
1433             }
1434           else if ((DECL_EXTERN_C_P (newdecl)
1435                     && DECL_EXTERN_C_P (olddecl))
1436                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1437                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1438             {
1439               /* A near match; override the builtin.  */
1440
1441               if (TREE_PUBLIC (newdecl))
1442                 warning (0, "new declaration %q#D ambiguates built-in "
1443                          "declaration %q#D", newdecl, olddecl);
1444               else
1445                 warning (OPT_Wshadow, 
1446                          DECL_BUILT_IN (olddecl)
1447                          ? G_("shadowing built-in function %q#D")
1448                          : G_("shadowing library function %q#D"), olddecl);
1449             }
1450           else
1451             /* Discard the old built-in function.  */
1452             return NULL_TREE;
1453
1454           /* Replace the old RTL to avoid problems with inlining.  */
1455           COPY_DECL_RTL (newdecl, olddecl);
1456         }
1457       /* Even if the types match, prefer the new declarations type for
1458          built-ins which have not been explicitly declared, for
1459          exception lists, etc...  */
1460       else if (DECL_IS_BUILTIN (olddecl))
1461         {
1462           tree type = TREE_TYPE (newdecl);
1463           tree attribs = (*targetm.merge_type_attributes)
1464             (TREE_TYPE (olddecl), type);
1465
1466           type = cp_build_type_attribute_variant (type, attribs);
1467           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1468         }
1469
1470       /* If a function is explicitly declared "throw ()", propagate that to
1471          the corresponding builtin.  */
1472       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1473           && DECL_ANTICIPATED (olddecl)
1474           && TREE_NOTHROW (newdecl)
1475           && !TREE_NOTHROW (olddecl))
1476         {
1477           enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1478           tree tmpdecl = builtin_decl_explicit (fncode);
1479           if (tmpdecl && tmpdecl != olddecl && types_match)
1480             TREE_NOTHROW (tmpdecl)  = 1;
1481         }
1482
1483       /* Whether or not the builtin can throw exceptions has no
1484          bearing on this declarator.  */
1485       TREE_NOTHROW (olddecl) = 0;
1486
1487       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1488         {
1489           /* If a builtin function is redeclared as `static', merge
1490              the declarations, but make the original one static.  */
1491           DECL_THIS_STATIC (olddecl) = 1;
1492           TREE_PUBLIC (olddecl) = 0;
1493
1494           /* Make the old declaration consistent with the new one so
1495              that all remnants of the builtin-ness of this function
1496              will be banished.  */
1497           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1498           COPY_DECL_RTL (newdecl, olddecl);
1499         }
1500     }
1501   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1502     {
1503       /* C++ Standard, 3.3, clause 4:
1504          "[Note: a namespace name or a class template name must be unique
1505          in its declarative region (7.3.2, clause 14). ]"  */
1506       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1507           && TREE_CODE (newdecl) != NAMESPACE_DECL
1508           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1509               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1510           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1511               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1512         {
1513           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1514                && TREE_CODE (newdecl) != TYPE_DECL)
1515               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1516                   && TREE_CODE (olddecl) != TYPE_DECL))
1517             {
1518               /* We do nothing special here, because C++ does such nasty
1519                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1520                  get shadowed, and know that if we need to find a TYPE_DECL
1521                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1522                  slot of the identifier.  */
1523               return NULL_TREE;
1524             }
1525             
1526             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1527                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1528                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1529                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1530               return NULL_TREE;
1531         }
1532
1533       error ("%q#D redeclared as different kind of symbol", newdecl);
1534       if (TREE_CODE (olddecl) == TREE_LIST)
1535         olddecl = TREE_VALUE (olddecl);
1536       inform (DECL_SOURCE_LOCATION (olddecl),
1537               "previous declaration %q#D", olddecl);
1538
1539       return error_mark_node;
1540     }
1541   else if (!types_match)
1542     {
1543       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1544         /* These are certainly not duplicate declarations; they're
1545            from different scopes.  */
1546         return NULL_TREE;
1547
1548       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1549         {
1550           /* The name of a class template may not be declared to refer to
1551              any other template, class, function, object, namespace, value,
1552              or type in the same scope.  */
1553           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1554               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1555             {
1556               error ("conflicting declaration of template %q#D", newdecl);
1557               inform (DECL_SOURCE_LOCATION (olddecl),
1558                       "previous declaration %q#D", olddecl);
1559               return error_mark_node;
1560             }
1561           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1562                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1563                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1564                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1565                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1566                                            DECL_TEMPLATE_PARMS (olddecl))
1567                    /* Template functions can be disambiguated by
1568                       return type.  */
1569                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1570                                    TREE_TYPE (TREE_TYPE (olddecl))))
1571             {
1572               error ("ambiguating new declaration %q#D", newdecl);
1573               inform (DECL_SOURCE_LOCATION (olddecl),
1574                       "old declaration %q#D", olddecl);
1575             }
1576           return NULL_TREE;
1577         }
1578       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1579         {
1580           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1581             {
1582               error ("conflicting declaration of C function %q#D",
1583                      newdecl);
1584               inform (DECL_SOURCE_LOCATION (olddecl),
1585                       "previous declaration %q#D", olddecl);
1586               return NULL_TREE;
1587             }
1588           /* For function versions, params and types match, but they
1589              are not ambiguous.  */
1590           else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1591                     && !DECL_FUNCTION_VERSIONED (olddecl))
1592                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1593                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1594             {
1595               error ("ambiguating new declaration of %q#D", newdecl);
1596               inform (DECL_SOURCE_LOCATION (olddecl),
1597                       "old declaration %q#D", olddecl);
1598               return error_mark_node;
1599             }
1600           else
1601             return NULL_TREE;
1602         }
1603       else
1604         {
1605           error ("conflicting declaration %q#D", newdecl);
1606           inform (DECL_SOURCE_LOCATION (olddecl),
1607                   "previous declaration as %q#D", olddecl);
1608           return error_mark_node;
1609         }
1610     }
1611   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1612             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1613                  && (!DECL_TEMPLATE_INFO (newdecl)
1614                      || (DECL_TI_TEMPLATE (newdecl)
1615                          != DECL_TI_TEMPLATE (olddecl))))
1616                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1617                     && (!DECL_TEMPLATE_INFO (olddecl)
1618                         || (DECL_TI_TEMPLATE (olddecl)
1619                             != DECL_TI_TEMPLATE (newdecl))))))
1620     /* It's OK to have a template specialization and a non-template
1621        with the same type, or to have specializations of two
1622        different templates with the same type.  Note that if one is a
1623        specialization, and the other is an instantiation of the same
1624        template, that we do not exit at this point.  That situation
1625        can occur if we instantiate a template class, and then
1626        specialize one of its methods.  This situation is valid, but
1627        the declarations must be merged in the usual way.  */
1628     return NULL_TREE;
1629   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1630            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1631                 && !DECL_USE_TEMPLATE (newdecl))
1632                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1633                    && !DECL_USE_TEMPLATE (olddecl))))
1634     /* One of the declarations is a template instantiation, and the
1635        other is not a template at all.  That's OK.  */
1636     return NULL_TREE;
1637   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1638     {
1639       /* In [namespace.alias] we have:
1640
1641            In a declarative region, a namespace-alias-definition can be
1642            used to redefine a namespace-alias declared in that declarative
1643            region to refer only to the namespace to which it already
1644            refers.
1645
1646          Therefore, if we encounter a second alias directive for the same
1647          alias, we can just ignore the second directive.  */
1648       if (DECL_NAMESPACE_ALIAS (newdecl)
1649           && (DECL_NAMESPACE_ALIAS (newdecl)
1650               == DECL_NAMESPACE_ALIAS (olddecl)))
1651         return olddecl;
1652       /* [namespace.alias]
1653
1654          A namespace-name or namespace-alias shall not be declared as
1655          the name of any other entity in the same declarative region.
1656          A namespace-name defined at global scope shall not be
1657          declared as the name of any other entity in any global scope
1658          of the program.  */
1659       error ("conflicting declaration of namespace %qD", newdecl);
1660       inform (DECL_SOURCE_LOCATION (olddecl),
1661               "previous declaration of namespace %qD here", olddecl);
1662       return error_mark_node;
1663     }
1664   else
1665     {
1666       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1667       if (errmsg)
1668         {
1669           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1670           if (DECL_NAME (olddecl) != NULL_TREE)
1671             inform (input_location,
1672                     (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1673                     ? G_("%q+#D previously defined here")
1674                     : G_("%q+#D previously declared here"), olddecl);
1675           return error_mark_node;
1676         }
1677       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1678                && DECL_INITIAL (olddecl) != NULL_TREE
1679                && !prototype_p (TREE_TYPE (olddecl))
1680                && prototype_p (TREE_TYPE (newdecl)))
1681         {
1682           /* Prototype decl follows defn w/o prototype.  */
1683           if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1684                           "prototype specified for %q#D", newdecl))
1685             inform (DECL_SOURCE_LOCATION (olddecl),
1686                     "previous non-prototype definition here");
1687         }
1688       else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1689                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1690         {
1691           /* [dcl.link]
1692              If two declarations of the same function or object
1693              specify different linkage-specifications ..., the program
1694              is ill-formed.... Except for functions with C++ linkage,
1695              a function declaration without a linkage specification
1696              shall not precede the first linkage specification for
1697              that function.  A function can be declared without a
1698              linkage specification after an explicit linkage
1699              specification has been seen; the linkage explicitly
1700              specified in the earlier declaration is not affected by
1701              such a function declaration.
1702
1703              DR 563 raises the question why the restrictions on
1704              functions should not also apply to objects.  Older
1705              versions of G++ silently ignore the linkage-specification
1706              for this example:
1707
1708                namespace N { 
1709                  extern int i;
1710                  extern "C" int i;
1711                }
1712
1713              which is clearly wrong.  Therefore, we now treat objects
1714              like functions.  */
1715           if (current_lang_depth () == 0)
1716             {
1717               /* There is no explicit linkage-specification, so we use
1718                  the linkage from the previous declaration.  */
1719               if (!DECL_LANG_SPECIFIC (newdecl))
1720                 retrofit_lang_decl (newdecl);
1721               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1722             }
1723           else
1724             {
1725               error ("conflicting declaration of %q#D with %qL linkage",
1726                      newdecl, DECL_LANGUAGE (newdecl));
1727               inform (DECL_SOURCE_LOCATION (olddecl),
1728                       "previous declaration with %qL linkage",
1729                       DECL_LANGUAGE (olddecl));
1730             }
1731         }
1732
1733       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1734         ;
1735       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1736         {
1737           /* Note: free functions, as TEMPLATE_DECLs, are handled below.  */
1738           if (DECL_FUNCTION_MEMBER_P (olddecl)
1739               && (/* grokfndecl passes member function templates too
1740                      as FUNCTION_DECLs.  */
1741                   DECL_TEMPLATE_INFO (olddecl)
1742                   /* C++11 8.3.6/6.
1743                      Default arguments for a member function of a class
1744                      template shall be specified on the initial declaration
1745                      of the member function within the class template.  */
1746                   || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1747             check_redeclaration_no_default_args (newdecl);
1748           else
1749             {
1750               tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1751               tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1752               int i = 1;
1753
1754               for (; t1 && t1 != void_list_node;
1755                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1756                 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1757                   {
1758                     if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1759                                                TREE_PURPOSE (t2)))
1760                       {
1761                         if (permerror (input_location,
1762                                        "default argument given for parameter "
1763                                        "%d of %q#D", i, newdecl))
1764                           inform (DECL_SOURCE_LOCATION (olddecl),
1765                                   "previous specification in %q#D here",
1766                                   olddecl);
1767                       }
1768                     else
1769                       {
1770                         error ("default argument given for parameter %d "
1771                                "of %q#D", i, newdecl);
1772                         inform (DECL_SOURCE_LOCATION (olddecl),
1773                                 "previous specification in %q#D here",
1774                                 olddecl);
1775                       }
1776                   }
1777             }
1778         }
1779     }
1780
1781   /* Do not merge an implicit typedef with an explicit one.  In:
1782
1783        class A;
1784        ...
1785        typedef class A A __attribute__ ((foo));
1786
1787      the attribute should apply only to the typedef.  */
1788   if (TREE_CODE (olddecl) == TYPE_DECL
1789       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1790           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1791     return NULL_TREE;
1792
1793   /* If new decl is `static' and an `extern' was seen previously,
1794      warn about it.  */
1795   warn_extern_redeclared_static (newdecl, olddecl);
1796
1797   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1798     return error_mark_node;
1799
1800   /* We have committed to returning 1 at this point.  */
1801   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1802     {
1803       /* Now that functions must hold information normally held
1804          by field decls, there is extra work to do so that
1805          declaration information does not get destroyed during
1806          definition.  */
1807       if (DECL_VINDEX (olddecl))
1808         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1809       if (DECL_CONTEXT (olddecl))
1810         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1811       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1812       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1813       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1814       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1815       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1816       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1817       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1818         SET_OVERLOADED_OPERATOR_CODE
1819           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1820       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1821
1822       /* Optionally warn about more than one declaration for the same
1823          name, but don't warn about a function declaration followed by a
1824          definition.  */
1825       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1826           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1827           /* Don't warn about extern decl followed by definition.  */
1828           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1829           /* Don't warn about friends, let add_friend take care of it.  */
1830           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1831           /* Don't warn about declaration followed by specialization.  */
1832           && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1833               || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1834         {
1835           if (warning (OPT_Wredundant_decls,
1836                        "redundant redeclaration of %qD in same scope",
1837                        newdecl))
1838             inform (DECL_SOURCE_LOCATION (olddecl),
1839                     "previous declaration of %qD", olddecl);
1840         }
1841
1842       if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1843             && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1844         {
1845           if (DECL_DELETED_FN (newdecl))
1846             {
1847               error ("deleted definition of %qD", newdecl);
1848               inform (DECL_SOURCE_LOCATION (olddecl),
1849                       "previous declaration of %qD", olddecl);
1850             }
1851           DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1852         }
1853     }
1854
1855   /* Deal with C++: must preserve virtual function table size.  */
1856   if (TREE_CODE (olddecl) == TYPE_DECL)
1857     {
1858       tree newtype = TREE_TYPE (newdecl);
1859       tree oldtype = TREE_TYPE (olddecl);
1860
1861       if (newtype != error_mark_node && oldtype != error_mark_node
1862           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1863         CLASSTYPE_FRIEND_CLASSES (newtype)
1864           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1865
1866       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1867     }
1868
1869   /* Copy all the DECL_... slots specified in the new decl
1870      except for any that we copy here from the old type.  */
1871   DECL_ATTRIBUTES (newdecl)
1872     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1873
1874   if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1875     {
1876       olddecl_friend = DECL_FRIEND_P (olddecl);
1877       hidden_friend = (DECL_ANTICIPATED (olddecl)
1878                        && DECL_HIDDEN_FRIEND_P (olddecl)
1879                        && newdecl_is_friend);
1880       if (!hidden_friend)
1881         {
1882           DECL_ANTICIPATED (olddecl) = 0;
1883           DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1884         }
1885     }
1886
1887   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1888     {
1889       tree old_result;
1890       tree new_result;
1891       old_result = DECL_TEMPLATE_RESULT (olddecl);
1892       new_result = DECL_TEMPLATE_RESULT (newdecl);
1893       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1894       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1895         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1896                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1897
1898       DECL_ATTRIBUTES (old_result)
1899         = (*targetm.merge_decl_attributes) (old_result, new_result);
1900
1901       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1902         {
1903           /* Per C++11 8.3.6/4, default arguments cannot be added in later
1904              declarations of a function template.  */
1905           check_redeclaration_no_default_args (newdecl);
1906
1907           check_default_args (newdecl);
1908
1909           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1910               && DECL_INITIAL (new_result))
1911             {
1912               if (DECL_INITIAL (old_result))
1913                 DECL_UNINLINABLE (old_result) = 1;
1914               else
1915                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1916               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1917               DECL_NOT_REALLY_EXTERN (old_result)
1918                 = DECL_NOT_REALLY_EXTERN (new_result);
1919               DECL_INTERFACE_KNOWN (old_result)
1920                 = DECL_INTERFACE_KNOWN (new_result);
1921               DECL_DECLARED_INLINE_P (old_result)
1922                 = DECL_DECLARED_INLINE_P (new_result);
1923               DECL_DISREGARD_INLINE_LIMITS (old_result)
1924                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1925
1926             }
1927           else
1928             {
1929               DECL_DECLARED_INLINE_P (old_result)
1930                 |= DECL_DECLARED_INLINE_P (new_result);
1931               DECL_DISREGARD_INLINE_LIMITS (old_result)
1932                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1933               check_redeclaration_exception_specification (newdecl, olddecl);
1934             }
1935         }
1936
1937       /* If the new declaration is a definition, update the file and
1938          line information on the declaration, and also make
1939          the old declaration the same definition.  */
1940       if (DECL_INITIAL (new_result) != NULL_TREE)
1941         {
1942           DECL_SOURCE_LOCATION (olddecl)
1943             = DECL_SOURCE_LOCATION (old_result)
1944             = DECL_SOURCE_LOCATION (newdecl);
1945           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1946           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1947             {
1948               tree parm;
1949               DECL_ARGUMENTS (old_result)
1950                 = DECL_ARGUMENTS (new_result);
1951               for (parm = DECL_ARGUMENTS (old_result); parm;
1952                    parm = DECL_CHAIN (parm))
1953                 DECL_CONTEXT (parm) = old_result;
1954             }
1955         }
1956
1957       return olddecl;
1958     }
1959
1960   if (types_match)
1961     {
1962       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1963         check_redeclaration_exception_specification (newdecl, olddecl);
1964
1965       /* Automatically handles default parameters.  */
1966       tree oldtype = TREE_TYPE (olddecl);
1967       tree newtype;
1968
1969       /* For typedefs use the old type, as the new type's DECL_NAME points
1970          at newdecl, which will be ggc_freed.  */
1971       if (TREE_CODE (newdecl) == TYPE_DECL)
1972         newtype = oldtype;
1973       else
1974         /* Merge the data types specified in the two decls.  */
1975         newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1976
1977       if (VAR_P (newdecl))
1978         {
1979           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1980           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1981           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1982             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1983           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1984             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1985
1986           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1987           if (DECL_LANG_SPECIFIC (olddecl)
1988               && CP_DECL_THREADPRIVATE_P (olddecl))
1989             {
1990               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1991               if (!DECL_LANG_SPECIFIC (newdecl))
1992                 retrofit_lang_decl (newdecl);
1993
1994               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1995             }
1996         }
1997
1998       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1999
2000       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2001         check_default_args (newdecl);
2002
2003       /* Lay the type out, unless already done.  */
2004       if (! same_type_p (newtype, oldtype)
2005           && TREE_TYPE (newdecl) != error_mark_node
2006           && !(processing_template_decl && uses_template_parms (newdecl)))
2007         layout_type (TREE_TYPE (newdecl));
2008
2009       if ((VAR_P (newdecl)
2010            || TREE_CODE (newdecl) == PARM_DECL
2011            || TREE_CODE (newdecl) == RESULT_DECL
2012            || TREE_CODE (newdecl) == FIELD_DECL
2013            || TREE_CODE (newdecl) == TYPE_DECL)
2014           && !(processing_template_decl && uses_template_parms (newdecl)))
2015         layout_decl (newdecl, 0);
2016
2017       /* Merge the type qualifiers.  */
2018       if (TREE_READONLY (newdecl))
2019         TREE_READONLY (olddecl) = 1;
2020       if (TREE_THIS_VOLATILE (newdecl))
2021         TREE_THIS_VOLATILE (olddecl) = 1;
2022       if (TREE_NOTHROW (newdecl))
2023         TREE_NOTHROW (olddecl) = 1;
2024
2025       /* Merge deprecatedness.  */
2026       if (TREE_DEPRECATED (newdecl))
2027         TREE_DEPRECATED (olddecl) = 1;
2028
2029       /* Preserve function specific target and optimization options */
2030       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2031         {
2032           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2033               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2034             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2035               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2036
2037           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2038               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2039             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2040               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2041         }
2042
2043       /* Merge the initialization information.  */
2044       if (DECL_INITIAL (newdecl) == NULL_TREE
2045           && DECL_INITIAL (olddecl) != NULL_TREE)
2046         {
2047           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2048           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2049           if (TREE_CODE (newdecl) == FUNCTION_DECL)
2050             {
2051               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2052               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2053             }
2054         }
2055
2056       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2057         {
2058           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2059             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2060           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2061           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2062           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2063           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2064           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2065           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2066           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2067           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
2068             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2069           /* Keep the old RTL.  */
2070           COPY_DECL_RTL (olddecl, newdecl);
2071         }
2072       else if (VAR_P (newdecl)
2073                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2074         {
2075           /* Keep the old RTL.  We cannot keep the old RTL if the old
2076              declaration was for an incomplete object and the new
2077              declaration is not since many attributes of the RTL will
2078              change.  */
2079           COPY_DECL_RTL (olddecl, newdecl);
2080         }
2081     }
2082   /* If cannot merge, then use the new type and qualifiers,
2083      and don't preserve the old rtl.  */
2084   else
2085     {
2086       /* Clean out any memory we had of the old declaration.  */
2087       tree oldstatic = value_member (olddecl, static_aggregates);
2088       if (oldstatic)
2089         TREE_VALUE (oldstatic) = error_mark_node;
2090
2091       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2092       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2093       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2094       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2095     }
2096
2097   /* Merge the storage class information.  */
2098   merge_weak (newdecl, olddecl);
2099
2100   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2101   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2102   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2103   if (! DECL_EXTERNAL (olddecl))
2104     DECL_EXTERNAL (newdecl) = 0;
2105
2106   new_template_info = NULL_TREE;
2107   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2108     {
2109       bool new_redefines_gnu_inline = false;
2110
2111       if (new_defines_function
2112           && ((DECL_INTERFACE_KNOWN (olddecl)
2113                && TREE_CODE (olddecl) == FUNCTION_DECL)
2114               || (TREE_CODE (olddecl) == TEMPLATE_DECL
2115                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2116                       == FUNCTION_DECL))))
2117         {
2118           tree fn = olddecl;
2119
2120           if (TREE_CODE (fn) == TEMPLATE_DECL)
2121             fn = DECL_TEMPLATE_RESULT (olddecl);
2122
2123           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2124         }
2125
2126       if (!new_redefines_gnu_inline)
2127         {
2128           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2129           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2130           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2131         }
2132       DECL_TEMPLATE_INSTANTIATED (newdecl)
2133         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2134       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2135
2136       /* If the OLDDECL is an instantiation and/or specialization,
2137          then the NEWDECL must be too.  But, it may not yet be marked
2138          as such if the caller has created NEWDECL, but has not yet
2139          figured out that it is a redeclaration.  */
2140       if (!DECL_USE_TEMPLATE (newdecl))
2141         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2142
2143       /* Don't really know how much of the language-specific
2144          values we should copy from old to new.  */
2145       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2146       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2147       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2148         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2149
2150       if (LANG_DECL_HAS_MIN (newdecl))
2151         {
2152           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2153             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2154           if (DECL_TEMPLATE_INFO (newdecl))
2155             {
2156               new_template_info = DECL_TEMPLATE_INFO (newdecl);
2157               if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2158                   && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2159                 /* Remember the presence of explicit specialization args.  */
2160                 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2161                   = TINFO_USED_TEMPLATE_ID (new_template_info);
2162             }
2163           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2164         }
2165       /* Only functions have these fields.  */
2166       if (DECL_DECLARES_FUNCTION_P (newdecl))
2167         {
2168           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2169           DECL_BEFRIENDING_CLASSES (newdecl)
2170             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2171                        DECL_BEFRIENDING_CLASSES (olddecl));
2172           /* DECL_THUNKS is only valid for virtual functions,
2173              otherwise it is a DECL_FRIEND_CONTEXT.  */
2174           if (DECL_VIRTUAL_P (newdecl))
2175             SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2176         }
2177       /* Only variables have this field.  */
2178       else if (VAR_P (newdecl)
2179                && VAR_HAD_UNKNOWN_BOUND (olddecl))
2180         SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2181     }
2182
2183   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2184     {
2185       tree parm;
2186
2187       /* Merge parameter attributes. */
2188       tree oldarg, newarg;
2189       for (oldarg = DECL_ARGUMENTS(olddecl), 
2190                newarg = DECL_ARGUMENTS(newdecl);
2191            oldarg && newarg;
2192            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2193           DECL_ATTRIBUTES (newarg)
2194               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2195           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2196       }
2197       
2198       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2199           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2200         {
2201           /* If newdecl is not a specialization, then it is not a
2202              template-related function at all.  And that means that we
2203              should have exited above, returning 0.  */
2204           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2205
2206           if (DECL_ODR_USED (olddecl))
2207             /* From [temp.expl.spec]:
2208
2209                If a template, a member template or the member of a class
2210                template is explicitly specialized then that
2211                specialization shall be declared before the first use of
2212                that specialization that would cause an implicit
2213                instantiation to take place, in every translation unit in
2214                which such a use occurs.  */
2215             error ("explicit specialization of %qD after first use",
2216                       olddecl);
2217
2218           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2219           DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2220                                    && DECL_DECLARED_INLINE_P (newdecl));
2221
2222           /* Don't propagate visibility from the template to the
2223              specialization here.  We'll do that in determine_visibility if
2224              appropriate.  */
2225           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2226
2227           /* [temp.expl.spec/14] We don't inline explicit specialization
2228              just because the primary template says so.  */
2229
2230           /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2231              the always_inline attribute.  */
2232           if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2233               && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2234             {
2235               if (DECL_DECLARED_INLINE_P (newdecl))
2236                 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2237               else
2238                 DECL_ATTRIBUTES (newdecl)
2239                   = remove_attribute ("always_inline",
2240                                       DECL_ATTRIBUTES (newdecl));
2241             }
2242         }
2243       else if (new_defines_function && DECL_INITIAL (olddecl))
2244         {
2245           /* Never inline re-defined extern inline functions.
2246              FIXME: this could be better handled by keeping both
2247              function as separate declarations.  */
2248           DECL_UNINLINABLE (newdecl) = 1;
2249         }
2250       else
2251         {
2252           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2253             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2254
2255           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2256
2257           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2258             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2259
2260           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2261             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2262             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2263                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2264         }
2265
2266       /* Preserve abstractness on cloned [cd]tors.  */
2267       DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2268
2269       /* Update newdecl's parms to point at olddecl.  */
2270       for (parm = DECL_ARGUMENTS (newdecl); parm;
2271            parm = DECL_CHAIN (parm))
2272         DECL_CONTEXT (parm) = olddecl;
2273
2274       if (! types_match)
2275         {
2276           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2277           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2278           COPY_DECL_RTL (newdecl, olddecl);
2279         }
2280       if (! types_match || new_defines_function)
2281         {
2282           /* These need to be copied so that the names are available.
2283              Note that if the types do match, we'll preserve inline
2284              info and other bits, but if not, we won't.  */
2285           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2286           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2287         }
2288       /* If redeclaring a builtin function, it stays built in
2289          if newdecl is a gnu_inline definition, or if newdecl is just
2290          a declaration.  */
2291       if (DECL_BUILT_IN (olddecl)
2292           && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2293         {
2294           DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2295           DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2296           /* If we're keeping the built-in definition, keep the rtl,
2297              regardless of declaration matches.  */
2298           COPY_DECL_RTL (olddecl, newdecl);
2299           if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2300             {
2301               enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2302               switch (fncode)
2303                 {
2304                   /* If a compatible prototype of these builtin functions
2305                      is seen, assume the runtime implements it with the
2306                      expected semantics.  */
2307                 case BUILT_IN_STPCPY:
2308                   if (builtin_decl_explicit_p (fncode))
2309                     set_builtin_decl_implicit_p (fncode, true);
2310                   break;
2311                 default:
2312                   if (builtin_decl_explicit_p (fncode))
2313                     set_builtin_decl_declared_p (fncode, true);
2314                   break;
2315                 }
2316             }
2317         }
2318       if (new_defines_function)
2319         /* If defining a function declared with other language
2320            linkage, use the previously declared language linkage.  */
2321         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2322       else if (types_match)
2323         {
2324           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2325           /* Don't clear out the arguments if we're just redeclaring a
2326              function.  */
2327           if (DECL_ARGUMENTS (olddecl))
2328             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2329         }
2330     }
2331   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2332     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2333
2334   /* Now preserve various other info from the definition.  */
2335   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2336   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2337   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2338   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2339
2340   /* Warn about conflicting visibility specifications.  */
2341   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2342       && DECL_VISIBILITY_SPECIFIED (newdecl)
2343       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2344     {
2345       if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2346                       "%qD: visibility attribute ignored because it "
2347                       "conflicts with previous declaration", newdecl))
2348         inform (DECL_SOURCE_LOCATION (olddecl),
2349                 "previous declaration of %qD", olddecl);
2350     }
2351   /* Choose the declaration which specified visibility.  */
2352   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2353     {
2354       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2355       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2356     }
2357   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2358      so keep this behavior.  */
2359   if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2360     {
2361       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2362       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2363     }
2364   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2365   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2366     {
2367       DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2368       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2369     }
2370   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2371   if (TREE_CODE (newdecl) == FIELD_DECL)
2372     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2373
2374   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2375      with that from NEWDECL below.  */
2376   if (DECL_LANG_SPECIFIC (olddecl))
2377     {
2378       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2379                   != DECL_LANG_SPECIFIC (newdecl));
2380       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2381     }
2382
2383   /* Merge the USED information.  */
2384   if (TREE_USED (olddecl))
2385     TREE_USED (newdecl) = 1;
2386   else if (TREE_USED (newdecl))
2387     TREE_USED (olddecl) = 1;
2388   if (VAR_P (newdecl))
2389     {
2390       if (DECL_READ_P (olddecl))
2391         DECL_READ_P (newdecl) = 1;
2392       else if (DECL_READ_P (newdecl))
2393         DECL_READ_P (olddecl) = 1;
2394     }
2395   if (DECL_PRESERVE_P (olddecl))
2396     DECL_PRESERVE_P (newdecl) = 1;
2397   else if (DECL_PRESERVE_P (newdecl))
2398     DECL_PRESERVE_P (olddecl) = 1;
2399
2400   /* Merge the DECL_FUNCTION_VERSIONED information.  newdecl will be copied
2401      to olddecl and deleted.  */
2402   if (TREE_CODE (newdecl) == FUNCTION_DECL
2403       && DECL_FUNCTION_VERSIONED (olddecl))
2404     {
2405       /* Set the flag for newdecl so that it gets copied to olddecl.  */
2406       DECL_FUNCTION_VERSIONED (newdecl) = 1;
2407       /* newdecl will be purged after copying to olddecl and is no longer
2408          a version.  */
2409       cgraph_node::delete_function_version (newdecl);
2410     }
2411
2412   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2413     {
2414       int function_size;
2415       struct symtab_node *snode = symtab_node::get (olddecl);
2416
2417       function_size = sizeof (struct tree_decl_common);
2418
2419       memcpy ((char *) olddecl + sizeof (struct tree_common),
2420               (char *) newdecl + sizeof (struct tree_common),
2421               function_size - sizeof (struct tree_common));
2422
2423       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2424               (char *) newdecl + sizeof (struct tree_decl_common),
2425               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2426
2427       /* Preserve symtab node mapping.  */
2428       olddecl->decl_with_vis.symtab_node = snode;
2429
2430       if (new_template_info)
2431         /* If newdecl is a template instantiation, it is possible that
2432            the following sequence of events has occurred:
2433
2434            o A friend function was declared in a class template.  The
2435            class template was instantiated.
2436
2437            o The instantiation of the friend declaration was
2438            recorded on the instantiation list, and is newdecl.
2439
2440            o Later, however, instantiate_class_template called pushdecl
2441            on the newdecl to perform name injection.  But, pushdecl in
2442            turn called duplicate_decls when it discovered that another
2443            declaration of a global function with the same name already
2444            existed.
2445
2446            o Here, in duplicate_decls, we decided to clobber newdecl.
2447
2448            If we're going to do that, we'd better make sure that
2449            olddecl, and not newdecl, is on the list of
2450            instantiations so that if we try to do the instantiation
2451            again we won't get the clobbered declaration.  */
2452         reregister_specialization (newdecl,
2453                                    new_template_info,
2454                                    olddecl);
2455     }
2456   else
2457     {
2458       size_t size = tree_code_size (TREE_CODE (newdecl));
2459
2460       memcpy ((char *) olddecl + sizeof (struct tree_common),
2461               (char *) newdecl + sizeof (struct tree_common),
2462               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2463       switch (TREE_CODE (newdecl))
2464         {
2465         case LABEL_DECL:
2466         case VAR_DECL:
2467         case RESULT_DECL:
2468         case PARM_DECL:
2469         case FIELD_DECL:
2470         case TYPE_DECL:
2471         case CONST_DECL:
2472           {
2473             struct symtab_node *snode = NULL;
2474
2475             if (TREE_CODE (newdecl) == VAR_DECL
2476                 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl) || DECL_EXTERNAL (olddecl)))
2477               snode = symtab_node::get (olddecl);
2478             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2479                     (char *) newdecl + sizeof (struct tree_decl_common),
2480                     size - sizeof (struct tree_decl_common)
2481                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2482             if (TREE_CODE (newdecl) == VAR_DECL)
2483               olddecl->decl_with_vis.symtab_node = snode;
2484           }
2485           break;
2486         default:
2487           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2488                   (char *) newdecl + sizeof (struct tree_decl_common),
2489                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2490                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2491           break;
2492         }
2493     }
2494
2495   if (TREE_CODE (newdecl) == FUNCTION_DECL
2496       || TREE_CODE (newdecl) == VAR_DECL)
2497     {
2498       if (DECL_EXTERNAL (olddecl)
2499           || TREE_PUBLIC (olddecl)
2500           || TREE_STATIC (olddecl))
2501         {
2502           /* Merge the section attribute.
2503              We want to issue an error if the sections conflict but that must be
2504              done later in decl_attributes since we are called before attributes
2505              are assigned.  */
2506           if (DECL_SECTION_NAME (newdecl) != NULL)
2507             set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2508
2509           if (DECL_ONE_ONLY (newdecl))
2510             {
2511               struct symtab_node *oldsym, *newsym;
2512               if (TREE_CODE (olddecl) == FUNCTION_DECL)
2513                 oldsym = cgraph_node::get_create (olddecl);
2514               else
2515                 oldsym = varpool_node::get_create (olddecl);
2516               newsym = symtab_node::get (newdecl);
2517               oldsym->set_comdat_group (newsym->get_comdat_group ());
2518             }
2519         }
2520
2521       if (TREE_CODE (newdecl) == VAR_DECL
2522           && DECL_THREAD_LOCAL_P (newdecl))
2523         set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2524     }
2525
2526   DECL_UID (olddecl) = olddecl_uid;
2527   if (olddecl_friend)
2528     DECL_FRIEND_P (olddecl) = 1;
2529   if (hidden_friend)
2530     {
2531       DECL_ANTICIPATED (olddecl) = 1;
2532       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2533     }
2534
2535   /* NEWDECL contains the merged attribute lists.
2536      Update OLDDECL to be the same.  */
2537   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2538
2539   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2540     so that encode_section_info has a chance to look at the new decl
2541     flags and attributes.  */
2542   if (DECL_RTL_SET_P (olddecl)
2543       && (TREE_CODE (olddecl) == FUNCTION_DECL
2544           || (VAR_P (olddecl)
2545               && TREE_STATIC (olddecl))))
2546     make_decl_rtl (olddecl);
2547
2548   /* The NEWDECL will no longer be needed.  Because every out-of-class
2549      declaration of a member results in a call to duplicate_decls,
2550      freeing these nodes represents in a significant savings.
2551
2552      Before releasing the node, be sore to remove function from symbol
2553      table that might have been inserted there to record comdat group.
2554      Be sure to however do not free DECL_STRUCT_FUNCTION becuase this
2555      structure is shared in between newdecl and oldecl.  */
2556   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2557     DECL_STRUCT_FUNCTION (newdecl) = NULL;
2558   if (TREE_CODE (newdecl) == FUNCTION_DECL
2559       || TREE_CODE (newdecl) == VAR_DECL)
2560     {
2561       struct symtab_node *snode = symtab_node::get (newdecl);
2562       if (snode)
2563         snode->remove ();
2564     }
2565   ggc_free (newdecl);
2566
2567   return olddecl;
2568 }
2569 \f
2570 /* Return zero if the declaration NEWDECL is valid
2571    when the declaration OLDDECL (assumed to be for the same name)
2572    has already been seen.
2573    Otherwise return an error message format string with a %s
2574    where the identifier should go.  */
2575
2576 static const char *
2577 redeclaration_error_message (tree newdecl, tree olddecl)
2578 {
2579   if (TREE_CODE (newdecl) == TYPE_DECL)
2580     {
2581       /* Because C++ can put things into name space for free,
2582          constructs like "typedef struct foo { ... } foo"
2583          would look like an erroneous redeclaration.  */
2584       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2585         return NULL;
2586       else
2587         return G_("redefinition of %q#D");
2588     }
2589   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2590     {
2591       /* If this is a pure function, its olddecl will actually be
2592          the original initialization to `0' (which we force to call
2593          abort()).  Don't complain about redefinition in this case.  */
2594       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2595           && DECL_INITIAL (olddecl) == NULL_TREE)
2596         return NULL;
2597
2598       /* If both functions come from different namespaces, this is not
2599          a redeclaration - this is a conflict with a used function.  */
2600       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2601           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2602           && ! decls_match (olddecl, newdecl))
2603         return G_("%qD conflicts with used function");
2604
2605       /* We'll complain about linkage mismatches in
2606          warn_extern_redeclared_static.  */
2607
2608       /* Defining the same name twice is no good.  */
2609       if (DECL_INITIAL (olddecl) != NULL_TREE
2610           && DECL_INITIAL (newdecl) != NULL_TREE)
2611         {
2612           if (DECL_NAME (olddecl) == NULL_TREE)
2613             return G_("%q#D not declared in class");
2614           else if (!GNU_INLINE_P (olddecl)
2615                    || GNU_INLINE_P (newdecl))
2616             return G_("redefinition of %q#D");
2617         }
2618
2619       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2620         {
2621           bool olda = GNU_INLINE_P (olddecl);
2622           bool newa = GNU_INLINE_P (newdecl);
2623
2624           if (olda != newa)
2625             {
2626               if (newa)
2627                 return G_("%q+D redeclared inline with "
2628                           "%<gnu_inline%> attribute");
2629               else
2630                 return G_("%q+D redeclared inline without "
2631                           "%<gnu_inline%> attribute");
2632             }
2633         }
2634
2635       check_abi_tag_redeclaration
2636         (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2637          lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2638
2639       return NULL;
2640     }
2641   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2642     {
2643       tree nt, ot;
2644
2645       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2646         {
2647           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2648               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2649             return G_("redefinition of %q#D");
2650           return NULL;
2651         }
2652
2653       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2654           || (DECL_TEMPLATE_RESULT (newdecl)
2655               == DECL_TEMPLATE_RESULT (olddecl)))
2656         return NULL;
2657
2658       nt = DECL_TEMPLATE_RESULT (newdecl);
2659       if (DECL_TEMPLATE_INFO (nt))
2660         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2661       ot = DECL_TEMPLATE_RESULT (olddecl);
2662       if (DECL_TEMPLATE_INFO (ot))
2663         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2664       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2665           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2666         return G_("redefinition of %q#D");
2667
2668       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2669         {
2670           bool olda = GNU_INLINE_P (ot);
2671           bool newa = GNU_INLINE_P (nt);
2672
2673           if (olda != newa)
2674             {
2675               if (newa)
2676                 return G_("%q+D redeclared inline with "
2677                           "%<gnu_inline%> attribute");
2678               else
2679                 return G_("%q+D redeclared inline without "
2680                           "%<gnu_inline%> attribute");
2681             }
2682         }
2683
2684       /* Core issue #226 (C++0x): 
2685            
2686            If a friend function template declaration specifies a
2687            default template-argument, that declaration shall be a
2688            definition and shall be the only declaration of the
2689            function template in the translation unit.  */
2690       if ((cxx_dialect != cxx98) 
2691           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2692           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2693                                        /*is_primary=*/true,
2694                                        /*is_partial=*/false,
2695                                        /*is_friend_decl=*/2))
2696         return G_("redeclaration of friend %q#D "
2697                   "may not have default template arguments");
2698
2699       return NULL;
2700     }
2701   else if (VAR_P (newdecl)
2702            && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2703            && (! DECL_LANG_SPECIFIC (olddecl)
2704                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2705                || DECL_THREAD_LOCAL_P (newdecl)))
2706     {
2707       /* Only variables can be thread-local, and all declarations must
2708          agree on this property.  */
2709       if (DECL_THREAD_LOCAL_P (newdecl))
2710         return G_("thread-local declaration of %q#D follows "
2711                   "non-thread-local declaration");
2712       else
2713         return G_("non-thread-local declaration of %q#D follows "
2714                   "thread-local declaration");
2715     }
2716   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2717     {
2718       /* The objects have been declared at namespace scope.  If either
2719          is a member of an anonymous union, then this is an invalid
2720          redeclaration.  For example:
2721
2722            int i;
2723            union { int i; };
2724
2725            is invalid.  */
2726       if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2727           || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2728         return G_("redeclaration of %q#D");
2729       /* If at least one declaration is a reference, there is no
2730          conflict.  For example:
2731
2732            int i = 3;
2733            extern int i;
2734
2735          is valid.  */
2736       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2737         return NULL;
2738       /* Reject two definitions.  */
2739       return G_("redefinition of %q#D");
2740     }
2741   else
2742     {
2743       /* Objects declared with block scope:  */
2744       /* Reject two definitions, and reject a definition
2745          together with an external reference.  */
2746       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2747         return G_("redeclaration of %q#D");
2748       return NULL;
2749     }
2750 }
2751 \f
2752 /* Hash and equality functions for the named_label table.  */
2753
2754 hashval_t
2755 named_label_hasher::hash (named_label_entry *ent)
2756 {
2757   return DECL_UID (ent->label_decl);
2758 }
2759
2760 bool
2761 named_label_hasher::equal (named_label_entry *a, named_label_entry *b)
2762 {
2763   return a->label_decl == b->label_decl;
2764 }
2765
2766 /* Create a new label, named ID.  */
2767
2768 static tree
2769 make_label_decl (tree id, int local_p)
2770 {
2771   struct named_label_entry *ent;
2772   tree decl;
2773
2774   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2775
2776   DECL_CONTEXT (decl) = current_function_decl;
2777   DECL_MODE (decl) = VOIDmode;
2778   C_DECLARED_LABEL_FLAG (decl) = local_p;
2779
2780   /* Say where one reference is to the label, for the sake of the
2781      error if it is not defined.  */
2782   DECL_SOURCE_LOCATION (decl) = input_location;
2783
2784   /* Record the fact that this identifier is bound to this label.  */
2785   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2786
2787   /* Create the label htab for the function on demand.  */
2788   if (!named_labels)
2789     named_labels = hash_table<named_label_hasher>::create_ggc (13);
2790
2791   /* Record this label on the list of labels used in this function.
2792      We do this before calling make_label_decl so that we get the
2793      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2794   ent = ggc_cleared_alloc<named_label_entry> ();
2795   ent->label_decl = decl;
2796
2797   named_label_entry **slot = named_labels->find_slot (ent, INSERT);
2798   gcc_assert (*slot == NULL);
2799   *slot = ent;
2800
2801   return decl;
2802 }
2803
2804 /* Look for a label named ID in the current function.  If one cannot
2805    be found, create one.  (We keep track of used, but undefined,
2806    labels, and complain about them at the end of a function.)  */
2807
2808 static tree
2809 lookup_label_1 (tree id)
2810 {
2811   tree decl;
2812
2813   /* You can't use labels at global scope.  */
2814   if (current_function_decl == NULL_TREE)
2815     {
2816       error ("label %qE referenced outside of any function", id);
2817       return NULL_TREE;
2818     }
2819
2820   /* See if we've already got this label.  */
2821   decl = IDENTIFIER_LABEL_VALUE (id);
2822   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2823     return decl;
2824
2825   decl = make_label_decl (id, /*local_p=*/0);
2826   return decl;
2827 }
2828
2829 /* Wrapper for lookup_label_1.  */
2830
2831 tree
2832 lookup_label (tree id)
2833 {
2834   tree ret;
2835   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2836   ret = lookup_label_1 (id);
2837   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2838   return ret;
2839 }
2840
2841 /* Declare a local label named ID.  */
2842
2843 tree
2844 declare_local_label (tree id)
2845 {
2846   tree decl;
2847   cp_label_binding bind;
2848
2849   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2850      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2851   bind.prev_value = IDENTIFIER_LABEL_VALUE (id);
2852
2853   decl = make_label_decl (id, /*local_p=*/1);
2854   bind.label = decl;
2855   vec_safe_push (current_binding_level->shadowed_labels, bind);
2856
2857   return decl;
2858 }
2859
2860 /* Returns nonzero if it is ill-formed to jump past the declaration of
2861    DECL.  Returns 2 if it's also a real problem.  */
2862
2863 static int
2864 decl_jump_unsafe (tree decl)
2865 {
2866   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2867      with automatic storage duration is not in scope to a point where it is
2868      in scope is ill-formed unless the variable has scalar type, class type
2869      with a trivial default constructor and a trivial destructor, a
2870      cv-qualified version of one of these types, or an array of one of the
2871      preceding types and is declared without an initializer (8.5).  */
2872   tree type = TREE_TYPE (decl);
2873
2874   if (!VAR_P (decl) || TREE_STATIC (decl)
2875       || type == error_mark_node)
2876     return 0;
2877
2878   if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
2879       || variably_modified_type_p (type, NULL_TREE))
2880     return 2;
2881
2882   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
2883     return 1;
2884
2885   return 0;
2886 }
2887
2888 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2889
2890 static bool
2891 identify_goto (tree decl, const location_t *locus)
2892 {
2893   bool complained = (decl
2894                      ? permerror (input_location, "jump to label %qD", decl)
2895                      : permerror (input_location, "jump to case label"));
2896   if (complained && locus)
2897     inform (*locus, "  from here");
2898   return complained;
2899 }
2900
2901 /* Check that a single previously seen jump to a newly defined label
2902    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2903    the jump context; NAMES are the names in scope in LEVEL at the jump
2904    context; LOCUS is the source position of the jump or 0.  Returns
2905    true if all is well.  */
2906
2907 static bool
2908 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2909                        bool exited_omp, const location_t *locus)
2910 {
2911   cp_binding_level *b;
2912   bool identified = false, complained = false;
2913   bool saw_eh = false, saw_omp = false;
2914
2915   if (exited_omp)
2916     {
2917       complained = identify_goto (decl, locus);
2918       if (complained)
2919         inform (input_location, "  exits OpenMP structured block");
2920       identified = saw_omp = true;
2921     }
2922
2923   for (b = current_binding_level; b ; b = b->level_chain)
2924     {
2925       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2926
2927       for (new_decls = b->names; new_decls != old_decls;
2928            new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2929                         : TREE_CHAIN (new_decls)))
2930         {
2931           int problem = decl_jump_unsafe (new_decls);
2932           if (! problem)
2933             continue;
2934
2935           if (!identified)
2936             {
2937               complained = identify_goto (decl, locus);
2938               identified = true;
2939             }
2940           if (complained)
2941             {
2942               if (problem > 1)
2943                 inform (input_location,
2944                         "  crosses initialization of %q+#D", new_decls);
2945               else
2946                 inform (input_location, "  enters scope of %q+#D which has "
2947                         "non-trivial destructor", new_decls);
2948             }
2949         }
2950
2951       if (b == level)
2952         break;
2953       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2954         {
2955           if (!identified)
2956             {
2957               complained = identify_goto (decl, locus);
2958               identified = true;
2959             }
2960           if (complained)
2961             {
2962               if (b->kind == sk_try)
2963                 inform (input_location, "  enters try block");
2964               else
2965                 inform (input_location, "  enters catch block");
2966             }
2967           saw_eh = true;
2968         }
2969       if (b->kind == sk_omp && !saw_omp)
2970         {
2971           if (!identified)
2972             {
2973               complained = identify_goto (decl, locus);
2974               identified = true;
2975             }
2976           if (complained)
2977             inform (input_location, "  enters OpenMP structured block");
2978           saw_omp = true;
2979         }
2980     }
2981
2982   return !identified;
2983 }
2984
2985 static void
2986 check_previous_goto (tree decl, struct named_label_use_entry *use)
2987 {
2988   check_previous_goto_1 (decl, use->binding_level,
2989                          use->names_in_scope, use->in_omp_scope,
2990                          &use->o_goto_locus);
2991 }
2992
2993 static bool
2994 check_switch_goto (cp_binding_level* level)
2995 {
2996   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2997 }
2998
2999 /* Check that a new jump to a label DECL is OK.  Called by
3000    finish_goto_stmt.  */
3001
3002 void
3003 check_goto (tree decl)
3004 {
3005   struct named_label_entry *ent, dummy;
3006   bool saw_catch = false, identified = false, complained = false;
3007   tree bad;
3008   unsigned ix;
3009
3010   /* We can't know where a computed goto is jumping.
3011      So we assume that it's OK.  */
3012   if (TREE_CODE (decl) != LABEL_DECL)
3013     return;
3014
3015   /* We didn't record any information about this label when we created it,
3016      and there's not much point since it's trivial to analyze as a return.  */
3017   if (decl == cdtor_label)
3018     return;
3019
3020   dummy.label_decl = decl;
3021   ent = named_labels->find (&dummy);
3022   gcc_assert (ent != NULL);
3023
3024   /* If the label hasn't been defined yet, defer checking.  */
3025   if (! DECL_INITIAL (decl))
3026     {
3027       struct named_label_use_entry *new_use;
3028
3029       /* Don't bother creating another use if the last goto had the
3030          same data, and will therefore create the same set of errors.  */
3031       if (ent->uses
3032           && ent->uses->names_in_scope == current_binding_level->names)
3033         return;
3034
3035       new_use = ggc_alloc<named_label_use_entry> ();
3036       new_use->binding_level = current_binding_level;
3037       new_use->names_in_scope = current_binding_level->names;
3038       new_use->o_goto_locus = input_location;
3039       new_use->in_omp_scope = false;
3040
3041       new_use->next = ent->uses;
3042       ent->uses = new_use;
3043       return;
3044     }
3045
3046   if (ent->in_try_scope || ent->in_catch_scope
3047       || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3048     {
3049       complained = permerror (input_location, "jump to label %q+D", decl);
3050       if (complained)
3051         inform (input_location, "  from here");
3052       identified = true;
3053     }
3054
3055   FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3056     {
3057       int u = decl_jump_unsafe (bad);
3058
3059       if (u > 1 && DECL_ARTIFICIAL (bad))
3060         {
3061           /* Can't skip init of __exception_info.  */
3062           if (complained)
3063             inform (DECL_SOURCE_LOCATION (bad), "  enters catch block");
3064           saw_catch = true;
3065         }
3066       else if (complained)
3067         {
3068           if (u > 1)
3069             inform (input_location, "  skips initialization of %q+#D", bad);
3070           else
3071             inform (input_location, "  enters scope of %q+#D which has "
3072                     "non-trivial destructor", bad);
3073         }
3074     }
3075
3076   if (complained)
3077     {
3078       if (ent->in_try_scope)
3079         inform (input_location, "  enters try block");
3080       else if (ent->in_catch_scope && !saw_catch)
3081         inform (input_location, "  enters catch block");
3082     }
3083
3084   if (ent->in_omp_scope)
3085     {
3086       if (complained)
3087         inform (input_location, "  enters OpenMP structured block");
3088     }
3089   else if (flag_openmp)
3090     {
3091       cp_binding_level *b;
3092       for (b = current_binding_level; b ; b = b->level_chain)
3093         {
3094           if (b == ent->binding_level)
3095             break;
3096           if (b->kind == sk_omp)
3097             {
3098               if (!identified)
3099                 {
3100                   complained = permerror (input_location,
3101                                           "jump to label %q+D", decl);
3102                   if (complained)
3103                     inform (input_location, "  from here");
3104                   identified = true;
3105                 }
3106               if (complained)
3107                 inform (input_location, "  exits OpenMP structured block");
3108               break;
3109             }
3110         }
3111     }
3112 }
3113
3114 /* Check that a return is ok wrt OpenMP structured blocks.
3115    Called by finish_return_stmt.  Returns true if all is well.  */
3116
3117 bool
3118 check_omp_return (void)
3119 {
3120   cp_binding_level *b;
3121   for (b = current_binding_level; b ; b = b->level_chain)
3122     if (b->kind == sk_omp)
3123       {
3124         error ("invalid exit from OpenMP structured block");
3125         return false;
3126       }
3127     else if (b->kind == sk_function_parms)
3128       break;
3129   return true;
3130 }
3131
3132 /* Define a label, specifying the location in the source file.
3133    Return the LABEL_DECL node for the label.  */
3134
3135 static tree
3136 define_label_1 (location_t location, tree name)
3137 {
3138   struct named_label_entry *ent, dummy;
3139   cp_binding_level *p;
3140   tree decl;
3141
3142   decl = lookup_label (name);
3143
3144   dummy.label_decl = decl;
3145   ent = named_labels->find (&dummy);
3146   gcc_assert (ent != NULL);
3147
3148   /* After labels, make any new cleanups in the function go into their
3149      own new (temporary) binding contour.  */
3150   for (p = current_binding_level;
3151        p->kind != sk_function_parms;
3152        p = p->level_chain)
3153     p->more_cleanups_ok = 0;
3154
3155   if (name == get_identifier ("wchar_t"))
3156     permerror (input_location, "label named wchar_t");
3157
3158   if (DECL_INITIAL (decl) != NULL_TREE)
3159     {
3160       error ("duplicate label %qD", decl);
3161       return error_mark_node;
3162     }
3163   else
3164     {
3165       struct named_label_use_entry *use;
3166
3167       /* Mark label as having been defined.  */
3168       DECL_INITIAL (decl) = error_mark_node;
3169       /* Say where in the source.  */
3170       DECL_SOURCE_LOCATION (decl) = location;
3171
3172       ent->binding_level = current_binding_level;
3173       ent->names_in_scope = current_binding_level->names;
3174
3175       for (use = ent->uses; use ; use = use->next)
3176         check_previous_goto (decl, use);
3177       ent->uses = NULL;
3178     }
3179
3180   return decl;
3181 }
3182
3183 /* Wrapper for define_label_1.  */
3184
3185 tree
3186 define_label (location_t location, tree name)
3187 {
3188   tree ret;
3189   bool running = timevar_cond_start (TV_NAME_LOOKUP);
3190   ret = define_label_1 (location, name);
3191   timevar_cond_stop (TV_NAME_LOOKUP, running);
3192   return ret;
3193 }
3194
3195
3196 struct cp_switch
3197 {
3198   cp_binding_level *level;
3199   struct cp_switch *next;
3200   /* The SWITCH_STMT being built.  */
3201   tree switch_stmt;
3202   /* A splay-tree mapping the low element of a case range to the high
3203      element, or NULL_TREE if there is no high element.  Used to
3204      determine whether or not a new case label duplicates an old case
3205      label.  We need a tree, rather than simply a hash table, because
3206      of the GNU case range extension.  */
3207   splay_tree cases;
3208 };
3209
3210 /* A stack of the currently active switch statements.  The innermost
3211    switch statement is on the top of the stack.  There is no need to
3212    mark the stack for garbage collection because it is only active
3213    during the processing of the body of a function, and we never
3214    collect at that point.  */
3215
3216 static struct cp_switch *switch_stack;
3217
3218 /* Called right after a switch-statement condition is parsed.
3219    SWITCH_STMT is the switch statement being parsed.  */
3220
3221 void
3222 push_switch (tree switch_stmt)
3223 {
3224   struct cp_switch *p = XNEW (struct cp_switch);
3225   p->level = current_binding_level;
3226   p->next = switch_stack;
3227   p->switch_stmt = switch_stmt;
3228   p->cases = splay_tree_new (case_compare, NULL, NULL);
3229   switch_stack = p;
3230 }
3231
3232 void
3233 pop_switch (void)
3234 {
3235   struct cp_switch *cs = switch_stack;
3236   location_t switch_location;
3237
3238   /* Emit warnings as needed.  */
3239   switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3240   if (!processing_template_decl)
3241     c_do_switch_warnings (cs->cases, switch_location,
3242                           SWITCH_STMT_TYPE (cs->switch_stmt),
3243                           SWITCH_STMT_COND (cs->switch_stmt));
3244
3245   splay_tree_delete (cs->cases);
3246   switch_stack = switch_stack->next;
3247   free (cs);
3248 }
3249
3250 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3251    condition.  Note that if TYPE and VALUE are already integral we don't
3252    really do the conversion because the language-independent
3253    warning/optimization code will work better that way.  */
3254
3255 static tree
3256 case_conversion (tree type, tree value)
3257 {
3258   if (value == NULL_TREE)
3259     return value;
3260
3261   if (cxx_dialect >= cxx11
3262       && (SCOPED_ENUM_P (type)
3263           || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3264     {
3265       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3266         type = type_promotes_to (type);
3267       value = (perform_implicit_conversion_flags
3268                (type, value, tf_warning_or_error,
3269                 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3270     }
3271   return cxx_constant_value (value);
3272 }
3273
3274 /* Note that we've seen a definition of a case label, and complain if this
3275    is a bad place for one.  */
3276
3277 tree
3278 finish_case_label (location_t loc, tree low_value, tree high_value)
3279 {
3280   tree cond, r;
3281   cp_binding_level *p;
3282   tree type;
3283
3284   if (processing_template_decl)
3285     {
3286       tree label;
3287
3288       /* For templates, just add the case label; we'll do semantic
3289          analysis at instantiation-time.  */
3290       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3291       return add_stmt (build_case_label (low_value, high_value, label));
3292     }
3293
3294   /* Find the condition on which this switch statement depends.  */
3295   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3296   if (cond && TREE_CODE (cond) == TREE_LIST)
3297     cond = TREE_VALUE (cond);
3298
3299   if (!check_switch_goto (switch_stack->level))
3300     return error_mark_node;
3301
3302   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3303
3304   low_value = case_conversion (type, low_value);
3305   high_value = case_conversion (type, high_value);
3306
3307   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3308                         low_value, high_value);
3309
3310   /* After labels, make any new cleanups in the function go into their
3311      own new (temporary) binding contour.  */
3312   for (p = current_binding_level;
3313        p->kind != sk_function_parms;
3314        p = p->level_chain)
3315     p->more_cleanups_ok = 0;
3316
3317   return r;
3318 }
3319 \f
3320 struct typename_info {
3321   tree scope;
3322   tree name;
3323   tree template_id;
3324   bool enum_p;
3325   bool class_p;
3326 };
3327
3328 struct typename_hasher : ggc_hasher<tree>
3329 {
3330   typedef typename_info *compare_type;
3331
3332   /* Hash a TYPENAME_TYPE.  */
3333
3334   static hashval_t
3335   hash (tree t)
3336   {
3337     hashval_t hash;
3338
3339     hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3340             ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3341
3342     return hash;
3343   }
3344
3345   /* Compare two TYPENAME_TYPEs.  */
3346
3347   static bool
3348   equal (tree t1, const typename_info *t2)
3349   {
3350     return (TYPE_IDENTIFIER (t1) == t2->name
3351             && TYPE_CONTEXT (t1) == t2->scope
3352             && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3353             && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3354             && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3355   }
3356 };
3357
3358 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3359    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3360
3361    Returns the new TYPENAME_TYPE.  */
3362
3363 static GTY (()) hash_table<typename_hasher> *typename_htab;
3364
3365 static tree
3366 build_typename_type (tree context, tree name, tree fullname,
3367                      enum tag_types tag_type)
3368 {
3369   tree t;
3370   tree d;
3371   typename_info ti;
3372   tree *e;
3373   hashval_t hash;
3374
3375   if (typename_htab == NULL)
3376     typename_htab = hash_table<typename_hasher>::create_ggc (61);
3377
3378   ti.scope = FROB_CONTEXT (context);
3379   ti.name = name;
3380   ti.template_id = fullname;
3381   ti.enum_p = tag_type == enum_type;
3382   ti.class_p = (tag_type == class_type
3383                 || tag_type == record_type
3384                 || tag_type == union_type);
3385   hash =  (htab_hash_pointer (ti.scope)
3386            ^ htab_hash_pointer (ti.name));
3387
3388   /* See if we already have this type.  */
3389   e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3390   if (*e)
3391     t = *e;
3392   else
3393     {
3394       /* Build the TYPENAME_TYPE.  */
3395       t = cxx_make_type (TYPENAME_TYPE);
3396       TYPE_CONTEXT (t) = ti.scope;
3397       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3398       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3399       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3400
3401       /* Build the corresponding TYPE_DECL.  */
3402       d = build_decl (input_location, TYPE_DECL, name, t);
3403       TYPE_NAME (TREE_TYPE (d)) = d;
3404       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3405       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3406       DECL_ARTIFICIAL (d) = 1;
3407
3408       /* Store it in the hash table.  */
3409       *e = t;
3410
3411       /* TYPENAME_TYPEs must always be compared structurally, because
3412          they may or may not resolve down to another type depending on
3413          the currently open classes. */
3414       SET_TYPE_STRUCTURAL_EQUALITY (t);
3415     }
3416
3417   return t;
3418 }
3419
3420 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3421    provided to name the type.  Returns an appropriate type, unless an
3422    error occurs, in which case error_mark_node is returned.  If we
3423    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3424    return that, rather than the _TYPE it corresponds to, in other
3425    cases we look through the type decl.  If TF_ERROR is set, complain
3426    about errors, otherwise be quiet.  */
3427
3428 tree
3429 make_typename_type (tree context, tree name, enum tag_types tag_type,
3430                     tsubst_flags_t complain)
3431 {
3432   tree fullname;
3433   tree t;
3434   bool want_template;
3435
3436   if (name == error_mark_node
3437       || context == NULL_TREE
3438       || context == error_mark_node)
3439     return error_mark_node;
3440
3441   if (TYPE_P (name))
3442     {
3443       if (!(TYPE_LANG_SPECIFIC (name)
3444             && (CLASSTYPE_IS_TEMPLATE (name)
3445                 || CLASSTYPE_USE_TEMPLATE (name))))
3446         name = TYPE_IDENTIFIER (name);
3447       else
3448         /* Create a TEMPLATE_ID_EXPR for the type.  */
3449         name = build_nt (TEMPLATE_ID_EXPR,
3450                          CLASSTYPE_TI_TEMPLATE (name),
3451                          CLASSTYPE_TI_ARGS (name));
3452     }
3453   else if (TREE_CODE (name) == TYPE_DECL)
3454     name = DECL_NAME (name);
3455
3456   fullname = name;
3457
3458   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3459     {
3460       name = TREE_OPERAND (name, 0);
3461       if (TREE_CODE (name) == TEMPLATE_DECL)
3462         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3463       else if (TREE_CODE (name) == OVERLOAD)
3464         {
3465           if (complain & tf_error)
3466             error ("%qD is not a type", name);
3467           return error_mark_node;
3468         }
3469     }
3470   if (TREE_CODE (name) == TEMPLATE_DECL)
3471     {
3472       if (complain & tf_error)
3473         error ("%qD used without template parameters", name);
3474       return error_mark_node;
3475     }
3476   gcc_assert (identifier_p (name));
3477   gcc_assert (TYPE_P (context));
3478
3479   if (!MAYBE_CLASS_TYPE_P (context))
3480     {
3481       if (complain & tf_error)
3482         error ("%q#T is not a class", context);
3483       return error_mark_node;
3484     }
3485   
3486   /* When the CONTEXT is a dependent type,  NAME could refer to a
3487      dependent base class of CONTEXT.  But look inside it anyway
3488      if CONTEXT is a currently open scope, in case it refers to a
3489      member of the current instantiation or a non-dependent base;
3490      lookup will stop when we hit a dependent base.  */
3491   if (!dependent_scope_p (context))
3492     /* We should only set WANT_TYPE when we're a nested typename type.
3493        Then we can give better diagnostics if we find a non-type.  */
3494     t = lookup_field (context, name, 2, /*want_type=*/true);
3495   else
3496     t = NULL_TREE;
3497
3498   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3499     return build_typename_type (context, name, fullname, tag_type);
3500
3501   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3502   
3503   if (!t)
3504     {
3505       if (complain & tf_error)
3506         error (want_template ? G_("no class template named %q#T in %q#T")
3507                : G_("no type named %q#T in %q#T"), name, context);
3508       return error_mark_node;
3509     }
3510   
3511   /* Pull out the template from an injected-class-name (or multiple).  */
3512   if (want_template)
3513     t = maybe_get_template_decl_from_type_decl (t);
3514
3515   if (TREE_CODE (t) == TREE_LIST)
3516     {
3517       if (complain & tf_error)
3518         {
3519           error ("lookup of %qT in %qT is ambiguous", name, context);
3520           print_candidates (t);
3521         }
3522       return error_mark_node;
3523     }
3524
3525   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3526     {
3527       if (complain & tf_error)
3528         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3529                context, name, t);
3530       return error_mark_node;
3531     }
3532   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3533     {
3534       if (complain & tf_error)
3535         error ("%<typename %T::%D%> names %q#T, which is not a type",
3536                context, name, t);
3537       return error_mark_node;
3538     }
3539
3540   if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3541     return error_mark_node;
3542
3543   /* If we are currently parsing a template and if T is a typedef accessed
3544      through CONTEXT then we need to remember and check access of T at
3545      template instantiation time.  */
3546   add_typedef_to_current_template_for_access_check (t, context, input_location);
3547
3548   if (want_template)
3549     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3550                                   NULL_TREE, context,
3551                                   /*entering_scope=*/0,
3552                                   tf_warning_or_error | tf_user);
3553   
3554   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3555     t = TREE_TYPE (t);
3556
3557   maybe_record_typedef_use (t);
3558
3559   return t;
3560 }
3561
3562 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3563    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3564    in which case error_mark_node is returned.
3565
3566    If PARM_LIST is non-NULL, also make sure that the template parameter
3567    list of TEMPLATE_DECL matches.
3568
3569    If COMPLAIN zero, don't complain about any errors that occur.  */
3570
3571 tree
3572 make_unbound_class_template (tree context, tree name, tree parm_list,
3573                              tsubst_flags_t complain)
3574 {
3575   tree t;
3576   tree d;
3577
3578   if (TYPE_P (name))
3579     name = TYPE_IDENTIFIER (name);
3580   else if (DECL_P (name))
3581     name = DECL_NAME (name);
3582   gcc_assert (identifier_p (name));
3583
3584   if (!dependent_type_p (context)
3585       || currently_open_class (context))
3586     {
3587       tree tmpl = NULL_TREE;
3588
3589       if (MAYBE_CLASS_TYPE_P (context))
3590         tmpl = lookup_field (context, name, 0, false);
3591
3592       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3593         tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3594
3595       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3596         {
3597           if (complain & tf_error)
3598             error ("no class template named %q#T in %q#T", name, context);
3599           return error_mark_node;
3600         }
3601
3602       if (parm_list
3603           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3604         {
3605           if (complain & tf_error)
3606             {
3607               error ("template parameters do not match template %qD", tmpl);
3608               inform (DECL_SOURCE_LOCATION (tmpl),
3609                       "%qD declared here", tmpl);
3610             }
3611           return error_mark_node;
3612         }
3613
3614       if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3615                                           complain))
3616         return error_mark_node;
3617
3618       return tmpl;
3619     }
3620
3621   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3622   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3623   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3624   TREE_TYPE (t) = NULL_TREE;
3625   SET_TYPE_STRUCTURAL_EQUALITY (t);
3626
3627   /* Build the corresponding TEMPLATE_DECL.  */
3628   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3629   TYPE_NAME (TREE_TYPE (d)) = d;
3630   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3631   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3632   DECL_ARTIFICIAL (d) = 1;
3633   DECL_TEMPLATE_PARMS (d) = parm_list;
3634
3635   return t;
3636 }
3637
3638 \f
3639
3640 /* Push the declarations of builtin types into the namespace.
3641    RID_INDEX is the index of the builtin type in the array
3642    RID_POINTERS.  NAME is the name used when looking up the builtin
3643    type.  TYPE is the _TYPE node for the builtin type.  */
3644
3645 void
3646 record_builtin_type (enum rid rid_index,
3647                      const char* name,
3648                      tree type)
3649 {
3650   tree rname = NULL_TREE, tname = NULL_TREE;
3651   tree tdecl = NULL_TREE;
3652
3653   if ((int) rid_index < (int) RID_MAX)
3654     rname = ridpointers[(int) rid_index];
3655   if (name)
3656     tname = get_identifier (name);
3657
3658   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3659      eliminated.  Built-in types should not be looked up name; their
3660      names are keywords that the parser can recognize.  However, there
3661      is code in c-common.c that uses identifier_global_value to look
3662      up built-in types by name.  */
3663   if (tname)
3664     {
3665       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3666       DECL_ARTIFICIAL (tdecl) = 1;
3667       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3668     }
3669   if (rname)
3670     {
3671       if (!tdecl)
3672         {
3673           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3674           DECL_ARTIFICIAL (tdecl) = 1;
3675         }
3676       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3677     }
3678
3679   if (!TYPE_NAME (type))
3680     TYPE_NAME (type) = tdecl;
3681
3682   if (tdecl)
3683     debug_hooks->type_decl (tdecl, 0);
3684 }
3685
3686 /* Record one of the standard Java types.
3687  * Declare it as having the given NAME.
3688  * If SIZE > 0, it is the size of one of the integral types;
3689  * otherwise it is the negative of the size of one of the other types.  */
3690
3691 static tree
3692 record_builtin_java_type (const char* name, int size)
3693 {
3694   tree type, decl;
3695   if (size > 0)
3696     {
3697       type = build_nonstandard_integer_type (size, 0);
3698       type = build_distinct_type_copy (type);
3699     }
3700   else if (size > -32)
3701     {
3702       tree stype;
3703       /* "__java_char" or ""__java_boolean".  */
3704       type = build_nonstandard_integer_type (-size, 1);
3705       type = build_distinct_type_copy (type);
3706       /* Get the signed type cached and attached to the unsigned type,
3707          so it doesn't get garbage-collected at "random" times,
3708          causing potential codegen differences out of different UIDs
3709          and different alias set numbers.  */
3710       stype = build_nonstandard_integer_type (-size, 0);
3711       stype = build_distinct_type_copy (stype);
3712       TREE_CHAIN (type) = stype;
3713       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3714     }
3715   else
3716     { /* "__java_float" or ""__java_double".  */
3717       type = make_node (REAL_TYPE);
3718       TYPE_PRECISION (type) = - size;
3719       layout_type (type);
3720     }
3721   record_builtin_type (RID_MAX, name, type);
3722   decl = TYPE_NAME (type);
3723
3724   /* Suppress generate debug symbol entries for these types,
3725      since for normal C++ they are just clutter.
3726      However, push_lang_context undoes this if extern "Java" is seen.  */
3727   DECL_IGNORED_P (decl) = 1;
3728
3729   TYPE_FOR_JAVA (type) = 1;
3730   return type;
3731 }
3732
3733 /* Push a type into the namespace so that the back ends ignore it.  */
3734
3735 static void
3736 record_unknown_type (tree type, const char* name)
3737 {
3738   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3739                                     TYPE_DECL, get_identifier (name), type));
3740   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3741   DECL_IGNORED_P (decl) = 1;
3742   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3743   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3744   TYPE_ALIGN (type) = 1;
3745   TYPE_USER_ALIGN (type) = 0;
3746   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3747 }
3748
3749 /* A string for which we should create an IDENTIFIER_NODE at
3750    startup.  */
3751
3752 typedef struct predefined_identifier
3753 {
3754   /* The name of the identifier.  */
3755   const char *const name;
3756   /* The place where the IDENTIFIER_NODE should be stored.  */
3757   tree *const node;
3758   /* Nonzero if this is the name of a constructor or destructor.  */
3759   const int ctor_or_dtor_p;
3760 } predefined_identifier;
3761
3762 /* Create all the predefined identifiers.  */
3763
3764 static void
3765 initialize_predefined_identifiers (void)
3766 {
3767   const predefined_identifier *pid;
3768
3769   /* A table of identifiers to create at startup.  */
3770   static const predefined_identifier predefined_identifiers[] = {
3771     { "C++", &lang_name_cplusplus, 0 },
3772     { "C", &lang_name_c, 0 },
3773     { "Java", &lang_name_java, 0 },
3774     /* Some of these names have a trailing space so that it is
3775        impossible for them to conflict with names written by users.  */
3776     { "__ct ", &ctor_identifier, 1 },
3777     { "__base_ctor ", &base_ctor_identifier, 1 },
3778     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3779     { "__dt ", &dtor_identifier, 1 },
3780     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3781     { "__base_dtor ", &base_dtor_identifier, 1 },
3782     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3783     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3784     { "nelts", &nelts_identifier, 0 },
3785     { THIS_NAME, &this_identifier, 0 },
3786     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3787     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3788     { "_vptr", &vptr_identifier, 0 },
3789     { "__vtt_parm", &vtt_parm_identifier, 0 },
3790     { "::", &global_scope_name, 0 },
3791     { "std", &std_identifier, 0 },
3792     { NULL, NULL, 0 }
3793   };
3794
3795   for (pid = predefined_identifiers; pid->name; ++pid)
3796     {
3797       *pid->node = get_identifier (pid->name);
3798       if (pid->ctor_or_dtor_p)
3799         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3800     }
3801 }
3802
3803 /* Create the predefined scalar types of C,
3804    and some nodes representing standard constants (0, 1, (void *)0).
3805    Initialize the global binding level.
3806    Make definitions for built-in primitive functions.  */
3807
3808 void
3809 cxx_init_decl_processing (void)
3810 {
3811   tree void_ftype;
3812   tree void_ftype_ptr;
3813
3814   /* Create all the identifiers we need.  */
3815   initialize_predefined_identifiers ();
3816
3817   /* Create the global variables.  */
3818   push_to_top_level ();
3819
3820   current_function_decl = NULL_TREE;
3821   current_binding_level = NULL;
3822   /* Enter the global namespace.  */
3823   gcc_assert (global_namespace == NULL_TREE);
3824   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3825                                       void_type_node);
3826   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3827   TREE_PUBLIC (global_namespace) = 1;
3828   begin_scope (sk_namespace, global_namespace);
3829
3830   if (flag_visibility_ms_compat)
3831     default_visibility = VISIBILITY_HIDDEN;
3832
3833   /* Initially, C.  */
3834   current_lang_name = lang_name_c;
3835
3836   /* Create the `std' namespace.  */
3837   push_namespace (std_identifier);
3838   std_node = current_namespace;
3839   pop_namespace ();
3840
3841   c_common_nodes_and_builtins ();
3842
3843   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3844   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3845   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3846   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3847   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3848   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3849   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3850   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3851
3852   integer_two_node = build_int_cst (NULL_TREE, 2);
3853
3854   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3855   truthvalue_type_node = boolean_type_node;
3856   truthvalue_false_node = boolean_false_node;
3857   truthvalue_true_node = boolean_true_node;
3858
3859   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3860   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3861   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3862
3863 #if 0
3864   record_builtin_type (RID_MAX, NULL, string_type_node);
3865 #endif
3866
3867   delta_type_node = ptrdiff_type_node;
3868   vtable_index_type = ptrdiff_type_node;
3869
3870   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3871   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3872   void_ftype_ptr = build_function_type_list (void_type_node,
3873                                              ptr_type_node, NULL_TREE);
3874   void_ftype_ptr
3875     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3876
3877   /* C++ extensions */
3878
3879   unknown_type_node = make_node (LANG_TYPE);
3880   record_unknown_type (unknown_type_node, "unknown type");
3881
3882   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3883   TREE_TYPE (unknown_type_node) = unknown_type_node;
3884
3885   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3886      result.  */
3887   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3888   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3889
3890   init_list_type_node = make_node (LANG_TYPE);
3891   record_unknown_type (init_list_type_node, "init list");
3892
3893   {
3894     /* Make sure we get a unique function type, so we can give
3895        its pointer type a name.  (This wins for gdb.) */
3896     tree vfunc_type = make_node (FUNCTION_TYPE);
3897     TREE_TYPE (vfunc_type) = integer_type_node;
3898     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3899     layout_type (vfunc_type);
3900
3901     vtable_entry_type = build_pointer_type (vfunc_type);
3902   }
3903   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3904
3905   vtbl_type_node
3906     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3907   layout_type (vtbl_type_node);
3908   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3909   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3910   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3911   layout_type (vtbl_ptr_type_node);
3912   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3913
3914   push_namespace (get_identifier ("__cxxabiv1"));
3915   abi_node = current_namespace;
3916   pop_namespace ();
3917
3918   global_type_node = make_node (LANG_TYPE);
3919   record_unknown_type (global_type_node, "global type");
3920
3921   /* Now, C++.  */
3922   current_lang_name = lang_name_cplusplus;
3923
3924   {
3925     tree newattrs, extvisattr;
3926     tree newtype, deltype;
3927     tree ptr_ftype_sizetype;
3928     tree new_eh_spec;
3929
3930     ptr_ftype_sizetype
3931       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3932     if (cxx_dialect == cxx98)
3933       {
3934         tree bad_alloc_id;
3935         tree bad_alloc_type_node;
3936         tree bad_alloc_decl;
3937
3938         push_namespace (std_identifier);
3939         bad_alloc_id = get_identifier ("bad_alloc");
3940         bad_alloc_type_node = make_class_type (RECORD_TYPE);
3941         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3942         bad_alloc_decl
3943           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3944         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3945         pop_namespace ();
3946
3947         new_eh_spec
3948           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3949       }
3950     else
3951       new_eh_spec = noexcept_false_spec;
3952
3953     /* Ensure attribs.c is initialized.  */
3954     init_attributes ();
3955     extvisattr = build_tree_list (get_identifier ("externally_visible"),
3956                                   NULL_TREE);
3957     newattrs = tree_cons (get_identifier ("alloc_size"),
3958                           build_tree_list (NULL_TREE, integer_one_node),
3959                           extvisattr);
3960     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3961     newtype = build_exception_variant (newtype, new_eh_spec);
3962     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3963     deltype = build_exception_variant (deltype, empty_except_spec);
3964     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
3965     DECL_IS_MALLOC (opnew) = 1;
3966     DECL_IS_OPERATOR_NEW (opnew) = 1;
3967     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
3968     DECL_IS_MALLOC (opnew) = 1;
3969     DECL_IS_OPERATOR_NEW (opnew) = 1;
3970     push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3971     push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3972     if (flag_sized_deallocation)
3973       {
3974         /* Also push the sized deallocation variants:
3975              void operator delete(void*, std::size_t) throw();
3976              void operator delete[](void*, std::size_t) throw();  */
3977         tree void_ftype_ptr_size
3978           = build_function_type_list (void_type_node, ptr_type_node,
3979                                       size_type_node, NULL_TREE);
3980         deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
3981                                                    extvisattr);
3982         deltype = build_exception_variant (deltype, empty_except_spec);
3983         push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
3984         push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
3985       }
3986
3987     nullptr_type_node = make_node (NULLPTR_TYPE);
3988     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3989     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3990     TYPE_UNSIGNED (nullptr_type_node) = 1;
3991     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3992     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3993     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3994     nullptr_node = build_int_cst (nullptr_type_node, 0);
3995   }
3996
3997   abort_fndecl
3998     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
3999                             ECF_NORETURN | ECF_NOTHROW);
4000
4001   /* Perform other language dependent initializations.  */
4002   init_class_processing ();
4003   init_rtti_processing ();
4004   init_template_processing ();
4005
4006   if (flag_exceptions)
4007     init_exception_processing ();
4008
4009   if (! supports_one_only ())
4010     flag_weak = 0;
4011
4012   make_fname_decl = cp_make_fname_decl;
4013   start_fname_decls ();
4014
4015   /* Show we use EH for cleanups.  */
4016   if (flag_exceptions)
4017     using_eh_for_cleanups ();
4018 }
4019
4020 /* Generate an initializer for a function naming variable from
4021    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
4022    filled in with the type of the init.  */
4023
4024 tree
4025 cp_fname_init (const char* name, tree *type_p)
4026 {
4027   tree domain = NULL_TREE;
4028   tree type;
4029   tree init = NULL_TREE;
4030   size_t length = 0;
4031
4032   if (name)
4033     {
4034       length = strlen (name);
4035       domain = build_index_type (size_int (length));
4036       init = build_string (length + 1, name);
4037     }
4038
4039   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4040   type = build_cplus_array_type (type, domain);
4041
4042   *type_p = type;
4043
4044   if (init)
4045     TREE_TYPE (init) = type;
4046   else
4047     init = error_mark_node;
4048
4049   return init;
4050 }
4051
4052 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4053    the decl, LOC is the location to give the decl, NAME is the
4054    initialization string and TYPE_DEP indicates whether NAME depended
4055    on the type of the function. We make use of that to detect
4056    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4057    at the point of first use, so we mustn't push the decl now.  */
4058
4059 static tree
4060 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4061 {
4062   const char *const name = (type_dep && processing_template_decl
4063                             ? NULL : fname_as_string (type_dep));
4064   tree type;
4065   tree init = cp_fname_init (name, &type);
4066   tree decl = build_decl (loc, VAR_DECL, id, type);
4067
4068   if (name)
4069     free (CONST_CAST (char *, name));
4070
4071   /* As we're using pushdecl_with_scope, we must set the context.  */
4072   DECL_CONTEXT (decl) = current_function_decl;
4073
4074   TREE_STATIC (decl) = 1;
4075   TREE_READONLY (decl) = 1;
4076   DECL_ARTIFICIAL (decl) = 1;
4077
4078   TREE_USED (decl) = 1;
4079
4080   if (current_function_decl)
4081     {
4082       cp_binding_level *b = current_binding_level;
4083       if (b->kind == sk_function_parms)
4084         return error_mark_node;
4085       while (b->level_chain->kind != sk_function_parms)
4086         b = b->level_chain;
4087       pushdecl_with_scope (decl, b, /*is_friend=*/false);
4088       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4089                       LOOKUP_ONLYCONVERTING);
4090     }
4091   else
4092     {
4093       DECL_THIS_STATIC (decl) = true;
4094       pushdecl_top_level_and_finish (decl, init);
4095     }
4096
4097   return decl;
4098 }
4099
4100 static tree
4101 builtin_function_1 (tree decl, tree context, bool is_global)
4102 {
4103   tree          id = DECL_NAME (decl);
4104   const char *name = IDENTIFIER_POINTER (id);
4105
4106   retrofit_lang_decl (decl);
4107
4108   DECL_ARTIFICIAL (decl) = 1;
4109   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
4110   SET_DECL_LANGUAGE (decl, lang_c);
4111   /* Runtime library routines are, by definition, available in an
4112      external shared object.  */
4113   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4114   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4115
4116   DECL_CONTEXT (decl) = context;
4117
4118   if (is_global)
4119     pushdecl_top_level (decl);
4120   else
4121     pushdecl (decl);
4122
4123   /* A function in the user's namespace should have an explicit
4124      declaration before it is used.  Mark the built-in function as
4125      anticipated but not actually declared.  */
4126   if (name[0] != '_' || name[1] != '_')
4127     DECL_ANTICIPATED (decl) = 1;
4128   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4129     {
4130       size_t len = strlen (name);
4131
4132       /* Treat __*_chk fortification functions as anticipated as well,
4133          unless they are __builtin_*.  */
4134       if (len > strlen ("___chk")
4135           && memcmp (name + len - strlen ("_chk"),
4136                      "_chk", strlen ("_chk") + 1) == 0)
4137         DECL_ANTICIPATED (decl) = 1;
4138     }
4139
4140   return decl;
4141 }
4142
4143 tree
4144 cxx_builtin_function (tree decl)
4145 {
4146   tree          id = DECL_NAME (decl);
4147   const char *name = IDENTIFIER_POINTER (id);
4148   /* All builtins that don't begin with an '_' should additionally
4149      go in the 'std' namespace.  */
4150   if (name[0] != '_')
4151     {
4152       tree decl2 = copy_node(decl);
4153       push_namespace (std_identifier);
4154       builtin_function_1 (decl2, std_node, false);
4155       pop_namespace ();
4156     }
4157
4158   return builtin_function_1 (decl, NULL_TREE, false);
4159 }
4160
4161 /* Like cxx_builtin_function, but guarantee the function is added to the global
4162    scope.  This is to allow function specific options to add new machine
4163    dependent builtins when the target ISA changes via attribute((target(...)))
4164    which saves space on program startup if the program does not use non-generic
4165    ISAs.  */
4166
4167 tree
4168 cxx_builtin_function_ext_scope (tree decl)
4169 {
4170
4171   tree          id = DECL_NAME (decl);
4172   const char *name = IDENTIFIER_POINTER (id);
4173   /* All builtins that don't begin with an '_' should additionally
4174      go in the 'std' namespace.  */
4175   if (name[0] != '_')
4176     {
4177       tree decl2 = copy_node(decl);
4178       push_namespace (std_identifier);
4179       builtin_function_1 (decl2, std_node, true);
4180       pop_namespace ();
4181     }
4182
4183   return builtin_function_1 (decl, NULL_TREE, true);
4184 }
4185
4186 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4187    function.  Not called directly.  */
4188
4189 static tree
4190 build_library_fn (tree name, enum tree_code operator_code, tree type,
4191                   int ecf_flags)
4192 {
4193   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4194   DECL_EXTERNAL (fn) = 1;
4195   TREE_PUBLIC (fn) = 1;
4196   DECL_ARTIFICIAL (fn) = 1;
4197   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
4198   SET_DECL_LANGUAGE (fn, lang_c);
4199   /* Runtime library routines are, by definition, available in an
4200      external shared object.  */
4201   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4202   DECL_VISIBILITY_SPECIFIED (fn) = 1;
4203   set_call_expr_flags (fn, ecf_flags);
4204   return fn;
4205 }
4206
4207 /* Returns the _DECL for a library function with C++ linkage.  */
4208
4209 static tree
4210 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4211                      int ecf_flags)
4212 {
4213   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4214   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4215   SET_DECL_LANGUAGE (fn, lang_cplusplus);
4216   return fn;
4217 }
4218
4219 /* Like build_library_fn, but takes a C string instead of an
4220    IDENTIFIER_NODE.  */
4221
4222 tree
4223 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4224 {
4225   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4226 }
4227
4228 /* Like build_cp_library_fn, but takes a C string instead of an
4229    IDENTIFIER_NODE.  */
4230
4231 tree
4232 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4233 {
4234   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4235                               ecf_flags);
4236 }
4237
4238 /* Like build_library_fn, but also pushes the function so that we will
4239    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
4240    may throw exceptions listed in RAISES.  */
4241
4242 tree
4243 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4244 {
4245   tree fn;
4246
4247   if (raises)
4248     type = build_exception_variant (type, raises);
4249
4250   fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4251   pushdecl_top_level (fn);
4252   return fn;
4253 }
4254
4255 /* Like build_cp_library_fn, but also pushes the function so that it
4256    will be found by normal lookup.  */
4257
4258 static tree
4259 push_cp_library_fn (enum tree_code operator_code, tree type,
4260                     int ecf_flags)
4261 {
4262   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4263                                  operator_code,
4264                                  type, ecf_flags);
4265   pushdecl (fn);
4266   if (flag_tm)
4267     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4268   return fn;
4269 }
4270
4271 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4272    a FUNCTION_TYPE.  */
4273
4274 tree
4275 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4276 {
4277   tree type = build_function_type (void_type_node, parmtypes);
4278   return push_library_fn (name, type, NULL_TREE, ecf_flags);
4279 }
4280
4281 /* Like push_library_fn, but also note that this function throws
4282    and does not return.  Used for __throw_foo and the like.  */
4283
4284 tree
4285 push_throw_library_fn (tree name, tree type)
4286 {
4287   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN);
4288   return fn;
4289 }
4290 \f
4291 /* When we call finish_struct for an anonymous union, we create
4292    default copy constructors and such.  But, an anonymous union
4293    shouldn't have such things; this function undoes the damage to the
4294    anonymous union type T.
4295
4296    (The reason that we create the synthesized methods is that we don't
4297    distinguish `union { int i; }' from `typedef union { int i; } U'.
4298    The first is an anonymous union; the second is just an ordinary
4299    union type.)  */
4300
4301 void
4302 fixup_anonymous_aggr (tree t)
4303 {
4304   tree *q;
4305
4306   /* Wipe out memory of synthesized methods.  */
4307   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4308   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4309   TYPE_HAS_COPY_CTOR (t) = 0;
4310   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4311   TYPE_HAS_COPY_ASSIGN (t) = 0;
4312   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4313
4314   /* Splice the implicitly generated functions out of the TYPE_METHODS
4315      list.  */
4316   q = &TYPE_METHODS (t);
4317   while (*q)
4318     {
4319       if (DECL_ARTIFICIAL (*q))
4320         *q = TREE_CHAIN (*q);
4321       else
4322         q = &DECL_CHAIN (*q);
4323     }
4324
4325   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4326   if (TYPE_METHODS (t))
4327     {
4328       tree decl = TYPE_MAIN_DECL (t);
4329
4330       if (TREE_CODE (t) != UNION_TYPE)
4331         error_at (DECL_SOURCE_LOCATION (decl), 
4332                   "an anonymous struct cannot have function members");
4333       else
4334         error_at (DECL_SOURCE_LOCATION (decl),
4335                   "an anonymous union cannot have function members");
4336     }
4337
4338   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4339      assignment operators (because they cannot have these methods themselves).
4340      For anonymous unions this is already checked because they are not allowed
4341      in any union, otherwise we have to check it.  */
4342   if (TREE_CODE (t) != UNION_TYPE)
4343     {
4344       tree field, type;
4345
4346       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4347         if (TREE_CODE (field) == FIELD_DECL)
4348           {
4349             type = TREE_TYPE (field);
4350             if (CLASS_TYPE_P (type))
4351               {
4352                 if (TYPE_NEEDS_CONSTRUCTING (type))
4353                   error ("member %q+#D with constructor not allowed "
4354                          "in anonymous aggregate", field);
4355                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4356                   error ("member %q+#D with destructor not allowed "
4357                          "in anonymous aggregate", field);
4358                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4359                   error ("member %q+#D with copy assignment operator "
4360                          "not allowed in anonymous aggregate", field);
4361               }
4362           }
4363     }
4364 }
4365
4366 /* Warn for an attribute located at LOCATION that appertains to the
4367    class type CLASS_TYPE that has not been properly placed after its
4368    class-key, in it class-specifier.  */
4369
4370 void
4371 warn_misplaced_attr_for_class_type (source_location location,
4372                                     tree class_type)
4373 {
4374   gcc_assert (OVERLOAD_TYPE_P (class_type));
4375
4376   if (warning_at (location, OPT_Wattributes,
4377                   "attribute ignored in declaration "
4378                   "of %q#T", class_type))
4379     inform (location,
4380             "attribute for %q#T must follow the %qs keyword",
4381             class_type, class_key_or_enum_as_string (class_type));
4382 }
4383
4384 /* Make sure that a declaration with no declarator is well-formed, i.e.
4385    just declares a tagged type or anonymous union.
4386
4387    Returns the type declared; or NULL_TREE if none.  */
4388
4389 tree
4390 check_tag_decl (cp_decl_specifier_seq *declspecs,
4391                 bool explicit_type_instantiation_p)
4392 {
4393   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4394   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4395   /* If a class, struct, or enum type is declared by the DECLSPECS
4396      (i.e, if a class-specifier, enum-specifier, or non-typename
4397      elaborated-type-specifier appears in the DECLSPECS),
4398      DECLARED_TYPE is set to the corresponding type.  */
4399   tree declared_type = NULL_TREE;
4400   bool error_p = false;
4401
4402   if (declspecs->multiple_types_p)
4403     error ("multiple types in one declaration");
4404   else if (declspecs->redefined_builtin_type)
4405     {
4406       if (!in_system_header_at (input_location))
4407         permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4408                    "redeclaration of C++ built-in type %qT",
4409                    declspecs->redefined_builtin_type);
4410       return NULL_TREE;
4411     }
4412
4413   if (declspecs->type
4414       && TYPE_P (declspecs->type)
4415       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4416            && MAYBE_CLASS_TYPE_P (declspecs->type))
4417           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4418     declared_type = declspecs->type;
4419   else if (declspecs->type == error_mark_node)
4420     error_p = true;
4421   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4422     permerror (input_location, "declaration does not declare anything");
4423   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4424     {
4425       error ("%<auto%> can only be specified for variables "
4426              "or function declarations");
4427       return error_mark_node;
4428     }
4429   /* Check for an anonymous union.  */
4430   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4431            && TYPE_ANONYMOUS_P (declared_type))
4432     {
4433       /* 7/3 In a simple-declaration, the optional init-declarator-list
4434          can be omitted only when declaring a class (clause 9) or
4435          enumeration (7.2), that is, when the decl-specifier-seq contains
4436          either a class-specifier, an elaborated-type-specifier with
4437          a class-key (9.1), or an enum-specifier.  In these cases and
4438          whenever a class-specifier or enum-specifier is present in the
4439          decl-specifier-seq, the identifiers in these specifiers are among
4440          the names being declared by the declaration (as class-name,
4441          enum-names, or enumerators, depending on the syntax).  In such
4442          cases, and except for the declaration of an unnamed bit-field (9.6),
4443          the decl-specifier-seq shall introduce one or more names into the
4444          program, or shall redeclare a name introduced by a previous
4445          declaration.  [Example:
4446              enum { };                  // ill-formed
4447              typedef class { };         // ill-formed
4448          --end example]  */
4449       if (saw_typedef)
4450         {
4451           error ("missing type-name in typedef-declaration");
4452           return NULL_TREE;
4453         }
4454       /* Anonymous unions are objects, so they can have specifiers.  */;
4455       SET_ANON_AGGR_TYPE_P (declared_type);
4456
4457       if (TREE_CODE (declared_type) != UNION_TYPE
4458           && !in_system_header_at (input_location))
4459         pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4460     }
4461
4462   else
4463     {
4464       if (decl_spec_seq_has_spec_p (declspecs, ds_inline)
4465           || decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4466         error ("%qs can only be specified for functions",
4467                decl_spec_seq_has_spec_p (declspecs, ds_inline)
4468                ? "inline" : "virtual");
4469       else if (saw_friend
4470                && (!current_class_type
4471                    || current_scope () != current_class_type))
4472         error ("%<friend%> can only be specified inside a class");
4473       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4474         error ("%<explicit%> can only be specified for constructors");
4475       else if (declspecs->storage_class)
4476         error ("a storage class can only be specified for objects "
4477                "and functions");
4478       else if (decl_spec_seq_has_spec_p (declspecs, ds_const)
4479                || decl_spec_seq_has_spec_p (declspecs, ds_volatile)
4480                || decl_spec_seq_has_spec_p (declspecs, ds_restrict)
4481                || decl_spec_seq_has_spec_p (declspecs, ds_thread))
4482         error ("qualifiers can only be specified for objects "
4483                "and functions");
4484       else if (saw_typedef)
4485         warning (0, "%<typedef%> was ignored in this declaration");
4486       else if (decl_spec_seq_has_spec_p (declspecs,  ds_constexpr))
4487         error ("%<constexpr%> cannot be used for type declarations");
4488     }
4489
4490   if (declspecs->attributes && warn_attributes && declared_type)
4491     {
4492       location_t loc;
4493       if (!CLASS_TYPE_P (declared_type)
4494           || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4495         /* For a non-template class, use the name location.  */
4496         loc = location_of (declared_type);
4497       else
4498         /* For a template class (an explicit instantiation), use the
4499            current location.  */
4500         loc = input_location;
4501
4502       if (explicit_type_instantiation_p)
4503         /* [dcl.attr.grammar]/4:
4504
4505                No attribute-specifier-seq shall appertain to an explicit
4506                instantiation.  */
4507         {
4508           if (warning_at (loc, OPT_Wattributes,
4509                           "attribute ignored in explicit instantiation %q#T",
4510                           declared_type))
4511             inform (loc,
4512                     "no attribute can be applied to "
4513                     "an explicit instantiation");
4514         }
4515       else
4516         warn_misplaced_attr_for_class_type (loc, declared_type);
4517     }
4518
4519   return declared_type;
4520 }
4521
4522 /* Called when a declaration is seen that contains no names to declare.
4523    If its type is a reference to a structure, union or enum inherited
4524    from a containing scope, shadow that tag name for the current scope
4525    with a forward reference.
4526    If its type defines a new named structure or union
4527    or defines an enum, it is valid but we need not do anything here.
4528    Otherwise, it is an error.
4529
4530    C++: may have to grok the declspecs to learn about static,
4531    complain for anonymous unions.
4532
4533    Returns the TYPE declared -- or NULL_TREE if none.  */
4534
4535 tree
4536 shadow_tag (cp_decl_specifier_seq *declspecs)
4537 {
4538   tree t = check_tag_decl (declspecs,
4539                            /*explicit_type_instantiation_p=*/false);
4540
4541   if (!t)
4542     return NULL_TREE;
4543
4544   if (maybe_process_partial_specialization (t) == error_mark_node)
4545     return NULL_TREE;
4546
4547   /* This is where the variables in an anonymous union are
4548      declared.  An anonymous union declaration looks like:
4549      union { ... } ;
4550      because there is no declarator after the union, the parser
4551      sends that declaration here.  */
4552   if (ANON_AGGR_TYPE_P (t))
4553     {
4554       fixup_anonymous_aggr (t);
4555
4556       if (TYPE_FIELDS (t))
4557         {
4558           tree decl = grokdeclarator (/*declarator=*/NULL,
4559                                       declspecs, NORMAL, 0, NULL);
4560           finish_anon_union (decl);
4561         }
4562     }
4563
4564   return t;
4565 }
4566 \f
4567 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4568
4569 tree
4570 groktypename (cp_decl_specifier_seq *type_specifiers,
4571               const cp_declarator *declarator,
4572               bool is_template_arg)
4573 {
4574   tree attrs;
4575   tree type;
4576   enum decl_context context
4577     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4578   attrs = type_specifiers->attributes;
4579   type_specifiers->attributes = NULL_TREE;
4580   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4581   if (attrs && type != error_mark_node)
4582     {
4583       if (CLASS_TYPE_P (type))
4584         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4585                  "outside of definition", type);
4586       else if (MAYBE_CLASS_TYPE_P (type))
4587         /* A template type parameter or other dependent type.  */
4588         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4589                  "type %qT without an associated declaration", type);
4590       else
4591         cplus_decl_attributes (&type, attrs, 0);
4592     }
4593   return type;
4594 }
4595
4596 /* Process a DECLARATOR for a function-scope variable declaration,
4597    namespace-scope variable declaration, or function declaration.
4598    (Function definitions go through start_function; class member
4599    declarations appearing in the body of the class go through
4600    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4601    If an error occurs, the error_mark_node is returned instead.
4602    
4603    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4604    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4605    for an explicitly defaulted function, or SD_DELETED for an explicitly
4606    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4607    implicitly initialized via a default constructor.  ATTRIBUTES and
4608    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4609
4610    The scope represented by the context of the returned DECL is pushed
4611    (if it is not the global namespace) and is assigned to
4612    *PUSHED_SCOPE_P.  The caller is then responsible for calling
4613    pop_scope on *PUSHED_SCOPE_P if it is set.  */
4614
4615 tree
4616 start_decl (const cp_declarator *declarator,
4617             cp_decl_specifier_seq *declspecs,
4618             int initialized,
4619             tree attributes,
4620             tree prefix_attributes,
4621             tree *pushed_scope_p)
4622 {
4623   tree decl;
4624   tree context;
4625   bool was_public;
4626   int flags;
4627   bool alias;
4628
4629   *pushed_scope_p = NULL_TREE;
4630
4631   /* An object declared as __attribute__((deprecated)) suppresses
4632      warnings of uses of other deprecated items.  */
4633   if (lookup_attribute ("deprecated", attributes))
4634     deprecated_state = DEPRECATED_SUPPRESS;
4635
4636   attributes = chainon (attributes, prefix_attributes);
4637
4638   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4639                          &attributes);
4640
4641   deprecated_state = DEPRECATED_NORMAL;
4642
4643   if (decl == NULL_TREE || VOID_TYPE_P (decl)
4644       || decl == error_mark_node)
4645     return error_mark_node;
4646
4647   context = CP_DECL_CONTEXT (decl);
4648   if (context != global_namespace)
4649     *pushed_scope_p = push_scope (context);
4650
4651   /* Is it valid for this decl to have an initializer at all?
4652      If not, set INITIALIZED to zero, which will indirectly
4653      tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4654   if (initialized
4655       && TREE_CODE (decl) == TYPE_DECL)
4656     {
4657       error ("typedef %qD is initialized (use decltype instead)", decl);
4658       return error_mark_node;
4659     }
4660
4661   if (initialized)
4662     {
4663       if (! toplevel_bindings_p ()
4664           && DECL_EXTERNAL (decl))
4665         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4666                  decl);
4667       DECL_EXTERNAL (decl) = 0;
4668       if (toplevel_bindings_p ())
4669         TREE_STATIC (decl) = 1;
4670     }
4671   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4672   
4673   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4674     record_key_method_defined (decl);
4675
4676   /* If this is a typedef that names the class for linkage purposes
4677      (7.1.3p8), apply any attributes directly to the type.  */
4678   if (TREE_CODE (decl) == TYPE_DECL
4679       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4680       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4681     flags = ATTR_FLAG_TYPE_IN_PLACE;
4682   else
4683     flags = 0;
4684
4685   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4686   cplus_decl_attributes (&decl, attributes, flags);
4687
4688   /* Dllimported symbols cannot be defined.  Static data members (which
4689      can be initialized in-class and dllimported) go through grokfield,
4690      not here, so we don't need to exclude those decls when checking for
4691      a definition.  */
4692   if (initialized && DECL_DLLIMPORT_P (decl))
4693     {
4694       error ("definition of %q#D is marked %<dllimport%>", decl);
4695       DECL_DLLIMPORT_P (decl) = 0;
4696     }
4697
4698   /* If #pragma weak was used, mark the decl weak now.  */
4699   if (!processing_template_decl)
4700     maybe_apply_pragma_weak (decl);
4701
4702   if (TREE_CODE (decl) == FUNCTION_DECL
4703       && DECL_DECLARED_INLINE_P (decl)
4704       && DECL_UNINLINABLE (decl)
4705       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4706     warning (0, "inline function %q+D given attribute noinline", decl);
4707
4708   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4709     {
4710       bool this_tmpl = (processing_template_decl
4711                         > template_class_depth (context));
4712       if (VAR_P (decl))
4713         {
4714           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4715           if (field == NULL_TREE
4716               || !(VAR_P (field) || variable_template_p (field)))
4717             error ("%q+#D is not a static data member of %q#T", decl, context);
4718           else if (variable_template_p (field) && !this_tmpl)
4719             {
4720               if (DECL_LANG_SPECIFIC (decl)
4721                   && DECL_TEMPLATE_SPECIALIZATION (decl))
4722                 /* OK, specialization was already checked.  */;
4723               else
4724                 {
4725                   error_at (DECL_SOURCE_LOCATION (decl),
4726                             "non-member-template declaration of %qD", decl);
4727                   inform (DECL_SOURCE_LOCATION (field), "does not match "
4728                           "member template declaration here");
4729                   return error_mark_node;
4730                 }
4731             }
4732           else
4733             {
4734               if (variable_template_p (field))
4735                 field = DECL_TEMPLATE_RESULT (field);
4736
4737               if (DECL_CONTEXT (field) != context)
4738                 {
4739                   if (!same_type_p (DECL_CONTEXT (field), context))
4740                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4741                                "to be defined as %<%T::%D%>",
4742                                DECL_CONTEXT (field), DECL_NAME (decl),
4743                                context, DECL_NAME (decl));
4744                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4745                 }
4746               /* Static data member are tricky; an in-class initialization
4747                  still doesn't provide a definition, so the in-class
4748                  declaration will have DECL_EXTERNAL set, but will have an
4749                  initialization.  Thus, duplicate_decls won't warn
4750                  about this situation, and so we check here.  */
4751               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4752                 error ("duplicate initialization of %qD", decl);
4753               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4754                 decl = field;
4755               if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)
4756                   && !DECL_DECLARED_CONSTEXPR_P (field))
4757                 error ("%qD declared %<constexpr%> outside its class", field);
4758             }
4759         }
4760       else
4761         {
4762           tree field = check_classfn (context, decl,
4763                                       this_tmpl
4764                                       ? current_template_parms
4765                                       : NULL_TREE);
4766           if (field && field != error_mark_node
4767               && duplicate_decls (decl, field,
4768                                  /*newdecl_is_friend=*/false))
4769             decl = field;
4770         }
4771
4772       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4773       DECL_IN_AGGR_P (decl) = 0;
4774       /* Do not mark DECL as an explicit specialization if it was not
4775          already marked as an instantiation; a declaration should
4776          never be marked as a specialization unless we know what
4777          template is being specialized.  */
4778       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4779         {
4780           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4781           if (TREE_CODE (decl) == FUNCTION_DECL)
4782             DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
4783                                   && DECL_DECLARED_INLINE_P (decl));
4784           else
4785             DECL_COMDAT (decl) = false;
4786
4787           /* [temp.expl.spec] An explicit specialization of a static data
4788              member of a template is a definition if the declaration
4789              includes an initializer; otherwise, it is a declaration.
4790
4791              We check for processing_specialization so this only applies
4792              to the new specialization syntax.  */
4793           if (!initialized && processing_specialization)
4794             DECL_EXTERNAL (decl) = 1;
4795         }
4796
4797       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4798           /* Aliases are definitions. */
4799           && !alias)
4800         permerror (input_location, "declaration of %q#D outside of class is not definition",
4801                    decl);
4802     }
4803
4804   was_public = TREE_PUBLIC (decl);
4805
4806   /* Enter this declaration into the symbol table.  */
4807   decl = maybe_push_decl (decl);
4808
4809   if (processing_template_decl)
4810     decl = push_template_decl (decl);
4811   if (decl == error_mark_node)
4812     return error_mark_node;
4813
4814   if (VAR_P (decl)
4815       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4816       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4817     {
4818       /* This is a const variable with implicit 'static'.  Set
4819          DECL_THIS_STATIC so we can tell it from variables that are
4820          !TREE_PUBLIC because of the anonymous namespace.  */
4821       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4822       DECL_THIS_STATIC (decl) = 1;
4823     }
4824
4825   if (current_function_decl && VAR_P (decl)
4826       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
4827     {
4828       bool ok = false;
4829       if (DECL_THREAD_LOCAL_P (decl))
4830         error ("%qD declared %<thread_local%> in %<constexpr%> function",
4831                decl);
4832       else if (TREE_STATIC (decl))
4833         error ("%qD declared %<static%> in %<constexpr%> function", decl);
4834       else
4835         ok = true;
4836       if (!ok)
4837         cp_function_chain->invalid_constexpr = true;
4838     }
4839
4840   if (!processing_template_decl && VAR_P (decl))
4841     start_decl_1 (decl, initialized);
4842
4843   return decl;
4844 }
4845
4846 /* Process the declaration of a variable DECL.  INITIALIZED is true
4847    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4848    variable is initialized via an implicitly-called constructor.)
4849    This function must be called for ordinary variables (including, for
4850    example, implicit instantiations of templates), but must not be
4851    called for template declarations.  */
4852
4853 void
4854 start_decl_1 (tree decl, bool initialized)
4855 {
4856   tree type;
4857   bool complete_p;
4858   bool aggregate_definition_p;
4859
4860   gcc_assert (!processing_template_decl);
4861
4862   if (error_operand_p (decl))
4863     return;
4864
4865   gcc_assert (VAR_P (decl));
4866
4867   type = TREE_TYPE (decl);
4868   complete_p = COMPLETE_TYPE_P (type);
4869   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4870
4871   /* If an explicit initializer is present, or if this is a definition
4872      of an aggregate, then we need a complete type at this point.
4873      (Scalars are always complete types, so there is nothing to
4874      check.)  This code just sets COMPLETE_P; errors (if necessary)
4875      are issued below.  */
4876   if ((initialized || aggregate_definition_p) 
4877       && !complete_p
4878       && COMPLETE_TYPE_P (complete_type (type)))
4879     {
4880       complete_p = true;
4881       /* We will not yet have set TREE_READONLY on DECL if the type
4882          was "const", but incomplete, before this point.  But, now, we
4883          have a complete type, so we can try again.  */
4884       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4885     }
4886
4887   if (initialized)
4888     /* Is it valid for this decl to have an initializer at all?  */
4889     {
4890       /* Don't allow initializations for incomplete types except for
4891          arrays which might be completed by the initialization.  */
4892       if (complete_p)
4893         ;                       /* A complete type is ok.  */
4894       else if (type_uses_auto (type))
4895         ;                       /* An auto type is ok.  */
4896       else if (TREE_CODE (type) != ARRAY_TYPE)
4897         {
4898           error ("variable %q#D has initializer but incomplete type", decl);
4899           type = TREE_TYPE (decl) = error_mark_node;
4900         }
4901       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4902         {
4903           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4904             error ("elements of array %q#D have incomplete type", decl);
4905           /* else we already gave an error in start_decl.  */
4906         }
4907     }
4908   else if (aggregate_definition_p && !complete_p)
4909     {
4910       if (type_uses_auto (type))
4911         error ("declaration of %q#D has no initializer", decl);
4912       else
4913         error ("aggregate %q#D has incomplete type and cannot be defined",
4914                decl);
4915       /* Change the type so that assemble_variable will give
4916          DECL an rtl we can live with: (mem (const_int 0)).  */
4917       type = TREE_TYPE (decl) = error_mark_node;
4918     }
4919
4920   /* Create a new scope to hold this declaration if necessary.
4921      Whether or not a new scope is necessary cannot be determined
4922      until after the type has been completed; if the type is a
4923      specialization of a class template it is not until after
4924      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4925      will be set correctly.  */
4926   maybe_push_cleanup_level (type);
4927 }
4928
4929 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4930    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4931    but will be set to a new CLEANUP_STMT if a temporary is created
4932    that must be destroyed subsequently.
4933
4934    Returns an initializer expression to use to initialize DECL, or
4935    NULL if the initialization can be performed statically.
4936
4937    Quotes on semantics can be found in ARM 8.4.3.  */
4938
4939 static tree
4940 grok_reference_init (tree decl, tree type, tree init, int flags)
4941 {
4942   if (init == NULL_TREE)
4943     {
4944       if ((DECL_LANG_SPECIFIC (decl) == 0
4945            || DECL_IN_AGGR_P (decl) == 0)
4946           && ! DECL_THIS_EXTERN (decl))
4947         error ("%qD declared as reference but not initialized", decl);
4948       return NULL_TREE;
4949     }
4950
4951   if (TREE_CODE (init) == TREE_LIST)
4952     init = build_x_compound_expr_from_list (init, ELK_INIT,
4953                                             tf_warning_or_error);
4954
4955   tree ttype = TREE_TYPE (type);
4956   if (TREE_CODE (ttype) != ARRAY_TYPE
4957       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4958     /* Note: default conversion is only called in very special cases.  */
4959     init = decay_conversion (init, tf_warning_or_error);
4960
4961   /* check_initializer handles this for non-reference variables, but for
4962      references we need to do it here or the initializer will get the
4963      incomplete array type and confuse later calls to
4964      cp_complete_array_type.  */
4965   if (TREE_CODE (ttype) == ARRAY_TYPE
4966       && TYPE_DOMAIN (ttype) == NULL_TREE
4967       && (BRACE_ENCLOSED_INITIALIZER_P (init)
4968           || TREE_CODE (init) == STRING_CST))
4969     {
4970       cp_complete_array_type (&ttype, init, false);
4971       if (ttype != TREE_TYPE (type))
4972         type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
4973     }
4974
4975   /* Convert INIT to the reference type TYPE.  This may involve the
4976      creation of a temporary, whose lifetime must be the same as that
4977      of the reference.  If so, a DECL_EXPR for the temporary will be
4978      added just after the DECL_EXPR for DECL.  That's why we don't set
4979      DECL_INITIAL for local references (instead assigning to them
4980      explicitly); we need to allow the temporary to be initialized
4981      first.  */
4982   return initialize_reference (type, init, flags,
4983                                tf_warning_or_error);
4984 }
4985
4986 /* Designated initializers in arrays are not supported in GNU C++.
4987    The parser cannot detect this error since it does not know whether
4988    a given brace-enclosed initializer is for a class type or for an
4989    array.  This function checks that CE does not use a designated
4990    initializer.  If it does, an error is issued.  Returns true if CE
4991    is valid, i.e., does not have a designated initializer.  */
4992
4993 static bool
4994 check_array_designated_initializer (constructor_elt *ce,
4995                                     unsigned HOST_WIDE_INT index)
4996 {
4997   /* Designated initializers for array elements are not supported.  */
4998   if (ce->index)
4999     {
5000       /* The parser only allows identifiers as designated
5001          initializers.  */
5002       if (ce->index == error_mark_node)
5003         {
5004           error ("name used in a GNU-style designated "
5005                  "initializer for an array");
5006           return false;
5007         }
5008       else if (identifier_p (ce->index))
5009         {
5010           error ("name %qD used in a GNU-style designated "
5011                  "initializer for an array", ce->index);
5012           return false;
5013         }
5014
5015       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5016                                                   ce->index, true);
5017       if (ce_index
5018           && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5019           && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5020               == INTEGER_CST))
5021         {
5022           /* A C99 designator is OK if it matches the current index.  */
5023           if (wi::eq_p (ce_index, index))
5024             return true;
5025           else
5026             sorry ("non-trivial designated initializers not supported");
5027         }
5028       else
5029         error ("C99 designator %qE is not an integral constant-expression",
5030                ce->index);
5031
5032       return false;
5033     }
5034
5035   return true;
5036 }
5037
5038 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5039    array until we finish parsing the initializer.  If that's the
5040    situation we're in, update DECL accordingly.  */
5041
5042 static void
5043 maybe_deduce_size_from_array_init (tree decl, tree init)
5044 {
5045   tree type = TREE_TYPE (decl);
5046
5047   if (TREE_CODE (type) == ARRAY_TYPE
5048       && TYPE_DOMAIN (type) == NULL_TREE
5049       && TREE_CODE (decl) != TYPE_DECL)
5050     {
5051       /* do_default is really a C-ism to deal with tentative definitions.
5052          But let's leave it here to ease the eventual merge.  */
5053       int do_default = !DECL_EXTERNAL (decl);
5054       tree initializer = init ? init : DECL_INITIAL (decl);
5055       int failure = 0;
5056
5057       /* Check that there are no designated initializers in INIT, as
5058          those are not supported in GNU C++, and as the middle-end
5059          will crash if presented with a non-numeric designated
5060          initializer.  */
5061       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5062         {
5063           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5064           constructor_elt *ce;
5065           HOST_WIDE_INT i;
5066           FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5067             if (!check_array_designated_initializer (ce, i))
5068               failure = 1;
5069         }
5070
5071       if (!failure)
5072         {
5073           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5074                                             do_default);
5075           if (failure == 1)
5076             {
5077               error ("initializer fails to determine size of %qD", decl);
5078             }
5079           else if (failure == 2)
5080             {
5081               if (do_default)
5082                 {
5083                   error ("array size missing in %qD", decl);
5084                 }
5085               /* If a `static' var's size isn't known, make it extern as
5086                  well as static, so it does not get allocated.  If it's not
5087                  `static', then don't mark it extern; finish_incomplete_decl
5088                  will give it a default size and it will get allocated.  */
5089               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5090                 DECL_EXTERNAL (decl) = 1;
5091             }
5092           else if (failure == 3)
5093             {
5094               error ("zero-size array %qD", decl);
5095             }
5096         }
5097
5098       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5099
5100       relayout_decl (decl);
5101     }
5102 }
5103
5104 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5105    any appropriate error messages regarding the layout.  */
5106
5107 static void
5108 layout_var_decl (tree decl)
5109 {
5110   tree type;
5111
5112   type = TREE_TYPE (decl);
5113   if (type == error_mark_node)
5114     return;
5115
5116   /* If we haven't already laid out this declaration, do so now.
5117      Note that we must not call complete type for an external object
5118      because it's type might involve templates that we are not
5119      supposed to instantiate yet.  (And it's perfectly valid to say
5120      `extern X x' for some incomplete type `X'.)  */
5121   if (!DECL_EXTERNAL (decl))
5122     complete_type (type);
5123   if (!DECL_SIZE (decl)
5124       && TREE_TYPE (decl) != error_mark_node
5125       && (COMPLETE_TYPE_P (type)
5126           || (TREE_CODE (type) == ARRAY_TYPE
5127               && !TYPE_DOMAIN (type)
5128               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
5129     layout_decl (decl, 0);
5130
5131   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5132     {
5133       /* An automatic variable with an incomplete type: that is an error.
5134          Don't talk about array types here, since we took care of that
5135          message in grokdeclarator.  */
5136       error ("storage size of %qD isn%'t known", decl);
5137       TREE_TYPE (decl) = error_mark_node;
5138     }
5139 #if 0
5140   /* Keep this code around in case we later want to control debug info
5141      based on whether a type is "used".  (jason 1999-11-11) */
5142
5143   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5144     /* Let debugger know it should output info for this type.  */
5145     note_debug_info_needed (ttype);
5146
5147   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5148     note_debug_info_needed (DECL_CONTEXT (decl));
5149 #endif
5150
5151   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5152       && DECL_SIZE (decl) != NULL_TREE
5153       && ! TREE_CONSTANT (DECL_SIZE (decl)))
5154     {
5155       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5156         constant_expression_warning (DECL_SIZE (decl));
5157       else
5158         {
5159           error ("storage size of %qD isn%'t constant", decl);
5160           TREE_TYPE (decl) = error_mark_node;
5161         }
5162     }
5163 }
5164
5165 /* If a local static variable is declared in an inline function, or if
5166    we have a weak definition, we must endeavor to create only one
5167    instance of the variable at link-time.  */
5168
5169 void
5170 maybe_commonize_var (tree decl)
5171 {
5172   /* Static data in a function with comdat linkage also has comdat
5173      linkage.  */
5174   if (TREE_STATIC (decl)
5175       /* Don't mess with __FUNCTION__.  */
5176       && ! DECL_ARTIFICIAL (decl)
5177       && DECL_FUNCTION_SCOPE_P (decl)
5178       && vague_linkage_p (DECL_CONTEXT (decl)))
5179     {
5180       if (flag_weak)
5181         {
5182           /* With weak symbols, we simply make the variable COMDAT;
5183              that will cause copies in multiple translations units to
5184              be merged.  */
5185           comdat_linkage (decl);
5186         }
5187       else
5188         {
5189           if (DECL_INITIAL (decl) == NULL_TREE
5190               || DECL_INITIAL (decl) == error_mark_node)
5191             {
5192               /* Without weak symbols, we can use COMMON to merge
5193                  uninitialized variables.  */
5194               TREE_PUBLIC (decl) = 1;
5195               DECL_COMMON (decl) = 1;
5196             }
5197           else
5198             {
5199               /* While for initialized variables, we must use internal
5200                  linkage -- which means that multiple copies will not
5201                  be merged.  */
5202               TREE_PUBLIC (decl) = 0;
5203               DECL_COMMON (decl) = 0;
5204               if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5205                               "sorry: semantics of inline function static "
5206                               "data %q#D are wrong (you%'ll wind up "
5207                               "with multiple copies)", decl))
5208                 inform (DECL_SOURCE_LOCATION (decl),
5209                         "you can work around this by removing the initializer");
5210             }
5211         }
5212     }
5213 }
5214
5215 /* Issue an error message if DECL is an uninitialized const variable.  */
5216
5217 static void
5218 check_for_uninitialized_const_var (tree decl)
5219 {
5220   tree type = strip_array_types (TREE_TYPE (decl));
5221
5222   /* ``Unless explicitly declared extern, a const object does not have
5223      external linkage and must be initialized. ($8.4; $12.1)'' ARM
5224      7.1.6 */
5225   if (VAR_P (decl)
5226       && TREE_CODE (type) != REFERENCE_TYPE
5227       && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5228       && !DECL_INITIAL (decl))
5229     {
5230       tree field = default_init_uninitialized_part (type);
5231       if (!field)
5232         return;
5233
5234       if (CP_TYPE_CONST_P (type))
5235         permerror (DECL_SOURCE_LOCATION (decl),
5236                    "uninitialized const %qD", decl);
5237       else
5238         {
5239           error_at (DECL_SOURCE_LOCATION (decl),
5240                     "uninitialized variable %qD in %<constexpr%> function",
5241                     decl);
5242           cp_function_chain->invalid_constexpr = true;
5243         }
5244
5245       if (CLASS_TYPE_P (type))
5246         {
5247           tree defaulted_ctor;
5248
5249           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5250                   "%q#T has no user-provided default constructor", type);
5251           defaulted_ctor = in_class_defaulted_default_constructor (type);
5252           if (defaulted_ctor)
5253             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5254                     "constructor is not user-provided because it is "
5255                     "explicitly defaulted in the class body");
5256           inform (0, "and the implicitly-defined constructor does not "
5257                   "initialize %q+#D", field);
5258         }
5259     }
5260 }
5261 \f
5262 /* Structure holding the current initializer being processed by reshape_init.
5263    CUR is a pointer to the current element being processed, END is a pointer
5264    after the last element present in the initializer.  */
5265 typedef struct reshape_iterator_t
5266 {
5267   constructor_elt *cur;
5268   constructor_elt *end;
5269 } reshape_iter;
5270
5271 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5272
5273 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
5274    returned is the next FIELD_DECL (possibly FIELD itself) that can be
5275    initialized.  If there are no more such fields, the return value
5276    will be NULL.  */
5277
5278 tree
5279 next_initializable_field (tree field)
5280 {
5281   while (field
5282          && (TREE_CODE (field) != FIELD_DECL
5283              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5284              || DECL_ARTIFICIAL (field)))
5285     field = DECL_CHAIN (field);
5286
5287   return field;
5288 }
5289
5290 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5291    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5292    INTEGER_CST representing the size of the array minus one (the maximum index),
5293    or NULL_TREE if the array was declared without specifying the size. D is
5294    the iterator within the constructor.  */
5295
5296 static tree
5297 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5298                       tsubst_flags_t complain)
5299 {
5300   tree new_init;
5301   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5302   unsigned HOST_WIDE_INT max_index_cst = 0;
5303   unsigned HOST_WIDE_INT index;
5304
5305   /* The initializer for an array is always a CONSTRUCTOR.  */
5306   new_init = build_constructor (init_list_type_node, NULL);
5307
5308   if (sized_array_p)
5309     {
5310       /* Minus 1 is used for zero sized arrays.  */
5311       if (integer_all_onesp (max_index))
5312         return new_init;
5313
5314       if (tree_fits_uhwi_p (max_index))
5315         max_index_cst = tree_to_uhwi (max_index);
5316       /* sizetype is sign extended, not zero extended.  */
5317       else
5318         max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5319     }
5320
5321   /* Loop until there are no more initializers.  */
5322   for (index = 0;
5323        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5324        ++index)
5325     {
5326       tree elt_init;
5327       constructor_elt *old_cur = d->cur;
5328
5329       check_array_designated_initializer (d->cur, index);
5330       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5331                                  complain);
5332       if (elt_init == error_mark_node)
5333         return error_mark_node;
5334       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5335                               size_int (index), elt_init);
5336       if (!TREE_CONSTANT (elt_init))
5337         TREE_CONSTANT (new_init) = false;
5338
5339       /* This can happen with an invalid initializer (c++/54501).  */
5340       if (d->cur == old_cur && !sized_array_p)
5341         break;
5342     }
5343
5344   return new_init;
5345 }
5346
5347 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5348    Parameters are the same of reshape_init_r.  */
5349
5350 static tree
5351 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5352 {
5353   tree max_index = NULL_TREE;
5354
5355   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5356
5357   if (TYPE_DOMAIN (type))
5358     max_index = array_type_nelts (type);
5359
5360   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5361 }
5362
5363 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5364    Parameters are the same of reshape_init_r.  */
5365
5366 static tree
5367 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5368 {
5369   tree max_index = NULL_TREE;
5370
5371   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5372
5373   if (COMPOUND_LITERAL_P (d->cur->value))
5374     {
5375       tree value = d->cur->value;
5376       if (!same_type_p (TREE_TYPE (value), type))
5377         {
5378           if (complain & tf_error)
5379             error ("invalid type %qT as initializer for a vector of type %qT",
5380                    TREE_TYPE (d->cur->value), type);
5381           value = error_mark_node;
5382         }
5383       ++d->cur;
5384       return value;
5385     }
5386
5387   /* For a vector, we initialize it as an array of the appropriate size.  */
5388   if (TREE_CODE (type) == VECTOR_TYPE)
5389     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5390
5391   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5392 }
5393
5394 /* Subroutine of reshape_init_r, processes the initializers for classes
5395    or union. Parameters are the same of reshape_init_r.  */
5396
5397 static tree
5398 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5399                     tsubst_flags_t complain)
5400 {
5401   tree field;
5402   tree new_init;
5403
5404   gcc_assert (CLASS_TYPE_P (type));
5405
5406   /* The initializer for a class is always a CONSTRUCTOR.  */
5407   new_init = build_constructor (init_list_type_node, NULL);
5408   field = next_initializable_field (TYPE_FIELDS (type));
5409
5410   if (!field)
5411     {
5412       /* [dcl.init.aggr]
5413
5414         An initializer for an aggregate member that is an
5415         empty class shall have the form of an empty
5416         initializer-list {}.  */
5417       if (!first_initializer_p)
5418         {
5419           if (complain & tf_error)
5420             error ("initializer for %qT must be brace-enclosed", type);
5421           return error_mark_node;
5422         }
5423       return new_init;
5424     }
5425
5426   /* Loop through the initializable fields, gathering initializers.  */
5427   while (d->cur != d->end)
5428     {
5429       tree field_init;
5430       constructor_elt *old_cur = d->cur;
5431
5432       /* Handle designated initializers, as an extension.  */
5433       if (d->cur->index)
5434         {
5435           if (d->cur->index == error_mark_node)
5436             return error_mark_node;
5437
5438           if (TREE_CODE (d->cur->index) == FIELD_DECL)
5439             /* We already reshaped this.  */
5440             gcc_assert (d->cur->index == field);
5441           else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5442             field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5443           else
5444             {
5445               if (complain & tf_error)
5446                 error ("%<[%E] =%> used in a GNU-style designated initializer"
5447                        " for class %qT", d->cur->index, type);
5448               return error_mark_node;
5449             }
5450
5451           if (!field || TREE_CODE (field) != FIELD_DECL)
5452             {
5453               if (complain & tf_error)
5454                 error ("%qT has no non-static data member named %qD", type,
5455                        d->cur->index);
5456               return error_mark_node;
5457             }
5458         }
5459
5460       /* If we processed all the member of the class, we are done.  */
5461       if (!field)
5462         break;
5463
5464       field_init = reshape_init_r (TREE_TYPE (field), d,
5465                                    /*first_initializer_p=*/false, complain);
5466       if (field_init == error_mark_node)
5467         return error_mark_node;
5468
5469       if (d->cur == old_cur && d->cur->index)
5470         {
5471           /* This can happen with an invalid initializer for a flexible
5472              array member (c++/54441).  */
5473           if (complain & tf_error)
5474             error ("invalid initializer for %q#D", field);
5475           return error_mark_node;
5476         }
5477
5478       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5479
5480       /* [dcl.init.aggr]
5481
5482         When a union  is  initialized with a brace-enclosed
5483         initializer, the braces shall only contain an
5484         initializer for the first member of the union.  */
5485       if (TREE_CODE (type) == UNION_TYPE)
5486         break;
5487
5488       field = next_initializable_field (DECL_CHAIN (field));
5489     }
5490
5491   return new_init;
5492 }
5493
5494 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5495    designators are not valid; either complain or return true to indicate
5496    that reshape_init_r should return error_mark_node.  */
5497
5498 static bool
5499 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5500 {
5501   if (d->cur->index)
5502     {
5503       if (complain & tf_error)
5504         error ("C99 designator %qE outside aggregate initializer",
5505                d->cur->index);
5506       else
5507         return true;
5508     }
5509   return false;
5510 }
5511
5512 /* Subroutine of reshape_init, which processes a single initializer (part of
5513    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5514    iterator within the CONSTRUCTOR which points to the initializer to process.
5515    FIRST_INITIALIZER_P is true if this is the first initializer of the
5516    outermost CONSTRUCTOR node.  */
5517
5518 static tree
5519 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5520                 tsubst_flags_t complain)
5521 {
5522   tree init = d->cur->value;
5523
5524   if (error_operand_p (init))
5525     return error_mark_node;
5526
5527   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5528       && has_designator_problem (d, complain))
5529     return error_mark_node;
5530
5531   if (TREE_CODE (type) == COMPLEX_TYPE)
5532     {
5533       /* A complex type can be initialized from one or two initializers,
5534          but braces are not elided.  */
5535       d->cur++;
5536       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5537         {
5538           if (CONSTRUCTOR_NELTS (init) > 2)
5539             {
5540               if (complain & tf_error)
5541                 error ("too many initializers for %qT", type);
5542               else
5543                 return error_mark_node;
5544             }
5545         }
5546       else if (first_initializer_p && d->cur != d->end)
5547         {
5548           vec<constructor_elt, va_gc> *v = 0;
5549           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5550           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5551           if (has_designator_problem (d, complain))
5552             return error_mark_node;
5553           d->cur++;
5554           init = build_constructor (init_list_type_node, v);
5555         }
5556       return init;
5557     }
5558
5559   /* A non-aggregate type is always initialized with a single
5560      initializer.  */
5561   if (!CP_AGGREGATE_TYPE_P (type))
5562     {
5563       /* It is invalid to initialize a non-aggregate type with a
5564          brace-enclosed initializer before C++0x.
5565          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5566          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5567          a CONSTRUCTOR (with a record type).  */
5568       if (TREE_CODE (init) == CONSTRUCTOR
5569           /* Don't complain about a capture-init.  */
5570           && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5571           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5572         {
5573           if (SCALAR_TYPE_P (type))
5574             {
5575               if (cxx_dialect < cxx11
5576                   /* Isn't value-initialization.  */
5577                   || CONSTRUCTOR_NELTS (init) > 0)
5578                 {
5579                   if (complain & tf_error)
5580                     error ("braces around scalar initializer for type %qT",
5581                            type);
5582                   init = error_mark_node;
5583                 }
5584             }
5585           else
5586             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5587         }
5588
5589       d->cur++;
5590       return init;
5591     }
5592
5593   /* "If T is a class type and the initializer list has a single element of
5594      type cv U, where U is T or a class derived from T, the object is
5595      initialized from that element."  Even if T is an aggregate.  */
5596   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5597       && first_initializer_p
5598       && d->end - d->cur == 1
5599       && reference_related_p (type, TREE_TYPE (init)))
5600     {
5601       d->cur++;
5602       return init;
5603     }
5604
5605   /* [dcl.init.aggr]
5606
5607      All implicit type conversions (clause _conv_) are considered when
5608      initializing the aggregate member with an initializer from an
5609      initializer-list.  If the initializer can initialize a member,
5610      the member is initialized.  Otherwise, if the member is itself a
5611      non-empty subaggregate, brace elision is assumed and the
5612      initializer is considered for the initialization of the first
5613      member of the subaggregate.  */
5614   if (TREE_CODE (init) != CONSTRUCTOR
5615       /* But don't try this for the first initializer, since that would be
5616          looking through the outermost braces; A a2 = { a1 }; is not a
5617          valid aggregate initialization.  */
5618       && !first_initializer_p
5619       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5620           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5621                               complain)))
5622     {
5623       d->cur++;
5624       return init;
5625     }
5626
5627   /* [dcl.init.string]
5628
5629       A char array (whether plain char, signed char, or unsigned char)
5630       can be initialized by a string-literal (optionally enclosed in
5631       braces); a wchar_t array can be initialized by a wide
5632       string-literal (optionally enclosed in braces).  */
5633   if (TREE_CODE (type) == ARRAY_TYPE
5634       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5635     {
5636       tree str_init = init;
5637
5638       /* Strip one level of braces if and only if they enclose a single
5639          element (as allowed by [dcl.init.string]).  */
5640       if (!first_initializer_p
5641           && TREE_CODE (str_init) == CONSTRUCTOR
5642           && vec_safe_length (CONSTRUCTOR_ELTS (str_init)) == 1)
5643         {
5644           str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5645         }
5646
5647       /* If it's a string literal, then it's the initializer for the array
5648          as a whole. Otherwise, continue with normal initialization for
5649          array types (one value per array element).  */
5650       if (TREE_CODE (str_init) == STRING_CST)
5651         {
5652           if (has_designator_problem (d, complain))
5653             return error_mark_node;
5654           d->cur++;
5655           return str_init;
5656         }
5657     }
5658
5659   /* The following cases are about aggregates. If we are not within a full
5660      initializer already, and there is not a CONSTRUCTOR, it means that there
5661      is a missing set of braces (that is, we are processing the case for
5662      which reshape_init exists).  */
5663   if (!first_initializer_p)
5664     {
5665       if (TREE_CODE (init) == CONSTRUCTOR)
5666         {
5667           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5668             /* There is no need to reshape pointer-to-member function
5669                initializers, as they are always constructed correctly
5670                by the front end.  */
5671            ;
5672           else if (COMPOUND_LITERAL_P (init))
5673           /* For a nested compound literal, there is no need to reshape since
5674              brace elision is not allowed. Even if we decided to allow it,
5675              we should add a call to reshape_init in finish_compound_literal,
5676              before calling digest_init, so changing this code would still
5677              not be necessary.  */
5678             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5679           else
5680             {
5681               ++d->cur;
5682               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5683               return reshape_init (type, init, complain);
5684             }
5685         }
5686
5687       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5688                type);
5689     }
5690
5691   /* Dispatch to specialized routines.  */
5692   if (CLASS_TYPE_P (type))
5693     return reshape_init_class (type, d, first_initializer_p, complain);
5694   else if (TREE_CODE (type) == ARRAY_TYPE)
5695     return reshape_init_array (type, d, complain);
5696   else if (TREE_CODE (type) == VECTOR_TYPE)
5697     return reshape_init_vector (type, d, complain);
5698   else
5699     gcc_unreachable();
5700 }
5701
5702 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5703    brace-enclosed aggregate initializer.
5704
5705    INIT is the CONSTRUCTOR containing the list of initializers describing
5706    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5707    It may not presently match the shape of the TYPE; for example:
5708
5709      struct S { int a; int b; };
5710      struct S a[] = { 1, 2, 3, 4 };
5711
5712    Here INIT will hold a vector of four elements, rather than a
5713    vector of two elements, each itself a vector of two elements.  This
5714    routine transforms INIT from the former form into the latter.  The
5715    revised CONSTRUCTOR node is returned.  */
5716
5717 tree
5718 reshape_init (tree type, tree init, tsubst_flags_t complain)
5719 {
5720   vec<constructor_elt, va_gc> *v;
5721   reshape_iter d;
5722   tree new_init;
5723
5724   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5725
5726   v = CONSTRUCTOR_ELTS (init);
5727
5728   /* An empty constructor does not need reshaping, and it is always a valid
5729      initializer.  */
5730   if (vec_safe_is_empty (v))
5731     return init;
5732
5733   /* Recurse on this CONSTRUCTOR.  */
5734   d.cur = &(*v)[0];
5735   d.end = d.cur + v->length ();
5736
5737   new_init = reshape_init_r (type, &d, true, complain);
5738   if (new_init == error_mark_node)
5739     return error_mark_node;
5740
5741   /* Make sure all the element of the constructor were used. Otherwise,
5742      issue an error about exceeding initializers.  */
5743   if (d.cur != d.end)
5744     {
5745       if (complain & tf_error)
5746         error ("too many initializers for %qT", type);
5747       else
5748         return error_mark_node;
5749     }
5750
5751   return new_init;
5752 }
5753
5754 /* Verify array initializer.  Returns true if errors have been reported.  */
5755
5756 bool
5757 check_array_initializer (tree decl, tree type, tree init)
5758 {
5759   tree element_type = TREE_TYPE (type);
5760
5761   /* The array type itself need not be complete, because the
5762      initializer may tell us how many elements are in the array.
5763      But, the elements of the array must be complete.  */
5764   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5765     {
5766       if (decl)
5767         error ("elements of array %q#D have incomplete type", decl);
5768       else
5769         error ("elements of array %q#T have incomplete type", type);
5770       return true;
5771     }
5772   /* A compound literal can't have variable size.  */
5773   if (init && !decl
5774       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5775           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5776     {
5777       error ("variable-sized compound literal");
5778       return true;
5779     }
5780   return false;
5781 }
5782
5783 /* Subroutine of check_initializer; args are passed down from that function.
5784    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5785
5786 static tree
5787 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5788      
5789 {
5790   gcc_assert (stmts_are_full_exprs_p ());
5791   return build_aggr_init (decl, init, flags, tf_warning_or_error);
5792 }
5793
5794 /* Verify INIT (the initializer for DECL), and record the
5795    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5796    grok_reference_init.
5797
5798    If the return value is non-NULL, it is an expression that must be
5799    evaluated dynamically to initialize DECL.  */
5800
5801 static tree
5802 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
5803 {
5804   tree type = TREE_TYPE (decl);
5805   tree init_code = NULL;
5806   tree core_type;
5807
5808   /* Things that are going to be initialized need to have complete
5809      type.  */
5810   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5811
5812   if (DECL_HAS_VALUE_EXPR_P (decl))
5813     {
5814       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5815          it doesn't have storage to be initialized.  */
5816       gcc_assert (init == NULL_TREE);
5817       return NULL_TREE;
5818     }
5819
5820   if (type == error_mark_node)
5821     /* We will have already complained.  */
5822     return NULL_TREE;
5823
5824   if (TREE_CODE (type) == ARRAY_TYPE)
5825     {
5826       if (check_array_initializer (decl, type, init))
5827         return NULL_TREE;
5828     }
5829   else if (!COMPLETE_TYPE_P (type))
5830     {
5831       error ("%q#D has incomplete type", decl);
5832       TREE_TYPE (decl) = error_mark_node;
5833       return NULL_TREE;
5834     }
5835   else
5836     /* There is no way to make a variable-sized class type in GNU C++.  */
5837     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5838
5839   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5840     {
5841       int init_len = vec_safe_length (CONSTRUCTOR_ELTS (init));
5842       if (SCALAR_TYPE_P (type))
5843         {
5844           if (init_len == 0)
5845             {
5846               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5847               init = build_zero_init (type, NULL_TREE, false);
5848             }
5849           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5850             {
5851               error ("scalar object %qD requires one element in initializer",
5852                      decl);
5853               TREE_TYPE (decl) = error_mark_node;
5854               return NULL_TREE;
5855             }
5856         }
5857     }
5858
5859   if (TREE_CODE (decl) == CONST_DECL)
5860     {
5861       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5862
5863       DECL_INITIAL (decl) = init;
5864
5865       gcc_assert (init != NULL_TREE);
5866       init = NULL_TREE;
5867     }
5868   else if (!init && DECL_REALLY_EXTERN (decl))
5869     ;
5870   else if (init || type_build_ctor_call (type)
5871            || TREE_CODE (type) == REFERENCE_TYPE)
5872     {
5873       if (TREE_CODE (type) == REFERENCE_TYPE)
5874         {
5875           init = grok_reference_init (decl, type, init, flags);
5876           flags |= LOOKUP_ALREADY_DIGESTED;
5877         }
5878       else if (!init)
5879         check_for_uninitialized_const_var (decl);
5880       /* Do not reshape constructors of vectors (they don't need to be
5881          reshaped.  */
5882       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5883         {
5884           if (is_std_init_list (type))
5885             {
5886               init = perform_implicit_conversion (type, init,
5887                                                   tf_warning_or_error);
5888               flags |= LOOKUP_ALREADY_DIGESTED;
5889             }
5890           else if (TYPE_NON_AGGREGATE_CLASS (type))
5891             {
5892               /* Don't reshape if the class has constructors.  */
5893               if (cxx_dialect == cxx98)
5894                 error ("in C++98 %qD must be initialized by constructor, "
5895                        "not by %<{...}%>",
5896                        decl);
5897             }
5898           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5899             {
5900               error ("opaque vector types cannot be initialized");
5901               init = error_mark_node;
5902             }
5903           else
5904             {
5905               init = reshape_init (type, init, tf_warning_or_error);
5906               flags |= LOOKUP_NO_NARROWING;
5907             }
5908         }
5909       else if (TREE_CODE (init) == TREE_LIST
5910                && TREE_TYPE (init) != unknown_type_node
5911                && !MAYBE_CLASS_TYPE_P (type))
5912         {
5913           gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5914
5915           /* We get here with code like `int a (2);' */
5916           init = build_x_compound_expr_from_list (init, ELK_INIT,
5917                                                   tf_warning_or_error);
5918         }
5919
5920       /* If DECL has an array type without a specific bound, deduce the
5921          array size from the initializer.  */
5922       maybe_deduce_size_from_array_init (decl, init);
5923       type = TREE_TYPE (decl);
5924       if (type == error_mark_node)
5925         return NULL_TREE;
5926
5927       if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5928           && !(flags & LOOKUP_ALREADY_DIGESTED)
5929           && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5930                && CP_AGGREGATE_TYPE_P (type)
5931                && (CLASS_TYPE_P (type)
5932                    || !TYPE_NEEDS_CONSTRUCTING (type)
5933                    || type_has_extended_temps (type))))
5934         {
5935           init_code = build_aggr_init_full_exprs (decl, init, flags);
5936
5937           /* A constructor call is a non-trivial initializer even if
5938              it isn't explicitly written.  */
5939           if (TREE_SIDE_EFFECTS (init_code))
5940             DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
5941
5942           /* If this is a constexpr initializer, expand_default_init will
5943              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5944              case, pull the initializer back out and pass it down into
5945              store_init_value.  */
5946           while (TREE_CODE (init_code) == EXPR_STMT
5947                  || TREE_CODE (init_code) == CONVERT_EXPR)
5948             init_code = TREE_OPERAND (init_code, 0);
5949           if (TREE_CODE (init_code) == INIT_EXPR)
5950             {
5951               init = TREE_OPERAND (init_code, 1);
5952               init_code = NULL_TREE;
5953               /* Don't call digest_init; it's unnecessary and will complain
5954                  about aggregate initialization of non-aggregate classes.  */
5955               flags |= LOOKUP_ALREADY_DIGESTED;
5956             }
5957           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5958             {
5959               /* Declared constexpr, but no suitable initializer; massage
5960                  init appropriately so we can pass it into store_init_value
5961                  for the error.  */
5962               if (CLASS_TYPE_P (type)
5963                   && (!init || TREE_CODE (init) == TREE_LIST))
5964                 {
5965                   init = build_functional_cast (type, init, tf_none);
5966                   if (TREE_CODE (init) == TARGET_EXPR)
5967                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5968                 }
5969               init_code = NULL_TREE;
5970             }
5971           else
5972             init = NULL_TREE;
5973         }
5974
5975       if (init && TREE_CODE (init) != TREE_VEC)
5976         {
5977           /* In aggregate initialization of a variable, each element
5978              initialization is a full-expression because there is no
5979              enclosing expression.  */
5980           gcc_assert (stmts_are_full_exprs_p ());
5981
5982           init_code = store_init_value (decl, init, cleanups, flags);
5983
5984           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5985               && DECL_INITIAL (decl)
5986               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5987               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5988             warning (0, "array %qD initialized by parenthesized string literal %qE",
5989                      decl, DECL_INITIAL (decl));
5990           init = NULL;
5991         }
5992     }
5993   else
5994     {
5995       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5996           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5997               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5998         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5999                                                   /*complain=*/true);
6000
6001       check_for_uninitialized_const_var (decl);
6002     }
6003
6004   if (init && init != error_mark_node)
6005     init_code = build2 (INIT_EXPR, type, decl, init);
6006
6007   if (init_code)
6008     {
6009       /* We might have set these in cp_finish_decl.  */
6010       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6011       TREE_CONSTANT (decl) = false;
6012     }
6013
6014   if (init_code && DECL_IN_AGGR_P (decl))
6015     {
6016       static int explained = 0;
6017
6018       if (cxx_dialect < cxx11)
6019         error ("initializer invalid for static member with constructor");
6020       else
6021         error ("non-constant in-class initialization invalid for static "
6022                "member %qD", decl);
6023       if (!explained)
6024         {
6025           inform (input_location,
6026                   "(an out of class initialization is required)");
6027           explained = 1;
6028         }
6029       return NULL_TREE;
6030     }
6031
6032   return init_code;
6033 }
6034
6035 /* If DECL is not a local variable, give it RTL.  */
6036
6037 static void
6038 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6039 {
6040   int toplev = toplevel_bindings_p ();
6041   int defer_p;
6042   const char *filename;
6043
6044   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6045   if (asmspec)
6046     {
6047       /* The `register' keyword, when used together with an
6048          asm-specification, indicates that the variable should be
6049          placed in a particular register.  */
6050       if (VAR_P (decl) && DECL_REGISTER (decl))
6051         {
6052           set_user_assembler_name (decl, asmspec);
6053           DECL_HARD_REGISTER (decl) = 1;
6054         }
6055       else
6056         {
6057           if (TREE_CODE (decl) == FUNCTION_DECL
6058               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6059             set_builtin_user_assembler_name (decl, asmspec);
6060           set_user_assembler_name (decl, asmspec);
6061         }
6062     }
6063
6064   /* Handle non-variables up front.  */
6065   if (!VAR_P (decl))
6066     {
6067       rest_of_decl_compilation (decl, toplev, at_eof);
6068       return;
6069     }
6070
6071   /* If we see a class member here, it should be a static data
6072      member.  */
6073   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6074     {
6075       gcc_assert (TREE_STATIC (decl));
6076       /* An in-class declaration of a static data member should be
6077          external; it is only a declaration, and not a definition.  */
6078       if (init == NULL_TREE)
6079         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
6080     }
6081
6082   /* We don't create any RTL for local variables.  */
6083   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6084     return;
6085
6086   /* We defer emission of local statics until the corresponding
6087      DECL_EXPR is expanded.  */
6088   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
6089
6090   /* We try to defer namespace-scope static constants so that they are
6091      not emitted into the object file unnecessarily.  */
6092   filename = LOCATION_FILE (input_location);
6093   if (!DECL_VIRTUAL_P (decl)
6094       && TREE_READONLY (decl)
6095       && DECL_INITIAL (decl) != NULL_TREE
6096       && DECL_INITIAL (decl) != error_mark_node
6097       && filename != NULL
6098       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
6099       && toplev
6100       && !TREE_PUBLIC (decl))
6101     {
6102       /* Fool with the linkage of static consts according to #pragma
6103          interface.  */
6104       struct c_fileinfo *finfo = get_fileinfo (filename);
6105       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
6106         {
6107           TREE_PUBLIC (decl) = 1;
6108           DECL_EXTERNAL (decl) = finfo->interface_only;
6109         }
6110
6111       defer_p = 1;
6112     }
6113   /* Likewise for template instantiations.  */
6114   else if (DECL_LANG_SPECIFIC (decl)
6115            && DECL_IMPLICIT_INSTANTIATION (decl))
6116     defer_p = 1;
6117
6118   /* If we're not deferring, go ahead and assemble the variable.  */
6119   if (!defer_p)
6120     rest_of_decl_compilation (decl, toplev, at_eof);
6121 }
6122
6123 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6124
6125 static tree
6126 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6127 {
6128   /* Stop at types or full-expression boundaries.  */
6129   if (TYPE_P (*stmt_p)
6130       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6131     {
6132       *walk_subtrees = 0;
6133       return NULL_TREE;
6134     }
6135
6136   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6137     {
6138       tree guard = (tree)data;
6139       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6140
6141       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6142       /* Tell honor_protect_cleanup_actions to handle this as a separate
6143          cleanup.  */
6144       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6145  
6146       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6147     }
6148
6149   return NULL_TREE;
6150 }
6151
6152 /* We're initializing a local variable which has a cleanup GUARD.  If there
6153    are any temporaries used in the initializer INIT of this variable, we
6154    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6155    variable will be cleaned up properly if one of them throws.
6156
6157    Unfortunately, there's no way to express this properly in terms of
6158    nesting, as the regions for the temporaries overlap the region for the
6159    variable itself; if there are two temporaries, the variable needs to be
6160    the first thing destroyed if either of them throws.  However, we only
6161    want to run the variable's cleanup if it actually got constructed.  So
6162    we need to guard the temporary cleanups with the variable's cleanup if
6163    they are run on the normal path, but not if they are run on the
6164    exceptional path.  We implement this by telling
6165    honor_protect_cleanup_actions to strip the variable cleanup from the
6166    exceptional path.  */
6167
6168 static void
6169 wrap_temporary_cleanups (tree init, tree guard)
6170 {
6171   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6172 }
6173
6174 /* Generate code to initialize DECL (a local variable).  */
6175
6176 static void
6177 initialize_local_var (tree decl, tree init)
6178 {
6179   tree type = TREE_TYPE (decl);
6180   tree cleanup;
6181   int already_used;
6182
6183   gcc_assert (VAR_P (decl)
6184               || TREE_CODE (decl) == RESULT_DECL);
6185   gcc_assert (!TREE_STATIC (decl));
6186
6187   if (DECL_SIZE (decl) == NULL_TREE)
6188     {
6189       /* If we used it already as memory, it must stay in memory.  */
6190       DECL_INITIAL (decl) = NULL_TREE;
6191       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6192       return;
6193     }
6194
6195   if (type == error_mark_node)
6196     return;
6197
6198   /* Compute and store the initial value.  */
6199   already_used = TREE_USED (decl) || TREE_USED (type);
6200   if (TREE_USED (type))
6201     DECL_READ_P (decl) = 1;
6202
6203   /* Generate a cleanup, if necessary.  */
6204   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6205
6206   /* Perform the initialization.  */
6207   if (init)
6208     {
6209       tree rinit = (TREE_CODE (init) == INIT_EXPR
6210                     ? TREE_OPERAND (init, 1) : NULL_TREE);
6211       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6212         {
6213           /* Stick simple initializers in DECL_INITIAL so that
6214              -Wno-init-self works (c++/34772).  */
6215           gcc_assert (TREE_OPERAND (init, 0) == decl);
6216           DECL_INITIAL (decl) = rinit;
6217
6218           if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6219             {
6220               STRIP_NOPS (rinit);
6221               if (rinit == decl)
6222                 warning_at (DECL_SOURCE_LOCATION (decl),
6223                             OPT_Winit_self,
6224                             "reference %qD is initialized with itself", decl);
6225             }
6226         }
6227       else
6228         {
6229           int saved_stmts_are_full_exprs_p;
6230
6231           /* If we're only initializing a single object, guard the
6232              destructors of any temporaries used in its initializer with
6233              its destructor.  This isn't right for arrays because each
6234              element initialization is a full-expression.  */
6235           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6236             wrap_temporary_cleanups (init, cleanup);
6237
6238           gcc_assert (building_stmt_list_p ());
6239           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6240           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6241           finish_expr_stmt (init);
6242           current_stmt_tree ()->stmts_are_full_exprs_p =
6243             saved_stmts_are_full_exprs_p;
6244         }
6245     }
6246
6247   /* Set this to 0 so we can tell whether an aggregate which was
6248      initialized was ever used.  Don't do this if it has a
6249      destructor, so we don't complain about the 'resource
6250      allocation is initialization' idiom.  Now set
6251      attribute((unused)) on types so decls of that type will be
6252      marked used. (see TREE_USED, above.)  */
6253   if (TYPE_NEEDS_CONSTRUCTING (type)
6254       && ! already_used
6255       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6256       && DECL_NAME (decl))
6257     TREE_USED (decl) = 0;
6258   else if (already_used)
6259     TREE_USED (decl) = 1;
6260
6261   if (cleanup)
6262     finish_decl_cleanup (decl, cleanup);
6263 }
6264
6265 /* DECL is a VAR_DECL for a compiler-generated variable with static
6266    storage duration (like a virtual table) whose initializer is a
6267    compile-time constant.  Initialize the variable and provide it to the
6268    back end.  */
6269
6270 void
6271 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6272 {
6273   tree init;
6274   gcc_assert (DECL_ARTIFICIAL (decl));
6275   init = build_constructor (TREE_TYPE (decl), v);
6276   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6277   DECL_INITIAL (decl) = init;
6278   DECL_INITIALIZED_P (decl) = 1;
6279   determine_visibility (decl);
6280   layout_var_decl (decl);
6281   maybe_commonize_var (decl);
6282   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6283 }
6284
6285 /* INIT is the initializer for a variable, as represented by the
6286    parser.  Returns true iff INIT is type-dependent.  */
6287
6288 static bool
6289 type_dependent_init_p (tree init)
6290 {
6291   if (TREE_CODE (init) == TREE_LIST)
6292     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6293     return any_type_dependent_elements_p (init);
6294   else if (TREE_CODE (init) == CONSTRUCTOR)
6295   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6296     {
6297       vec<constructor_elt, va_gc> *elts;
6298       size_t nelts;
6299       size_t i;
6300
6301       elts = CONSTRUCTOR_ELTS (init);
6302       nelts = vec_safe_length (elts);
6303       for (i = 0; i < nelts; ++i)
6304         if (type_dependent_init_p ((*elts)[i].value))
6305           return true;
6306     }
6307   else
6308     /* It must be a simple expression, e.g., int i = 3;  */
6309     return type_dependent_expression_p (init);
6310
6311   return false;
6312 }
6313
6314 /* INIT is the initializer for a variable, as represented by the
6315    parser.  Returns true iff INIT is value-dependent.  */
6316
6317 static bool
6318 value_dependent_init_p (tree init)
6319 {
6320   if (TREE_CODE (init) == TREE_LIST)
6321     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6322     return any_value_dependent_elements_p (init);
6323   else if (TREE_CODE (init) == CONSTRUCTOR)
6324   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6325     {
6326       vec<constructor_elt, va_gc> *elts;
6327       size_t nelts;
6328       size_t i;
6329
6330       elts = CONSTRUCTOR_ELTS (init);
6331       nelts = vec_safe_length (elts);
6332       for (i = 0; i < nelts; ++i)
6333         if (value_dependent_init_p ((*elts)[i].value))
6334           return true;
6335     }
6336   else
6337     /* It must be a simple expression, e.g., int i = 3;  */
6338     return value_dependent_expression_p (init);
6339   
6340   return false;
6341 }
6342
6343 /* Finish processing of a declaration;
6344    install its line number and initial value.
6345    If the length of an array type is not known before,
6346    it must be determined now, from the initial value, or it is an error.
6347
6348    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6349    true, then INIT is an integral constant expression.
6350
6351    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6352    if the (init) syntax was used.  */
6353
6354 void
6355 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6356                 tree asmspec_tree, int flags)
6357 {
6358   tree type;
6359   vec<tree, va_gc> *cleanups = NULL;
6360   const char *asmspec = NULL;
6361   int was_readonly = 0;
6362   bool var_definition_p = false;
6363   tree auto_node;
6364
6365   if (decl == error_mark_node)
6366     return;
6367   else if (! decl)
6368     {
6369       if (init)
6370         error ("assignment (not initialization) in declaration");
6371       return;
6372     }
6373
6374   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6375   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6376   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6377
6378   type = TREE_TYPE (decl);
6379   if (type == error_mark_node)
6380     return;
6381
6382   /* If a name was specified, get the string.  */
6383   if (at_namespace_scope_p ())
6384     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6385   if (asmspec_tree && asmspec_tree != error_mark_node)
6386     asmspec = TREE_STRING_POINTER (asmspec_tree);
6387
6388   if (current_class_type
6389       && CP_DECL_CONTEXT (decl) == current_class_type
6390       && TYPE_BEING_DEFINED (current_class_type)
6391       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6392       && (DECL_INITIAL (decl) || init))
6393     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6394
6395   if (TREE_CODE (decl) != FUNCTION_DECL
6396       && (auto_node = type_uses_auto (type)))
6397     {
6398       tree d_init;
6399       if (init == NULL_TREE)
6400         {
6401           if (DECL_LANG_SPECIFIC (decl)
6402               && DECL_TEMPLATE_INSTANTIATION (decl)
6403               && !DECL_TEMPLATE_INSTANTIATED (decl))
6404             {
6405               /* init is null because we're deferring instantiating the
6406                  initializer until we need it.  Well, we need it now.  */
6407               instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6408               return;
6409             }
6410
6411           error ("declaration of %q#D has no initializer", decl);
6412           TREE_TYPE (decl) = error_mark_node;
6413           return;
6414         }
6415       d_init = init;
6416       if (TREE_CODE (d_init) == TREE_LIST)
6417         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6418                                                   tf_warning_or_error);
6419       d_init = resolve_nondeduced_context (d_init);
6420       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6421                                                    auto_node);
6422       if (type == error_mark_node)
6423         return;
6424       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6425     }
6426
6427   if (!ensure_literal_type_for_constexpr_object (decl))
6428     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6429
6430   if (VAR_P (decl)
6431       && DECL_CLASS_SCOPE_P (decl)
6432       && DECL_INITIALIZED_IN_CLASS_P (decl))
6433     check_static_variable_definition (decl, type);
6434
6435   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6436     {
6437       tree clone;
6438       if (init == ridpointers[(int)RID_DELETE])
6439         {
6440           /* FIXME check this is 1st decl.  */
6441           DECL_DELETED_FN (decl) = 1;
6442           DECL_DECLARED_INLINE_P (decl) = 1;
6443           DECL_INITIAL (decl) = error_mark_node;
6444           FOR_EACH_CLONE (clone, decl)
6445             {
6446               DECL_DELETED_FN (clone) = 1;
6447               DECL_DECLARED_INLINE_P (clone) = 1;
6448               DECL_INITIAL (clone) = error_mark_node;
6449             }
6450           init = NULL_TREE;
6451         }
6452       else if (init == ridpointers[(int)RID_DEFAULT])
6453         {
6454           if (defaultable_fn_check (decl))
6455             DECL_DEFAULTED_FN (decl) = 1;
6456           else
6457             DECL_INITIAL (decl) = NULL_TREE;
6458         }
6459     }
6460
6461   if (init && VAR_P (decl))
6462     {
6463       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6464       /* If DECL is a reference, then we want to know whether init is a
6465          reference constant; init_const_expr_p as passed tells us whether
6466          it's an rvalue constant.  */
6467       if (TREE_CODE (type) == REFERENCE_TYPE)
6468         init_const_expr_p = potential_constant_expression (init);
6469       if (init_const_expr_p)
6470         {
6471           /* Set these flags now for templates.  We'll update the flags in
6472              store_init_value for instantiations.  */
6473           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6474           if (decl_maybe_constant_var_p (decl))
6475             TREE_CONSTANT (decl) = 1;
6476         }
6477     }
6478
6479   if (processing_template_decl)
6480     {
6481       bool type_dependent_p;
6482
6483       /* Add this declaration to the statement-tree.  */
6484       if (at_function_scope_p ())
6485         add_decl_expr (decl);
6486
6487       type_dependent_p = dependent_type_p (type);
6488
6489       if (check_for_bare_parameter_packs (init))
6490         {
6491           init = NULL_TREE;
6492           DECL_INITIAL (decl) = NULL_TREE;
6493         }
6494
6495       /* Generally, initializers in templates are expanded when the
6496          template is instantiated.  But, if DECL is a variable constant
6497          then it can be used in future constant expressions, so its value
6498          must be available. */
6499
6500       if (!VAR_P (decl) || dependent_type_p (type))
6501         /* We can't do anything if the decl has dependent type.  */;
6502       else if (init
6503                && init_const_expr_p
6504                && !type_dependent_p
6505                && TREE_CODE (type) != REFERENCE_TYPE
6506                && decl_maybe_constant_var_p (decl)
6507                && !type_dependent_init_p (init)
6508                && !value_dependent_init_p (init))
6509         {
6510           /* This variable seems to be a non-dependent constant, so process
6511              its initializer.  If check_initializer returns non-null the
6512              initialization wasn't constant after all.  */
6513           tree init_code;
6514           cleanups = make_tree_vector ();
6515           init_code = check_initializer (decl, init, flags, &cleanups);
6516           if (init_code == NULL_TREE)
6517             init = NULL_TREE;
6518           release_tree_vector (cleanups);
6519         }
6520       else if (!DECL_PRETTY_FUNCTION_P (decl))
6521         {
6522           /* Deduce array size even if the initializer is dependent.  */
6523           maybe_deduce_size_from_array_init (decl, init);
6524           /* And complain about multiple initializers.  */
6525           if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6526               && !MAYBE_CLASS_TYPE_P (type))
6527             init = build_x_compound_expr_from_list (init, ELK_INIT,
6528                                                     tf_warning_or_error);
6529         }
6530
6531       if (init)
6532         DECL_INITIAL (decl) = init;
6533       return;
6534     }
6535
6536   /* Just store non-static data member initializers for later.  */
6537   if (init && TREE_CODE (decl) == FIELD_DECL)
6538     DECL_INITIAL (decl) = init;
6539
6540   /* Take care of TYPE_DECLs up front.  */
6541   if (TREE_CODE (decl) == TYPE_DECL)
6542     {
6543       if (type != error_mark_node
6544           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6545         {
6546           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6547             warning (0, "shadowing previous type declaration of %q#D", decl);
6548           set_identifier_type_value (DECL_NAME (decl), decl);
6549         }
6550
6551       /* If we have installed this as the canonical typedef for this
6552          type, and that type has not been defined yet, delay emitting
6553          the debug information for it, as we will emit it later.  */
6554       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6555           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6556         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6557
6558       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6559                                 at_eof);
6560       return;
6561     }
6562
6563   /* A reference will be modified here, as it is initialized.  */
6564   if (! DECL_EXTERNAL (decl)
6565       && TREE_READONLY (decl)
6566       && TREE_CODE (type) == REFERENCE_TYPE)
6567     {
6568       was_readonly = 1;
6569       TREE_READONLY (decl) = 0;
6570     }
6571
6572   if (VAR_P (decl))
6573     {
6574       /* If this is a local variable that will need a mangled name,
6575          register it now.  We must do this before processing the
6576          initializer for the variable, since the initialization might
6577          require a guard variable, and since the mangled name of the
6578          guard variable will depend on the mangled name of this
6579          variable.  */
6580       if (DECL_FUNCTION_SCOPE_P (decl)
6581           && TREE_STATIC (decl)
6582           && !DECL_ARTIFICIAL (decl))
6583         {
6584           push_local_name (decl);
6585           if (DECL_CONSTRUCTOR_P (current_function_decl)
6586               || DECL_DESTRUCTOR_P (current_function_decl))
6587             /* Normally local_decls is populated during GIMPLE lowering,
6588                but [cd]tors are never actually compiled directly.  We need
6589                to put statics on the list so we can deal with the label
6590                address extension.  FIXME.  */
6591             add_local_decl (cfun, decl);
6592         }
6593
6594       /* Convert the initializer to the type of DECL, if we have not
6595          already initialized DECL.  */
6596       if (!DECL_INITIALIZED_P (decl)
6597           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6598              case of a static data member initialized inside the
6599              class-specifier, there can be an initializer even if DECL
6600              is *not* defined.  */
6601           && (!DECL_EXTERNAL (decl) || init))
6602         {
6603           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6604             {
6605               tree jclass
6606                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6607               /* Allow libjava/prims.cc define primitive classes.  */
6608               if (init != NULL_TREE
6609                   || jclass == NULL_TREE
6610                   || TREE_CODE (jclass) != TYPE_DECL
6611                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6612                   || !same_type_ignoring_top_level_qualifiers_p
6613                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6614                 error ("Java object %qD not allocated with %<new%>", decl);
6615               init = NULL_TREE;
6616             }
6617           cleanups = make_tree_vector ();
6618           init = check_initializer (decl, init, flags, &cleanups);
6619
6620           /* Handle:
6621
6622              [dcl.init]
6623
6624              The memory occupied by any object of static storage
6625              duration is zero-initialized at program startup before
6626              any other initialization takes place.
6627
6628              We cannot create an appropriate initializer until after
6629              the type of DECL is finalized.  If DECL_INITIAL is set,
6630              then the DECL is statically initialized, and any
6631              necessary zero-initialization has already been performed.  */
6632           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6633             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6634                                                    /*nelts=*/NULL_TREE,
6635                                                    /*static_storage_p=*/true);
6636           /* Remember that the initialization for this variable has
6637              taken place.  */
6638           DECL_INITIALIZED_P (decl) = 1;
6639           /* This declaration is the definition of this variable,
6640              unless we are initializing a static data member within
6641              the class specifier.  */
6642           if (!DECL_EXTERNAL (decl))
6643             var_definition_p = true;
6644         }
6645       /* If the variable has an array type, lay out the type, even if
6646          there is no initializer.  It is valid to index through the
6647          array, and we must get TYPE_ALIGN set correctly on the array
6648          type.  */
6649       else if (TREE_CODE (type) == ARRAY_TYPE)
6650         layout_type (type);
6651
6652       if (TREE_STATIC (decl)
6653           && !at_function_scope_p ()
6654           && current_function_decl == NULL)
6655         /* So decl is a global variable or a static member of a
6656            non local class. Record the types it uses
6657            so that we can decide later to emit debug info for them.  */
6658         record_types_used_by_current_var_decl (decl);
6659     }
6660   else if (TREE_CODE (decl) == FIELD_DECL
6661            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6662     error ("non-static data member %qD has Java class type", decl);
6663
6664   /* Add this declaration to the statement-tree.  This needs to happen
6665      after the call to check_initializer so that the DECL_EXPR for a
6666      reference temp is added before the DECL_EXPR for the reference itself.  */
6667   if (DECL_FUNCTION_SCOPE_P (decl))
6668     {
6669       /* If we're building a variable sized type, and we might be
6670          reachable other than via the top of the current binding
6671          level, then create a new BIND_EXPR so that we deallocate
6672          the object at the right time.  */
6673       if (VAR_P (decl)
6674           && DECL_SIZE (decl)
6675           && !TREE_CONSTANT (DECL_SIZE (decl))
6676           && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
6677         {
6678           tree bind;
6679           bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
6680           TREE_SIDE_EFFECTS (bind) = 1;
6681           add_stmt (bind);
6682           BIND_EXPR_BODY (bind) = push_stmt_list ();
6683         }
6684       add_decl_expr (decl);
6685     }
6686
6687   /* Let the middle end know about variables and functions -- but not
6688      static data members in uninstantiated class templates.  */
6689   if (VAR_OR_FUNCTION_DECL_P (decl))
6690     {
6691       if (VAR_P (decl))
6692         {
6693           layout_var_decl (decl);
6694           maybe_commonize_var (decl);
6695         }
6696
6697       /* This needs to happen after the linkage is set. */
6698       determine_visibility (decl);
6699
6700       if (var_definition_p && TREE_STATIC (decl))
6701         {
6702           /* If a TREE_READONLY variable needs initialization
6703              at runtime, it is no longer readonly and we need to
6704              avoid MEM_READONLY_P being set on RTL created for it.  */
6705           if (init)
6706             {
6707               if (TREE_READONLY (decl))
6708                 TREE_READONLY (decl) = 0;
6709               was_readonly = 0;
6710             }
6711           else if (was_readonly)
6712             TREE_READONLY (decl) = 1;
6713
6714           /* Likewise if it needs destruction.  */
6715           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6716             TREE_READONLY (decl) = 0;
6717         }
6718
6719       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6720
6721       /* Check for abstractness of the type. Notice that there is no
6722          need to strip array types here since the check for those types
6723          is already done within create_array_type_for_decl.  */
6724       abstract_virtuals_error (decl, type);
6725
6726       if (TREE_TYPE (decl) == error_mark_node)
6727         /* No initialization required.  */
6728         ;
6729       else if (TREE_CODE (decl) == FUNCTION_DECL)
6730         {
6731           if (init)
6732             {
6733               if (init == ridpointers[(int)RID_DEFAULT])
6734                 {
6735                   /* An out-of-class default definition is defined at
6736                      the point where it is explicitly defaulted.  */
6737                   if (DECL_DELETED_FN (decl))
6738                     maybe_explain_implicit_delete (decl);
6739                   else if (DECL_INITIAL (decl) == error_mark_node)
6740                     synthesize_method (decl);
6741                 }
6742               else
6743                 error ("function %q#D is initialized like a variable", decl);
6744             }
6745           /* else no initialization required.  */
6746         }
6747       else if (DECL_EXTERNAL (decl)
6748                && ! (DECL_LANG_SPECIFIC (decl)
6749                      && DECL_NOT_REALLY_EXTERN (decl)))
6750         {
6751           if (init)
6752             DECL_INITIAL (decl) = init;
6753         }
6754       /* A variable definition.  */
6755       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6756         /* Initialize the local variable.  */
6757         initialize_local_var (decl, init);
6758
6759       /* If a variable is defined, and then a subsequent
6760          definition with external linkage is encountered, we will
6761          get here twice for the same variable.  We want to avoid
6762          calling expand_static_init more than once.  For variables
6763          that are not static data members, we can call
6764          expand_static_init only when we actually process the
6765          initializer.  It is not legal to redeclare a static data
6766          member, so this issue does not arise in that case.  */
6767       else if (var_definition_p && TREE_STATIC (decl))
6768         expand_static_init (decl, init);
6769     }
6770
6771   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6772      reference, insert it in the statement-tree now.  */
6773   if (cleanups)
6774     {
6775       unsigned i; tree t;
6776       FOR_EACH_VEC_ELT (*cleanups, i, t)
6777         push_cleanup (decl, t, false);
6778       release_tree_vector (cleanups);
6779     }
6780
6781   if (was_readonly)
6782     TREE_READONLY (decl) = 1;
6783
6784   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6785 }
6786
6787 /* Returns a declaration for a VAR_DECL as if:
6788
6789      extern "C" TYPE NAME;
6790
6791    had been seen.  Used to create compiler-generated global
6792    variables.  */
6793
6794 static tree
6795 declare_global_var (tree name, tree type)
6796 {
6797   tree decl;
6798
6799   push_to_top_level ();
6800   decl = build_decl (input_location, VAR_DECL, name, type);
6801   TREE_PUBLIC (decl) = 1;
6802   DECL_EXTERNAL (decl) = 1;
6803   DECL_ARTIFICIAL (decl) = 1;
6804   /* If the user has explicitly declared this variable (perhaps
6805      because the code we are compiling is part of a low-level runtime
6806      library), then it is possible that our declaration will be merged
6807      with theirs by pushdecl.  */
6808   decl = pushdecl (decl);
6809   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6810   pop_from_top_level ();
6811
6812   return decl;
6813 }
6814
6815 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6816    if "__cxa_atexit" is not being used) corresponding to the function
6817    to be called when the program exits.  */
6818
6819 static tree
6820 get_atexit_fn_ptr_type (void)
6821 {
6822   tree fn_type;
6823
6824   if (!atexit_fn_ptr_type_node)
6825     {
6826       tree arg_type;
6827       if (flag_use_cxa_atexit 
6828           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6829         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6830         arg_type = ptr_type_node;
6831       else
6832         /* The parameter to "atexit" is "void (*)(void)".  */
6833         arg_type = NULL_TREE;
6834       
6835       fn_type = build_function_type_list (void_type_node,
6836                                           arg_type, NULL_TREE);
6837       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6838     }
6839
6840   return atexit_fn_ptr_type_node;
6841 }
6842
6843 /* Returns a pointer to the `atexit' function.  Note that if
6844    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6845    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6846
6847 static tree
6848 get_atexit_node (void)
6849 {
6850   tree atexit_fndecl;
6851   tree fn_type;
6852   tree fn_ptr_type;
6853   const char *name;
6854   bool use_aeabi_atexit;
6855
6856   if (atexit_node)
6857     return atexit_node;
6858
6859   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6860     {
6861       /* The declaration for `__cxa_atexit' is:
6862
6863            int __cxa_atexit (void (*)(void *), void *, void *)
6864
6865          We build up the argument types and then the function type
6866          itself.  */
6867       tree argtype0, argtype1, argtype2;
6868
6869       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6870       /* First, build the pointer-to-function type for the first
6871          argument.  */
6872       fn_ptr_type = get_atexit_fn_ptr_type ();
6873       /* Then, build the rest of the argument types.  */
6874       argtype2 = ptr_type_node;
6875       if (use_aeabi_atexit)
6876         {
6877           argtype1 = fn_ptr_type;
6878           argtype0 = ptr_type_node;
6879         }
6880       else
6881         {
6882           argtype1 = ptr_type_node;
6883           argtype0 = fn_ptr_type;
6884         }
6885       /* And the final __cxa_atexit type.  */
6886       fn_type = build_function_type_list (integer_type_node,
6887                                           argtype0, argtype1, argtype2,
6888                                           NULL_TREE);
6889       if (use_aeabi_atexit)
6890         name = "__aeabi_atexit";
6891       else
6892         name = "__cxa_atexit";
6893     }
6894   else
6895     {
6896       /* The declaration for `atexit' is:
6897
6898            int atexit (void (*)());
6899
6900          We build up the argument types and then the function type
6901          itself.  */
6902       fn_ptr_type = get_atexit_fn_ptr_type ();
6903       /* Build the final atexit type.  */
6904       fn_type = build_function_type_list (integer_type_node,
6905                                           fn_ptr_type, NULL_TREE);
6906       name = "atexit";
6907     }
6908
6909   /* Now, build the function declaration.  */
6910   push_lang_context (lang_name_c);
6911   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
6912   mark_used (atexit_fndecl);
6913   pop_lang_context ();
6914   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
6915
6916   return atexit_node;
6917 }
6918
6919 /* Like get_atexit_node, but for thread-local cleanups.  */
6920
6921 static tree
6922 get_thread_atexit_node (void)
6923 {
6924   /* The declaration for `__cxa_thread_atexit' is:
6925
6926      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
6927   tree fn_type = build_function_type_list (integer_type_node,
6928                                            get_atexit_fn_ptr_type (),
6929                                            ptr_type_node, ptr_type_node,
6930                                            NULL_TREE);
6931
6932   /* Now, build the function declaration.  */
6933   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
6934                                              ECF_LEAF | ECF_NOTHROW);
6935   return decay_conversion (atexit_fndecl, tf_warning_or_error);
6936 }
6937
6938 /* Returns the __dso_handle VAR_DECL.  */
6939
6940 static tree
6941 get_dso_handle_node (void)
6942 {
6943   if (dso_handle_node)
6944     return dso_handle_node;
6945
6946   /* Declare the variable.  */
6947   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6948                                         ptr_type_node);
6949
6950 #ifdef HAVE_GAS_HIDDEN
6951   if (dso_handle_node != error_mark_node)
6952     {
6953       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6954       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6955     }
6956 #endif
6957
6958   return dso_handle_node;
6959 }
6960
6961 /* Begin a new function with internal linkage whose job will be simply
6962    to destroy some particular variable.  */
6963
6964 static GTY(()) int start_cleanup_cnt;
6965
6966 static tree
6967 start_cleanup_fn (void)
6968 {
6969   char name[32];
6970   tree fntype;
6971   tree fndecl;
6972   bool use_cxa_atexit = flag_use_cxa_atexit
6973                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6974
6975   push_to_top_level ();
6976
6977   /* No need to mangle this.  */
6978   push_lang_context (lang_name_c);
6979
6980   /* Build the name of the function.  */
6981   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6982   /* Build the function declaration.  */
6983   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6984   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6985   /* It's a function with internal linkage, generated by the
6986      compiler.  */
6987   TREE_PUBLIC (fndecl) = 0;
6988   DECL_ARTIFICIAL (fndecl) = 1;
6989   /* Make the function `inline' so that it is only emitted if it is
6990      actually needed.  It is unlikely that it will be inlined, since
6991      it is only called via a function pointer, but we avoid unnecessary
6992      emissions this way.  */
6993   DECL_DECLARED_INLINE_P (fndecl) = 1;
6994   DECL_INTERFACE_KNOWN (fndecl) = 1;
6995   /* Build the parameter.  */
6996   if (use_cxa_atexit)
6997     {
6998       tree parmdecl;
6999
7000       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
7001       DECL_CONTEXT (parmdecl) = fndecl;
7002       TREE_USED (parmdecl) = 1;
7003       DECL_READ_P (parmdecl) = 1;
7004       DECL_ARGUMENTS (fndecl) = parmdecl;
7005     }
7006
7007   pushdecl (fndecl);
7008   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7009
7010   pop_lang_context ();
7011
7012   return current_function_decl;
7013 }
7014
7015 /* Finish the cleanup function begun by start_cleanup_fn.  */
7016
7017 static void
7018 end_cleanup_fn (void)
7019 {
7020   expand_or_defer_fn (finish_function (0));
7021
7022   pop_from_top_level ();
7023 }
7024
7025 /* Generate code to handle the destruction of DECL, an object with
7026    static storage duration.  */
7027
7028 tree
7029 register_dtor_fn (tree decl)
7030 {
7031   tree cleanup;
7032   tree addr;
7033   tree compound_stmt;
7034   tree fcall;
7035   tree type;
7036   bool ob_parm, dso_parm, use_dtor;
7037   tree arg0, arg1, arg2;
7038   tree atex_node;
7039
7040   type = TREE_TYPE (decl);
7041   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7042     return void_node;
7043
7044   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7045      "__aeabi_atexit"), and DECL is a class object, we can just pass the
7046      destructor to "__cxa_atexit"; we don't have to build a temporary
7047      function to do the cleanup.  */
7048   dso_parm = (flag_use_cxa_atexit
7049               && !targetm.cxx.use_atexit_for_cxa_atexit ());
7050   ob_parm = (DECL_THREAD_LOCAL_P (decl) || dso_parm);
7051   use_dtor = ob_parm && CLASS_TYPE_P (type);
7052   if (use_dtor)
7053     {
7054       int idx;
7055
7056       /* Find the destructor.  */
7057       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
7058       gcc_assert (idx >= 0);
7059       cleanup = (*CLASSTYPE_METHOD_VEC (type))[idx];
7060       /* Make sure it is accessible.  */
7061       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7062                                      tf_warning_or_error);
7063     }
7064   else
7065     {
7066       /* Call build_cleanup before we enter the anonymous function so
7067          that any access checks will be done relative to the current
7068          scope, rather than the scope of the anonymous function.  */
7069       build_cleanup (decl);
7070   
7071       /* Now start the function.  */
7072       cleanup = start_cleanup_fn ();
7073       
7074       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
7075          to the original function, rather than the anonymous one.  That
7076          will make the back end think that nested functions are in use,
7077          which causes confusion.  */
7078       push_deferring_access_checks (dk_no_check);
7079       fcall = build_cleanup (decl);
7080       pop_deferring_access_checks ();
7081       
7082       /* Create the body of the anonymous function.  */
7083       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7084       finish_expr_stmt (fcall);
7085       finish_compound_stmt (compound_stmt);
7086       end_cleanup_fn ();
7087     }
7088
7089   /* Call atexit with the cleanup function.  */
7090   mark_used (cleanup);
7091   cleanup = build_address (cleanup);
7092
7093   if (DECL_THREAD_LOCAL_P (decl))
7094     atex_node = get_thread_atexit_node ();
7095   else
7096     atex_node = get_atexit_node ();
7097
7098   if (use_dtor)
7099     {
7100       /* We must convert CLEANUP to the type that "__cxa_atexit"
7101          expects.  */
7102       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7103       /* "__cxa_atexit" will pass the address of DECL to the
7104          cleanup function.  */
7105       mark_used (decl);
7106       addr = build_address (decl);
7107       /* The declared type of the parameter to "__cxa_atexit" is
7108          "void *".  For plain "T*", we could just let the
7109          machinery in cp_build_function_call convert it -- but if the
7110          type is "cv-qualified T *", then we need to convert it
7111          before passing it in, to avoid spurious errors.  */
7112       addr = build_nop (ptr_type_node, addr);
7113     }
7114   else
7115     /* Since the cleanup functions we build ignore the address
7116        they're given, there's no reason to pass the actual address
7117        in, and, in general, it's cheaper to pass NULL than any
7118        other value.  */
7119     addr = null_pointer_node;
7120
7121   if (dso_parm)
7122     arg2 = cp_build_addr_expr (get_dso_handle_node (),
7123                                tf_warning_or_error);
7124   else if (ob_parm)
7125     /* Just pass NULL to the dso handle parm if we don't actually
7126        have a DSO handle on this target.  */
7127     arg2 = null_pointer_node;
7128   else
7129     arg2 = NULL_TREE;
7130
7131   if (ob_parm)
7132     {
7133       if (!DECL_THREAD_LOCAL_P (decl)
7134           && targetm.cxx.use_aeabi_atexit ())
7135         {
7136           arg1 = cleanup;
7137           arg0 = addr;
7138         }
7139       else
7140         {
7141           arg1 = addr;
7142           arg0 = cleanup;
7143         }
7144     }
7145   else
7146     {
7147       arg0 = cleanup;
7148       arg1 = NULL_TREE;
7149     }
7150   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7151                                       arg0, arg1, arg2, NULL_TREE);
7152 }
7153
7154 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
7155    is its initializer.  Generate code to handle the construction
7156    and destruction of DECL.  */
7157
7158 static void
7159 expand_static_init (tree decl, tree init)
7160 {
7161   gcc_assert (VAR_P (decl));
7162   gcc_assert (TREE_STATIC (decl));
7163
7164   /* Some variables require no dynamic initialization.  */
7165   if (!init
7166       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7167     {
7168       /* Make sure the destructor is callable.  */
7169       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7170       return;
7171     }
7172
7173   if (DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7174       && !DECL_FUNCTION_SCOPE_P (decl))
7175     {
7176       if (init)
7177         error ("non-local variable %qD declared %<__thread%> "
7178                "needs dynamic initialization", decl);
7179       else
7180         error ("non-local variable %qD declared %<__thread%> "
7181                "has a non-trivial destructor", decl);
7182       static bool informed;
7183       if (!informed)
7184         {
7185           inform (DECL_SOURCE_LOCATION (decl),
7186                   "C++11 %<thread_local%> allows dynamic initialization "
7187                   "and destruction");
7188           informed = true;
7189         }
7190       return;
7191     }
7192
7193   if (DECL_FUNCTION_SCOPE_P (decl))
7194     {
7195       /* Emit code to perform this initialization but once.  */
7196       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7197       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7198       tree guard, guard_addr;
7199       tree flag, begin;
7200       /* We don't need thread-safety code for thread-local vars.  */
7201       bool thread_guard = (flag_threadsafe_statics
7202                            && !DECL_THREAD_LOCAL_P (decl));
7203
7204       /* Emit code to perform this initialization but once.  This code
7205          looks like:
7206
7207            static <type> guard;
7208            if (!guard.first_byte) {
7209              if (__cxa_guard_acquire (&guard)) {
7210                bool flag = false;
7211                try {
7212                  // Do initialization.
7213                  flag = true; __cxa_guard_release (&guard);
7214                  // Register variable for destruction at end of program.
7215                } catch {
7216                  if (!flag) __cxa_guard_abort (&guard);
7217                }
7218            }
7219
7220          Note that the `flag' variable is only set to 1 *after* the
7221          initialization is complete.  This ensures that an exception,
7222          thrown during the construction, will cause the variable to
7223          reinitialized when we pass through this code again, as per:
7224
7225            [stmt.dcl]
7226
7227            If the initialization exits by throwing an exception, the
7228            initialization is not complete, so it will be tried again
7229            the next time control enters the declaration.
7230
7231          This process should be thread-safe, too; multiple threads
7232          should not be able to initialize the variable more than
7233          once.  */
7234
7235       /* Create the guard variable.  */
7236       guard = get_guard (decl);
7237
7238       /* This optimization isn't safe on targets with relaxed memory
7239          consistency.  On such targets we force synchronization in
7240          __cxa_guard_acquire.  */
7241       if (!targetm.relaxed_ordering || !thread_guard)
7242         {
7243           /* Begin the conditional initialization.  */
7244           if_stmt = begin_if_stmt ();
7245           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
7246           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7247         }
7248
7249       if (thread_guard)
7250         {
7251           tree vfntype = NULL_TREE;
7252           tree acquire_name, release_name, abort_name;
7253           tree acquire_fn, release_fn, abort_fn;
7254           guard_addr = build_address (guard);
7255
7256           acquire_name = get_identifier ("__cxa_guard_acquire");
7257           release_name = get_identifier ("__cxa_guard_release");
7258           abort_name = get_identifier ("__cxa_guard_abort");
7259           acquire_fn = identifier_global_value (acquire_name);
7260           release_fn = identifier_global_value (release_name);
7261           abort_fn = identifier_global_value (abort_name);
7262           if (!acquire_fn)
7263             acquire_fn = push_library_fn
7264               (acquire_name, build_function_type_list (integer_type_node,
7265                                                        TREE_TYPE (guard_addr),
7266                                                        NULL_TREE),
7267                NULL_TREE, ECF_NOTHROW | ECF_LEAF);
7268           if (!release_fn || !abort_fn)
7269             vfntype = build_function_type_list (void_type_node,
7270                                                 TREE_TYPE (guard_addr),
7271                                                 NULL_TREE);
7272           if (!release_fn)
7273             release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
7274                                            ECF_NOTHROW | ECF_LEAF);
7275           if (!abort_fn)
7276             abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
7277                                         ECF_NOTHROW | ECF_LEAF);
7278
7279           inner_if_stmt = begin_if_stmt ();
7280           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
7281                                inner_if_stmt);
7282
7283           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
7284           begin = get_target_expr (boolean_false_node);
7285           flag = TARGET_EXPR_SLOT (begin);
7286
7287           TARGET_EXPR_CLEANUP (begin)
7288             = build3 (COND_EXPR, void_type_node, flag,
7289                       void_node,
7290                       build_call_n (abort_fn, 1, guard_addr));
7291           CLEANUP_EH_ONLY (begin) = 1;
7292
7293           /* Do the initialization itself.  */
7294           init = add_stmt_to_compound (begin, init);
7295           init = add_stmt_to_compound
7296             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
7297           init = add_stmt_to_compound
7298             (init, build_call_n (release_fn, 1, guard_addr));
7299         }
7300       else
7301         init = add_stmt_to_compound (init, set_guard (guard));
7302
7303       /* Use atexit to register a function for destroying this static
7304          variable.  */
7305       init = add_stmt_to_compound (init, register_dtor_fn (decl));
7306
7307       finish_expr_stmt (init);
7308
7309       if (thread_guard)
7310         {
7311           finish_compound_stmt (inner_then_clause);
7312           finish_then_clause (inner_if_stmt);
7313           finish_if_stmt (inner_if_stmt);
7314         }
7315
7316       if (!targetm.relaxed_ordering || !thread_guard)
7317         {
7318           finish_compound_stmt (then_clause);
7319           finish_then_clause (if_stmt);
7320           finish_if_stmt (if_stmt);
7321         }
7322     }
7323   else if (DECL_THREAD_LOCAL_P (decl))
7324     tls_aggregates = tree_cons (init, decl, tls_aggregates);
7325   else
7326     static_aggregates = tree_cons (init, decl, static_aggregates);
7327 }
7328
7329 \f
7330 /* Make TYPE a complete type based on INITIAL_VALUE.
7331    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
7332    2 if there was no information (in which case assume 0 if DO_DEFAULT),
7333    3 if the initializer list is empty (in pedantic mode). */
7334
7335 int
7336 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
7337 {
7338   int failure;
7339   tree type, elt_type;
7340
7341   /* Don't get confused by a CONSTRUCTOR for some other type.  */
7342   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
7343       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value))
7344     return 1;
7345
7346   if (initial_value)
7347     {
7348       unsigned HOST_WIDE_INT i;
7349       tree value;
7350
7351       /* An array of character type can be initialized from a
7352          brace-enclosed string constant.
7353
7354          FIXME: this code is duplicated from reshape_init. Probably
7355          we should just call reshape_init here?  */
7356       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
7357           && TREE_CODE (initial_value) == CONSTRUCTOR
7358           && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
7359         {
7360           vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
7361           tree value = (*v)[0].value;
7362
7363           if (TREE_CODE (value) == STRING_CST
7364               && v->length () == 1)
7365             initial_value = value;
7366         }
7367
7368       /* If any of the elements are parameter packs, we can't actually
7369          complete this type now because the array size is dependent.  */
7370       if (TREE_CODE (initial_value) == CONSTRUCTOR)
7371         {
7372           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
7373                                       i, value)
7374             {
7375               if (PACK_EXPANSION_P (value))
7376                 return 0;
7377             }
7378         }
7379     }
7380
7381   failure = complete_array_type (ptype, initial_value, do_default);
7382
7383   /* We can create the array before the element type is complete, which
7384      means that we didn't have these two bits set in the original type
7385      either.  In completing the type, we are expected to propagate these
7386      bits.  See also complete_type which does the same thing for arrays
7387      of fixed size.  */
7388   type = *ptype;
7389   if (TYPE_DOMAIN (type))
7390     {
7391       elt_type = TREE_TYPE (type);
7392       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
7393       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
7394         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
7395     }
7396
7397   return failure;
7398 }
7399
7400 /* As above, but either give an error or reject zero-size arrays, depending
7401    on COMPLAIN.  */
7402
7403 int
7404 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
7405                                  bool do_default, tsubst_flags_t complain)
7406 {
7407   int failure;
7408   bool sfinae = !(complain & tf_error);
7409   /* In SFINAE context we can't be lenient about zero-size arrays.  */
7410   if (sfinae)
7411     ++pedantic;
7412   failure = cp_complete_array_type (ptype, initial_value, do_default);
7413   if (sfinae)
7414     --pedantic;
7415   if (failure)
7416     {
7417       if (sfinae)
7418         /* Not an error.  */;
7419       else if (failure == 1)
7420         error ("initializer fails to determine size of %qT", *ptype);
7421       else if (failure == 2)
7422         {
7423           if (do_default)
7424             error ("array size missing in %qT", *ptype);
7425         }
7426       else if (failure == 3)
7427         error ("zero-size array %qT", *ptype);
7428       *ptype = error_mark_node;
7429     }
7430   return failure;
7431 }
7432 \f
7433 /* Return zero if something is declared to be a member of type
7434    CTYPE when in the context of CUR_TYPE.  STRING is the error
7435    message to print in that case.  Otherwise, quietly return 1.  */
7436
7437 static int
7438 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
7439 {
7440   if (ctype && ctype != cur_type)
7441     {
7442       if (flags == DTOR_FLAG)
7443         error ("destructor for alien class %qT cannot be a member", ctype);
7444       else
7445         error ("constructor for alien class %qT cannot be a member", ctype);
7446       return 0;
7447     }
7448   return 1;
7449 }
7450 \f
7451 /* Subroutine of `grokdeclarator'.  */
7452
7453 /* Generate errors possibly applicable for a given set of specifiers.
7454    This is for ARM $7.1.2.  */
7455
7456 static void
7457 bad_specifiers (tree object,
7458                 enum bad_spec_place type,
7459                 int virtualp,
7460                 int quals,
7461                 int inlinep,
7462                 int friendp,
7463                 int raises)
7464 {
7465   switch (type)
7466     {
7467       case BSP_VAR:
7468         if (virtualp)
7469           error ("%qD declared as a %<virtual%> variable", object);
7470         if (inlinep)
7471           error ("%qD declared as an %<inline%> variable", object);
7472         if (quals)
7473           error ("%<const%> and %<volatile%> function specifiers on "
7474                  "%qD invalid in variable declaration", object);
7475         break;
7476       case BSP_PARM:
7477         if (virtualp)
7478           error ("%qD declared as a %<virtual%> parameter", object);
7479         if (inlinep)
7480           error ("%qD declared as an %<inline%> parameter", object);
7481         if (quals)
7482           error ("%<const%> and %<volatile%> function specifiers on "
7483                  "%qD invalid in parameter declaration", object);
7484         break;
7485       case BSP_TYPE:
7486         if (virtualp)
7487           error ("%qD declared as a %<virtual%> type", object);
7488         if (inlinep)
7489           error ("%qD declared as an %<inline%> type", object);
7490         if (quals)
7491           error ("%<const%> and %<volatile%> function specifiers on "
7492                  "%qD invalid in type declaration", object);
7493         break;
7494       case BSP_FIELD:
7495         if (virtualp)
7496           error ("%qD declared as a %<virtual%> field", object);
7497         if (inlinep)
7498           error ("%qD declared as an %<inline%> field", object);
7499         if (quals)
7500           error ("%<const%> and %<volatile%> function specifiers on "
7501                  "%qD invalid in field declaration", object);
7502         break;
7503       default:
7504         gcc_unreachable();
7505     }
7506   if (friendp)
7507     error ("%q+D declared as a friend", object);
7508   if (raises
7509       && (TREE_CODE (object) == TYPE_DECL
7510           || (!TYPE_PTRFN_P (TREE_TYPE (object))
7511               && !TYPE_REFFN_P (TREE_TYPE (object))
7512               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7513     error ("%q+D declared with an exception specification", object);
7514 }
7515
7516 /* DECL is a member function or static data member and is presently
7517    being defined.  Check that the definition is taking place in a
7518    valid namespace.  */
7519
7520 static void
7521 check_class_member_definition_namespace (tree decl)
7522 {
7523   /* These checks only apply to member functions and static data
7524      members.  */
7525   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
7526   /* We check for problems with specializations in pt.c in
7527      check_specialization_namespace, where we can issue better
7528      diagnostics.  */
7529   if (processing_specialization)
7530     return;
7531   /* There are no restrictions on the placement of
7532      explicit instantiations.  */
7533   if (processing_explicit_instantiation)
7534     return;
7535   /* [class.mfct]
7536
7537      A member function definition that appears outside of the
7538      class definition shall appear in a namespace scope enclosing
7539      the class definition.
7540
7541      [class.static.data]
7542
7543      The definition for a static data member shall appear in a
7544      namespace scope enclosing the member's class definition.  */
7545   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7546     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7547                decl, DECL_CONTEXT (decl));
7548 }
7549
7550 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7551    METHOD_TYPE for a non-static member function; QUALS are the
7552    cv-qualifiers that apply to the function.  */
7553
7554 tree
7555 build_this_parm (tree type, cp_cv_quals quals)
7556 {
7557   tree this_type;
7558   tree qual_type;
7559   tree parm;
7560   cp_cv_quals this_quals;
7561
7562   if (CLASS_TYPE_P (type))
7563     {
7564       this_type
7565         = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7566       this_type = build_pointer_type (this_type);
7567     }
7568   else
7569     this_type = type_of_this_parm (type);
7570   /* The `this' parameter is implicitly `const'; it cannot be
7571      assigned to.  */
7572   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7573   qual_type = cp_build_qualified_type (this_type, this_quals);
7574   parm = build_artificial_parm (this_identifier, qual_type);
7575   cp_apply_type_quals_to_decl (this_quals, parm);
7576   return parm;
7577 }
7578
7579 /* DECL is a static member function.  Complain if it was declared
7580    with function-cv-quals.  */
7581
7582 static void
7583 check_static_quals (tree decl, cp_cv_quals quals)
7584 {
7585   if (quals != TYPE_UNQUALIFIED)
7586     error ("static member function %q#D declared with type qualifiers",
7587            decl);
7588 }
7589
7590 /* Helper function.  Replace the temporary this parameter injected
7591    during cp_finish_omp_declare_simd with the real this parameter.  */
7592
7593 static tree
7594 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
7595 {
7596   tree this_parm = (tree) data;
7597   if (TREE_CODE (*tp) == PARM_DECL
7598       && DECL_NAME (*tp) == this_identifier
7599       && *tp != this_parm)
7600     *tp = this_parm;
7601   else if (TYPE_P (*tp))
7602     *walk_subtrees = 0;
7603   return NULL_TREE;
7604 }
7605
7606 /* CTYPE is class type, or null if non-class.
7607    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7608    or METHOD_TYPE.
7609    DECLARATOR is the function's name.
7610    PARMS is a chain of PARM_DECLs for the function.
7611    VIRTUALP is truthvalue of whether the function is virtual or not.
7612    FLAGS are to be passed through to `grokclassfn'.
7613    QUALS are qualifiers indicating whether the function is `const'
7614    or `volatile'.
7615    RAISES is a list of exceptions that this function can raise.
7616    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7617    not look, and -1 if we should not call `grokclassfn' at all.
7618
7619    SFK is the kind of special function (if any) for the new function.
7620
7621    Returns `NULL_TREE' if something goes wrong, after issuing
7622    applicable error messages.  */
7623
7624 static tree
7625 grokfndecl (tree ctype,
7626             tree type,
7627             tree declarator,
7628             tree parms,
7629             tree orig_declarator,
7630             int virtualp,
7631             enum overload_flags flags,
7632             cp_cv_quals quals,
7633             cp_ref_qualifier rqual,
7634             tree raises,
7635             int check,
7636             int friendp,
7637             int publicp,
7638             int inlinep,
7639             bool deletedp,
7640             special_function_kind sfk,
7641             bool funcdef_flag,
7642             int template_count,
7643             tree in_namespace,
7644             tree* attrlist,
7645             location_t location)
7646 {
7647   tree decl;
7648   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7649   tree t;
7650
7651   if (rqual)
7652     type = build_ref_qualified_type (type, rqual);
7653   if (raises)
7654     type = build_exception_variant (type, raises);
7655
7656   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7657
7658   /* If we have an explicit location, use it, otherwise use whatever
7659      build_lang_decl used (probably input_location).  */
7660   if (location != UNKNOWN_LOCATION)
7661     DECL_SOURCE_LOCATION (decl) = location;
7662
7663   if (TREE_CODE (type) == METHOD_TYPE)
7664     {
7665       tree parm;
7666       parm = build_this_parm (type, quals);
7667       DECL_CHAIN (parm) = parms;
7668       parms = parm;
7669     }
7670   DECL_ARGUMENTS (decl) = parms;
7671   for (t = parms; t; t = DECL_CHAIN (t))
7672     DECL_CONTEXT (t) = decl;
7673   /* Propagate volatile out from type to decl.  */
7674   if (TYPE_VOLATILE (type))
7675     TREE_THIS_VOLATILE (decl) = 1;
7676
7677   /* Setup decl according to sfk.  */
7678   switch (sfk)
7679     {
7680     case sfk_constructor:
7681     case sfk_copy_constructor:
7682     case sfk_move_constructor:
7683       DECL_CONSTRUCTOR_P (decl) = 1;
7684       break;
7685     case sfk_destructor:
7686       DECL_DESTRUCTOR_P (decl) = 1;
7687       break;
7688     default:
7689       break;
7690     }
7691
7692   /* If pointers to member functions use the least significant bit to
7693      indicate whether a function is virtual, ensure a pointer
7694      to this function will have that bit clear.  */
7695   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7696       && TREE_CODE (type) == METHOD_TYPE
7697       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7698     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7699
7700   if (friendp
7701       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7702     {
7703       if (funcdef_flag)
7704         error
7705           ("defining explicit specialization %qD in friend declaration",
7706            orig_declarator);
7707       else
7708         {
7709           tree fns = TREE_OPERAND (orig_declarator, 0);
7710           tree args = TREE_OPERAND (orig_declarator, 1);
7711
7712           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7713             {
7714               /* Something like `template <class T> friend void f<T>()'.  */
7715               error ("invalid use of template-id %qD in declaration "
7716                      "of primary template",
7717                      orig_declarator);
7718               return NULL_TREE;
7719             }
7720
7721
7722           /* A friend declaration of the form friend void f<>().  Record
7723              the information in the TEMPLATE_ID_EXPR.  */
7724           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7725
7726           gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
7727           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7728
7729           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7730             if (TREE_PURPOSE (t)
7731                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7732             {
7733               error ("default arguments are not allowed in declaration "
7734                      "of friend template specialization %qD",
7735                      decl);
7736               return NULL_TREE;
7737             }
7738
7739           if (inlinep & 1)
7740             error ("%<inline%> is not allowed in declaration of friend "
7741                    "template specialization %qD",
7742                    decl);
7743           if (inlinep & 2)
7744             error ("%<constexpr%> is not allowed in declaration of friend "
7745                    "template specialization %qD",
7746                    decl);
7747           if (inlinep)
7748             return NULL_TREE;
7749         }
7750     }
7751
7752   /* If this decl has namespace scope, set that up.  */
7753   if (in_namespace)
7754     set_decl_namespace (decl, in_namespace, friendp);
7755   else if (!ctype)
7756     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7757
7758   /* `main' and builtins have implicit 'C' linkage.  */
7759   if ((MAIN_NAME_P (declarator)
7760        || (IDENTIFIER_LENGTH (declarator) > 10
7761            && IDENTIFIER_POINTER (declarator)[0] == '_'
7762            && IDENTIFIER_POINTER (declarator)[1] == '_'
7763            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0)
7764        || (targetcm.cxx_implicit_extern_c
7765            && targetcm.cxx_implicit_extern_c(IDENTIFIER_POINTER (declarator))))
7766       && current_lang_name == lang_name_cplusplus
7767       && ctype == NULL_TREE
7768       && DECL_FILE_SCOPE_P (decl))
7769     SET_DECL_LANGUAGE (decl, lang_c);
7770
7771   /* Should probably propagate const out from type to decl I bet (mrs).  */
7772   if (staticp)
7773     {
7774       DECL_STATIC_FUNCTION_P (decl) = 1;
7775       DECL_CONTEXT (decl) = ctype;
7776     }
7777
7778   if (deletedp)
7779     DECL_DELETED_FN (decl) = 1;
7780
7781   if (ctype)
7782     {
7783       DECL_CONTEXT (decl) = ctype;
7784       if (funcdef_flag)
7785         check_class_member_definition_namespace (decl);
7786     }
7787
7788   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7789     {
7790       if (PROCESSING_REAL_TEMPLATE_DECL_P())
7791         error ("cannot declare %<::main%> to be a template");
7792       if (inlinep & 1)
7793         error ("cannot declare %<::main%> to be inline");
7794       if (inlinep & 2)
7795         error ("cannot declare %<::main%> to be constexpr");
7796       if (!publicp)
7797         error ("cannot declare %<::main%> to be static");
7798       inlinep = 0;
7799       publicp = 1;
7800     }
7801
7802   /* Members of anonymous types and local classes have no linkage; make
7803      them internal.  If a typedef is made later, this will be changed.  */
7804   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7805                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7806     publicp = 0;
7807
7808   if (publicp && cxx_dialect == cxx98)
7809     {
7810       /* [basic.link]: A name with no linkage (notably, the name of a class
7811          or enumeration declared in a local scope) shall not be used to
7812          declare an entity with linkage.
7813
7814          DR 757 relaxes this restriction for C++0x.  */
7815       no_linkage_error (decl);
7816     }
7817
7818   TREE_PUBLIC (decl) = publicp;
7819   if (! publicp)
7820     {
7821       DECL_INTERFACE_KNOWN (decl) = 1;
7822       DECL_NOT_REALLY_EXTERN (decl) = 1;
7823     }
7824
7825   /* If the declaration was declared inline, mark it as such.  */
7826   if (inlinep)
7827     {
7828       DECL_DECLARED_INLINE_P (decl) = 1;
7829       if (publicp)
7830         DECL_COMDAT (decl) = 1;
7831     }
7832   if (inlinep & 2)
7833     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7834
7835   DECL_EXTERNAL (decl) = 1;
7836   if (TREE_CODE (type) == FUNCTION_TYPE)
7837     {
7838       if (quals)
7839         {
7840           error (ctype
7841                  ? G_("static member function %qD cannot have cv-qualifier")
7842                  : G_("non-member function %qD cannot have cv-qualifier"),
7843                  decl);
7844           quals = TYPE_UNQUALIFIED;
7845         }
7846
7847       if (rqual)
7848         {
7849           error (ctype
7850                  ? G_("static member function %qD cannot have ref-qualifier")
7851                  : G_("non-member function %qD cannot have ref-qualifier"),
7852                  decl);
7853           rqual = REF_QUAL_NONE;
7854         }
7855     }
7856
7857   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7858       && !grok_op_properties (decl, /*complain=*/true))
7859     return NULL_TREE;
7860   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7861     {
7862       bool long_long_unsigned_p;
7863       bool long_double_p;
7864       const char *suffix = NULL;
7865       /* [over.literal]/6: Literal operators shall not have C linkage. */
7866       if (DECL_LANGUAGE (decl) == lang_c)
7867         {
7868           error ("literal operator with C linkage");
7869           return NULL_TREE;
7870         }
7871
7872       if (DECL_NAMESPACE_SCOPE_P (decl))
7873         {
7874           if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7875                                             &long_double_p))
7876             {
7877               error ("%qD has invalid argument list", decl);
7878               return NULL_TREE;
7879             }
7880
7881           suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7882           if (long_long_unsigned_p)
7883             {
7884               if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
7885                 warning (0, "integer suffix %<%s%>"
7886                             " shadowed by implementation", suffix);
7887             }
7888           else if (long_double_p)
7889             {
7890               if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
7891                 warning (0, "floating point suffix %<%s%>"
7892                             " shadowed by implementation", suffix);
7893             }
7894         }
7895       else
7896         {
7897           error ("%qD must be a non-member function", decl);
7898           return NULL_TREE;
7899         }
7900     }
7901
7902   if (funcdef_flag)
7903     /* Make the init_value nonzero so pushdecl knows this is not
7904        tentative.  error_mark_node is replaced later with the BLOCK.  */
7905     DECL_INITIAL (decl) = error_mark_node;
7906
7907   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7908     TREE_NOTHROW (decl) = 1;
7909
7910   if (flag_openmp || flag_cilkplus)
7911     {
7912       /* Adjust "omp declare simd" attributes.  */
7913       tree ods = lookup_attribute ("omp declare simd", *attrlist);
7914       if (ods)
7915         {
7916           tree attr;
7917           for (attr = ods; attr;
7918                attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
7919             {
7920               if (TREE_CODE (type) == METHOD_TYPE)
7921                 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
7922                            DECL_ARGUMENTS (decl), NULL);
7923               if (TREE_VALUE (attr) != NULL_TREE)
7924                 {
7925                   tree cl = TREE_VALUE (TREE_VALUE (attr));
7926                   cl = c_omp_declare_simd_clauses_to_numbers
7927                                                 (DECL_ARGUMENTS (decl), cl);
7928                   if (cl)
7929                     TREE_VALUE (TREE_VALUE (attr)) = cl;
7930                   else
7931                     TREE_VALUE (attr) = NULL_TREE;
7932                 }
7933             }
7934         }
7935     }
7936
7937   /* Caller will do the rest of this.  */
7938   if (check < 0)
7939     return decl;
7940
7941   if (ctype != NULL_TREE)
7942     grokclassfn (ctype, decl, flags);
7943
7944   /* 12.4/3  */
7945   if (cxx_dialect >= cxx11
7946       && DECL_DESTRUCTOR_P (decl)
7947       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
7948       && !processing_template_decl)
7949     deduce_noexcept_on_destructor (decl);
7950
7951   decl = check_explicit_specialization (orig_declarator, decl,
7952                                         template_count,
7953                                         2 * funcdef_flag +
7954                                         4 * (friendp != 0));
7955   if (decl == error_mark_node)
7956     return NULL_TREE;
7957
7958   if (DECL_STATIC_FUNCTION_P (decl))
7959     check_static_quals (decl, quals);
7960
7961   if (attrlist)
7962     {
7963       cplus_decl_attributes (&decl, *attrlist, 0);
7964       *attrlist = NULL_TREE;
7965     }
7966
7967   /* Check main's type after attributes have been applied.  */
7968   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7969     {
7970       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7971                         integer_type_node))
7972         {
7973           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7974           tree newtype;
7975           error ("%<::main%> must return %<int%>");
7976           newtype = build_function_type (integer_type_node, oldtypeargs);
7977           TREE_TYPE (decl) = newtype;
7978         }
7979       if (warn_main)
7980         check_main_parameter_types (decl);
7981     }
7982
7983   if (ctype != NULL_TREE
7984       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7985       && check)
7986     {
7987       tree old_decl = check_classfn (ctype, decl,
7988                                      (processing_template_decl
7989                                       > template_class_depth (ctype))
7990                                      ? current_template_parms
7991                                      : NULL_TREE);
7992
7993       if (old_decl == error_mark_node)
7994         return NULL_TREE;
7995
7996       if (old_decl)
7997         {
7998           tree ok;
7999           tree pushed_scope;
8000
8001           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8002             /* Because grokfndecl is always supposed to return a
8003                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8004                here.  We depend on our callers to figure out that its
8005                really a template that's being returned.  */
8006             old_decl = DECL_TEMPLATE_RESULT (old_decl);
8007
8008           if (DECL_STATIC_FUNCTION_P (old_decl)
8009               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8010             {
8011               /* Remove the `this' parm added by grokclassfn.  */
8012               revert_static_member_fn (decl);
8013               check_static_quals (decl, quals);
8014             }
8015           if (DECL_ARTIFICIAL (old_decl))
8016             {
8017               error ("definition of implicitly-declared %qD", old_decl);
8018               return NULL_TREE;
8019             }
8020           else if (DECL_DEFAULTED_FN (old_decl))
8021             {
8022               error ("definition of explicitly-defaulted %q+D", decl);
8023               error ("%q+#D explicitly defaulted here", old_decl);
8024               return NULL_TREE;
8025             }
8026
8027           /* Since we've smashed OLD_DECL to its
8028              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
8029           if (TREE_CODE (decl) == TEMPLATE_DECL)
8030             decl = DECL_TEMPLATE_RESULT (decl);
8031
8032           /* Attempt to merge the declarations.  This can fail, in
8033              the case of some invalid specialization declarations.  */
8034           pushed_scope = push_scope (ctype);
8035           ok = duplicate_decls (decl, old_decl, friendp);
8036           if (pushed_scope)
8037             pop_scope (pushed_scope);
8038           if (!ok)
8039             {
8040               error ("no %q#D member function declared in class %qT",
8041                      decl, ctype);
8042               return NULL_TREE;
8043             }
8044           if (ok == error_mark_node)
8045             return NULL_TREE;
8046           return old_decl;
8047         }
8048     }
8049
8050   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8051     return NULL_TREE;
8052
8053   if (ctype == NULL_TREE || check)
8054     return decl;
8055
8056   if (virtualp)
8057     DECL_VIRTUAL_P (decl) = 1;
8058
8059   return decl;
8060 }
8061
8062 /* decl is a FUNCTION_DECL.
8063    specifiers are the parsed virt-specifiers.
8064
8065    Set flags to reflect the virt-specifiers.
8066
8067    Returns decl.  */
8068
8069 static tree
8070 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8071 {
8072   if (decl == NULL_TREE)
8073     return decl;
8074   if (specifiers & VIRT_SPEC_OVERRIDE)
8075     DECL_OVERRIDE_P (decl) = 1;
8076   if (specifiers & VIRT_SPEC_FINAL)
8077     DECL_FINAL_P (decl) = 1;
8078   return decl;
8079 }
8080
8081 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
8082    the linkage that DECL will receive in the object file.  */
8083
8084 static void
8085 set_linkage_for_static_data_member (tree decl)
8086 {
8087   /* A static data member always has static storage duration and
8088      external linkage.  Note that static data members are forbidden in
8089      local classes -- the only situation in which a class has
8090      non-external linkage.  */
8091   TREE_PUBLIC (decl) = 1;
8092   TREE_STATIC (decl) = 1;
8093   /* For non-template classes, static data members are always put
8094      out in exactly those files where they are defined, just as
8095      with ordinary namespace-scope variables.  */
8096   if (!processing_template_decl)
8097     DECL_INTERFACE_KNOWN (decl) = 1;
8098 }
8099
8100 /* Create a VAR_DECL named NAME with the indicated TYPE.
8101
8102    If SCOPE is non-NULL, it is the class type or namespace containing
8103    the variable.  If SCOPE is NULL, the variable should is created in
8104    the innermost enclosing scope.  */
8105
8106 static tree
8107 grokvardecl (tree type,
8108              tree name,
8109              tree orig_declarator,
8110              const cp_decl_specifier_seq *declspecs,
8111              int initialized,
8112              int constp,
8113              int template_count,
8114              tree scope)
8115 {
8116   tree decl;
8117   tree explicit_scope;
8118
8119   gcc_assert (!name || identifier_p (name));
8120
8121   /* Compute the scope in which to place the variable, but remember
8122      whether or not that scope was explicitly specified by the user.   */
8123   explicit_scope = scope;
8124   if (!scope)
8125     {
8126       /* An explicit "extern" specifier indicates a namespace-scope
8127          variable.  */
8128       if (declspecs->storage_class == sc_extern)
8129         scope = current_decl_namespace ();
8130       else if (!at_function_scope_p ())
8131         scope = current_scope ();
8132     }
8133
8134   if (scope
8135       && (/* If the variable is a namespace-scope variable declared in a
8136              template, we need DECL_LANG_SPECIFIC.  */
8137           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8138           /* Similarly for namespace-scope variables with language linkage
8139              other than C++.  */
8140           || (TREE_CODE (scope) == NAMESPACE_DECL
8141               && current_lang_name != lang_name_cplusplus)
8142           /* Similarly for static data members.  */
8143           || TYPE_P (scope)
8144           /* Similarly for explicit specializations.  */
8145           || (orig_declarator
8146               && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8147     decl = build_lang_decl (VAR_DECL, name, type);
8148   else
8149     decl = build_decl (input_location, VAR_DECL, name, type);
8150
8151   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8152     set_decl_namespace (decl, explicit_scope, 0);
8153   else
8154     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
8155
8156   if (declspecs->storage_class == sc_extern)
8157     {
8158       DECL_THIS_EXTERN (decl) = 1;
8159       DECL_EXTERNAL (decl) = !initialized;
8160     }
8161
8162   if (DECL_CLASS_SCOPE_P (decl))
8163     {
8164       set_linkage_for_static_data_member (decl);
8165       /* This function is only called with out-of-class definitions.  */
8166       DECL_EXTERNAL (decl) = 0;
8167       check_class_member_definition_namespace (decl);
8168     }
8169   /* At top level, either `static' or no s.c. makes a definition
8170      (perhaps tentative), and absence of `static' makes it public.  */
8171   else if (toplevel_bindings_p ())
8172     {
8173       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
8174                             && (DECL_THIS_EXTERN (decl) || ! constp));
8175       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
8176     }
8177   /* Not at top level, only `static' makes a static definition.  */
8178   else
8179     {
8180       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
8181       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
8182     }
8183
8184   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
8185     {
8186       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
8187         set_decl_tls_model (decl, decl_default_tls_model (decl));
8188       if (declspecs->gnu_thread_keyword_p)
8189         DECL_GNU_TLS_P (decl) = true;
8190     }
8191
8192   /* If the type of the decl has no linkage, make sure that we'll
8193      notice that in mark_used.  */
8194   if (cxx_dialect > cxx98
8195       && decl_linkage (decl) != lk_none
8196       && DECL_LANG_SPECIFIC (decl) == NULL
8197       && !DECL_EXTERN_C_P (decl)
8198       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
8199     retrofit_lang_decl (decl);
8200
8201   if (TREE_PUBLIC (decl))
8202     {
8203       /* [basic.link]: A name with no linkage (notably, the name of a class
8204          or enumeration declared in a local scope) shall not be used to
8205          declare an entity with linkage.
8206
8207          DR 757 relaxes this restriction for C++0x.  */
8208       if (cxx_dialect < cxx11)
8209         no_linkage_error (decl);
8210     }
8211   else
8212     DECL_INTERFACE_KNOWN (decl) = 1;
8213
8214   // Handle explicit specializations and instantiations of variable templates.
8215   if (orig_declarator)
8216     decl = check_explicit_specialization (orig_declarator, decl,
8217                                           template_count, 0);
8218
8219   return decl != error_mark_node ? decl : NULL_TREE;
8220 }
8221
8222 /* Create and return a canonical pointer to member function type, for
8223    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
8224
8225 tree
8226 build_ptrmemfunc_type (tree type)
8227 {
8228   tree field, fields;
8229   tree t;
8230
8231   if (type == error_mark_node)
8232     return type;
8233
8234   /* If a canonical type already exists for this type, use it.  We use
8235      this method instead of type_hash_canon, because it only does a
8236      simple equality check on the list of field members.  */
8237
8238   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
8239     return t;
8240
8241   /* Make sure that we always have the unqualified pointer-to-member
8242      type first.  */
8243   if (cp_cv_quals quals = cp_type_quals (type))
8244     {
8245       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
8246       return cp_build_qualified_type (unqual, quals);
8247     }
8248
8249   t = make_node (RECORD_TYPE);
8250
8251   /* Let the front end know this is a pointer to member function.  */
8252   TYPE_PTRMEMFUNC_FLAG (t) = 1;
8253
8254   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
8255   fields = field;
8256
8257   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
8258                       delta_type_node);
8259   DECL_CHAIN (field) = fields;
8260   fields = field;
8261
8262   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
8263
8264   /* Zap out the name so that the back end will give us the debugging
8265      information for this anonymous RECORD_TYPE.  */
8266   TYPE_NAME (t) = NULL_TREE;
8267
8268   /* Cache this pointer-to-member type so that we can find it again
8269      later.  */
8270   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
8271
8272   if (TYPE_STRUCTURAL_EQUALITY_P (type))
8273     SET_TYPE_STRUCTURAL_EQUALITY (t);
8274   else if (TYPE_CANONICAL (type) != type)
8275     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
8276
8277   return t;
8278 }
8279
8280 /* Create and return a pointer to data member type.  */
8281
8282 tree
8283 build_ptrmem_type (tree class_type, tree member_type)
8284 {
8285   if (TREE_CODE (member_type) == METHOD_TYPE)
8286     {
8287       cp_cv_quals quals = type_memfn_quals (member_type);
8288       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
8289       member_type = build_memfn_type (member_type, class_type, quals, rqual);
8290       return build_ptrmemfunc_type (build_pointer_type (member_type));
8291     }
8292   else
8293     {
8294       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
8295       return build_offset_type (class_type, member_type);
8296     }
8297 }
8298
8299 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
8300    Check to see that the definition is valid.  Issue appropriate error
8301    messages.  Return 1 if the definition is particularly bad, or 0
8302    otherwise.  */
8303
8304 static int
8305 check_static_variable_definition (tree decl, tree type)
8306 {
8307   /* Can't check yet if we don't know the type.  */
8308   if (dependent_type_p (type))
8309     return 0;
8310   /* If DECL is declared constexpr, we'll do the appropriate checks
8311      in check_initializer.  */
8312   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
8313     return 0;
8314   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8315     {
8316       if (!COMPLETE_TYPE_P (type))
8317         error ("in-class initialization of static data member %q#D of "
8318                "incomplete type", decl);
8319       else if (literal_type_p (type))
8320         permerror (input_location,
8321                    "%<constexpr%> needed for in-class initialization of "
8322                    "static data member %q#D of non-integral type", decl);
8323       else
8324         error ("in-class initialization of static data member %q#D of "
8325                "non-literal type", decl);
8326       return 1;
8327     }
8328
8329   /* Motion 10 at San Diego: If a static const integral data member is
8330      initialized with an integral constant expression, the initializer
8331      may appear either in the declaration (within the class), or in
8332      the definition, but not both.  If it appears in the class, the
8333      member is a member constant.  The file-scope definition is always
8334      required.  */
8335   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
8336     {
8337       error ("invalid in-class initialization of static data member "
8338              "of non-integral type %qT",
8339              type);
8340       return 1;
8341     }
8342   else if (!CP_TYPE_CONST_P (type))
8343     error ("ISO C++ forbids in-class initialization of non-const "
8344            "static member %qD",
8345            decl);
8346   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
8347     pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids initialization of member constant "
8348              "%qD of non-integral type %qT", decl, type);
8349
8350   return 0;
8351 }
8352
8353 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
8354    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
8355    expressions out into temporary variables so that walk_tree doesn't
8356    step into them (c++/15764).  */
8357
8358 static tree
8359 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8360 {
8361   hash_set<tree> *pset = (hash_set<tree> *)data;
8362   tree expr = *expr_p;
8363   if (TREE_CODE (expr) == SAVE_EXPR)
8364     {
8365       tree op = TREE_OPERAND (expr, 0);
8366       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
8367       if (TREE_SIDE_EFFECTS (op))
8368         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
8369       *walk_subtrees = 0;
8370     }
8371   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
8372     *walk_subtrees = 0;
8373   return NULL;
8374 }
8375
8376 /* Entry point for the above.  */
8377
8378 static void
8379 stabilize_vla_size (tree size)
8380 {
8381   hash_set<tree> pset;
8382   /* Break out any function calls into temporary variables.  */
8383   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
8384 }
8385
8386 /* Helper function for compute_array_index_type.  Look for SIZEOF_EXPR
8387    not inside of SAVE_EXPR and fold them.  */
8388
8389 static tree
8390 fold_sizeof_expr_r (tree *expr_p, int *walk_subtrees, void *data)
8391 {
8392   tree expr = *expr_p;
8393   if (TREE_CODE (expr) == SAVE_EXPR || TYPE_P (expr))
8394     *walk_subtrees = 0;
8395   else if (TREE_CODE (expr) == SIZEOF_EXPR)
8396     {
8397       *(bool *)data = true;
8398       if (SIZEOF_EXPR_TYPE_P (expr))
8399         expr = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (expr, 0)),
8400                                            SIZEOF_EXPR, false);
8401       else if (TYPE_P (TREE_OPERAND (expr, 0)))
8402         expr = cxx_sizeof_or_alignof_type (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8403                                            false);
8404       else
8405         expr = cxx_sizeof_or_alignof_expr (TREE_OPERAND (expr, 0), SIZEOF_EXPR,
8406                                            false);
8407       if (expr == error_mark_node)
8408         expr = size_one_node;
8409       *expr_p = expr;
8410       *walk_subtrees = 0;
8411     }
8412   return NULL;
8413 }
8414
8415 /* Given the SIZE (i.e., number of elements) in an array, compute an
8416    appropriate index type for the array.  If non-NULL, NAME is the
8417    name of the thing being declared.  */
8418
8419 tree
8420 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
8421 {
8422   tree itype;
8423   tree osize = size;
8424
8425   if (error_operand_p (size))
8426     return error_mark_node;
8427
8428   if (!type_dependent_expression_p (size))
8429     {
8430       tree type = TREE_TYPE (size);
8431
8432       mark_rvalue_use (size);
8433
8434       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
8435           && TREE_SIDE_EFFECTS (size))
8436         /* In C++98, we mark a non-constant array bound with a magic
8437            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
8438       else
8439         {
8440           size = instantiate_non_dependent_expr_sfinae (size, complain);
8441
8442           if (CLASS_TYPE_P (type)
8443               && CLASSTYPE_LITERAL_P (type))
8444             {
8445               size = build_expr_type_conversion (WANT_INT, size, true);
8446               if (!size)
8447                 {
8448                   if (!(complain & tf_error))
8449                     return error_mark_node;
8450                   if (name)
8451                     error ("size of array %qD has non-integral type %qT",
8452                            name, type);
8453                   else
8454                     error ("size of array has non-integral type %qT", type);
8455                   size = integer_one_node;
8456                 }
8457               if (size == error_mark_node)
8458                 return error_mark_node;
8459               type = TREE_TYPE (size);
8460             }
8461
8462           if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8463             size = maybe_constant_value (size);
8464
8465           if (!TREE_CONSTANT (size))
8466             size = osize;
8467         }
8468
8469       if (error_operand_p (size))
8470         return error_mark_node;
8471
8472       /* The array bound must be an integer type.  */
8473       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
8474         {
8475           if (!(complain & tf_error))
8476             return error_mark_node;
8477           if (name)
8478             error ("size of array %qD has non-integral type %qT", name, type);
8479           else
8480             error ("size of array has non-integral type %qT", type);
8481           size = integer_one_node;
8482           type = TREE_TYPE (size);
8483         }
8484     }
8485
8486   /* A type is dependent if it is...an array type constructed from any
8487      dependent type or whose size is specified by a constant expression
8488      that is value-dependent.  */
8489   /* We can only call value_dependent_expression_p on integral constant
8490      expressions; treat non-constant expressions as dependent, too.  */
8491   if (processing_template_decl
8492       && (type_dependent_expression_p (size)
8493           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
8494     {
8495       /* We cannot do any checking for a SIZE that isn't known to be
8496          constant. Just build the index type and mark that it requires
8497          structural equality checks.  */
8498       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8499                                            size, size_one_node));
8500       TYPE_DEPENDENT_P (itype) = 1;
8501       TYPE_DEPENDENT_P_VALID (itype) = 1;
8502       SET_TYPE_STRUCTURAL_EQUALITY (itype);
8503       return itype;
8504     }
8505   
8506   /* Normally, the array-bound will be a constant.  */
8507   if (TREE_CODE (size) == INTEGER_CST)
8508     {
8509       /* Check to see if the array bound overflowed.  Make that an
8510          error, no matter how generous we're being.  */
8511       constant_expression_error (size);
8512
8513       /* An array must have a positive number of elements.  */
8514       if (tree_int_cst_lt (size, integer_zero_node))
8515         {
8516           if (!(complain & tf_error))
8517             return error_mark_node;
8518           if (name)
8519             error ("size of array %qD is negative", name);
8520           else
8521             error ("size of array is negative");
8522           size = integer_one_node;
8523         }
8524       /* As an extension we allow zero-sized arrays.  */
8525       else if (integer_zerop (size))
8526         {
8527           if (!(complain & tf_error))
8528             /* We must fail if performing argument deduction (as
8529                indicated by the state of complain), so that
8530                another substitution can be found.  */
8531             return error_mark_node;
8532           else if (in_system_header_at (input_location))
8533             /* Allow them in system headers because glibc uses them.  */;
8534           else if (name)
8535             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
8536           else
8537             pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
8538         }
8539     }
8540   else if (TREE_CONSTANT (size)
8541            /* We don't allow VLAs at non-function scopes, or during
8542               tentative template substitution.  */
8543            || !at_function_scope_p ()
8544            || !(complain & tf_error))
8545     {
8546       if (!(complain & tf_error))
8547         return error_mark_node;
8548       /* `(int) &fn' is not a valid array bound.  */
8549       if (name)
8550         error ("size of array %qD is not an integral constant-expression",
8551                name);
8552       else
8553         error ("size of array is not an integral constant-expression");
8554       size = integer_one_node;
8555     }
8556   else if (pedantic && warn_vla != 0)
8557     {
8558       if (name)
8559         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8560       else
8561         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8562     }
8563   else if (warn_vla > 0)
8564     {
8565       if (name)
8566         warning (OPT_Wvla, 
8567                  "variable length array %qD is used", name);
8568       else
8569         warning (OPT_Wvla, 
8570                  "variable length array is used");
8571     }
8572
8573   if (processing_template_decl && !TREE_CONSTANT (size))
8574     /* A variable sized array.  */
8575     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8576   else
8577     {
8578       HOST_WIDE_INT saved_processing_template_decl;
8579
8580       /* Compute the index of the largest element in the array.  It is
8581          one less than the number of elements in the array.  We save
8582          and restore PROCESSING_TEMPLATE_DECL so that computations in
8583          cp_build_binary_op will be appropriately folded.  */
8584       saved_processing_template_decl = processing_template_decl;
8585       processing_template_decl = 0;
8586       itype = cp_build_binary_op (input_location,
8587                                   MINUS_EXPR,
8588                                   cp_convert (ssizetype, size, complain),
8589                                   cp_convert (ssizetype, integer_one_node,
8590                                               complain),
8591                                   complain);
8592       itype = fold (itype);
8593       processing_template_decl = saved_processing_template_decl;
8594
8595       if (!TREE_CONSTANT (itype))
8596         {
8597           /* A variable sized array.  */
8598           itype = variable_size (itype);
8599
8600           if (TREE_CODE (itype) != SAVE_EXPR)
8601             {
8602               /* Look for SIZEOF_EXPRs in itype and fold them, otherwise
8603                  they might survive till gimplification.  */
8604               tree newitype = itype;
8605               bool found = false;
8606               cp_walk_tree_without_duplicates (&newitype,
8607                                                fold_sizeof_expr_r, &found);
8608               if (found)
8609                 itype = variable_size (fold (newitype));
8610             }
8611
8612           stabilize_vla_size (itype);
8613
8614           if (flag_sanitize & SANITIZE_VLA
8615               && do_ubsan_in_current_function ())
8616             {
8617               /* We have to add 1 -- in the ubsan routine we generate
8618                  LE_EXPR rather than LT_EXPR.  */
8619               tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
8620                                     build_one_cst (TREE_TYPE (itype)));
8621               t = ubsan_instrument_vla (input_location, t);
8622               finish_expr_stmt (t);
8623             }
8624         }
8625       /* Make sure that there was no overflow when creating to a signed
8626          index type.  (For example, on a 32-bit machine, an array with
8627          size 2^32 - 1 is too big.)  */
8628       else if (TREE_CODE (itype) == INTEGER_CST
8629                && TREE_OVERFLOW (itype))
8630         {
8631           if (!(complain & tf_error))
8632             return error_mark_node;
8633           error ("overflow in array dimension");
8634           TREE_OVERFLOW (itype) = 0;
8635         }
8636     }
8637
8638   /* Create and return the appropriate index type.  */
8639   itype = build_index_type (itype);
8640
8641   /* If the index type were dependent, we would have returned early, so
8642      remember that it isn't.  */
8643   TYPE_DEPENDENT_P (itype) = 0;
8644   TYPE_DEPENDENT_P_VALID (itype) = 1;
8645   return itype;
8646 }
8647
8648 /* Returns the scope (if any) in which the entity declared by
8649    DECLARATOR will be located.  If the entity was declared with an
8650    unqualified name, NULL_TREE is returned.  */
8651
8652 tree
8653 get_scope_of_declarator (const cp_declarator *declarator)
8654 {
8655   while (declarator && declarator->kind != cdk_id)
8656     declarator = declarator->declarator;
8657
8658   /* If the declarator-id is a SCOPE_REF, the scope in which the
8659      declaration occurs is the first operand.  */
8660   if (declarator
8661       && declarator->u.id.qualifying_scope)
8662     return declarator->u.id.qualifying_scope;
8663
8664   /* Otherwise, the declarator is not a qualified name; the entity will
8665      be declared in the current scope.  */
8666   return NULL_TREE;
8667 }
8668
8669 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8670    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8671    with this type.  */
8672
8673 static tree
8674 create_array_type_for_decl (tree name, tree type, tree size)
8675 {
8676   tree itype = NULL_TREE;
8677
8678   /* If things have already gone awry, bail now.  */
8679   if (type == error_mark_node || size == error_mark_node)
8680     return error_mark_node;
8681
8682   /* 8.3.4/1: If the type of the identifier of D contains the auto
8683      type-specifier, the program is ill-formed.  */
8684   if (type_uses_auto (type))
8685     {
8686       error ("%qD declared as array of %qT", name, type);
8687       return error_mark_node;
8688     }
8689
8690   /* If there are some types which cannot be array elements,
8691      issue an error-message and return.  */
8692   switch (TREE_CODE (type))
8693     {
8694     case VOID_TYPE:
8695       if (name)
8696         error ("declaration of %qD as array of void", name);
8697       else
8698         error ("creating array of void");
8699       return error_mark_node;
8700
8701     case FUNCTION_TYPE:
8702       if (name)
8703         error ("declaration of %qD as array of functions", name);
8704       else
8705         error ("creating array of functions");
8706       return error_mark_node;
8707
8708     case REFERENCE_TYPE:
8709       if (name)
8710         error ("declaration of %qD as array of references", name);
8711       else
8712         error ("creating array of references");
8713       return error_mark_node;
8714
8715     case METHOD_TYPE:
8716       if (name)
8717         error ("declaration of %qD as array of function members", name);
8718       else
8719         error ("creating array of function members");
8720       return error_mark_node;
8721
8722     default:
8723       break;
8724     }
8725
8726   /* [dcl.array]
8727
8728      The constant expressions that specify the bounds of the arrays
8729      can be omitted only for the first member of the sequence.  */
8730   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8731     {
8732       if (name)
8733         error ("declaration of %qD as multidimensional array must "
8734                "have bounds for all dimensions except the first",
8735                name);
8736       else
8737         error ("multidimensional array must have bounds for all "
8738                "dimensions except the first");
8739
8740       return error_mark_node;
8741     }
8742
8743   /* Figure out the index type for the array.  */
8744   if (size)
8745     itype = compute_array_index_type (name, size, tf_warning_or_error);
8746
8747   /* [dcl.array]
8748      T is called the array element type; this type shall not be [...] an
8749      abstract class type.  */
8750   abstract_virtuals_error (name, type);
8751
8752   return build_cplus_array_type (type, itype);
8753 }
8754
8755 /* Check that it's OK to declare a function with the indicated TYPE.
8756    SFK indicates the kind of special function (if any) that this
8757    function is.  OPTYPE is the type given in a conversion operator
8758    declaration, or the class type for a constructor/destructor.
8759    Returns the actual return type of the function; that
8760    may be different than TYPE if an error occurs, or for certain
8761    special functions.  */
8762
8763 static tree
8764 check_special_function_return_type (special_function_kind sfk,
8765                                     tree type,
8766                                     tree optype)
8767 {
8768   switch (sfk)
8769     {
8770     case sfk_constructor:
8771       if (type)
8772         error ("return type specification for constructor invalid");
8773
8774       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8775         type = build_pointer_type (optype);
8776       else
8777         type = void_type_node;
8778       break;
8779
8780     case sfk_destructor:
8781       if (type)
8782         error ("return type specification for destructor invalid");
8783       /* We can't use the proper return type here because we run into
8784          problems with ambiguous bases and covariant returns.
8785          Java classes are left unchanged because (void *) isn't a valid
8786          Java type, and we don't want to change the Java ABI.  */
8787       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8788         type = build_pointer_type (void_type_node);
8789       else
8790         type = void_type_node;
8791       break;
8792
8793     case sfk_conversion:
8794       if (type)
8795         error ("return type specified for %<operator %T%>",  optype);
8796       type = optype;
8797       break;
8798
8799     default:
8800       gcc_unreachable ();
8801     }
8802
8803   return type;
8804 }
8805
8806 /* A variable or data member (whose unqualified name is IDENTIFIER)
8807    has been declared with the indicated TYPE.  If the TYPE is not
8808    acceptable, issue an error message and return a type to use for
8809    error-recovery purposes.  */
8810
8811 tree
8812 check_var_type (tree identifier, tree type)
8813 {
8814   if (VOID_TYPE_P (type))
8815     {
8816       if (!identifier)
8817         error ("unnamed variable or field declared void");
8818       else if (identifier_p (identifier))
8819         {
8820           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8821           error ("variable or field %qE declared void", identifier);
8822         }
8823       else
8824         error ("variable or field declared void");
8825       type = error_mark_node;
8826     }
8827
8828   return type;
8829 }
8830
8831 /* Given declspecs and a declarator (abstract or otherwise), determine
8832    the name and type of the object declared and construct a DECL node
8833    for it.
8834
8835    DECLSPECS points to the representation of declaration-specifier
8836    sequence that precedes declarator.
8837
8838    DECL_CONTEXT says which syntactic context this declaration is in:
8839      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8840      FUNCDEF for a function definition.  Like NORMAL but a few different
8841       error messages in each case.  Return value may be zero meaning
8842       this definition is too screwy to try to parse.
8843      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8844       handle member functions (which have FIELD context).
8845       Return value may be zero meaning this definition is too screwy to
8846       try to parse.
8847      PARM for a parameter declaration (either within a function prototype
8848       or before a function body).  Make a PARM_DECL, or return void_type_node.
8849      TPARM for a template parameter declaration.
8850      CATCHPARM for a parameter declaration before a catch clause.
8851      TYPENAME if for a typename (in a cast or sizeof).
8852       Don't make a DECL node; just return the ..._TYPE node.
8853      FIELD for a struct or union field; make a FIELD_DECL.
8854      BITFIELD for a field with specified width.
8855
8856    INITIALIZED is as for start_decl.
8857
8858    ATTRLIST is a pointer to the list of attributes, which may be NULL
8859    if there are none; *ATTRLIST may be modified if attributes from inside
8860    the declarator should be applied to the declaration.
8861
8862    When this function is called, scoping variables (such as
8863    CURRENT_CLASS_TYPE) should reflect the scope in which the
8864    declaration occurs, not the scope in which the new declaration will
8865    be placed.  For example, on:
8866
8867      void S::f() { ... }
8868
8869    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8870    should not be `S'.
8871
8872    Returns a DECL (if a declarator is present), a TYPE (if there is no
8873    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8874    error occurs. */
8875
8876 tree
8877 grokdeclarator (const cp_declarator *declarator,
8878                 cp_decl_specifier_seq *declspecs,
8879                 enum decl_context decl_context,
8880                 int initialized,
8881                 tree* attrlist)
8882 {
8883   tree type = NULL_TREE;
8884   int longlong = 0;
8885   int explicit_intN = 0;
8886   int virtualp, explicitp, friendp, inlinep, staticp;
8887   int explicit_int = 0;
8888   int explicit_char = 0;
8889   int defaulted_int = 0;
8890
8891   tree typedef_decl = NULL_TREE;
8892   const char *name = NULL;
8893   tree typedef_type = NULL_TREE;
8894   /* True if this declarator is a function definition.  */
8895   bool funcdef_flag = false;
8896   cp_declarator_kind innermost_code = cdk_error;
8897   int bitfield = 0;
8898 #if 0
8899   /* See the code below that used this.  */
8900   tree decl_attr = NULL_TREE;
8901 #endif
8902
8903   /* Keep track of what sort of function is being processed
8904      so that we can warn about default return values, or explicit
8905      return values which do not match prescribed defaults.  */
8906   special_function_kind sfk = sfk_none;
8907
8908   tree dname = NULL_TREE;
8909   tree ctor_return_type = NULL_TREE;
8910   enum overload_flags flags = NO_SPECIAL;
8911   /* cv-qualifiers that apply to the declarator, for a declaration of
8912      a member function.  */
8913   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8914   /* virt-specifiers that apply to the declarator, for a declaration of
8915      a member function.  */
8916   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8917   /* ref-qualifier that applies to the declarator, for a declaration of
8918      a member function.  */
8919   cp_ref_qualifier rqual = REF_QUAL_NONE;
8920   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8921   int type_quals;
8922   tree raises = NULL_TREE;
8923   int template_count = 0;
8924   tree returned_attrs = NULL_TREE;
8925   tree parms = NULL_TREE;
8926   const cp_declarator *id_declarator;
8927   /* The unqualified name of the declarator; either an
8928      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8929   tree unqualified_id;
8930   /* The class type, if any, in which this entity is located,
8931      or NULL_TREE if none.  Note that this value may be different from
8932      the current class type; for example if an attempt is made to declare
8933      "A::f" inside "B", this value will be "A".  */
8934   tree ctype = current_class_type;
8935   /* The NAMESPACE_DECL for the namespace in which this entity is
8936      located.  If an unqualified name is used to declare the entity,
8937      this value will be NULL_TREE, even if the entity is located at
8938      namespace scope.  */
8939   tree in_namespace = NULL_TREE;
8940   cp_storage_class storage_class;
8941   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8942   bool type_was_error_mark_node = false;
8943   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8944   bool template_type_arg = false;
8945   bool template_parm_flag = false;
8946   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
8947   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
8948   bool late_return_type_p = false;
8949   bool array_parameter_p = false;
8950   source_location saved_loc = input_location;
8951   const char *errmsg;
8952
8953   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
8954   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
8955   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
8956   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
8957   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
8958   explicit_intN = declspecs->explicit_intN_p;
8959   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
8960
8961   if (decl_context == FUNCDEF)
8962     funcdef_flag = true, decl_context = NORMAL;
8963   else if (decl_context == MEMFUNCDEF)
8964     funcdef_flag = true, decl_context = FIELD;
8965   else if (decl_context == BITFIELD)
8966     bitfield = 1, decl_context = FIELD;
8967   else if (decl_context == TEMPLATE_TYPE_ARG)
8968     template_type_arg = true, decl_context = TYPENAME;
8969   else if (decl_context == TPARM)
8970     template_parm_flag = true, decl_context = PARM;
8971
8972   if (initialized > 1)
8973     funcdef_flag = true;
8974
8975   /* Look inside a declarator for the name being declared
8976      and get it as a string, for an error message.  */
8977   for (id_declarator = declarator;
8978        id_declarator;
8979        id_declarator = id_declarator->declarator)
8980     {
8981       if (id_declarator->kind != cdk_id)
8982         innermost_code = id_declarator->kind;
8983
8984       switch (id_declarator->kind)
8985         {
8986         case cdk_function:
8987           if (id_declarator->declarator
8988               && id_declarator->declarator->kind == cdk_id)
8989             {
8990               sfk = id_declarator->declarator->u.id.sfk;
8991               if (sfk == sfk_destructor)
8992                 flags = DTOR_FLAG;
8993             }
8994           break;
8995
8996         case cdk_id:
8997           {
8998             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8999             tree decl = id_declarator->u.id.unqualified_name;
9000             if (!decl)
9001               break;
9002             if (qualifying_scope)
9003               {
9004                 if (at_function_scope_p ())
9005                   {
9006                     /* [dcl.meaning] 
9007
9008                        A declarator-id shall not be qualified except
9009                        for ... 
9010
9011                        None of the cases are permitted in block
9012                        scope.  */
9013                     if (qualifying_scope == global_namespace)
9014                       error ("invalid use of qualified-name %<::%D%>",
9015                              decl);
9016                     else if (TYPE_P (qualifying_scope))
9017                       error ("invalid use of qualified-name %<%T::%D%>",
9018                              qualifying_scope, decl);
9019                     else 
9020                       error ("invalid use of qualified-name %<%D::%D%>",
9021                              qualifying_scope, decl);
9022                     return error_mark_node;
9023                   }
9024                 else if (TYPE_P (qualifying_scope))
9025                   {
9026                     ctype = qualifying_scope;
9027                     if (!MAYBE_CLASS_TYPE_P (ctype))
9028                       {
9029                         error ("%q#T is not a class or a namespace", ctype);
9030                         ctype = NULL_TREE;
9031                       }
9032                     else if (innermost_code != cdk_function
9033                              && current_class_type
9034                              && !uniquely_derived_from_p (ctype,
9035                                                           current_class_type))
9036                       {
9037                         error ("invalid use of qualified-name %<%T::%D%>",
9038                                qualifying_scope, decl);
9039                         return error_mark_node;
9040                       }
9041                   }
9042                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
9043                   in_namespace = qualifying_scope;
9044               }
9045             switch (TREE_CODE (decl))
9046               {
9047               case BIT_NOT_EXPR:
9048                 {
9049                   tree type;
9050
9051                   if (innermost_code != cdk_function)
9052                     {
9053                       error ("declaration of %qD as non-function", decl);
9054                       return error_mark_node;
9055                     }
9056                   else if (!qualifying_scope
9057                            && !(current_class_type && at_class_scope_p ()))
9058                     {
9059                       error ("declaration of %qD as non-member", decl);
9060                       return error_mark_node;
9061                     }
9062
9063                   type = TREE_OPERAND (decl, 0);
9064                   if (TYPE_P (type))
9065                     type = constructor_name (type);
9066                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
9067                   dname = decl;
9068                 }
9069                 break;
9070
9071               case TEMPLATE_ID_EXPR:
9072                 {
9073                   tree fns = TREE_OPERAND (decl, 0);
9074
9075                   dname = fns;
9076                   if (!identifier_p (dname))
9077                     {
9078                       if (variable_template_p (dname))
9079                         dname = DECL_NAME (dname);
9080                       else
9081                         {
9082                           gcc_assert (is_overloaded_fn (dname));
9083                           dname = DECL_NAME (get_first_fn (dname));
9084                         }
9085                     }
9086                 }
9087                 /* Fall through.  */
9088
9089               case IDENTIFIER_NODE:
9090                 if (identifier_p (decl))
9091                   dname = decl;
9092
9093                 if (C_IS_RESERVED_WORD (dname))
9094                   {
9095                     error ("declarator-id missing; using reserved word %qD",
9096                            dname);
9097                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9098                   }
9099                 else if (!IDENTIFIER_TYPENAME_P (dname))
9100                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9101                 else
9102                   {
9103                     gcc_assert (flags == NO_SPECIAL);
9104                     flags = TYPENAME_FLAG;
9105                     ctor_return_type = TREE_TYPE (dname);
9106                     sfk = sfk_conversion;
9107                     if (is_typename_at_global_scope (dname))
9108                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
9109                     else
9110                       name = "<invalid operator>";
9111                   }
9112                 break;
9113
9114               default:
9115                 gcc_unreachable ();
9116               }
9117             break;
9118           }
9119
9120         case cdk_array:
9121         case cdk_pointer:
9122         case cdk_reference:
9123         case cdk_ptrmem:
9124           break;
9125
9126         case cdk_error:
9127           return error_mark_node;
9128
9129         default:
9130           gcc_unreachable ();
9131         }
9132       if (id_declarator->kind == cdk_id)
9133         break;
9134     }
9135
9136   /* [dcl.fct.edf]
9137
9138      The declarator in a function-definition shall have the form
9139      D1 ( parameter-declaration-clause) ...  */
9140   if (funcdef_flag && innermost_code != cdk_function)
9141     {
9142       error ("function definition does not declare parameters");
9143       return error_mark_node;
9144     }
9145
9146   if (flags == TYPENAME_FLAG
9147       && innermost_code != cdk_function
9148       && ! (ctype && !declspecs->any_specifiers_p))
9149     {
9150       error ("declaration of %qD as non-function", dname);
9151       return error_mark_node;
9152     }
9153
9154   if (dname
9155       && identifier_p (dname)
9156       && UDLIT_OPER_P (dname)
9157       && innermost_code != cdk_function)
9158     {
9159       error ("declaration of %qD as non-function", dname);
9160       return error_mark_node;
9161     }
9162
9163   if (dname && IDENTIFIER_OPNAME_P (dname))
9164     {
9165       if (typedef_p)
9166         {
9167           error ("declaration of %qD as %<typedef%>", dname);
9168           return error_mark_node;
9169         }
9170       else if (decl_context == PARM || decl_context == CATCHPARM)
9171         {
9172           error ("declaration of %qD as parameter", dname);
9173           return error_mark_node;
9174         }
9175     }
9176
9177   /* Anything declared one level down from the top level
9178      must be one of the parameters of a function
9179      (because the body is at least two levels down).  */
9180
9181   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
9182      by not allowing C++ class definitions to specify their parameters
9183      with xdecls (must be spec.d in the parmlist).
9184
9185      Since we now wait to push a class scope until we are sure that
9186      we are in a legitimate method context, we must set oldcname
9187      explicitly (since current_class_name is not yet alive).
9188
9189      We also want to avoid calling this a PARM if it is in a namespace.  */
9190
9191   if (decl_context == NORMAL && !toplevel_bindings_p ())
9192     {
9193       cp_binding_level *b = current_binding_level;
9194       current_binding_level = b->level_chain;
9195       if (current_binding_level != 0 && toplevel_bindings_p ())
9196         decl_context = PARM;
9197       current_binding_level = b;
9198     }
9199
9200   if (name == NULL)
9201     name = decl_context == PARM ? "parameter" : "type name";
9202
9203   if (constexpr_p && typedef_p)
9204     {
9205       error ("%<constexpr%> cannot appear in a typedef declaration");
9206       return error_mark_node;
9207     }
9208
9209   /* If there were multiple types specified in the decl-specifier-seq,
9210      issue an error message.  */
9211   if (declspecs->multiple_types_p)
9212     {
9213       error ("two or more data types in declaration of %qs", name);
9214       return error_mark_node;
9215     }
9216
9217   if (declspecs->conflicting_specifiers_p)
9218     {
9219       error ("conflicting specifiers in declaration of %qs", name);
9220       return error_mark_node;
9221     }
9222
9223   /* Extract the basic type from the decl-specifier-seq.  */
9224   type = declspecs->type;
9225   if (type == error_mark_node)
9226     {
9227       type = NULL_TREE;
9228       type_was_error_mark_node = true;
9229     }
9230   /* If the entire declaration is itself tagged as deprecated then
9231      suppress reports of deprecated items.  */
9232   if (type && TREE_DEPRECATED (type)
9233       && deprecated_state != DEPRECATED_SUPPRESS)
9234     warn_deprecated_use (type, NULL_TREE);
9235   if (type && TREE_CODE (type) == TYPE_DECL)
9236     {
9237       typedef_decl = type;
9238       type = TREE_TYPE (typedef_decl);
9239       if (TREE_DEPRECATED (type)
9240           && DECL_ARTIFICIAL (typedef_decl)
9241           && deprecated_state != DEPRECATED_SUPPRESS)
9242         warn_deprecated_use (type, NULL_TREE);
9243     }
9244   /* No type at all: default to `int', and set DEFAULTED_INT
9245      because it was not a user-defined typedef.  */
9246   if (type == NULL_TREE)
9247     {
9248       if (signed_p || unsigned_p || long_p || short_p)
9249         {
9250           /* These imply 'int'.  */
9251           type = integer_type_node;
9252           defaulted_int = 1;
9253         }
9254       /* If we just have "complex", it is equivalent to "complex double".  */
9255       else if (!longlong && !explicit_intN
9256                && decl_spec_seq_has_spec_p (declspecs, ds_complex))
9257         {
9258           type = double_type_node;
9259           pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
9260                    "ISO C++ does not support plain %<complex%> meaning "
9261                    "%<double complex%>");
9262         }
9263     }
9264   /* Gather flags.  */
9265   explicit_int = declspecs->explicit_int_p;
9266   explicit_char = declspecs->explicit_char_p;
9267
9268 #if 0
9269   /* See the code below that used this.  */
9270   if (typedef_decl)
9271     decl_attr = DECL_ATTRIBUTES (typedef_decl);
9272 #endif
9273   typedef_type = type;
9274
9275
9276   if (sfk != sfk_conversion)
9277     ctor_return_type = ctype;
9278
9279   if (sfk != sfk_none)
9280     type = check_special_function_return_type (sfk, type,
9281                                                ctor_return_type);
9282   else if (type == NULL_TREE)
9283     {
9284       int is_main;
9285
9286       explicit_int = -1;
9287
9288       /* We handle `main' specially here, because 'main () { }' is so
9289          common.  With no options, it is allowed.  With -Wreturn-type,
9290          it is a warning.  It is only an error with -pedantic-errors.  */
9291       is_main = (funcdef_flag
9292                  && dname && identifier_p (dname)
9293                  && MAIN_NAME_P (dname)
9294                  && ctype == NULL_TREE
9295                  && in_namespace == NULL_TREE
9296                  && current_namespace == global_namespace);
9297
9298       if (type_was_error_mark_node)
9299         /* We've already issued an error, don't complain more.  */;
9300       else if (in_system_header_at (input_location) || flag_ms_extensions)
9301         /* Allow it, sigh.  */;
9302       else if (! is_main)
9303         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
9304       else if (pedantic)
9305         pedwarn (input_location, OPT_Wpedantic,
9306                  "ISO C++ forbids declaration of %qs with no type", name);
9307       else
9308         warning (OPT_Wreturn_type,
9309                  "ISO C++ forbids declaration of %qs with no type", name);
9310
9311       type = integer_type_node;
9312     }
9313
9314   ctype = NULL_TREE;
9315
9316   if (explicit_intN)
9317     {
9318       if (! int_n_enabled_p[declspecs->int_n_idx])
9319        {
9320          error ("%<__int%d%> is not supported by this target",
9321                 int_n_data[declspecs->int_n_idx].bitsize);
9322          explicit_intN = false;
9323        }
9324       else if (pedantic && ! in_system_header_at (input_location))
9325        pedwarn (input_location, OPT_Wpedantic,
9326                 "ISO C++ does not support %<__int%d%> for %qs",
9327                 int_n_data[declspecs->int_n_idx].bitsize,  name);
9328     }
9329
9330   /* Now process the modifiers that were specified
9331      and check for invalid combinations.  */
9332
9333   /* Long double is a special combination.  */
9334   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
9335     {
9336       long_p = false;
9337       type = cp_build_qualified_type (long_double_type_node,
9338                                       cp_type_quals (type));
9339     }
9340
9341   /* Check all other uses of type modifiers.  */
9342
9343   if (unsigned_p || signed_p || long_p || short_p)
9344     {
9345       int ok = 0;
9346
9347       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
9348         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9349       else if (signed_p && unsigned_p)
9350         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
9351       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
9352         error ("%<long long%> invalid for %qs", name);
9353       else if (long_p && TREE_CODE (type) == REAL_TYPE)
9354         error ("%<long%> invalid for %qs", name);
9355       else if (short_p && TREE_CODE (type) == REAL_TYPE)
9356         error ("%<short%> invalid for %qs", name);
9357       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
9358         error ("%<long%> or %<short%> invalid for %qs", name);
9359       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
9360         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
9361       else if ((long_p || short_p) && explicit_char)
9362         error ("%<long%> or %<short%> specified with char for %qs", name);
9363       else if (long_p && short_p)
9364         error ("%<long%> and %<short%> specified together for %qs", name);
9365       else if (type == char16_type_node || type == char32_type_node)
9366         {
9367           if (signed_p || unsigned_p)
9368             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
9369           else if (short_p || long_p)
9370             error ("%<short%> or %<long%> invalid for %qs", name);
9371         }
9372       else
9373         {
9374           ok = 1;
9375           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
9376             {
9377               pedwarn (input_location, OPT_Wpedantic, 
9378                        "long, short, signed or unsigned used invalidly for %qs",
9379                        name);
9380               if (flag_pedantic_errors)
9381                 ok = 0;
9382             }
9383         }
9384
9385       /* Discard the type modifiers if they are invalid.  */
9386       if (! ok)
9387         {
9388           unsigned_p = false;
9389           signed_p = false;
9390           long_p = false;
9391           short_p = false;
9392           longlong = 0;
9393         }
9394     }
9395
9396   /* Decide whether an integer type is signed or not.
9397      Optionally treat bitfields as signed by default.  */
9398   if (unsigned_p
9399       /* [class.bit]
9400
9401          It is implementation-defined whether a plain (neither
9402          explicitly signed or unsigned) char, short, int, or long
9403          bit-field is signed or unsigned.
9404
9405          Naturally, we extend this to long long as well.  Note that
9406          this does not include wchar_t.  */
9407       || (bitfield && !flag_signed_bitfields
9408           && !signed_p
9409           /* A typedef for plain `int' without `signed' can be
9410              controlled just like plain `int', but a typedef for
9411              `signed int' cannot be so controlled.  */
9412           && !(typedef_decl
9413                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
9414           && TREE_CODE (type) == INTEGER_TYPE
9415           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
9416     {
9417       if (explicit_intN)
9418         type = int_n_trees[declspecs->int_n_idx].unsigned_type;
9419       else if (longlong)
9420         type = long_long_unsigned_type_node;
9421       else if (long_p)
9422         type = long_unsigned_type_node;
9423       else if (short_p)
9424         type = short_unsigned_type_node;
9425       else if (type == char_type_node)
9426         type = unsigned_char_type_node;
9427       else if (typedef_decl)
9428         type = unsigned_type_for (type);
9429       else
9430         type = unsigned_type_node;
9431     }
9432   else if (signed_p && type == char_type_node)
9433     type = signed_char_type_node;
9434   else if (explicit_intN)
9435     type = int_n_trees[declspecs->int_n_idx].signed_type;
9436   else if (longlong)
9437     type = long_long_integer_type_node;
9438   else if (long_p)
9439     type = long_integer_type_node;
9440   else if (short_p)
9441     type = short_integer_type_node;
9442
9443   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
9444     {
9445       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
9446         error ("complex invalid for %qs", name);
9447       /* If a modifier is specified, the resulting complex is the complex
9448          form of TYPE.  E.g, "complex short" is "complex short int".  */
9449       else if (type == integer_type_node)
9450         type = complex_integer_type_node;
9451       else if (type == float_type_node)
9452         type = complex_float_type_node;
9453       else if (type == double_type_node)
9454         type = complex_double_type_node;
9455       else if (type == long_double_type_node)
9456         type = complex_long_double_type_node;
9457       else
9458         type = build_complex_type (type);
9459     }
9460
9461   type_quals = TYPE_UNQUALIFIED;
9462   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9463     type_quals |= TYPE_QUAL_CONST;
9464   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9465     type_quals |= TYPE_QUAL_VOLATILE;
9466   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9467     type_quals |= TYPE_QUAL_RESTRICT;
9468   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
9469     error ("qualifiers are not allowed on declaration of %<operator %T%>",
9470            ctor_return_type);
9471
9472   /* If we're using the injected-class-name to form a compound type or a
9473      declaration, replace it with the underlying class so we don't get
9474      redundant typedefs in the debug output.  But if we are returning the
9475      type unchanged, leave it alone so that it's available to
9476      maybe_get_template_decl_from_type_decl.  */
9477   if (CLASS_TYPE_P (type)
9478       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
9479       && type == TREE_TYPE (TYPE_NAME (type))
9480       && (declarator || type_quals))
9481     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
9482
9483   type_quals |= cp_type_quals (type);
9484   type = cp_build_qualified_type_real
9485     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
9486                           || declspecs->decltype_p)
9487                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
9488   /* We might have ignored or rejected some of the qualifiers.  */
9489   type_quals = cp_type_quals (type);
9490
9491   staticp = 0;
9492   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
9493   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
9494   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
9495
9496   storage_class = declspecs->storage_class;
9497   if (storage_class == sc_static)
9498     staticp = 1 + (decl_context == FIELD);
9499
9500   if (virtualp && staticp == 2)
9501     {
9502       error ("member %qD cannot be declared both virtual and static", dname);
9503       storage_class = sc_none;
9504       staticp = 0;
9505     }
9506   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
9507
9508   /* Issue errors about use of storage classes for parameters.  */
9509   if (decl_context == PARM)
9510     {
9511       if (typedef_p)
9512         {
9513           error ("typedef declaration invalid in parameter declaration");
9514           return error_mark_node;
9515         }
9516       else if (template_parm_flag && storage_class != sc_none)
9517         {
9518           error ("storage class specified for template parameter %qs", name);
9519           return error_mark_node;
9520         }
9521       else if (storage_class == sc_static
9522                || storage_class == sc_extern
9523                || thread_p)
9524         error ("storage class specifiers invalid in parameter declarations");
9525
9526       /* Function parameters cannot be constexpr.  If we saw one, moan
9527          and pretend it wasn't there.  */
9528       if (constexpr_p)
9529         {
9530           error ("a parameter cannot be declared %<constexpr%>");
9531           constexpr_p = 0;
9532         }
9533     }
9534
9535   /* Give error if `virtual' is used outside of class declaration.  */
9536   if (virtualp
9537       && (current_class_name == NULL_TREE || decl_context != FIELD))
9538     {
9539       error ("%<virtual%> outside class declaration");
9540       virtualp = 0;
9541     }
9542
9543   /* Static anonymous unions are dealt with here.  */
9544   if (staticp && decl_context == TYPENAME
9545       && declspecs->type
9546       && ANON_AGGR_TYPE_P (declspecs->type))
9547     decl_context = FIELD;
9548
9549   /* Warn about storage classes that are invalid for certain
9550      kinds of declarations (parameters, typenames, etc.).  */
9551   if (thread_p
9552       && ((storage_class
9553            && storage_class != sc_extern
9554            && storage_class != sc_static)
9555           || typedef_p))
9556     {
9557       error ("multiple storage classes in declaration of %qs", name);
9558       thread_p = false;
9559     }
9560   if (decl_context != NORMAL
9561       && ((storage_class != sc_none
9562            && storage_class != sc_mutable)
9563           || thread_p))
9564     {
9565       if ((decl_context == PARM || decl_context == CATCHPARM)
9566           && (storage_class == sc_register
9567               || storage_class == sc_auto))
9568         ;
9569       else if (typedef_p)
9570         ;
9571       else if (decl_context == FIELD
9572                /* C++ allows static class elements.  */
9573                && storage_class == sc_static)
9574         /* C++ also allows inlines and signed and unsigned elements,
9575            but in those cases we don't come in here.  */
9576         ;
9577       else
9578         {
9579           if (decl_context == FIELD)
9580             error ("storage class specified for %qs", name);
9581           else
9582             {
9583               if (decl_context == PARM || decl_context == CATCHPARM)
9584                 error ("storage class specified for parameter %qs", name);
9585               else
9586                 error ("storage class specified for typename");
9587             }
9588           if (storage_class == sc_register
9589               || storage_class == sc_auto
9590               || storage_class == sc_extern
9591               || thread_p)
9592             storage_class = sc_none;
9593         }
9594     }
9595   else if (storage_class == sc_extern && funcdef_flag
9596            && ! toplevel_bindings_p ())
9597     error ("nested function %qs declared %<extern%>", name);
9598   else if (toplevel_bindings_p ())
9599     {
9600       if (storage_class == sc_auto)
9601         error ("top-level declaration of %qs specifies %<auto%>", name);
9602     }
9603   else if (thread_p
9604            && storage_class != sc_extern
9605            && storage_class != sc_static)
9606     {
9607       if (declspecs->gnu_thread_keyword_p)
9608         pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
9609                  "declared %<__thread%>", name);
9610
9611       /* When thread_local is applied to a variable of block scope the
9612          storage-class-specifier static is implied if it does not appear
9613          explicitly.  */
9614       storage_class = declspecs->storage_class = sc_static;
9615       staticp = 1;
9616     }
9617
9618   if (storage_class && friendp)
9619     {
9620       error ("storage class specifiers invalid in friend function declarations");
9621       storage_class = sc_none;
9622       staticp = 0;
9623     }
9624
9625   if (!id_declarator)
9626     unqualified_id = NULL_TREE;
9627   else
9628     {
9629       unqualified_id = id_declarator->u.id.unqualified_name;
9630       switch (TREE_CODE (unqualified_id))
9631         {
9632         case BIT_NOT_EXPR:
9633           unqualified_id = TREE_OPERAND (unqualified_id, 0);
9634           if (TYPE_P (unqualified_id))
9635             unqualified_id = constructor_name (unqualified_id);
9636           break;
9637
9638         case IDENTIFIER_NODE:
9639         case TEMPLATE_ID_EXPR:
9640           break;
9641
9642         default:
9643           gcc_unreachable ();
9644         }
9645     }
9646
9647   if (declspecs->std_attributes)
9648     {
9649       /* Apply the c++11 attributes to the type preceding them.  */
9650       input_location = declspecs->locations[ds_std_attribute];
9651       decl_attributes (&type, declspecs->std_attributes, 0);
9652       input_location = saved_loc;
9653     }
9654
9655   /* Determine the type of the entity declared by recurring on the
9656      declarator.  */
9657   for (; declarator; declarator = declarator->declarator)
9658     {
9659       const cp_declarator *inner_declarator;
9660       tree attrs;
9661
9662       if (type == error_mark_node)
9663         return error_mark_node;
9664
9665       attrs = declarator->attributes;
9666       if (attrs)
9667         {
9668           int attr_flags;
9669
9670           attr_flags = 0;
9671           if (declarator == NULL || declarator->kind == cdk_id)
9672             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9673           if (declarator->kind == cdk_function)
9674             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9675           if (declarator->kind == cdk_array)
9676             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9677           returned_attrs = decl_attributes (&type,
9678                                             chainon (returned_attrs, attrs),
9679                                             attr_flags);
9680         }
9681
9682       if (declarator->kind == cdk_id)
9683         break;
9684
9685       inner_declarator = declarator->declarator;
9686
9687       switch (declarator->kind)
9688         {
9689         case cdk_array:
9690           type = create_array_type_for_decl (dname, type,
9691                                              declarator->u.array.bounds);
9692           if (declarator->std_attributes)
9693             /* [dcl.array]/1:
9694
9695                The optional attribute-specifier-seq appertains to the
9696                array.  */
9697             returned_attrs = chainon (returned_attrs,
9698                                       declarator->std_attributes);
9699           break;
9700
9701         case cdk_function:
9702           {
9703             tree arg_types;
9704             int funcdecl_p;
9705
9706             /* Declaring a function type.
9707                Make sure we have a valid type for the function to return.  */
9708
9709             if (type_quals != TYPE_UNQUALIFIED)
9710               {
9711                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9712                   warning (OPT_Wignored_qualifiers,
9713                            "type qualifiers ignored on function return type");
9714                 /* We now know that the TYPE_QUALS don't apply to the
9715                    decl, but to its return type.  */
9716                 type_quals = TYPE_UNQUALIFIED;
9717               }
9718             errmsg = targetm.invalid_return_type (type);
9719             if (errmsg)
9720               {
9721                 error (errmsg);
9722                 type = integer_type_node;
9723               }
9724
9725             /* Error about some types functions can't return.  */
9726
9727             if (TREE_CODE (type) == FUNCTION_TYPE)
9728               {
9729                 error ("%qs declared as function returning a function", name);
9730                 return error_mark_node;
9731               }
9732             if (TREE_CODE (type) == ARRAY_TYPE)
9733               {
9734                 error ("%qs declared as function returning an array", name);
9735                 return error_mark_node;
9736               }
9737
9738             input_location = declspecs->locations[ds_type_spec];
9739             abstract_virtuals_error (ACU_RETURN, type);
9740             input_location = saved_loc;
9741
9742             /* Pick up type qualifiers which should be applied to `this'.  */
9743             memfn_quals = declarator->u.function.qualifiers;
9744             /* Pick up virt-specifiers.  */
9745             virt_specifiers = declarator->u.function.virt_specifiers;
9746             /* And ref-qualifier, too */
9747             rqual = declarator->u.function.ref_qualifier;
9748             /* Pick up the exception specifications.  */
9749             raises = declarator->u.function.exception_specification;
9750             /* If the exception-specification is ill-formed, let's pretend
9751                there wasn't one.  */
9752             if (raises == error_mark_node)
9753               raises = NULL_TREE;
9754
9755             /* Say it's a definition only for the CALL_EXPR
9756                closest to the identifier.  */
9757             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9758
9759             /* Handle a late-specified return type.  */
9760             if (funcdecl_p)
9761               {
9762                 if (type_uses_auto (type))
9763                   {
9764                     if (!declarator->u.function.late_return_type)
9765                       {
9766                         if (current_class_type
9767                             && LAMBDA_TYPE_P (current_class_type))
9768                           /* OK for C++11 lambdas.  */;
9769                         else if (cxx_dialect < cxx14)
9770                           {
9771                             error ("%qs function uses "
9772                                    "%<auto%> type specifier without trailing "
9773                                    "return type", name);
9774                             inform (input_location, "deduced return type "
9775                                     "only available with -std=c++14 or "
9776                                     "-std=gnu++14");
9777                           }
9778                         else if (virtualp)
9779                           {
9780                             error ("virtual function cannot "
9781                                    "have deduced return type");
9782                             virtualp = false;
9783                           }
9784                       }
9785                     else if (!is_auto (type))
9786                       {
9787                         error ("%qs function with trailing return type has"
9788                                " %qT as its type rather than plain %<auto%>",
9789                                name, type);
9790                         return error_mark_node;
9791                       }
9792                   }
9793                 else if (declarator->u.function.late_return_type)
9794                   {
9795                     if (cxx_dialect < cxx11)
9796                       /* Not using maybe_warn_cpp0x because this should
9797                          always be an error.  */
9798                       error ("trailing return type only available with "
9799                              "-std=c++11 or -std=gnu++11");
9800                     else
9801                       error ("%qs function with trailing return type not "
9802                              "declared with %<auto%> type specifier", name);
9803                     return error_mark_node;
9804                   }
9805               }
9806             type = splice_late_return_type
9807               (type, declarator->u.function.late_return_type);
9808             if (type == error_mark_node)
9809               return error_mark_node;
9810
9811             if (declarator->u.function.late_return_type)
9812               late_return_type_p = true;
9813
9814             if (ctype == NULL_TREE
9815                 && decl_context == FIELD
9816                 && funcdecl_p
9817                 && friendp == 0)
9818               ctype = current_class_type;
9819
9820             if (ctype && (sfk == sfk_constructor
9821                           || sfk == sfk_destructor))
9822               {
9823                 /* We are within a class's scope. If our declarator name
9824                    is the same as the class name, and we are defining
9825                    a function, then it is a constructor/destructor, and
9826                    therefore returns a void type.  */
9827
9828                 /* ISO C++ 12.4/2.  A destructor may not be declared
9829                    const or volatile.  A destructor may not be static.
9830                    A destructor may not be declared with ref-qualifier.
9831
9832                    ISO C++ 12.1.  A constructor may not be declared
9833                    const or volatile.  A constructor may not be
9834                    virtual.  A constructor may not be static.
9835                    A constructor may not be declared with ref-qualifier. */
9836                 if (staticp == 2)
9837                   error ((flags == DTOR_FLAG)
9838                          ? G_("destructor cannot be static member function")
9839                          : G_("constructor cannot be static member function"));
9840                 if (memfn_quals)
9841                   {
9842                     error ((flags == DTOR_FLAG)
9843                            ? G_("destructors may not be cv-qualified")
9844                            : G_("constructors may not be cv-qualified"));
9845                     memfn_quals = TYPE_UNQUALIFIED;
9846                   }
9847
9848                 if (rqual)
9849                   {
9850                     maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
9851                     error ((flags == DTOR_FLAG)
9852                            ? "destructors may not be ref-qualified"
9853                            : "constructors may not be ref-qualified");
9854                     rqual = REF_QUAL_NONE;
9855                   }
9856
9857                 if (decl_context == FIELD
9858                     && !member_function_or_else (ctype,
9859                                                  current_class_type,
9860                                                  flags))
9861                   return error_mark_node;
9862
9863                 if (flags != DTOR_FLAG)
9864                   {
9865                     /* It's a constructor.  */
9866                     if (explicitp == 1)
9867                       explicitp = 2;
9868                     if (virtualp)
9869                       {
9870                         permerror (input_location, "constructors cannot be declared virtual");
9871                         virtualp = 0;
9872                       }
9873                     if (decl_context == FIELD
9874                         && sfk != sfk_constructor)
9875                       return error_mark_node;
9876                   }
9877                 if (decl_context == FIELD)
9878                   staticp = 0;
9879               }
9880             else if (friendp)
9881               {
9882                 if (virtualp)
9883                   {
9884                     /* Cannot be both friend and virtual.  */
9885                     error ("virtual functions cannot be friends");
9886                     friendp = 0;
9887                   }
9888                 if (decl_context == NORMAL)
9889                   error ("friend declaration not in class definition");
9890                 if (current_function_decl && funcdef_flag)
9891                   error ("can%'t define friend function %qs in a local "
9892                          "class definition",
9893                          name);
9894               }
9895             else if (ctype && sfk == sfk_conversion)
9896               {
9897                 if (explicitp == 1)
9898                   {
9899                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9900                     explicitp = 2;
9901                   }
9902               }
9903
9904             arg_types = grokparms (declarator->u.function.parameters,
9905                                    &parms);
9906
9907             if (inner_declarator
9908                 && inner_declarator->kind == cdk_id
9909                 && inner_declarator->u.id.sfk == sfk_destructor
9910                 && arg_types != void_list_node)
9911               {
9912                 error ("destructors may not have parameters");
9913                 arg_types = void_list_node;
9914                 parms = NULL_TREE;
9915               }
9916
9917             type = build_function_type (type, arg_types);
9918             if (declarator->std_attributes)
9919               /* [dcl.fct]/2:
9920
9921                  The optional attribute-specifier-seq appertains to
9922                  the function type.  */
9923               decl_attributes (&type, declarator->std_attributes,
9924                                0);
9925           }
9926           break;
9927
9928         case cdk_pointer:
9929         case cdk_reference:
9930         case cdk_ptrmem:
9931           /* Filter out pointers-to-references and references-to-references.
9932              We can get these if a TYPE_DECL is used.  */
9933
9934           if (TREE_CODE (type) == REFERENCE_TYPE)
9935             {
9936               if (declarator->kind != cdk_reference)
9937                 {
9938                   error ("cannot declare pointer to %q#T", type);
9939                   type = TREE_TYPE (type);
9940                 }
9941
9942               /* In C++0x, we allow reference to reference declarations
9943                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9944                  and template type arguments [14.3.1/4 temp.arg.type]. The
9945                  check for direct reference to reference declarations, which
9946                  are still forbidden, occurs below. Reasoning behind the change
9947                  can be found in DR106, DR540, and the rvalue reference
9948                  proposals. */
9949               else if (cxx_dialect == cxx98)
9950                 {
9951                   error ("cannot declare reference to %q#T", type);
9952                   type = TREE_TYPE (type);
9953                 }
9954             }
9955           else if (VOID_TYPE_P (type))
9956             {
9957               if (declarator->kind == cdk_reference)
9958                 error ("cannot declare reference to %q#T", type);
9959               else if (declarator->kind == cdk_ptrmem)
9960                 error ("cannot declare pointer to %q#T member", type);
9961             }
9962
9963           /* We now know that the TYPE_QUALS don't apply to the decl,
9964              but to the target of the pointer.  */
9965           type_quals = TYPE_UNQUALIFIED;
9966
9967           /* This code used to handle METHOD_TYPE, but I don't think it's
9968              possible to get it here anymore.  */
9969           gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9970           if (declarator->kind == cdk_ptrmem
9971               && TREE_CODE (type) == FUNCTION_TYPE)
9972             {
9973               memfn_quals |= type_memfn_quals (type);
9974               type = build_memfn_type (type,
9975                                        declarator->u.pointer.class_type,
9976                                        memfn_quals,
9977                                        rqual);
9978               if (type == error_mark_node)
9979                 return error_mark_node;
9980
9981               rqual = REF_QUAL_NONE;
9982               memfn_quals = TYPE_UNQUALIFIED;
9983             }
9984
9985           if (TREE_CODE (type) == FUNCTION_TYPE
9986               && (type_memfn_quals (type) != TYPE_UNQUALIFIED
9987                   || type_memfn_rqual (type) != REF_QUAL_NONE))
9988             error (declarator->kind == cdk_reference
9989                    ? G_("cannot declare reference to qualified function type %qT")
9990                    : G_("cannot declare pointer to qualified function type %qT"),
9991                    type);
9992
9993           /* When the pointed-to type involves components of variable size,
9994              care must be taken to ensure that the size evaluation code is
9995              emitted early enough to dominate all the possible later uses
9996              and late enough for the variables on which it depends to have
9997              been assigned.
9998
9999              This is expected to happen automatically when the pointed-to
10000              type has a name/declaration of it's own, but special attention
10001              is required if the type is anonymous.
10002
10003              We handle the NORMAL and FIELD contexts here by inserting a
10004              dummy statement that just evaluates the size at a safe point
10005              and ensures it is not deferred until e.g. within a deeper
10006              conditional context (c++/43555).
10007
10008              We expect nothing to be needed here for PARM or TYPENAME.
10009              Evaluating the size at this point for TYPENAME would
10010              actually be incorrect, as we might be in the middle of an
10011              expression with side effects on the pointed-to type size
10012              "arguments" prior to the pointer declaration point and the
10013              size evaluation could end up prior to the side effects.  */
10014
10015           if (!TYPE_NAME (type)
10016               && (decl_context == NORMAL || decl_context == FIELD)
10017               && at_function_scope_p ()
10018               && variably_modified_type_p (type, NULL_TREE))
10019             /* Force evaluation of the SAVE_EXPR.  */
10020             finish_expr_stmt (TYPE_SIZE (type));
10021
10022           if (declarator->kind == cdk_reference)
10023             {
10024               /* In C++0x, the type we are creating a reference to might be
10025                  a typedef which is itself a reference type. In that case,
10026                  we follow the reference collapsing rules in
10027                  [7.1.3/8 dcl.typedef] to create the final reference type:
10028
10029                  "If a typedef TD names a type that is a reference to a type
10030                  T, an attempt to create the type 'lvalue reference to cv TD'
10031                  creates the type 'lvalue reference to T,' while an attempt
10032                  to create the type "rvalue reference to cv TD' creates the
10033                  type TD."
10034               */
10035               if (VOID_TYPE_P (type))
10036                 /* We already gave an error.  */;
10037               else if (TREE_CODE (type) == REFERENCE_TYPE)
10038                 {
10039                   if (declarator->u.reference.rvalue_ref)
10040                     /* Leave type alone.  */;
10041                   else
10042                     type = cp_build_reference_type (TREE_TYPE (type), false);
10043                 }
10044               else
10045                 type = cp_build_reference_type
10046                   (type, declarator->u.reference.rvalue_ref);
10047
10048               /* In C++0x, we need this check for direct reference to
10049                  reference declarations, which are forbidden by
10050                  [8.3.2/5 dcl.ref]. Reference to reference declarations
10051                  are only allowed indirectly through typedefs and template
10052                  type arguments. Example:
10053
10054                    void foo(int & &);      // invalid ref-to-ref decl
10055
10056                    typedef int & int_ref;
10057                    void foo(int_ref &);    // valid ref-to-ref decl
10058               */
10059               if (inner_declarator && inner_declarator->kind == cdk_reference)
10060                 error ("cannot declare reference to %q#T, which is not "
10061                        "a typedef or a template type argument", type);
10062             }
10063           else if (TREE_CODE (type) == METHOD_TYPE)
10064             type = build_ptrmemfunc_type (build_pointer_type (type));
10065           else if (declarator->kind == cdk_ptrmem)
10066             {
10067               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
10068                           != NAMESPACE_DECL);
10069               if (declarator->u.pointer.class_type == error_mark_node)
10070                 /* We will already have complained.  */
10071                 type = error_mark_node;
10072               else
10073                 type = build_ptrmem_type (declarator->u.pointer.class_type,
10074                                           type);
10075             }
10076           else
10077             type = build_pointer_type (type);
10078
10079           /* Process a list of type modifier keywords (such as
10080              const or volatile) that were given inside the `*' or `&'.  */
10081
10082           if (declarator->u.pointer.qualifiers)
10083             {
10084               type
10085                 = cp_build_qualified_type (type,
10086                                            declarator->u.pointer.qualifiers);
10087               type_quals = cp_type_quals (type);
10088             }
10089
10090           /* Apply C++11 attributes to the pointer, and not to the
10091              type pointed to.  This is unlike what is done for GNU
10092              attributes above.  It is to comply with [dcl.ptr]/1:
10093
10094                  [the optional attribute-specifier-seq (7.6.1) appertains
10095                   to the pointer and not to the object pointed to].  */
10096           if (declarator->std_attributes)
10097             decl_attributes (&type, declarator->std_attributes,
10098                              0);
10099
10100           ctype = NULL_TREE;
10101           break;
10102
10103         case cdk_error:
10104           break;
10105
10106         default:
10107           gcc_unreachable ();
10108         }
10109     }
10110
10111   /* A `constexpr' specifier used in an object declaration declares
10112      the object as `const'.  */
10113   if (constexpr_p && innermost_code != cdk_function)
10114     {
10115       if (type_quals & TYPE_QUAL_VOLATILE)
10116         error ("both %<volatile%> and %<constexpr%> cannot be used here");
10117       if (TREE_CODE (type) != REFERENCE_TYPE)
10118         {
10119           type_quals |= TYPE_QUAL_CONST;
10120           type = cp_build_qualified_type (type, type_quals);
10121         }
10122     }
10123
10124   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
10125       && TREE_CODE (type) != FUNCTION_TYPE
10126       && TREE_CODE (type) != METHOD_TYPE
10127       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
10128     {
10129       error ("template-id %qD used as a declarator",
10130              unqualified_id);
10131       unqualified_id = dname;
10132     }
10133
10134   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
10135      qualified with a class-name, turn it into a METHOD_TYPE, unless
10136      we know that the function is static.  We take advantage of this
10137      opportunity to do other processing that pertains to entities
10138      explicitly declared to be class members.  Note that if DECLARATOR
10139      is non-NULL, we know it is a cdk_id declarator; otherwise, we
10140      would not have exited the loop above.  */
10141   if (declarator
10142       && declarator->u.id.qualifying_scope
10143       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
10144     {
10145       ctype = declarator->u.id.qualifying_scope;
10146       ctype = TYPE_MAIN_VARIANT (ctype);
10147       template_count = num_template_headers_for_class (ctype);
10148
10149       if (ctype == current_class_type)
10150         {
10151           if (friendp)
10152             {
10153               permerror (input_location, "member functions are implicitly friends of their class");
10154               friendp = 0;
10155             }
10156           else
10157             permerror (declarator->id_loc, 
10158                           "extra qualification %<%T::%> on member %qs",
10159                           ctype, name);
10160         }
10161       else if (/* If the qualifying type is already complete, then we
10162                   can skip the following checks.  */
10163                !COMPLETE_TYPE_P (ctype)
10164                && (/* If the function is being defined, then
10165                       qualifying type must certainly be complete.  */
10166                    funcdef_flag
10167                    /* A friend declaration of "T::f" is OK, even if
10168                       "T" is a template parameter.  But, if this
10169                       function is not a friend, the qualifying type
10170                       must be a class.  */
10171                    || (!friendp && !CLASS_TYPE_P (ctype))
10172                    /* For a declaration, the type need not be
10173                       complete, if either it is dependent (since there
10174                       is no meaningful definition of complete in that
10175                       case) or the qualifying class is currently being
10176                       defined.  */
10177                    || !(dependent_type_p (ctype)
10178                         || currently_open_class (ctype)))
10179                /* Check that the qualifying type is complete.  */
10180                && !complete_type_or_else (ctype, NULL_TREE))
10181         return error_mark_node;
10182       else if (TREE_CODE (type) == FUNCTION_TYPE)
10183         {
10184           if (current_class_type
10185               && (!friendp || funcdef_flag))
10186             {
10187               error (funcdef_flag
10188                      ? G_("cannot define member function %<%T::%s%> "
10189                           "within %<%T%>")
10190                      : G_("cannot declare member function %<%T::%s%> "
10191                           "within %<%T%>"),
10192                      ctype, name, current_class_type);
10193               return error_mark_node;
10194             }
10195         }
10196       else if (typedef_p && current_class_type)
10197         {
10198           error ("cannot declare member %<%T::%s%> within %qT",
10199                  ctype, name, current_class_type);
10200           return error_mark_node;
10201         }
10202     }
10203
10204   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
10205     ctype = current_class_type;
10206
10207   /* Now TYPE has the actual type.  */
10208
10209   if (returned_attrs)
10210     {
10211       if (attrlist)
10212         *attrlist = chainon (returned_attrs, *attrlist);
10213       else
10214         attrlist = &returned_attrs;
10215     }
10216
10217   if (declarator
10218       && declarator->kind == cdk_id
10219       && declarator->std_attributes)
10220     /* [dcl.meaning]/1: The optional attribute-specifier-seq following
10221        a declarator-id appertains to the entity that is declared.  */
10222     *attrlist = chainon (*attrlist, declarator->std_attributes);
10223
10224   /* Handle parameter packs. */
10225   if (parameter_pack_p)
10226     {
10227       if (decl_context == PARM)
10228         /* Turn the type into a pack expansion.*/
10229         type = make_pack_expansion (type);
10230       else
10231         error ("non-parameter %qs cannot be a parameter pack", name);
10232     }
10233
10234   /* Did array size calculations overflow or does the array cover more
10235      than half of the address-space?  */
10236   if (TREE_CODE (type) == ARRAY_TYPE
10237       && COMPLETE_TYPE_P (type)
10238       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
10239       && ! valid_constant_size_p (TYPE_SIZE_UNIT (type)))
10240     {
10241       error ("size of array %qs is too large", name);
10242       /* If we proceed with the array type as it is, we'll eventually
10243          crash in tree_to_[su]hwi().  */
10244       type = error_mark_node;
10245     }
10246
10247   if ((decl_context == FIELD || decl_context == PARM)
10248       && !processing_template_decl
10249       && variably_modified_type_p (type, NULL_TREE))
10250     {
10251       if (decl_context == FIELD)
10252         error ("data member may not have variably modified type %qT", type);
10253       else
10254         error ("parameter may not have variably modified type %qT", type);
10255       type = error_mark_node;
10256     }
10257
10258   if (explicitp == 1 || (explicitp && friendp))
10259     {
10260       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
10261          in the declaration of a constructor or conversion function within
10262          a class definition.  */
10263       if (!current_class_type)
10264         error ("%<explicit%> outside class declaration");
10265       else if (friendp)
10266         error ("%<explicit%> in friend declaration");
10267       else
10268         error ("only declarations of constructors and conversion operators "
10269                "can be %<explicit%>");
10270       explicitp = 0;
10271     }
10272
10273   if (storage_class == sc_mutable)
10274     {
10275       if (decl_context != FIELD || friendp)
10276         {
10277           error ("non-member %qs cannot be declared %<mutable%>", name);
10278           storage_class = sc_none;
10279         }
10280       else if (decl_context == TYPENAME || typedef_p)
10281         {
10282           error ("non-object member %qs cannot be declared %<mutable%>", name);
10283           storage_class = sc_none;
10284         }
10285       else if (TREE_CODE (type) == FUNCTION_TYPE
10286                || TREE_CODE (type) == METHOD_TYPE)
10287         {
10288           error ("function %qs cannot be declared %<mutable%>", name);
10289           storage_class = sc_none;
10290         }
10291       else if (staticp)
10292         {
10293           error ("static %qs cannot be declared %<mutable%>", name);
10294           storage_class = sc_none;
10295         }
10296       else if (type_quals & TYPE_QUAL_CONST)
10297         {
10298           error ("const %qs cannot be declared %<mutable%>", name);
10299           storage_class = sc_none;
10300         }
10301       else if (TREE_CODE (type) == REFERENCE_TYPE)
10302         {
10303           permerror (input_location, "reference %qs cannot be declared "
10304                      "%<mutable%>", name);
10305           storage_class = sc_none;
10306         }
10307     }
10308
10309   /* If this is declaring a typedef name, return a TYPE_DECL.  */
10310   if (typedef_p && decl_context != TYPENAME)
10311     {
10312       tree decl;
10313
10314       /* Note that the grammar rejects storage classes
10315          in typenames, fields or parameters.  */
10316       if (current_lang_name == lang_name_java)
10317         TYPE_FOR_JAVA (type) = 1;
10318
10319       /* This declaration:
10320
10321            typedef void f(int) const;
10322
10323          declares a function type which is not a member of any
10324          particular class, but which is cv-qualified; for
10325          example "f S::*" declares a pointer to a const-qualified
10326          member function of S.  We record the cv-qualification in the
10327          function type.  */
10328       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
10329         {
10330           type = apply_memfn_quals (type, memfn_quals, rqual);
10331           
10332           /* We have now dealt with these qualifiers.  */
10333           memfn_quals = TYPE_UNQUALIFIED;
10334           rqual = REF_QUAL_NONE;
10335         }
10336
10337       if (type_uses_auto (type))
10338         {
10339           error ("typedef declared %<auto%>");
10340           type = error_mark_node;
10341         }
10342
10343       if (decl_context == FIELD)
10344         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
10345       else
10346         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
10347       if (id_declarator && declarator->u.id.qualifying_scope) {
10348         error_at (DECL_SOURCE_LOCATION (decl), 
10349                   "typedef name may not be a nested-name-specifier");
10350         TREE_TYPE (decl) = error_mark_node;
10351       }
10352
10353       if (decl_context != FIELD)
10354         {
10355           if (!current_function_decl)
10356             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
10357           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
10358                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
10359                        (current_function_decl)))
10360             /* The TYPE_DECL is "abstract" because there will be
10361                clones of this constructor/destructor, and there will
10362                be copies of this TYPE_DECL generated in those
10363                clones.  The decloning optimization (for space) may
10364                revert this subsequently if it determines that
10365                the clones should share a common implementation.  */
10366             DECL_ABSTRACT_P (decl) = true;
10367         }
10368       else if (current_class_type
10369                && constructor_name_p (unqualified_id, current_class_type))
10370         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
10371                    "as enclosing class",
10372                    unqualified_id);
10373
10374       /* If the user declares "typedef struct {...} foo" then the
10375          struct will have an anonymous name.  Fill that name in now.
10376          Nothing can refer to it, so nothing needs know about the name
10377          change.  */
10378       if (type != error_mark_node
10379           && unqualified_id
10380           && TYPE_NAME (type)
10381           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10382           && TYPE_ANONYMOUS_P (type)
10383           && declspecs->type_definition_p
10384           && attributes_naming_typedef_ok (*attrlist)
10385           && cp_type_quals (type) == TYPE_UNQUALIFIED)
10386         {
10387           tree t;
10388
10389           /* Replace the anonymous name with the real name everywhere.  */
10390           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10391             {
10392               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
10393                 /* We do not rename the debug info representing the
10394                    anonymous tagged type because the standard says in
10395                    [dcl.typedef] that the naming applies only for
10396                    linkage purposes.  */
10397                 /*debug_hooks->set_name (t, decl);*/
10398                 TYPE_NAME (t) = decl;
10399             }
10400
10401           if (TYPE_LANG_SPECIFIC (type))
10402             TYPE_WAS_ANONYMOUS (type) = 1;
10403
10404           /* If this is a typedef within a template class, the nested
10405              type is a (non-primary) template.  The name for the
10406              template needs updating as well.  */
10407           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10408             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10409               = TYPE_IDENTIFIER (type);
10410
10411           /* Adjust linkage now that we aren't anonymous anymore.  */
10412           reset_type_linkage (type);
10413
10414           /* FIXME remangle member functions; member functions of a
10415              type with external linkage have external linkage.  */
10416         }
10417
10418       if (signed_p
10419           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
10420         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
10421
10422       bad_specifiers (decl, BSP_TYPE, virtualp,
10423                       memfn_quals != TYPE_UNQUALIFIED,
10424                       inlinep, friendp, raises != NULL_TREE);
10425
10426       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
10427         /* Acknowledge that this was written:
10428              `using analias = atype;'.  */
10429         TYPE_DECL_ALIAS_P (decl) = 1;
10430
10431       return decl;
10432     }
10433
10434   /* Detect the case of an array type of unspecified size
10435      which came, as such, direct from a typedef name.
10436      We must copy the type, so that the array's domain can be
10437      individually set by the object's initializer.  */
10438
10439   if (type && typedef_type
10440       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
10441       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
10442     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
10443
10444   /* Detect where we're using a typedef of function type to declare a
10445      function. PARMS will not be set, so we must create it now.  */
10446
10447   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
10448     {
10449       tree decls = NULL_TREE;
10450       tree args;
10451
10452       for (args = TYPE_ARG_TYPES (type);
10453            args && args != void_list_node;
10454            args = TREE_CHAIN (args))
10455         {
10456           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
10457
10458           DECL_CHAIN (decl) = decls;
10459           decls = decl;
10460         }
10461
10462       parms = nreverse (decls);
10463
10464       if (decl_context != TYPENAME)
10465         {
10466           /* The qualifiers on the function type become the qualifiers on
10467              the non-static member function. */
10468           memfn_quals |= type_memfn_quals (type);
10469           rqual = type_memfn_rqual (type);
10470           type_quals = TYPE_UNQUALIFIED;
10471         }
10472     }
10473
10474   /* If this is a type name (such as, in a cast or sizeof),
10475      compute the type and return it now.  */
10476
10477   if (decl_context == TYPENAME)
10478     {
10479       /* Note that the grammar rejects storage classes
10480          in typenames, fields or parameters.  */
10481       if (type_quals != TYPE_UNQUALIFIED)
10482         type_quals = TYPE_UNQUALIFIED;
10483
10484       /* Special case: "friend class foo" looks like a TYPENAME context.  */
10485       if (friendp)
10486         {
10487           if (type_quals != TYPE_UNQUALIFIED)
10488             {
10489               error ("type qualifiers specified for friend class declaration");
10490               type_quals = TYPE_UNQUALIFIED;
10491             }
10492           if (inlinep)
10493             {
10494               error ("%<inline%> specified for friend class declaration");
10495               inlinep = 0;
10496             }
10497
10498           if (!current_aggr)
10499             {
10500               /* Don't allow friend declaration without a class-key.  */
10501               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10502                 permerror (input_location, "template parameters cannot be friends");
10503               else if (TREE_CODE (type) == TYPENAME_TYPE)
10504                 permerror (input_location, "friend declaration requires class-key, "
10505                            "i.e. %<friend class %T::%D%>",
10506                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
10507               else
10508                 permerror (input_location, "friend declaration requires class-key, "
10509                            "i.e. %<friend %#T%>",
10510                            type);
10511             }
10512
10513           /* Only try to do this stuff if we didn't already give up.  */
10514           if (type != integer_type_node)
10515             {
10516               /* A friendly class?  */
10517               if (current_class_type)
10518                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
10519                                    /*complain=*/true);
10520               else
10521                 error ("trying to make class %qT a friend of global scope",
10522                        type);
10523
10524               type = void_type_node;
10525             }
10526         }
10527       else if (memfn_quals || rqual)
10528         {
10529           if (ctype == NULL_TREE
10530               && TREE_CODE (type) == METHOD_TYPE)
10531             ctype = TYPE_METHOD_BASETYPE (type);
10532
10533           if (ctype)
10534             type = build_memfn_type (type, ctype, memfn_quals, rqual);
10535           /* Core issue #547: need to allow this in template type args.
10536              Allow it in general in C++11 for alias-declarations.  */
10537           else if ((template_type_arg || cxx_dialect >= cxx11)
10538                    && TREE_CODE (type) == FUNCTION_TYPE)
10539             type = apply_memfn_quals (type, memfn_quals, rqual);
10540           else
10541             error ("invalid qualifiers on non-member function type");
10542         }
10543
10544       return type;
10545     }
10546   else if (unqualified_id == NULL_TREE && decl_context != PARM
10547            && decl_context != CATCHPARM
10548            && TREE_CODE (type) != UNION_TYPE
10549            && ! bitfield)
10550     {
10551       error ("abstract declarator %qT used as declaration", type);
10552       return error_mark_node;
10553     }
10554
10555   /* Only functions may be declared using an operator-function-id.  */
10556   if (unqualified_id
10557       && IDENTIFIER_OPNAME_P (unqualified_id)
10558       && TREE_CODE (type) != FUNCTION_TYPE
10559       && TREE_CODE (type) != METHOD_TYPE)
10560     {
10561       error ("declaration of %qD as non-function", unqualified_id);
10562       return error_mark_node;
10563     }
10564
10565   /* We don't check parameter types here because we can emit a better
10566      error message later.  */
10567   if (decl_context != PARM)
10568     {
10569       type = check_var_type (unqualified_id, type);
10570       if (type == error_mark_node)
10571         return error_mark_node;
10572     }
10573
10574   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
10575      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
10576
10577   if (decl_context == PARM || decl_context == CATCHPARM)
10578     {
10579       if (ctype || in_namespace)
10580         error ("cannot use %<::%> in parameter declaration");
10581
10582       if (type_uses_auto (type))
10583         {
10584           if (cxx_dialect >= cxx14)
10585             error ("%<auto%> parameter not permitted in this context");
10586           else
10587             error ("parameter declared %<auto%>");
10588           type = error_mark_node;
10589         }
10590
10591       /* A parameter declared as an array of T is really a pointer to T.
10592          One declared as a function is really a pointer to a function.
10593          One declared as a member is really a pointer to member.  */
10594
10595       if (TREE_CODE (type) == ARRAY_TYPE)
10596         {
10597           /* Transfer const-ness of array into that of type pointed to.  */
10598           type = build_pointer_type (TREE_TYPE (type));
10599           type_quals = TYPE_UNQUALIFIED;
10600           array_parameter_p = true;
10601         }
10602       else if (TREE_CODE (type) == FUNCTION_TYPE)
10603         type = build_pointer_type (type);
10604     }
10605
10606   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10607       && !NEW_DELETE_OPNAME_P (unqualified_id))
10608     {
10609       cp_cv_quals real_quals = memfn_quals;
10610       if (cxx_dialect < cxx14 && constexpr_p
10611           && sfk != sfk_constructor && sfk != sfk_destructor)
10612         real_quals |= TYPE_QUAL_CONST;
10613       type = build_memfn_type (type, ctype, real_quals, rqual);
10614     }
10615
10616   {
10617     tree decl;
10618
10619     if (decl_context == PARM)
10620       {
10621         decl = cp_build_parm_decl (unqualified_id, type);
10622         DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
10623
10624         bad_specifiers (decl, BSP_PARM, virtualp,
10625                         memfn_quals != TYPE_UNQUALIFIED,
10626                         inlinep, friendp, raises != NULL_TREE);
10627       }
10628     else if (decl_context == FIELD)
10629       {
10630         if (!staticp && TREE_CODE (type) != METHOD_TYPE
10631             && type_uses_auto (type))
10632           {
10633             error ("non-static data member declared %<auto%>");
10634             type = error_mark_node;
10635           }
10636
10637         /* The C99 flexible array extension.  */
10638         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10639             && TYPE_DOMAIN (type) == NULL_TREE)
10640           {
10641             tree itype = compute_array_index_type (dname, integer_zero_node,
10642                                                    tf_warning_or_error);
10643             type = build_cplus_array_type (TREE_TYPE (type), itype);
10644           }
10645
10646         if (type == error_mark_node)
10647           {
10648             /* Happens when declaring arrays of sizes which
10649                are error_mark_node, for example.  */
10650             decl = NULL_TREE;
10651           }
10652         else if (in_namespace && !friendp)
10653           {
10654             /* Something like struct S { int N::j; };  */
10655             error ("invalid use of %<::%>");
10656             return error_mark_node;
10657           }
10658         else if (TREE_CODE (type) == FUNCTION_TYPE
10659                  || TREE_CODE (type) == METHOD_TYPE)
10660           {
10661             int publicp = 0;
10662             tree function_context;
10663
10664             if (friendp == 0)
10665               {
10666                 /* This should never happen in pure C++ (the check
10667                    could be an assert).  It could happen in
10668                    Objective-C++ if someone writes invalid code that
10669                    uses a function declaration for an instance
10670                    variable or property (instance variables and
10671                    properties are parsed as FIELD_DECLs, but they are
10672                    part of an Objective-C class, not a C++ class).
10673                    That code is invalid and is caught by this
10674                    check.  */
10675                 if (!ctype)
10676                   {
10677                     error ("declaration of function %qD in invalid context",
10678                            unqualified_id);
10679                     return error_mark_node;
10680                   }
10681
10682                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10683                    ARM 9.5 */
10684                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10685                   {
10686                     error ("function %qD declared virtual inside a union",
10687                            unqualified_id);
10688                     return error_mark_node;
10689                   }
10690
10691                 if (NEW_DELETE_OPNAME_P (unqualified_id))
10692                   {
10693                     if (virtualp)
10694                       {
10695                         error ("%qD cannot be declared virtual, since it "
10696                                "is always static",
10697                                unqualified_id);
10698                         virtualp = 0;
10699                       }
10700                   }
10701               }
10702
10703             /* Check that the name used for a destructor makes sense.  */
10704             if (sfk == sfk_destructor)
10705               {
10706                 tree uqname = id_declarator->u.id.unqualified_name;
10707
10708                 if (!ctype)
10709                   {
10710                     gcc_assert (friendp);
10711                     error ("expected qualified name in friend declaration "
10712                            "for destructor %qD", uqname);
10713                     return error_mark_node;
10714                   }
10715
10716                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10717                   {
10718                     error ("declaration of %qD as member of %qT",
10719                            uqname, ctype);
10720                     return error_mark_node;
10721                   }
10722                 if (constexpr_p)
10723                   {
10724                     error ("a destructor cannot be %<constexpr%>");
10725                     return error_mark_node;
10726                   }
10727               }
10728             else if (sfk == sfk_constructor && friendp && !ctype)
10729               {
10730                 error ("expected qualified name in friend declaration "
10731                        "for constructor %qD",
10732                        id_declarator->u.id.unqualified_name);
10733                 return error_mark_node;
10734               }
10735
10736             if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10737               {
10738                 tree tmpl = TREE_OPERAND (unqualified_id, 0);
10739                 if (variable_template_p (tmpl))
10740                   {
10741                     error ("specialization of variable template %qD "
10742                            "declared as function", tmpl);
10743                     inform (DECL_SOURCE_LOCATION (tmpl),
10744                             "variable template declared here");
10745                     return error_mark_node;
10746                   }
10747               }
10748
10749             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10750             function_context = (ctype != NULL_TREE) ?
10751               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10752             publicp = (! friendp || ! staticp)
10753               && function_context == NULL_TREE;
10754
10755             if (late_return_type_p)
10756               TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10757
10758             decl = grokfndecl (ctype, type,
10759                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10760                                ? unqualified_id : dname,
10761                                parms,
10762                                unqualified_id,
10763                                virtualp, flags, memfn_quals, rqual, raises,
10764                                friendp ? -1 : 0, friendp, publicp,
10765                                inlinep | (2 * constexpr_p),
10766                                initialized == SD_DELETED, sfk,
10767                                funcdef_flag, template_count, in_namespace,
10768                                attrlist, declarator->id_loc);
10769             decl = set_virt_specifiers (decl, virt_specifiers);
10770             if (decl == NULL_TREE)
10771               return error_mark_node;
10772 #if 0
10773             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10774             /* The decl and setting of decl_attr is also turned off.  */
10775             decl = build_decl_attribute_variant (decl, decl_attr);
10776 #endif
10777
10778             /* [class.conv.ctor]
10779
10780                A constructor declared without the function-specifier
10781                explicit that can be called with a single parameter
10782                specifies a conversion from the type of its first
10783                parameter to the type of its class.  Such a constructor
10784                is called a converting constructor.  */
10785             if (explicitp == 2)
10786               DECL_NONCONVERTING_P (decl) = 1;
10787           }
10788         else if (!staticp && !dependent_type_p (type)
10789                  && !COMPLETE_TYPE_P (complete_type (type))
10790                  && (TREE_CODE (type) != ARRAY_TYPE
10791                      || !COMPLETE_TYPE_P (TREE_TYPE (type))
10792                      || initialized == 0))
10793           {
10794             if (unqualified_id)
10795               {
10796                 error ("field %qD has incomplete type %qT",
10797                        unqualified_id, type);
10798                 cxx_incomplete_type_inform (strip_array_types (type));
10799               }
10800             else
10801               error ("name %qT has incomplete type", type);
10802
10803             type = error_mark_node;
10804             decl = NULL_TREE;
10805           }
10806         else
10807           {
10808             if (friendp)
10809               {
10810                 error ("%qE is neither function nor member function; "
10811                        "cannot be declared friend", unqualified_id);
10812                 friendp = 0;
10813               }
10814             decl = NULL_TREE;
10815           }
10816
10817         if (friendp)
10818           {
10819             /* Friends are treated specially.  */
10820             if (ctype == current_class_type)
10821               ;  /* We already issued a permerror.  */
10822             else if (decl && DECL_NAME (decl))
10823               {
10824                 if (template_class_depth (current_class_type) == 0)
10825                   {
10826                     decl = check_explicit_specialization
10827                       (unqualified_id, decl, template_count,
10828                        2 * funcdef_flag + 4);
10829                     if (decl == error_mark_node)
10830                       return error_mark_node;
10831                   }
10832
10833                 decl = do_friend (ctype, unqualified_id, decl,
10834                                   *attrlist, flags,
10835                                   funcdef_flag);
10836                 return decl;
10837               }
10838             else
10839               return error_mark_node;
10840           }
10841
10842         /* Structure field.  It may not be a function, except for C++.  */
10843
10844         if (decl == NULL_TREE)
10845           {
10846             if (staticp)
10847               {
10848                 /* C++ allows static class members.  All other work
10849                    for this is done by grokfield.  */
10850                 decl = build_lang_decl_loc (declarator
10851                                             ? declarator->id_loc
10852                                             : input_location,
10853                                             VAR_DECL, unqualified_id, type);
10854                 set_linkage_for_static_data_member (decl);
10855                 /* Even if there is an in-class initialization, DECL
10856                    is considered undefined until an out-of-class
10857                    definition is provided.  */
10858                 DECL_EXTERNAL (decl) = 1;
10859
10860                 if (thread_p)
10861                   {
10862                     set_decl_tls_model (decl, decl_default_tls_model (decl));
10863                     if (declspecs->gnu_thread_keyword_p)
10864                       DECL_GNU_TLS_P (decl) = true;
10865                   }
10866
10867                 if (constexpr_p && !initialized)
10868                   {
10869                     error ("constexpr static data member %qD must have an "
10870                            "initializer", decl);
10871                     constexpr_p = false;
10872                   }
10873               }
10874             else
10875               {
10876                 if (constexpr_p)
10877                   {
10878                     error ("non-static data member %qE declared %<constexpr%>",
10879                            unqualified_id);
10880                     constexpr_p = false;
10881                   }
10882                 decl = build_decl (input_location,
10883                                    FIELD_DECL, unqualified_id, type);
10884                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10885                 if (bitfield && !unqualified_id)
10886                   TREE_NO_WARNING (decl) = 1;
10887
10888                 if (storage_class == sc_mutable)
10889                   {
10890                     DECL_MUTABLE_P (decl) = 1;
10891                     storage_class = sc_none;
10892                   }
10893
10894                 if (initialized)
10895                   {
10896                     /* An attempt is being made to initialize a non-static
10897                        member.  This is new in C++11.  */
10898                     maybe_warn_cpp0x (CPP0X_NSDMI);
10899
10900                     /* If this has been parsed with static storage class, but
10901                        errors forced staticp to be cleared, ensure NSDMI is
10902                        not present.  */
10903                     if (declspecs->storage_class == sc_static)
10904                       DECL_INITIAL (decl) = error_mark_node;
10905                   }
10906               }
10907
10908             bad_specifiers (decl, BSP_FIELD, virtualp,
10909                             memfn_quals != TYPE_UNQUALIFIED,
10910                             inlinep, friendp, raises != NULL_TREE);
10911           }
10912       }
10913     else if (TREE_CODE (type) == FUNCTION_TYPE
10914              || TREE_CODE (type) == METHOD_TYPE)
10915       {
10916         tree original_name;
10917         int publicp = 0;
10918
10919         if (!unqualified_id)
10920           return error_mark_node;
10921
10922         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10923           original_name = dname;
10924         else
10925           original_name = unqualified_id;
10926
10927         if (storage_class == sc_auto)
10928           error ("storage class %<auto%> invalid for function %qs", name);
10929         else if (storage_class == sc_register)
10930           error ("storage class %<register%> invalid for function %qs", name);
10931         else if (thread_p)
10932           {
10933             if (declspecs->gnu_thread_keyword_p)
10934               error ("storage class %<__thread%> invalid for function %qs",
10935                      name);
10936             else
10937               error ("storage class %<thread_local%> invalid for function %qs",
10938                      name);
10939           }
10940
10941         if (virt_specifiers)
10942           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10943         /* Function declaration not at top level.
10944            Storage classes other than `extern' are not allowed
10945            and `extern' makes no difference.  */
10946         if (! toplevel_bindings_p ()
10947             && (storage_class == sc_static
10948                 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
10949             && pedantic)
10950           {
10951             if (storage_class == sc_static)
10952               pedwarn (input_location, OPT_Wpedantic, 
10953                        "%<static%> specified invalid for function %qs "
10954                        "declared out of global scope", name);
10955             else
10956               pedwarn (input_location, OPT_Wpedantic, 
10957                        "%<inline%> specifier invalid for function %qs "
10958                        "declared out of global scope", name);
10959           }
10960
10961         if (ctype == NULL_TREE)
10962           {
10963             if (virtualp)
10964               {
10965                 error ("virtual non-class function %qs", name);
10966                 virtualp = 0;
10967               }
10968             else if (sfk == sfk_constructor
10969                      || sfk == sfk_destructor)
10970               {
10971                 error (funcdef_flag
10972                        ? G_("%qs defined in a non-class scope")
10973                        : G_("%qs declared in a non-class scope"), name);
10974                 sfk = sfk_none;
10975               }
10976           }
10977
10978         /* Record whether the function is public.  */
10979         publicp = (ctype != NULL_TREE
10980                    || storage_class != sc_static);
10981
10982         if (late_return_type_p)
10983           TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
10984
10985         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10986                            virtualp, flags, memfn_quals, rqual, raises,
10987                            1, friendp,
10988                            publicp, inlinep | (2 * constexpr_p),
10989                            initialized == SD_DELETED, sfk,
10990                            funcdef_flag,
10991                            template_count, in_namespace, attrlist,
10992                            declarator->id_loc);
10993         if (decl == NULL_TREE)
10994           return error_mark_node;
10995
10996         if (staticp == 1)
10997           {
10998             int invalid_static = 0;
10999
11000             /* Don't allow a static member function in a class, and forbid
11001                declaring main to be static.  */
11002             if (TREE_CODE (type) == METHOD_TYPE)
11003               {
11004                 permerror (input_location, "cannot declare member function %qD to have "
11005                            "static linkage", decl);
11006                 invalid_static = 1;
11007               }
11008             else if (current_function_decl)
11009               {
11010                 /* FIXME need arm citation */
11011                 error ("cannot declare static function inside another function");
11012                 invalid_static = 1;
11013               }
11014
11015             if (invalid_static)
11016               {
11017                 staticp = 0;
11018                 storage_class = sc_none;
11019               }
11020           }
11021       }
11022     else
11023       {
11024         /* It's a variable.  */
11025
11026         /* An uninitialized decl with `extern' is a reference.  */
11027         decl = grokvardecl (type, dname, unqualified_id,
11028                             declspecs,
11029                             initialized,
11030                             (type_quals & TYPE_QUAL_CONST) != 0,
11031                             template_count,
11032                             ctype ? ctype : in_namespace);
11033         if (decl == NULL_TREE)
11034           return error_mark_node;
11035
11036         bad_specifiers (decl, BSP_VAR, virtualp,
11037                         memfn_quals != TYPE_UNQUALIFIED,
11038                         inlinep, friendp, raises != NULL_TREE);
11039
11040         if (ctype)
11041           {
11042             DECL_CONTEXT (decl) = ctype;
11043             if (staticp == 1)
11044               {
11045                 permerror (input_location, "%<static%> may not be used when defining "
11046                            "(as opposed to declaring) a static data member");
11047                 staticp = 0;
11048                 storage_class = sc_none;
11049               }
11050             if (storage_class == sc_register && TREE_STATIC (decl))
11051               {
11052                 error ("static member %qD declared %<register%>", decl);
11053                 storage_class = sc_none;
11054               }
11055             if (storage_class == sc_extern && pedantic)
11056               {
11057                 pedwarn (input_location, OPT_Wpedantic, 
11058                          "cannot explicitly declare member %q#D to have "
11059                          "extern linkage", decl);
11060                 storage_class = sc_none;
11061               }
11062           }
11063         else if (constexpr_p && DECL_EXTERNAL (decl))
11064           {
11065             error ("declaration of constexpr variable %qD is not a definition",
11066                    decl);
11067             constexpr_p = false;
11068           }
11069       }
11070
11071     if (storage_class == sc_extern && initialized && !funcdef_flag)
11072       {
11073         if (toplevel_bindings_p ())
11074           {
11075             /* It's common practice (and completely valid) to have a const
11076                be initialized and declared extern.  */
11077             if (!(type_quals & TYPE_QUAL_CONST))
11078               warning (0, "%qs initialized and declared %<extern%>", name);
11079           }
11080         else
11081           {
11082             error ("%qs has both %<extern%> and initializer", name);
11083             return error_mark_node;
11084           }
11085       }
11086
11087     /* Record `register' declaration for warnings on &
11088        and in case doing stupid register allocation.  */
11089
11090     if (storage_class == sc_register)
11091       DECL_REGISTER (decl) = 1;
11092     else if (storage_class == sc_extern)
11093       DECL_THIS_EXTERN (decl) = 1;
11094     else if (storage_class == sc_static)
11095       DECL_THIS_STATIC (decl) = 1;
11096
11097     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
11098     if (constexpr_p && VAR_P (decl))
11099       DECL_DECLARED_CONSTEXPR_P (decl) = true;
11100
11101     /* Record constancy and volatility on the DECL itself .  There's
11102        no need to do this when processing a template; we'll do this
11103        for the instantiated declaration based on the type of DECL.  */
11104     if (!processing_template_decl)
11105       cp_apply_type_quals_to_decl (type_quals, decl);
11106
11107     return decl;
11108   }
11109 }
11110 \f
11111 /* Subroutine of start_function.  Ensure that each of the parameter
11112    types (as listed in PARMS) is complete, as is required for a
11113    function definition.  */
11114
11115 static void
11116 require_complete_types_for_parms (tree parms)
11117 {
11118   for (; parms; parms = DECL_CHAIN (parms))
11119     {
11120       if (dependent_type_p (TREE_TYPE (parms)))
11121         continue;
11122       if (!VOID_TYPE_P (TREE_TYPE (parms))
11123           && complete_type_or_else (TREE_TYPE (parms), parms))
11124         {
11125           relayout_decl (parms);
11126           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
11127         }
11128       else
11129         /* grokparms or complete_type_or_else will have already issued
11130            an error.  */
11131         TREE_TYPE (parms) = error_mark_node;
11132     }
11133 }
11134
11135 /* Returns nonzero if T is a local variable.  */
11136
11137 int
11138 local_variable_p (const_tree t)
11139 {
11140   if ((VAR_P (t)
11141        /* A VAR_DECL with a context that is a _TYPE is a static data
11142           member.  */
11143        && !TYPE_P (CP_DECL_CONTEXT (t))
11144        /* Any other non-local variable must be at namespace scope.  */
11145        && !DECL_NAMESPACE_SCOPE_P (t))
11146       || (TREE_CODE (t) == PARM_DECL))
11147     return 1;
11148
11149   return 0;
11150 }
11151
11152 /* Like local_variable_p, but suitable for use as a tree-walking
11153    function.  */
11154
11155 static tree
11156 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
11157                          void * /*data*/)
11158 {
11159   if (local_variable_p (*tp)
11160       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
11161     return *tp;
11162   else if (TYPE_P (*tp))
11163     *walk_subtrees = 0;
11164
11165   return NULL_TREE;
11166 }
11167
11168 /* Check that ARG, which is a default-argument expression for a
11169    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
11170    something goes wrong.  DECL may also be a _TYPE node, rather than a
11171    DECL, if there is no DECL available.  */
11172
11173 tree
11174 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
11175 {
11176   tree var;
11177   tree decl_type;
11178
11179   if (TREE_CODE (arg) == DEFAULT_ARG)
11180     /* We get a DEFAULT_ARG when looking at an in-class declaration
11181        with a default argument.  Ignore the argument for now; we'll
11182        deal with it after the class is complete.  */
11183     return arg;
11184
11185   if (TYPE_P (decl))
11186     {
11187       decl_type = decl;
11188       decl = NULL_TREE;
11189     }
11190   else
11191     decl_type = TREE_TYPE (decl);
11192
11193   if (arg == error_mark_node
11194       || decl == error_mark_node
11195       || TREE_TYPE (arg) == error_mark_node
11196       || decl_type == error_mark_node)
11197     /* Something already went wrong.  There's no need to check
11198        further.  */
11199     return error_mark_node;
11200
11201   /* [dcl.fct.default]
11202
11203      A default argument expression is implicitly converted to the
11204      parameter type.  */
11205   ++cp_unevaluated_operand;
11206   perform_implicit_conversion_flags (decl_type, arg, complain,
11207                                      LOOKUP_IMPLICIT);
11208   --cp_unevaluated_operand;
11209
11210   if (warn_zero_as_null_pointer_constant
11211       && TYPE_PTR_OR_PTRMEM_P (decl_type)
11212       && null_ptr_cst_p (arg)
11213       && (complain & tf_warning)
11214       && maybe_warn_zero_as_null_pointer_constant (arg, input_location))
11215     return nullptr_node;
11216
11217   /* [dcl.fct.default]
11218
11219      Local variables shall not be used in default argument
11220      expressions.
11221
11222      The keyword `this' shall not be used in a default argument of a
11223      member function.  */
11224   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
11225   if (var)
11226     {
11227       if (complain & tf_warning_or_error)
11228         {
11229           if (DECL_NAME (var) == this_identifier)
11230             permerror (input_location, "default argument %qE uses %qD",
11231                        arg, var);
11232           else
11233             error ("default argument %qE uses local variable %qD", arg, var);
11234         }
11235       return error_mark_node;
11236     }
11237
11238   /* All is well.  */
11239   return arg;
11240 }
11241
11242 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
11243
11244 static tree
11245 type_is_deprecated (tree type)
11246 {
11247   enum tree_code code;
11248   if (TREE_DEPRECATED (type))
11249     return type;
11250   if (TYPE_NAME (type)
11251       && TREE_DEPRECATED (TYPE_NAME (type)))
11252     return type;
11253
11254   /* Do warn about using typedefs to a deprecated class.  */
11255   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
11256     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
11257
11258   code = TREE_CODE (type);
11259
11260   if (code == POINTER_TYPE || code == REFERENCE_TYPE
11261       || code == OFFSET_TYPE || code == FUNCTION_TYPE
11262       || code == METHOD_TYPE || code == ARRAY_TYPE)
11263     return type_is_deprecated (TREE_TYPE (type));
11264
11265   if (TYPE_PTRMEMFUNC_P (type))
11266     return type_is_deprecated
11267       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
11268
11269   return NULL_TREE;
11270 }
11271
11272 /* Decode the list of parameter types for a function type.
11273    Given the list of things declared inside the parens,
11274    return a list of types.
11275
11276    If this parameter does not end with an ellipsis, we append
11277    void_list_node.
11278
11279    *PARMS is set to the chain of PARM_DECLs created.  */
11280
11281 static tree
11282 grokparms (tree parmlist, tree *parms)
11283 {
11284   tree result = NULL_TREE;
11285   tree decls = NULL_TREE;
11286   tree parm;
11287   int any_error = 0;
11288
11289   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
11290     {
11291       tree type = NULL_TREE;
11292       tree init = TREE_PURPOSE (parm);
11293       tree decl = TREE_VALUE (parm);
11294       const char *errmsg;
11295
11296       if (parm == void_list_node)
11297         break;
11298
11299       if (! decl || TREE_TYPE (decl) == error_mark_node)
11300         continue;
11301
11302       type = TREE_TYPE (decl);
11303       if (VOID_TYPE_P (type))
11304         {
11305           if (same_type_p (type, void_type_node)
11306               && !init
11307               && !DECL_NAME (decl) && !result
11308               && TREE_CHAIN (parm) == void_list_node)
11309             /* DR 577: A parameter list consisting of a single
11310                unnamed parameter of non-dependent type 'void'.  */
11311             break;
11312           else if (cv_qualified_p (type))
11313             error_at (DECL_SOURCE_LOCATION (decl),
11314                       "invalid use of cv-qualified type %qT in "
11315                       "parameter declaration", type);
11316           else
11317             error_at (DECL_SOURCE_LOCATION (decl),
11318                       "invalid use of type %<void%> in parameter "
11319                       "declaration");
11320           /* It's not a good idea to actually create parameters of
11321              type `void'; other parts of the compiler assume that a
11322              void type terminates the parameter list.  */
11323           type = error_mark_node;
11324           TREE_TYPE (decl) = error_mark_node;
11325         }
11326
11327       if (type != error_mark_node
11328           && TYPE_FOR_JAVA (type)
11329           && MAYBE_CLASS_TYPE_P (type))
11330         {
11331           error ("parameter %qD has Java class type", decl);
11332           type = error_mark_node;
11333           TREE_TYPE (decl) = error_mark_node;
11334           init = NULL_TREE;
11335         }
11336
11337       if (type != error_mark_node
11338           && (errmsg = targetm.invalid_parameter_type (type)))
11339         {
11340           error (errmsg);
11341           type = error_mark_node;
11342           TREE_TYPE (decl) = error_mark_node;
11343         }
11344
11345       if (type != error_mark_node)
11346         {
11347           if (deprecated_state != DEPRECATED_SUPPRESS)
11348             {
11349               tree deptype = type_is_deprecated (type);
11350               if (deptype)
11351                 warn_deprecated_use (deptype, NULL_TREE);
11352             }
11353
11354           /* Top-level qualifiers on the parameters are
11355              ignored for function types.  */
11356           type = cp_build_qualified_type (type, 0);
11357           if (TREE_CODE (type) == METHOD_TYPE)
11358             {
11359               error ("parameter %qD invalidly declared method type", decl);
11360               type = build_pointer_type (type);
11361               TREE_TYPE (decl) = type;
11362             }
11363           else if (abstract_virtuals_error (decl, type))
11364             any_error = 1;  /* Seems like a good idea.  */
11365           else if (POINTER_TYPE_P (type))
11366             {
11367               /* [dcl.fct]/6, parameter types cannot contain pointers
11368                  (references) to arrays of unknown bound.  */
11369               tree t = TREE_TYPE (type);
11370               int ptr = TYPE_PTR_P (type);
11371
11372               while (1)
11373                 {
11374                   if (TYPE_PTR_P (t))
11375                     ptr = 1;
11376                   else if (TREE_CODE (t) != ARRAY_TYPE)
11377                     break;
11378                   else if (!TYPE_DOMAIN (t))
11379                     break;
11380                   t = TREE_TYPE (t);
11381                 }
11382               if (TREE_CODE (t) == ARRAY_TYPE)
11383                 error (ptr
11384                        ? G_("parameter %qD includes pointer to array of "
11385                             "unknown bound %qT")
11386                        : G_("parameter %qD includes reference to array of "
11387                             "unknown bound %qT"),
11388                        decl, t);
11389             }
11390
11391           if (any_error)
11392             init = NULL_TREE;
11393           else if (init && !processing_template_decl)
11394             init = check_default_argument (decl, init, tf_warning_or_error);
11395         }
11396
11397       DECL_CHAIN (decl) = decls;
11398       decls = decl;
11399       result = tree_cons (init, type, result);
11400     }
11401   decls = nreverse (decls);
11402   result = nreverse (result);
11403   if (parm)
11404     result = chainon (result, void_list_node);
11405   *parms = decls;
11406
11407   return result;
11408 }
11409
11410 \f
11411 /* D is a constructor or overloaded `operator='.
11412
11413    Let T be the class in which D is declared. Then, this function
11414    returns:
11415
11416    -1 if D's is an ill-formed constructor or copy assignment operator
11417       whose first parameter is of type `T'.
11418    0  if D is not a copy constructor or copy assignment
11419       operator.
11420    1  if D is a copy constructor or copy assignment operator whose
11421       first parameter is a reference to non-const qualified T.
11422    2  if D is a copy constructor or copy assignment operator whose
11423       first parameter is a reference to const qualified T.
11424
11425    This function can be used as a predicate. Positive values indicate
11426    a copy constructor and nonzero values indicate a copy assignment
11427    operator.  */
11428
11429 int
11430 copy_fn_p (const_tree d)
11431 {
11432   tree args;
11433   tree arg_type;
11434   int result = 1;
11435
11436   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11437
11438   if (TREE_CODE (d) == TEMPLATE_DECL
11439       || (DECL_TEMPLATE_INFO (d)
11440           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11441     /* Instantiations of template member functions are never copy
11442        functions.  Note that member functions of templated classes are
11443        represented as template functions internally, and we must
11444        accept those as copy functions.  */
11445     return 0;
11446
11447   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11448   if (!args)
11449     return 0;
11450
11451   arg_type = TREE_VALUE (args);
11452   if (arg_type == error_mark_node)
11453     return 0;
11454
11455   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
11456     {
11457       /* Pass by value copy assignment operator.  */
11458       result = -1;
11459     }
11460   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
11461            && !TYPE_REF_IS_RVALUE (arg_type)
11462            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
11463     {
11464       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
11465         result = 2;
11466     }
11467   else
11468     return 0;
11469
11470   args = TREE_CHAIN (args);
11471
11472   if (args && args != void_list_node && !TREE_PURPOSE (args))
11473     /* There are more non-optional args.  */
11474     return 0;
11475
11476   return result;
11477 }
11478
11479 /* D is a constructor or overloaded `operator='.
11480
11481    Let T be the class in which D is declared. Then, this function
11482    returns true when D is a move constructor or move assignment
11483    operator, false otherwise.  */
11484
11485 bool
11486 move_fn_p (const_tree d)
11487 {
11488   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
11489
11490   if (cxx_dialect == cxx98)
11491     /* There are no move constructors if we are in C++98 mode.  */
11492     return false;
11493
11494   if (TREE_CODE (d) == TEMPLATE_DECL
11495       || (DECL_TEMPLATE_INFO (d)
11496          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
11497     /* Instantiations of template member functions are never move
11498        functions.  Note that member functions of templated classes are
11499        represented as template functions internally, and we must
11500        accept those as move functions.  */
11501     return 0;
11502
11503   return move_signature_fn_p (d);
11504 }
11505
11506 /* D is a constructor or overloaded `operator='.
11507
11508    Then, this function returns true when D has the same signature as a move
11509    constructor or move assignment operator (because either it is such a
11510    ctor/op= or it is a template specialization with the same signature),
11511    false otherwise.  */
11512
11513 bool
11514 move_signature_fn_p (const_tree d)
11515 {
11516   tree args;
11517   tree arg_type;
11518   bool result = false;
11519
11520   args = FUNCTION_FIRST_USER_PARMTYPE (d);
11521   if (!args)
11522     return 0;
11523
11524   arg_type = TREE_VALUE (args);
11525   if (arg_type == error_mark_node)
11526     return 0;
11527
11528   if (TREE_CODE (arg_type) == REFERENCE_TYPE
11529       && TYPE_REF_IS_RVALUE (arg_type)
11530       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
11531                       DECL_CONTEXT (d)))
11532     result = true;
11533
11534   args = TREE_CHAIN (args);
11535
11536   if (args && args != void_list_node && !TREE_PURPOSE (args))
11537     /* There are more non-optional args.  */
11538     return false;
11539
11540   return result;
11541 }
11542
11543 /* Remember any special properties of member function DECL.  */
11544
11545 void
11546 grok_special_member_properties (tree decl)
11547 {
11548   tree class_type;
11549
11550   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
11551     return;
11552
11553   class_type = DECL_CONTEXT (decl);
11554   if (DECL_CONSTRUCTOR_P (decl))
11555     {
11556       int ctor = copy_fn_p (decl);
11557
11558       if (!DECL_ARTIFICIAL (decl))
11559         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
11560
11561       if (ctor > 0)
11562         {
11563           /* [class.copy]
11564
11565              A non-template constructor for class X is a copy
11566              constructor if its first parameter is of type X&, const
11567              X&, volatile X& or const volatile X&, and either there
11568              are no other parameters or else all other parameters have
11569              default arguments.  */
11570           TYPE_HAS_COPY_CTOR (class_type) = 1;
11571           if (user_provided_p (decl))
11572             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
11573           if (ctor > 1)
11574             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
11575         }
11576       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
11577         TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
11578       else if (move_fn_p (decl) && user_provided_p (decl))
11579         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
11580       else if (is_list_ctor (decl))
11581         TYPE_HAS_LIST_CTOR (class_type) = 1;
11582
11583       if (DECL_DECLARED_CONSTEXPR_P (decl)
11584           && !copy_fn_p (decl) && !move_fn_p (decl))
11585         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
11586     }
11587   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
11588     {
11589       /* [class.copy]
11590
11591          A non-template assignment operator for class X is a copy
11592          assignment operator if its parameter is of type X, X&, const
11593          X&, volatile X& or const volatile X&.  */
11594
11595       int assop = copy_fn_p (decl);
11596
11597       if (assop)
11598         {
11599           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
11600           if (user_provided_p (decl))
11601             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
11602           if (assop != 1)
11603             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
11604         }
11605       else if (move_fn_p (decl) && user_provided_p (decl))
11606         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
11607     }
11608   /* Destructors are handled in check_methods.  */
11609 }
11610
11611 /* Check a constructor DECL has the correct form.  Complains
11612    if the class has a constructor of the form X(X).  */
11613
11614 int
11615 grok_ctor_properties (const_tree ctype, const_tree decl)
11616 {
11617   int ctor_parm = copy_fn_p (decl);
11618
11619   if (ctor_parm < 0)
11620     {
11621       /* [class.copy]
11622
11623          A declaration of a constructor for a class X is ill-formed if
11624          its first parameter is of type (optionally cv-qualified) X
11625          and either there are no other parameters or else all other
11626          parameters have default arguments.
11627
11628          We *don't* complain about member template instantiations that
11629          have this form, though; they can occur as we try to decide
11630          what constructor to use during overload resolution.  Since
11631          overload resolution will never prefer such a constructor to
11632          the non-template copy constructor (which is either explicitly
11633          or implicitly defined), there's no need to worry about their
11634          existence.  Theoretically, they should never even be
11635          instantiated, but that's hard to forestall.  */
11636       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11637                 ctype, ctype);
11638       return 0;
11639     }
11640
11641   return 1;
11642 }
11643
11644 /* An operator with this code is unary, but can also be binary.  */
11645
11646 static int
11647 ambi_op_p (enum tree_code code)
11648 {
11649   return (code == INDIRECT_REF
11650           || code == ADDR_EXPR
11651           || code == UNARY_PLUS_EXPR
11652           || code == NEGATE_EXPR
11653           || code == PREINCREMENT_EXPR
11654           || code == PREDECREMENT_EXPR);
11655 }
11656
11657 /* An operator with this name can only be unary.  */
11658
11659 static int
11660 unary_op_p (enum tree_code code)
11661 {
11662   return (code == TRUTH_NOT_EXPR
11663           || code == BIT_NOT_EXPR
11664           || code == COMPONENT_REF
11665           || code == TYPE_EXPR);
11666 }
11667
11668 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11669    errors are issued for invalid declarations.  */
11670
11671 bool
11672 grok_op_properties (tree decl, bool complain)
11673 {
11674   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11675   tree argtype;
11676   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11677   tree name = DECL_NAME (decl);
11678   enum tree_code operator_code;
11679   int arity;
11680   bool ellipsis_p;
11681   tree class_type;
11682
11683   /* Count the number of arguments and check for ellipsis.  */
11684   for (argtype = argtypes, arity = 0;
11685        argtype && argtype != void_list_node;
11686        argtype = TREE_CHAIN (argtype))
11687     ++arity;
11688   ellipsis_p = !argtype;
11689
11690   class_type = DECL_CONTEXT (decl);
11691   if (class_type && !CLASS_TYPE_P (class_type))
11692     class_type = NULL_TREE;
11693
11694   if (DECL_CONV_FN_P (decl))
11695     operator_code = TYPE_EXPR;
11696   else
11697     do
11698       {
11699 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
11700         if (ansi_opname (CODE) == name)                         \
11701           {                                                     \
11702             operator_code = (CODE);                             \
11703             break;                                              \
11704           }                                                     \
11705         else if (ansi_assopname (CODE) == name)                 \
11706           {                                                     \
11707             operator_code = (CODE);                             \
11708             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
11709             break;                                              \
11710           }
11711
11712 #include "operators.def"
11713 #undef DEF_OPERATOR
11714
11715         gcc_unreachable ();
11716       }
11717     while (0);
11718   gcc_assert (operator_code != MAX_TREE_CODES);
11719   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11720
11721   if (class_type)
11722     switch (operator_code)
11723       {
11724       case NEW_EXPR:
11725         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11726         break;
11727
11728       case DELETE_EXPR:
11729         TYPE_GETS_DELETE (class_type) |= 1;
11730         break;
11731
11732       case VEC_NEW_EXPR:
11733         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11734         break;
11735
11736       case VEC_DELETE_EXPR:
11737         TYPE_GETS_DELETE (class_type) |= 2;
11738         break;
11739
11740       default:
11741         break;
11742       }
11743
11744     /* [basic.std.dynamic.allocation]/1:
11745
11746        A program is ill-formed if an allocation function is declared
11747        in a namespace scope other than global scope or declared static
11748        in global scope.
11749
11750        The same also holds true for deallocation functions.  */
11751   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11752       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11753     {
11754       if (DECL_NAMESPACE_SCOPE_P (decl))
11755         {
11756           if (CP_DECL_CONTEXT (decl) != global_namespace)
11757             {
11758               error ("%qD may not be declared within a namespace", decl);
11759               return false;
11760             }
11761           else if (!TREE_PUBLIC (decl))
11762             {
11763               error ("%qD may not be declared as static", decl);
11764               return false;
11765             }
11766           if (!flag_sized_deallocation && warn_cxx14_compat)
11767             {
11768               tree parm = FUNCTION_ARG_CHAIN (decl);
11769               if (parm && same_type_p (TREE_VALUE (parm), size_type_node)
11770                   && TREE_CHAIN (parm) == void_list_node)
11771                 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc__14_compat,
11772                             "%qD is a usual (non-placement) deallocation "
11773                             "function in C++14 (or with -fsized-deallocation)",
11774                             decl);
11775             }
11776         }
11777     }
11778
11779   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11780     {
11781       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11782       DECL_IS_OPERATOR_NEW (decl) = 1;
11783     }
11784   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11785     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11786   else
11787     {
11788       /* An operator function must either be a non-static member function
11789          or have at least one parameter of a class, a reference to a class,
11790          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11791       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11792         {
11793           if (operator_code == TYPE_EXPR
11794               || operator_code == CALL_EXPR
11795               || operator_code == COMPONENT_REF
11796               || operator_code == ARRAY_REF
11797               || operator_code == NOP_EXPR)
11798             {
11799               error ("%qD must be a nonstatic member function", decl);
11800               return false;
11801             }
11802           else
11803             {
11804               tree p;
11805
11806               if (DECL_STATIC_FUNCTION_P (decl))
11807                 {
11808                   error ("%qD must be either a non-static member "
11809                          "function or a non-member function", decl);
11810                   return false;
11811                 }
11812
11813               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11814                 {
11815                   tree arg = non_reference (TREE_VALUE (p));
11816                   if (arg == error_mark_node)
11817                     return false;
11818
11819                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11820                      because these checks are performed even on
11821                      template functions.  */
11822                   if (MAYBE_CLASS_TYPE_P (arg)
11823                       || TREE_CODE (arg) == ENUMERAL_TYPE)
11824                     break;
11825                 }
11826
11827               if (!p || p == void_list_node)
11828                 {
11829                   if (complain)
11830                     error ("%qD must have an argument of class or "
11831                            "enumerated type", decl);
11832                   return false;
11833                 }
11834             }
11835         }
11836
11837       /* There are no restrictions on the arguments to an overloaded
11838          "operator ()".  */
11839       if (operator_code == CALL_EXPR)
11840         return true;
11841
11842       /* Warn about conversion operators that will never be used.  */
11843       if (IDENTIFIER_TYPENAME_P (name)
11844           && ! DECL_TEMPLATE_INFO (decl)
11845           && warn_conversion
11846           /* Warn only declaring the function; there is no need to
11847              warn again about out-of-class definitions.  */
11848           && class_type == current_class_type)
11849         {
11850           tree t = TREE_TYPE (name);
11851           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11852
11853           if (ref)
11854             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11855
11856           if (VOID_TYPE_P (t))
11857             warning (OPT_Wconversion,
11858                      ref
11859                      ? G_("conversion to a reference to void "
11860                           "will never use a type conversion operator")
11861                      : G_("conversion to void "
11862                           "will never use a type conversion operator"));
11863           else if (class_type)
11864             {
11865               if (t == class_type)
11866                 warning (OPT_Wconversion,
11867                      ref
11868                      ? G_("conversion to a reference to the same type "
11869                           "will never use a type conversion operator")
11870                      : G_("conversion to the same type "
11871                           "will never use a type conversion operator"));                
11872               /* Don't force t to be complete here.  */
11873               else if (MAYBE_CLASS_TYPE_P (t)
11874                        && COMPLETE_TYPE_P (t)
11875                        && DERIVED_FROM_P (t, class_type))
11876                  warning (OPT_Wconversion,
11877                           ref
11878                           ? G_("conversion to a reference to a base class "
11879                                "will never use a type conversion operator")
11880                           : G_("conversion to a base class "
11881                                "will never use a type conversion operator"));           
11882             }
11883
11884         }
11885
11886       if (operator_code == COND_EXPR)
11887         {
11888           /* 13.4.0.3 */
11889           error ("ISO C++ prohibits overloading operator ?:");
11890           return false;
11891         }
11892       else if (ellipsis_p)
11893         {
11894           error ("%qD must not have variable number of arguments", decl);
11895           return false;
11896         }
11897       else if (ambi_op_p (operator_code))
11898         {
11899           if (arity == 1)
11900             /* We pick the one-argument operator codes by default, so
11901                we don't have to change anything.  */
11902             ;
11903           else if (arity == 2)
11904             {
11905               /* If we thought this was a unary operator, we now know
11906                  it to be a binary operator.  */
11907               switch (operator_code)
11908                 {
11909                 case INDIRECT_REF:
11910                   operator_code = MULT_EXPR;
11911                   break;
11912
11913                 case ADDR_EXPR:
11914                   operator_code = BIT_AND_EXPR;
11915                   break;
11916
11917                 case UNARY_PLUS_EXPR:
11918                   operator_code = PLUS_EXPR;
11919                   break;
11920
11921                 case NEGATE_EXPR:
11922                   operator_code = MINUS_EXPR;
11923                   break;
11924
11925                 case PREINCREMENT_EXPR:
11926                   operator_code = POSTINCREMENT_EXPR;
11927                   break;
11928
11929                 case PREDECREMENT_EXPR:
11930                   operator_code = POSTDECREMENT_EXPR;
11931                   break;
11932
11933                 default:
11934                   gcc_unreachable ();
11935                 }
11936
11937               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11938
11939               if ((operator_code == POSTINCREMENT_EXPR
11940                    || operator_code == POSTDECREMENT_EXPR)
11941                   && ! processing_template_decl
11942                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11943                 {
11944                   if (methodp)
11945                     error ("postfix %qD must take %<int%> as its argument",
11946                            decl);
11947                   else
11948                     error ("postfix %qD must take %<int%> as its second "
11949                            "argument", decl);
11950                   return false;
11951                 }
11952             }
11953           else
11954             {
11955               if (methodp)
11956                 error ("%qD must take either zero or one argument", decl);
11957               else
11958                 error ("%qD must take either one or two arguments", decl);
11959               return false;
11960             }
11961
11962           /* More Effective C++ rule 6.  */
11963           if (warn_ecpp
11964               && (operator_code == POSTINCREMENT_EXPR
11965                   || operator_code == POSTDECREMENT_EXPR
11966                   || operator_code == PREINCREMENT_EXPR
11967                   || operator_code == PREDECREMENT_EXPR))
11968             {
11969               tree arg = TREE_VALUE (argtypes);
11970               tree ret = TREE_TYPE (TREE_TYPE (decl));
11971               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11972                 arg = TREE_TYPE (arg);
11973               arg = TYPE_MAIN_VARIANT (arg);
11974               if (operator_code == PREINCREMENT_EXPR
11975                   || operator_code == PREDECREMENT_EXPR)
11976                 {
11977                   if (TREE_CODE (ret) != REFERENCE_TYPE
11978                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11979                                        arg))
11980                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11981                              build_reference_type (arg));
11982                 }
11983               else
11984                 {
11985                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11986                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11987                 }
11988             }
11989         }
11990       else if (unary_op_p (operator_code))
11991         {
11992           if (arity != 1)
11993             {
11994               if (methodp)
11995                 error ("%qD must take %<void%>", decl);
11996               else
11997                 error ("%qD must take exactly one argument", decl);
11998               return false;
11999             }
12000         }
12001       else /* if (binary_op_p (operator_code)) */
12002         {
12003           if (arity != 2)
12004             {
12005               if (methodp)
12006                 error ("%qD must take exactly one argument", decl);
12007               else
12008                 error ("%qD must take exactly two arguments", decl);
12009               return false;
12010             }
12011
12012           /* More Effective C++ rule 7.  */
12013           if (warn_ecpp
12014               && (operator_code == TRUTH_ANDIF_EXPR
12015                   || operator_code == TRUTH_ORIF_EXPR
12016                   || operator_code == COMPOUND_EXPR))
12017             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
12018                      decl);
12019         }
12020
12021       /* Effective C++ rule 23.  */
12022       if (warn_ecpp
12023           && arity == 2
12024           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
12025           && (operator_code == PLUS_EXPR
12026               || operator_code == MINUS_EXPR
12027               || operator_code == TRUNC_DIV_EXPR
12028               || operator_code == MULT_EXPR
12029               || operator_code == TRUNC_MOD_EXPR)
12030           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
12031         warning (OPT_Weffc__, "%qD should return by value", decl);
12032
12033       /* [over.oper]/8 */
12034       for (; argtypes && argtypes != void_list_node;
12035           argtypes = TREE_CHAIN (argtypes))
12036         if (TREE_PURPOSE (argtypes))
12037           {
12038             TREE_PURPOSE (argtypes) = NULL_TREE;
12039             if (operator_code == POSTINCREMENT_EXPR
12040                 || operator_code == POSTDECREMENT_EXPR)
12041               {
12042                 pedwarn (input_location, OPT_Wpedantic, "%qD cannot have default arguments", 
12043                          decl);
12044               }
12045             else
12046               {
12047                 error ("%qD cannot have default arguments", decl);
12048                 return false;
12049               }
12050           }
12051     }
12052   return true;
12053 }
12054 \f
12055 /* Return a string giving the keyword associate with CODE.  */
12056
12057 static const char *
12058 tag_name (enum tag_types code)
12059 {
12060   switch (code)
12061     {
12062     case record_type:
12063       return "struct";
12064     case class_type:
12065       return "class";
12066     case union_type:
12067       return "union";
12068     case enum_type:
12069       return "enum";
12070     case typename_type:
12071       return "typename";
12072     default:
12073       gcc_unreachable ();
12074     }
12075 }
12076
12077 /* Name lookup in an elaborated-type-specifier (after the keyword
12078    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
12079    elaborated-type-specifier is invalid, issue a diagnostic and return
12080    error_mark_node; otherwise, return the *_TYPE to which it referred.
12081    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
12082
12083 tree
12084 check_elaborated_type_specifier (enum tag_types tag_code,
12085                                  tree decl,
12086                                  bool allow_template_p)
12087 {
12088   tree type;
12089
12090   /* In the case of:
12091
12092        struct S { struct S *p; };
12093
12094      name lookup will find the TYPE_DECL for the implicit "S::S"
12095      typedef.  Adjust for that here.  */
12096   if (DECL_SELF_REFERENCE_P (decl))
12097     decl = TYPE_NAME (TREE_TYPE (decl));
12098
12099   type = TREE_TYPE (decl);
12100
12101   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
12102      is false for this case as well.  */
12103   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12104     {
12105       error ("using template type parameter %qT after %qs",
12106              type, tag_name (tag_code));
12107       return error_mark_node;
12108     }
12109   /* Accept template template parameters.  */
12110   else if (allow_template_p
12111            && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
12112                || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
12113     ;
12114   /*   [dcl.type.elab]
12115
12116        If the identifier resolves to a typedef-name or the
12117        simple-template-id resolves to an alias template
12118        specialization, the elaborated-type-specifier is ill-formed.
12119
12120      In other words, the only legitimate declaration to use in the
12121      elaborated type specifier is the implicit typedef created when
12122      the type is declared.  */
12123   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
12124            && !DECL_SELF_REFERENCE_P (decl)
12125            && tag_code != typename_type)
12126     {
12127       if (alias_template_specialization_p (type))
12128         error ("using alias template specialization %qT after %qs",
12129                type, tag_name (tag_code));
12130       else
12131         error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
12132       inform (DECL_SOURCE_LOCATION (decl),
12133               "%qD has a previous declaration here", decl);
12134       return error_mark_node;
12135     }
12136   else if (TREE_CODE (type) != RECORD_TYPE
12137            && TREE_CODE (type) != UNION_TYPE
12138            && tag_code != enum_type
12139            && tag_code != typename_type)
12140     {
12141       error ("%qT referred to as %qs", type, tag_name (tag_code));
12142       inform (input_location, "%q+T has a previous declaration here", type);
12143       return error_mark_node;
12144     }
12145   else if (TREE_CODE (type) != ENUMERAL_TYPE
12146            && tag_code == enum_type)
12147     {
12148       error ("%qT referred to as enum", type);
12149       inform (input_location, "%q+T has a previous declaration here", type);
12150       return error_mark_node;
12151     }
12152   else if (!allow_template_p
12153            && TREE_CODE (type) == RECORD_TYPE
12154            && CLASSTYPE_IS_TEMPLATE (type))
12155     {
12156       /* If a class template appears as elaborated type specifier
12157          without a template header such as:
12158
12159            template <class T> class C {};
12160            void f(class C);             // No template header here
12161
12162          then the required template argument is missing.  */
12163       error ("template argument required for %<%s %T%>",
12164              tag_name (tag_code),
12165              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
12166       return error_mark_node;
12167     }
12168
12169   return type;
12170 }
12171
12172 /* Lookup NAME in elaborate type specifier in scope according to
12173    SCOPE and issue diagnostics if necessary.
12174    Return *_TYPE node upon success, NULL_TREE when the NAME is not
12175    found, and ERROR_MARK_NODE for type error.  */
12176
12177 static tree
12178 lookup_and_check_tag (enum tag_types tag_code, tree name,
12179                       tag_scope scope, bool template_header_p)
12180 {
12181   tree t;
12182   tree decl;
12183   if (scope == ts_global)
12184     {
12185       /* First try ordinary name lookup, ignoring hidden class name
12186          injected via friend declaration.  */
12187       decl = lookup_name_prefer_type (name, 2);
12188       /* If that fails, the name will be placed in the smallest
12189          non-class, non-function-prototype scope according to 3.3.1/5.
12190          We may already have a hidden name declared as friend in this
12191          scope.  So lookup again but not ignoring hidden names.
12192          If we find one, that name will be made visible rather than
12193          creating a new tag.  */
12194       if (!decl)
12195         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
12196     }
12197   else
12198     decl = lookup_type_scope (name, scope);
12199
12200   if (decl
12201       && (DECL_CLASS_TEMPLATE_P (decl)
12202           /* If scope is ts_current we're defining a class, so ignore a
12203              template template parameter.  */
12204           || (scope != ts_current
12205               && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
12206     decl = DECL_TEMPLATE_RESULT (decl);
12207
12208   if (decl && TREE_CODE (decl) == TYPE_DECL)
12209     {
12210       /* Look for invalid nested type:
12211            class C {
12212              class C {};
12213            };  */
12214       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
12215         {
12216           error ("%qD has the same name as the class in which it is "
12217                  "declared",
12218                  decl);
12219           return error_mark_node;
12220         }
12221
12222       /* Two cases we need to consider when deciding if a class
12223          template is allowed as an elaborated type specifier:
12224          1. It is a self reference to its own class.
12225          2. It comes with a template header.
12226
12227          For example:
12228
12229            template <class T> class C {
12230              class C *c1;               // DECL_SELF_REFERENCE_P is true
12231              class D;
12232            };
12233            template <class U> class C; // template_header_p is true
12234            template <class T> class C<T>::D {
12235              class C *c2;               // DECL_SELF_REFERENCE_P is true
12236            };  */
12237
12238       t = check_elaborated_type_specifier (tag_code,
12239                                            decl,
12240                                            template_header_p
12241                                            | DECL_SELF_REFERENCE_P (decl));
12242       return t;
12243     }
12244   else if (decl && TREE_CODE (decl) == TREE_LIST)
12245     {
12246       error ("reference to %qD is ambiguous", name);
12247       print_candidates (decl);
12248       return error_mark_node;
12249     }
12250   else
12251     return NULL_TREE;
12252 }
12253
12254 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
12255    Define the tag as a forward-reference if it is not defined.
12256
12257    If a declaration is given, process it here, and report an error if
12258    multiple declarations are not identical.
12259
12260    SCOPE is TS_CURRENT when this is also a definition.  Only look in
12261    the current frame for the name (since C++ allows new names in any
12262    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
12263    declaration.  Only look beginning from the current scope outward up
12264    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
12265
12266    TEMPLATE_HEADER_P is true when this declaration is preceded by
12267    a set of template parameters.  */
12268
12269 static tree
12270 xref_tag_1 (enum tag_types tag_code, tree name,
12271             tag_scope orig_scope, bool template_header_p)
12272 {
12273   enum tree_code code;
12274   tree t;
12275   tree context = NULL_TREE;
12276   tag_scope scope;
12277
12278   gcc_assert (identifier_p (name));
12279
12280   switch (tag_code)
12281     {
12282     case record_type:
12283     case class_type:
12284       code = RECORD_TYPE;
12285       break;
12286     case union_type:
12287       code = UNION_TYPE;
12288       break;
12289     case enum_type:
12290       code = ENUMERAL_TYPE;
12291       break;
12292     default:
12293       gcc_unreachable ();
12294     }
12295
12296   if (orig_scope == ts_lambda)
12297     scope = ts_current;
12298   else
12299     scope = orig_scope;
12300
12301   /* In case of anonymous name, xref_tag is only called to
12302      make type node and push name.  Name lookup is not required.  */
12303   if (ANON_AGGRNAME_P (name))
12304     t = NULL_TREE;
12305   else
12306     t = lookup_and_check_tag  (tag_code, name,
12307                                scope, template_header_p);
12308
12309   if (t == error_mark_node)
12310     return error_mark_node;
12311
12312   if (scope != ts_current && t && current_class_type
12313       && template_class_depth (current_class_type)
12314       && template_header_p)
12315     {
12316       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
12317         return t;
12318
12319       /* Since SCOPE is not TS_CURRENT, we are not looking at a
12320          definition of this tag.  Since, in addition, we are currently
12321          processing a (member) template declaration of a template
12322          class, we must be very careful; consider:
12323
12324            template <class X>
12325            struct S1
12326
12327            template <class U>
12328            struct S2
12329            { template <class V>
12330            friend struct S1; };
12331
12332          Here, the S2::S1 declaration should not be confused with the
12333          outer declaration.  In particular, the inner version should
12334          have a template parameter of level 2, not level 1.  This
12335          would be particularly important if the member declaration
12336          were instead:
12337
12338            template <class V = U> friend struct S1;
12339
12340          say, when we should tsubst into `U' when instantiating
12341          S2.  On the other hand, when presented with:
12342
12343            template <class T>
12344            struct S1 {
12345              template <class U>
12346              struct S2 {};
12347              template <class U>
12348              friend struct S2;
12349            };
12350
12351          we must find the inner binding eventually.  We
12352          accomplish this by making sure that the new type we
12353          create to represent this declaration has the right
12354          TYPE_CONTEXT.  */
12355       context = TYPE_CONTEXT (t);
12356       t = NULL_TREE;
12357     }
12358
12359   if (! t)
12360     {
12361       /* If no such tag is yet defined, create a forward-reference node
12362          and record it as the "definition".
12363          When a real declaration of this type is found,
12364          the forward-reference will be altered into a real type.  */
12365       if (code == ENUMERAL_TYPE)
12366         {
12367           error ("use of enum %q#D without previous declaration", name);
12368           return error_mark_node;
12369         }
12370       else
12371         {
12372           t = make_class_type (code);
12373           TYPE_CONTEXT (t) = context;
12374           if (orig_scope == ts_lambda)
12375             /* Remember that we're declaring a lambda to avoid bogus errors
12376                in push_template_decl.  */
12377             CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
12378           t = pushtag (name, t, scope);
12379         }
12380     }
12381   else
12382     {
12383       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
12384         {
12385           if (!redeclare_class_template (t, current_template_parms))
12386             return error_mark_node;
12387         }
12388       else if (!processing_template_decl
12389                && CLASS_TYPE_P (t)
12390                && CLASSTYPE_IS_TEMPLATE (t))
12391         {
12392           error ("redeclaration of %qT as a non-template", t);
12393           error ("previous declaration %q+D", t);
12394           return error_mark_node;
12395         }
12396
12397       /* Make injected friend class visible.  */
12398       if (scope != ts_within_enclosing_non_class
12399           && hidden_name_p (TYPE_NAME (t)))
12400         {
12401           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
12402           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
12403
12404           if (TYPE_TEMPLATE_INFO (t))
12405             {
12406               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
12407               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
12408             }
12409         }
12410     }
12411
12412   return t;
12413 }
12414
12415 /* Wrapper for xref_tag_1.  */
12416
12417 tree
12418 xref_tag (enum tag_types tag_code, tree name,
12419           tag_scope scope, bool template_header_p)
12420 {
12421   tree ret;
12422   bool subtime;
12423   subtime = timevar_cond_start (TV_NAME_LOOKUP);
12424   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
12425   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
12426   return ret;
12427 }
12428
12429
12430 tree
12431 xref_tag_from_type (tree old, tree id, tag_scope scope)
12432 {
12433   enum tag_types tag_kind;
12434
12435   if (TREE_CODE (old) == RECORD_TYPE)
12436     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
12437   else
12438     tag_kind  = union_type;
12439
12440   if (id == NULL_TREE)
12441     id = TYPE_IDENTIFIER (old);
12442
12443   return xref_tag (tag_kind, id, scope, false);
12444 }
12445
12446 /* Create the binfo hierarchy for REF with (possibly NULL) base list
12447    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
12448    access_* node, and the TREE_VALUE is the type of the base-class.
12449    Non-NULL TREE_TYPE indicates virtual inheritance.  
12450  
12451    Returns true if the binfo hierarchy was successfully created,
12452    false if an error was detected. */
12453
12454 bool
12455 xref_basetypes (tree ref, tree base_list)
12456 {
12457   tree *basep;
12458   tree binfo, base_binfo;
12459   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
12460   unsigned max_bases = 0;  /* Maximum direct bases.  */
12461   int i;
12462   tree default_access;
12463   tree igo_prev; /* Track Inheritance Graph Order.  */
12464
12465   if (ref == error_mark_node)
12466     return false;
12467
12468   /* The base of a derived class is private by default, all others are
12469      public.  */
12470   default_access = (TREE_CODE (ref) == RECORD_TYPE
12471                     && CLASSTYPE_DECLARED_CLASS (ref)
12472                     ? access_private_node : access_public_node);
12473
12474   /* First, make sure that any templates in base-classes are
12475      instantiated.  This ensures that if we call ourselves recursively
12476      we do not get confused about which classes are marked and which
12477      are not.  */
12478   basep = &base_list;
12479   while (*basep)
12480     {
12481       tree basetype = TREE_VALUE (*basep);
12482
12483       /* The dependent_type_p call below should really be dependent_scope_p
12484          so that we give a hard error about using an incomplete type as a
12485          base, but we allow it with a pedwarn for backward
12486          compatibility.  */
12487       if (processing_template_decl
12488           && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
12489         cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
12490       if (!dependent_type_p (basetype)
12491           && !complete_type_or_else (basetype, NULL))
12492         /* An incomplete type.  Remove it from the list.  */
12493         *basep = TREE_CHAIN (*basep);
12494       else
12495         {
12496           max_bases++;
12497           if (TREE_TYPE (*basep))
12498             max_vbases++;
12499           if (CLASS_TYPE_P (basetype))
12500             max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
12501           basep = &TREE_CHAIN (*basep);
12502         }
12503     }
12504
12505   TYPE_MARKED_P (ref) = 1;
12506
12507   /* The binfo slot should be empty, unless this is an (ill-formed)
12508      redefinition.  */
12509   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
12510     {
12511       error ("redefinition of %q#T", ref);
12512       return false;
12513     }
12514
12515   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
12516
12517   binfo = make_tree_binfo (max_bases);
12518
12519   TYPE_BINFO (ref) = binfo;
12520   BINFO_OFFSET (binfo) = size_zero_node;
12521   BINFO_TYPE (binfo) = ref;
12522
12523   /* Apply base-class info set up to the variants of this type.  */
12524   fixup_type_variants (ref);
12525
12526   if (max_bases)
12527     {
12528       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
12529       /* An aggregate cannot have baseclasses.  */
12530       CLASSTYPE_NON_AGGREGATE (ref) = 1;
12531
12532       if (TREE_CODE (ref) == UNION_TYPE)
12533         {
12534           error ("derived union %qT invalid", ref);
12535           return false;
12536         }
12537     }
12538
12539   if (max_bases > 1)
12540     {
12541       if (TYPE_FOR_JAVA (ref))
12542         {
12543           error ("Java class %qT cannot have multiple bases", ref);
12544           return false;
12545         }
12546     }
12547
12548   if (max_vbases)
12549     {
12550       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
12551
12552       if (TYPE_FOR_JAVA (ref))
12553         {
12554           error ("Java class %qT cannot have virtual bases", ref);
12555           return false;
12556         }
12557     }
12558
12559   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
12560     {
12561       tree access = TREE_PURPOSE (base_list);
12562       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
12563       tree basetype = TREE_VALUE (base_list);
12564
12565       if (access == access_default_node)
12566         access = default_access;
12567
12568       if (PACK_EXPANSION_P (basetype))
12569         basetype = PACK_EXPANSION_PATTERN (basetype);
12570       if (TREE_CODE (basetype) == TYPE_DECL)
12571         basetype = TREE_TYPE (basetype);
12572       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
12573         {
12574           error ("base type %qT fails to be a struct or class type",
12575                  basetype);
12576           return false;
12577         }
12578
12579       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
12580         TYPE_FOR_JAVA (ref) = 1;
12581
12582       base_binfo = NULL_TREE;
12583       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
12584         {
12585           base_binfo = TYPE_BINFO (basetype);
12586           /* The original basetype could have been a typedef'd type.  */
12587           basetype = BINFO_TYPE (base_binfo);
12588
12589           /* Inherit flags from the base.  */
12590           TYPE_HAS_NEW_OPERATOR (ref)
12591             |= TYPE_HAS_NEW_OPERATOR (basetype);
12592           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
12593             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
12594           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
12595           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
12596           CLASSTYPE_DIAMOND_SHAPED_P (ref)
12597             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
12598           CLASSTYPE_REPEATED_BASE_P (ref)
12599             |= CLASSTYPE_REPEATED_BASE_P (basetype);
12600         }
12601
12602       /* We must do this test after we've seen through a typedef
12603          type.  */
12604       if (TYPE_MARKED_P (basetype))
12605         {
12606           if (basetype == ref)
12607             error ("recursive type %qT undefined", basetype);
12608           else
12609             error ("duplicate base type %qT invalid", basetype);
12610           return false;
12611         }
12612
12613       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
12614         /* Regenerate the pack expansion for the bases. */
12615         basetype = make_pack_expansion (basetype);
12616
12617       TYPE_MARKED_P (basetype) = 1;
12618
12619       base_binfo = copy_binfo (base_binfo, basetype, ref,
12620                                &igo_prev, via_virtual);
12621       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
12622         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
12623
12624       BINFO_BASE_APPEND (binfo, base_binfo);
12625       BINFO_BASE_ACCESS_APPEND (binfo, access);
12626     }
12627
12628   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
12629     /* If we didn't get max_vbases vbases, we must have shared at
12630        least one of them, and are therefore diamond shaped.  */
12631     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
12632
12633   /* Unmark all the types.  */
12634   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
12635     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12636   TYPE_MARKED_P (ref) = 0;
12637
12638   /* Now see if we have a repeated base type.  */
12639   if (!CLASSTYPE_REPEATED_BASE_P (ref))
12640     {
12641       for (base_binfo = binfo; base_binfo;
12642            base_binfo = TREE_CHAIN (base_binfo))
12643         {
12644           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12645             {
12646               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
12647               break;
12648             }
12649           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
12650         }
12651       for (base_binfo = binfo; base_binfo;
12652            base_binfo = TREE_CHAIN (base_binfo))
12653         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12654           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12655         else
12656           break;
12657     }
12658
12659   return true;
12660 }
12661
12662 \f
12663 /* Copies the enum-related properties from type SRC to type DST.
12664    Used with the underlying type of an enum and the enum itself.  */
12665 static void
12666 copy_type_enum (tree dst, tree src)
12667 {
12668   tree t;
12669   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12670     {
12671       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12672       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12673       TYPE_SIZE (t) = TYPE_SIZE (src);
12674       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12675       SET_TYPE_MODE (dst, TYPE_MODE (src));
12676       TYPE_PRECISION (t) = TYPE_PRECISION (src);
12677       TYPE_ALIGN (t) = TYPE_ALIGN (src);
12678       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12679       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12680     }
12681 }
12682
12683 /* Begin compiling the definition of an enumeration type.
12684    NAME is its name, 
12685
12686    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12687
12688    UNDERLYING_TYPE is the type that will be used as the storage for
12689    the enumeration type. This should be NULL_TREE if no storage type
12690    was specified.
12691
12692    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12693
12694    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12695
12696    Returns the type object, as yet incomplete.
12697    Also records info about it so that build_enumerator
12698    may be used to declare the individual values as they are read.  */
12699
12700 tree
12701 start_enum (tree name, tree enumtype, tree underlying_type,
12702             bool scoped_enum_p, bool *is_new)
12703 {
12704   tree prevtype = NULL_TREE;
12705   gcc_assert (identifier_p (name));
12706
12707   if (is_new)
12708     *is_new = false;
12709   /* [C++0x dcl.enum]p5:
12710
12711     If not explicitly specified, the underlying type of a scoped
12712     enumeration type is int.  */
12713   if (!underlying_type && scoped_enum_p)
12714     underlying_type = integer_type_node;
12715
12716   if (underlying_type)
12717     underlying_type = cv_unqualified (underlying_type);
12718
12719   /* If this is the real definition for a previous forward reference,
12720      fill in the contents in the same object that used to be the
12721      forward reference.  */
12722   if (!enumtype)
12723     enumtype = lookup_and_check_tag (enum_type, name,
12724                                      /*tag_scope=*/ts_current,
12725                                      /*template_header_p=*/false);
12726
12727   /* In case of a template_decl, the only check that should be deferred
12728      to instantiation time is the comparison of underlying types.  */
12729   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12730     {
12731       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12732         {
12733           error_at (input_location, "scoped/unscoped mismatch "
12734                     "in enum %q#T", enumtype);
12735           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12736                     "previous definition here");
12737           enumtype = error_mark_node;
12738         }
12739       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12740         {
12741           error_at (input_location, "underlying type mismatch "
12742                     "in enum %q#T", enumtype);
12743           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12744                     "previous definition here");
12745           enumtype = error_mark_node;
12746         }
12747       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12748                && !dependent_type_p (underlying_type)
12749                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12750                && !same_type_p (underlying_type,
12751                                 ENUM_UNDERLYING_TYPE (enumtype)))
12752         {
12753           error_at (input_location, "different underlying type "
12754                     "in enum %q#T", enumtype);
12755           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12756                     "previous definition here");
12757           underlying_type = NULL_TREE;
12758         }
12759     }
12760
12761   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12762       || processing_template_decl)
12763     {
12764       /* In case of error, make a dummy enum to allow parsing to
12765          continue.  */
12766       if (enumtype == error_mark_node)
12767         {
12768           name = make_anon_name ();
12769           enumtype = NULL_TREE;
12770         }
12771
12772       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12773          of an opaque enum, or an opaque enum of an already defined
12774          enumeration (C++0x only).
12775          In any other case, it'll be NULL_TREE. */
12776       if (!enumtype)
12777         {
12778           if (is_new)
12779             *is_new = true;
12780         }
12781       prevtype = enumtype;
12782
12783       /* Do not push the decl more than once, unless we need to
12784          compare underlying types at instantiation time */
12785       if (!enumtype
12786           || TREE_CODE (enumtype) != ENUMERAL_TYPE
12787           || (underlying_type
12788               && dependent_type_p (underlying_type))
12789           || (ENUM_UNDERLYING_TYPE (enumtype)
12790               && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12791         {
12792           enumtype = cxx_make_type (ENUMERAL_TYPE);
12793           enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12794         }
12795       else
12796           enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12797                                false);
12798
12799       if (enumtype == error_mark_node)
12800         return error_mark_node;
12801
12802       /* The enum is considered opaque until the opening '{' of the
12803          enumerator list.  */
12804       SET_OPAQUE_ENUM_P (enumtype, true);
12805       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12806     }
12807
12808   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12809
12810   if (underlying_type)
12811     {
12812       if (CP_INTEGRAL_TYPE_P (underlying_type))
12813         {
12814           copy_type_enum (enumtype, underlying_type);
12815           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12816         }
12817       else if (dependent_type_p (underlying_type))
12818         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12819       else
12820         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
12821                underlying_type, enumtype);
12822     }
12823
12824   /* If into a template class, the returned enum is always the first
12825      declaration (opaque or not) seen. This way all the references to
12826      this type will be to the same declaration. The following ones are used
12827      only to check for definition errors.  */
12828   if (prevtype && processing_template_decl)
12829     return prevtype;
12830   else
12831     return enumtype;
12832 }
12833
12834 /* After processing and defining all the values of an enumeration type,
12835    install their decls in the enumeration type.
12836    ENUMTYPE is the type object.  */
12837
12838 void
12839 finish_enum_value_list (tree enumtype)
12840 {
12841   tree values;
12842   tree underlying_type;
12843   tree decl;
12844   tree value;
12845   tree minnode, maxnode;
12846   tree t;
12847
12848   bool fixed_underlying_type_p 
12849     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12850
12851   /* We built up the VALUES in reverse order.  */
12852   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12853
12854   /* For an enum defined in a template, just set the type of the values;
12855      all further processing is postponed until the template is
12856      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12857      works.  */
12858   if (processing_template_decl)
12859     {
12860       for (values = TYPE_VALUES (enumtype);
12861            values;
12862            values = TREE_CHAIN (values))
12863         TREE_TYPE (TREE_VALUE (values)) = enumtype;
12864       return;
12865     }
12866
12867   /* Determine the minimum and maximum values of the enumerators.  */
12868   if (TYPE_VALUES (enumtype))
12869     {
12870       minnode = maxnode = NULL_TREE;
12871
12872       for (values = TYPE_VALUES (enumtype);
12873            values;
12874            values = TREE_CHAIN (values))
12875         {
12876           decl = TREE_VALUE (values);
12877
12878           /* [dcl.enum]: Following the closing brace of an enum-specifier,
12879              each enumerator has the type of its enumeration.  Prior to the
12880              closing brace, the type of each enumerator is the type of its
12881              initializing value.  */
12882           TREE_TYPE (decl) = enumtype;
12883
12884           /* Update the minimum and maximum values, if appropriate.  */
12885           value = DECL_INITIAL (decl);
12886           if (value == error_mark_node)
12887             value = integer_zero_node;
12888           /* Figure out what the minimum and maximum values of the
12889              enumerators are.  */
12890           if (!minnode)
12891             minnode = maxnode = value;
12892           else if (tree_int_cst_lt (maxnode, value))
12893             maxnode = value;
12894           else if (tree_int_cst_lt (value, minnode))
12895             minnode = value;
12896         }
12897     }
12898   else
12899     /* [dcl.enum]
12900
12901        If the enumerator-list is empty, the underlying type is as if
12902        the enumeration had a single enumerator with value 0.  */
12903     minnode = maxnode = integer_zero_node;
12904
12905   if (!fixed_underlying_type_p)
12906     {
12907       /* Compute the number of bits require to represent all values of the
12908          enumeration.  We must do this before the type of MINNODE and
12909          MAXNODE are transformed, since tree_int_cst_min_precision relies
12910          on the TREE_TYPE of the value it is passed.  */
12911       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
12912       int lowprec = tree_int_cst_min_precision (minnode, sgn);
12913       int highprec = tree_int_cst_min_precision (maxnode, sgn);
12914       int precision = MAX (lowprec, highprec);
12915       unsigned int itk;
12916       bool use_short_enum;
12917
12918       /* Determine the underlying type of the enumeration.
12919
12920          [dcl.enum]
12921
12922          The underlying type of an enumeration is an integral type that
12923          can represent all the enumerator values defined in the
12924          enumeration.  It is implementation-defined which integral type is
12925          used as the underlying type for an enumeration except that the
12926          underlying type shall not be larger than int unless the value of
12927          an enumerator cannot fit in an int or unsigned int.
12928
12929          We use "int" or an "unsigned int" as the underlying type, even if
12930          a smaller integral type would work, unless the user has
12931          explicitly requested that we use the smallest possible type.  The
12932          user can request that for all enumerations with a command line
12933          flag, or for just one enumeration with an attribute.  */
12934
12935       use_short_enum = flag_short_enums
12936         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12937
12938       for (itk = (use_short_enum ? itk_char : itk_int);
12939            itk != itk_none;
12940            itk++)
12941         {
12942           underlying_type = integer_types[itk];
12943           if (underlying_type != NULL_TREE
12944               && TYPE_PRECISION (underlying_type) >= precision
12945               && TYPE_SIGN (underlying_type) == sgn)
12946             break;
12947         }
12948       if (itk == itk_none)
12949         {
12950           /* DR 377
12951
12952              IF no integral type can represent all the enumerator values, the
12953              enumeration is ill-formed.  */
12954           error ("no integral type can represent all of the enumerator values "
12955                  "for %qT", enumtype);
12956           precision = TYPE_PRECISION (long_long_integer_type_node);
12957           underlying_type = integer_types[itk_unsigned_long_long];
12958         }
12959
12960       /* [dcl.enum]
12961
12962          The value of sizeof() applied to an enumeration type, an object
12963          of an enumeration type, or an enumerator, is the value of sizeof()
12964          applied to the underlying type.  */
12965       copy_type_enum (enumtype, underlying_type);
12966
12967       /* Compute the minimum and maximum values for the type.
12968
12969          [dcl.enum]
12970
12971          For an enumeration where emin is the smallest enumerator and emax
12972          is the largest, the values of the enumeration are the values of the
12973          underlying type in the range bmin to bmax, where bmin and bmax are,
12974          respectively, the smallest and largest values of the smallest bit-
12975          field that can store emin and emax.  */
12976
12977       /* The middle-end currently assumes that types with TYPE_PRECISION
12978          narrower than their underlying type are suitably zero or sign
12979          extended to fill their mode.  Similarly, it assumes that the front
12980          end assures that a value of a particular type must be within
12981          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12982
12983          We used to set these fields based on bmin and bmax, but that led
12984          to invalid assumptions like optimizing away bounds checking.  So
12985          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12986          TYPE_MAX_VALUE to the values for the mode above and only restrict
12987          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12988       ENUM_UNDERLYING_TYPE (enumtype)
12989         = build_distinct_type_copy (underlying_type);
12990       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12991       set_min_and_max_values_for_integral_type
12992         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
12993
12994       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12995       if (flag_strict_enums)
12996         set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
12997     }
12998   else
12999     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
13000
13001   /* Convert each of the enumerators to the type of the underlying
13002      type of the enumeration.  */
13003   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
13004     {
13005       location_t saved_location;
13006
13007       decl = TREE_VALUE (values);
13008       saved_location = input_location;
13009       input_location = DECL_SOURCE_LOCATION (decl);
13010       if (fixed_underlying_type_p)
13011         /* If the enumeration type has a fixed underlying type, we
13012            already checked all of the enumerator values.  */
13013         value = DECL_INITIAL (decl);
13014       else
13015         value = perform_implicit_conversion (underlying_type,
13016                                              DECL_INITIAL (decl),
13017                                              tf_warning_or_error);
13018       input_location = saved_location;
13019
13020       /* Do not clobber shared ints.  */
13021       value = copy_node (value);
13022
13023       TREE_TYPE (value) = enumtype;
13024       DECL_INITIAL (decl) = value;
13025     }
13026
13027   /* Fix up all variant types of this enum type.  */
13028   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
13029     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
13030
13031   if (at_class_scope_p ()
13032       && COMPLETE_TYPE_P (current_class_type)
13033       && UNSCOPED_ENUM_P (enumtype))
13034     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
13035                                                        current_class_type);
13036
13037   /* Finish debugging output for this type.  */
13038   rest_of_type_compilation (enumtype, namespace_bindings_p ());
13039 }
13040
13041 /* Finishes the enum type. This is called only the first time an
13042    enumeration is seen, be it opaque or odinary.
13043    ENUMTYPE is the type object.  */
13044
13045 void
13046 finish_enum (tree enumtype)
13047 {
13048   if (processing_template_decl)
13049     {
13050       if (at_function_scope_p ())
13051         add_stmt (build_min (TAG_DEFN, enumtype));
13052       return;
13053     }
13054
13055   /* If this is a forward declaration, there should not be any variants,
13056      though we can get a variant in the middle of an enum-specifier with
13057      wacky code like 'enum E { e = sizeof(const E*) };'  */
13058   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
13059               && (TYPE_VALUES (enumtype)
13060                   || !TYPE_NEXT_VARIANT (enumtype)));
13061 }
13062
13063 /* Build and install a CONST_DECL for an enumeration constant of the
13064    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
13065    LOC is the location of NAME.
13066    Assignment of sequential values by default is handled here.  */
13067
13068 void
13069 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
13070 {
13071   tree decl;
13072   tree context;
13073   tree type;
13074
13075   /* scalar_constant_value will pull out this expression, so make sure
13076      it's folded as appropriate.  */
13077   if (processing_template_decl)
13078     value = fold_non_dependent_expr (value);
13079
13080   /* If the VALUE was erroneous, pretend it wasn't there; that will
13081      result in the enum being assigned the next value in sequence.  */
13082   if (value == error_mark_node)
13083     value = NULL_TREE;
13084
13085   /* Remove no-op casts from the value.  */
13086   if (value)
13087     STRIP_TYPE_NOPS (value);
13088
13089   if (! processing_template_decl)
13090     {
13091       /* Validate and default VALUE.  */
13092       if (value != NULL_TREE)
13093         {
13094           if (!ENUM_UNDERLYING_TYPE (enumtype))
13095             {
13096               tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
13097                                                            value, true);
13098               if (tmp_value)
13099                 value = tmp_value;
13100             }
13101           else if (! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13102             value = perform_implicit_conversion_flags
13103               (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
13104                LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
13105
13106           if (value == error_mark_node)
13107             value = NULL_TREE;
13108
13109           if (value != NULL_TREE)
13110             {
13111               value = cxx_constant_value (value);
13112
13113               if (TREE_CODE (value) != INTEGER_CST
13114                   || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
13115                 {
13116                   error ("enumerator value for %qD is not an integer constant",
13117                          name);
13118                   value = NULL_TREE;
13119                 }
13120             }
13121         }
13122
13123       /* Default based on previous value.  */
13124       if (value == NULL_TREE)
13125         {
13126           if (TYPE_VALUES (enumtype))
13127             {
13128               tree prev_value;
13129               bool overflowed;
13130
13131               /* C++03 7.2/4: If no initializer is specified for the first
13132                  enumerator, the type is an unspecified integral
13133                  type. Otherwise the type is the same as the type of the
13134                  initializing value of the preceding enumerator unless the
13135                  incremented value is not representable in that type, in
13136                  which case the type is an unspecified integral type
13137                  sufficient to contain the incremented value.  */
13138               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
13139               if (error_operand_p (prev_value))
13140                 value = error_mark_node;
13141               else
13142                 {
13143                   tree type = TREE_TYPE (prev_value);
13144                   signop sgn = TYPE_SIGN (type);
13145                   widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
13146                                            &overflowed);
13147                   if (!overflowed)
13148                     {
13149                       bool pos = !wi::neg_p (wi, sgn);
13150                       if (!wi::fits_to_tree_p (wi, type))
13151                         {
13152                           unsigned int itk;
13153                           for (itk = itk_int; itk != itk_none; itk++)
13154                             {
13155                               type = integer_types[itk];
13156                               if (type != NULL_TREE
13157                                   && (pos || !TYPE_UNSIGNED (type))
13158                                   && wi::fits_to_tree_p (wi, type))
13159                                 break;
13160                             }
13161                           if (type && cxx_dialect < cxx11
13162                               && itk > itk_unsigned_long)
13163                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
13164 incremented enumerator value is too large for %<unsigned long%>" :  "\
13165 incremented enumerator value is too large for %<long%>");
13166                         }
13167                       if (type == NULL_TREE)
13168                         overflowed = true;
13169                       else
13170                         value = wide_int_to_tree (type, wi);
13171                     }
13172
13173                   if (overflowed)
13174                     {
13175                       error ("overflow in enumeration values at %qD", name);
13176                       value = error_mark_node;
13177                     }
13178                 }
13179             }
13180           else
13181             value = integer_zero_node;
13182         }
13183
13184       /* Remove no-op casts from the value.  */
13185       STRIP_TYPE_NOPS (value);
13186
13187       /* If the underlying type of the enum is fixed, check whether
13188          the enumerator values fits in the underlying type.  If it
13189          does not fit, the program is ill-formed [C++0x dcl.enum].  */
13190       if (ENUM_UNDERLYING_TYPE (enumtype)
13191           && value
13192           && TREE_CODE (value) == INTEGER_CST)
13193         {
13194           if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
13195             error ("enumerator value %E is outside the range of underlying "
13196                    "type %<%T%>", value, ENUM_UNDERLYING_TYPE (enumtype));
13197
13198           /* Convert the value to the appropriate type.  */
13199           value = convert (ENUM_UNDERLYING_TYPE (enumtype), value);
13200         }
13201     }
13202
13203   /* C++ associates enums with global, function, or class declarations.  */
13204   context = current_scope ();
13205
13206   /* Build the actual enumeration constant.  Note that the enumeration
13207      constants have the underlying type of the enum (if it is fixed)
13208      or the type of their initializer (if the underlying type of the
13209      enum is not fixed):
13210
13211       [ C++0x dcl.enum ]
13212
13213         If the underlying type is fixed, the type of each enumerator
13214         prior to the closing brace is the underlying type; if the
13215         initializing value of an enumerator cannot be represented by
13216         the underlying type, the program is ill-formed. If the
13217         underlying type is not fixed, the type of each enumerator is
13218         the type of its initializing value.
13219
13220     If the underlying type is not fixed, it will be computed by
13221     finish_enum and we will reset the type of this enumerator.  Of
13222     course, if we're processing a template, there may be no value.  */
13223   type = value ? TREE_TYPE (value) : NULL_TREE;
13224
13225   decl = build_decl (loc, CONST_DECL, name, type);
13226   
13227   DECL_CONTEXT (decl) = enumtype;
13228   TREE_CONSTANT (decl) = 1;
13229   TREE_READONLY (decl) = 1;
13230   DECL_INITIAL (decl) = value;
13231
13232   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
13233     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
13234        on the TYPE_FIELDS list for `S'.  (That's so that you can say
13235        things like `S::i' later.)  */
13236     finish_member_declaration (decl);
13237   else
13238     pushdecl (decl);
13239
13240   /* Add this enumeration constant to the list for this type.  */
13241   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
13242 }
13243
13244 /* Look for an enumerator with the given NAME within the enumeration
13245    type ENUMTYPE.  This routine is used primarily for qualified name
13246    lookup into an enumerator in C++0x, e.g.,
13247
13248      enum class Color { Red, Green, Blue };
13249
13250      Color color = Color::Red;
13251
13252    Returns the value corresponding to the enumerator, or
13253    NULL_TREE if no such enumerator was found.  */
13254 tree
13255 lookup_enumerator (tree enumtype, tree name)
13256 {
13257   tree e;
13258   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
13259
13260   e = purpose_member (name, TYPE_VALUES (enumtype));
13261   return e? TREE_VALUE (e) : NULL_TREE;
13262 }
13263
13264 \f
13265 /* We're defining DECL.  Make sure that its type is OK.  */
13266
13267 static void
13268 check_function_type (tree decl, tree current_function_parms)
13269 {
13270   tree fntype = TREE_TYPE (decl);
13271   tree return_type = complete_type (TREE_TYPE (fntype));
13272
13273   /* In a function definition, arg types must be complete.  */
13274   require_complete_types_for_parms (current_function_parms);
13275
13276   if (dependent_type_p (return_type)
13277       || type_uses_auto (return_type))
13278     return;
13279   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
13280       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
13281     {
13282       tree args = TYPE_ARG_TYPES (fntype);
13283
13284       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
13285         error ("return type %q#T is incomplete", return_type);
13286       else
13287         error ("return type has Java class type %q#T", return_type);
13288
13289       /* Make it return void instead.  */
13290       if (TREE_CODE (fntype) == METHOD_TYPE)
13291         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
13292                                              void_type_node,
13293                                              TREE_CHAIN (args));
13294       else
13295         fntype = build_function_type (void_type_node, args);
13296       fntype
13297         = build_exception_variant (fntype,
13298                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
13299       fntype = (cp_build_type_attribute_variant
13300                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
13301       TREE_TYPE (decl) = fntype;
13302     }
13303   else
13304     abstract_virtuals_error (decl, TREE_TYPE (fntype));
13305 }
13306
13307 /* Create the FUNCTION_DECL for a function definition.
13308    DECLSPECS and DECLARATOR are the parts of the declaration;
13309    they describe the function's name and the type it returns,
13310    but twisted together in a fashion that parallels the syntax of C.
13311
13312    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
13313    DECLARATOR is really the DECL for the function we are about to
13314    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
13315    indicating that the function is an inline defined in-class.
13316
13317    This function creates a binding context for the function body
13318    as well as setting up the FUNCTION_DECL in current_function_decl.
13319
13320    For C++, we must first check whether that datum makes any sense.
13321    For example, "class A local_a(1,2);" means that variable local_a
13322    is an aggregate of type A, which should have a constructor
13323    applied to it with the argument list [1, 2].
13324
13325    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
13326    or may be a BLOCK if the function has been defined previously
13327    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
13328    error_mark_node if the function has never been defined, or
13329    a BLOCK if the function has been defined somewhere.  */
13330
13331 bool
13332 start_preparsed_function (tree decl1, tree attrs, int flags)
13333 {
13334   tree ctype = NULL_TREE;
13335   tree fntype;
13336   tree restype;
13337   int doing_friend = 0;
13338   cp_binding_level *bl;
13339   tree current_function_parms;
13340   struct c_fileinfo *finfo
13341     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
13342   bool honor_interface;
13343
13344   /* Sanity check.  */
13345   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
13346   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
13347
13348   fntype = TREE_TYPE (decl1);
13349   if (TREE_CODE (fntype) == METHOD_TYPE)
13350     ctype = TYPE_METHOD_BASETYPE (fntype);
13351
13352   /* ISO C++ 11.4/5.  A friend function defined in a class is in
13353      the (lexical) scope of the class in which it is defined.  */
13354   if (!ctype && DECL_FRIEND_P (decl1))
13355     {
13356       ctype = DECL_FRIEND_CONTEXT (decl1);
13357
13358       /* CTYPE could be null here if we're dealing with a template;
13359          for example, `inline friend float foo()' inside a template
13360          will have no CTYPE set.  */
13361       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
13362         ctype = NULL_TREE;
13363       else
13364         doing_friend = 1;
13365     }
13366
13367   if (DECL_DECLARED_INLINE_P (decl1)
13368       && lookup_attribute ("noinline", attrs))
13369     warning (0, "inline function %q+D given attribute noinline", decl1);
13370
13371   /* Handle gnu_inline attribute.  */
13372   if (GNU_INLINE_P (decl1))
13373     {
13374       DECL_EXTERNAL (decl1) = 1;
13375       DECL_NOT_REALLY_EXTERN (decl1) = 0;
13376       DECL_INTERFACE_KNOWN (decl1) = 1;
13377       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
13378     }
13379
13380   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
13381     /* This is a constructor, we must ensure that any default args
13382        introduced by this definition are propagated to the clones
13383        now. The clones are used directly in overload resolution.  */
13384     adjust_clone_args (decl1);
13385
13386   /* Sometimes we don't notice that a function is a static member, and
13387      build a METHOD_TYPE for it.  Fix that up now.  */
13388   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
13389                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
13390
13391   /* Set up current_class_type, and enter the scope of the class, if
13392      appropriate.  */
13393   if (ctype)
13394     push_nested_class (ctype);
13395   else if (DECL_STATIC_FUNCTION_P (decl1))
13396     push_nested_class (DECL_CONTEXT (decl1));
13397
13398   /* Now that we have entered the scope of the class, we must restore
13399      the bindings for any template parameters surrounding DECL1, if it
13400      is an inline member template.  (Order is important; consider the
13401      case where a template parameter has the same name as a field of
13402      the class.)  It is not until after this point that
13403      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
13404   if (flags & SF_INCLASS_INLINE)
13405     maybe_begin_member_template_processing (decl1);
13406
13407   /* Effective C++ rule 15.  */
13408   if (warn_ecpp
13409       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
13410       && VOID_TYPE_P (TREE_TYPE (fntype)))
13411     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
13412
13413   /* Make the init_value nonzero so pushdecl knows this is not tentative.
13414      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
13415   if (!DECL_INITIAL (decl1))
13416     DECL_INITIAL (decl1) = error_mark_node;
13417
13418   /* This function exists in static storage.
13419      (This does not mean `static' in the C sense!)  */
13420   TREE_STATIC (decl1) = 1;
13421
13422   /* We must call push_template_decl after current_class_type is set
13423      up.  (If we are processing inline definitions after exiting a
13424      class scope, current_class_type will be NULL_TREE until set above
13425      by push_nested_class.)  */
13426   if (processing_template_decl)
13427     {
13428       tree newdecl1 = push_template_decl (decl1);
13429       if (newdecl1 == error_mark_node)
13430         {
13431           if (ctype || DECL_STATIC_FUNCTION_P (decl1))
13432             pop_nested_class ();
13433           return false;
13434         }
13435       decl1 = newdecl1;
13436     }
13437
13438   /* We are now in the scope of the function being defined.  */
13439   current_function_decl = decl1;
13440
13441   /* Save the parm names or decls from this function's declarator
13442      where store_parm_decls will find them.  */
13443   current_function_parms = DECL_ARGUMENTS (decl1);
13444
13445   /* Make sure the parameter and return types are reasonable.  When
13446      you declare a function, these types can be incomplete, but they
13447      must be complete when you define the function.  */
13448   check_function_type (decl1, current_function_parms);
13449
13450   /* Build the return declaration for the function.  */
13451   restype = TREE_TYPE (fntype);
13452
13453   if (DECL_RESULT (decl1) == NULL_TREE)
13454     {
13455       tree resdecl;
13456
13457       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
13458       DECL_ARTIFICIAL (resdecl) = 1;
13459       DECL_IGNORED_P (resdecl) = 1;
13460       DECL_RESULT (decl1) = resdecl;
13461
13462       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
13463     }
13464
13465   /* Let the user know we're compiling this function.  */
13466   announce_function (decl1);
13467
13468   /* Record the decl so that the function name is defined.
13469      If we already have a decl for this name, and it is a FUNCTION_DECL,
13470      use the old decl.  */
13471   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
13472     {
13473       /* A specialization is not used to guide overload resolution.  */
13474       if (!DECL_FUNCTION_MEMBER_P (decl1)
13475           && !(DECL_USE_TEMPLATE (decl1) &&
13476                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
13477         {
13478           tree olddecl = pushdecl (decl1);
13479
13480           if (olddecl == error_mark_node)
13481             /* If something went wrong when registering the declaration,
13482                use DECL1; we have to have a FUNCTION_DECL to use when
13483                parsing the body of the function.  */
13484             ;
13485           else
13486             {
13487               /* Otherwise, OLDDECL is either a previous declaration
13488                  of the same function or DECL1 itself.  */
13489
13490               if (warn_missing_declarations
13491                   && olddecl == decl1
13492                   && !DECL_MAIN_P (decl1)
13493                   && TREE_PUBLIC (decl1)
13494                   && !DECL_DECLARED_INLINE_P (decl1))
13495                 {
13496                   tree context;
13497
13498                   /* Check whether DECL1 is in an anonymous
13499                      namespace.  */
13500                   for (context = DECL_CONTEXT (decl1);
13501                        context;
13502                        context = DECL_CONTEXT (context))
13503                     {
13504                       if (TREE_CODE (context) == NAMESPACE_DECL
13505                           && DECL_NAME (context) == NULL_TREE)
13506                         break;
13507                     }
13508
13509                   if (context == NULL)
13510                     warning (OPT_Wmissing_declarations,
13511                              "no previous declaration for %q+D", decl1);
13512                 }
13513
13514               decl1 = olddecl;
13515             }
13516         }
13517       else
13518         {
13519           /* We need to set the DECL_CONTEXT.  */
13520           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
13521             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
13522         }
13523       fntype = TREE_TYPE (decl1);
13524       restype = TREE_TYPE (fntype);
13525
13526       /* If #pragma weak applies, mark the decl appropriately now.
13527          The pragma only applies to global functions.  Because
13528          determining whether or not the #pragma applies involves
13529          computing the mangled name for the declaration, we cannot
13530          apply the pragma until after we have merged this declaration
13531          with any previous declarations; if the original declaration
13532          has a linkage specification, that specification applies to
13533          the definition as well, and may affect the mangled name.  */
13534       if (DECL_FILE_SCOPE_P (decl1))
13535         maybe_apply_pragma_weak (decl1);
13536     }
13537
13538   /* Reset this in case the call to pushdecl changed it.  */
13539   current_function_decl = decl1;
13540
13541   gcc_assert (DECL_INITIAL (decl1));
13542
13543   /* This function may already have been parsed, in which case just
13544      return; our caller will skip over the body without parsing.  */
13545   if (DECL_INITIAL (decl1) != error_mark_node)
13546     return true;
13547
13548   /* Initialize RTL machinery.  We cannot do this until
13549      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
13550      even when processing a template; this is how we get
13551      CFUN set up, and our per-function variables initialized.
13552      FIXME factor out the non-RTL stuff.  */
13553   bl = current_binding_level;
13554   allocate_struct_function (decl1, processing_template_decl);
13555
13556   /* Initialize the language data structures.  Whenever we start
13557      a new function, we destroy temporaries in the usual way.  */
13558   cfun->language = ggc_cleared_alloc<language_function> ();
13559   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
13560   current_binding_level = bl;
13561
13562   if (!processing_template_decl && type_uses_auto (restype))
13563     {
13564       FNDECL_USED_AUTO (decl1) = true;
13565       current_function_auto_return_pattern = restype;
13566     }
13567
13568   /* Start the statement-tree, start the tree now.  */
13569   DECL_SAVED_TREE (decl1) = push_stmt_list ();
13570
13571   /* If we are (erroneously) defining a function that we have already
13572      defined before, wipe out what we knew before.  */
13573   if (!DECL_PENDING_INLINE_P (decl1))
13574     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
13575
13576   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
13577     {
13578       /* We know that this was set up by `grokclassfn'.  We do not
13579          wait until `store_parm_decls', since evil parse errors may
13580          never get us to that point.  Here we keep the consistency
13581          between `current_class_type' and `current_class_ptr'.  */
13582       tree t = DECL_ARGUMENTS (decl1);
13583
13584       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
13585       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
13586
13587       cp_function_chain->x_current_class_ref
13588         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
13589       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
13590       cp_function_chain->x_current_class_ptr = t;
13591
13592       /* Constructors and destructors need to know whether they're "in
13593          charge" of initializing virtual base classes.  */
13594       t = DECL_CHAIN (t);
13595       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
13596         {
13597           current_in_charge_parm = t;
13598           t = DECL_CHAIN (t);
13599         }
13600       if (DECL_HAS_VTT_PARM_P (decl1))
13601         {
13602           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
13603           current_vtt_parm = t;
13604         }
13605     }
13606
13607   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
13608                      /* Implicitly-defined methods (like the
13609                         destructor for a class in which no destructor
13610                         is explicitly declared) must not be defined
13611                         until their definition is needed.  So, we
13612                         ignore interface specifications for
13613                         compiler-generated functions.  */
13614                      && !DECL_ARTIFICIAL (decl1));
13615
13616   if (processing_template_decl)
13617     /* Don't mess with interface flags.  */;
13618   else if (DECL_INTERFACE_KNOWN (decl1))
13619     {
13620       tree ctx = decl_function_context (decl1);
13621
13622       if (DECL_NOT_REALLY_EXTERN (decl1))
13623         DECL_EXTERNAL (decl1) = 0;
13624
13625       if (ctx != NULL_TREE && vague_linkage_p (ctx))
13626         /* This is a function in a local class in an extern inline
13627            or template function.  */
13628         comdat_linkage (decl1);
13629     }
13630   /* If this function belongs to an interface, it is public.
13631      If it belongs to someone else's interface, it is also external.
13632      This only affects inlines and template instantiations.  */
13633   else if (!finfo->interface_unknown && honor_interface)
13634     {
13635       if (DECL_DECLARED_INLINE_P (decl1)
13636           || DECL_TEMPLATE_INSTANTIATION (decl1))
13637         {
13638           DECL_EXTERNAL (decl1)
13639             = (finfo->interface_only
13640                || (DECL_DECLARED_INLINE_P (decl1)
13641                    && ! flag_implement_inlines
13642                    && !DECL_VINDEX (decl1)));
13643
13644           /* For WIN32 we also want to put these in linkonce sections.  */
13645           maybe_make_one_only (decl1);
13646         }
13647       else
13648         DECL_EXTERNAL (decl1) = 0;
13649       DECL_INTERFACE_KNOWN (decl1) = 1;
13650       /* If this function is in an interface implemented in this file,
13651          make sure that the back end knows to emit this function
13652          here.  */
13653       if (!DECL_EXTERNAL (decl1))
13654         mark_needed (decl1);
13655     }
13656   else if (finfo->interface_unknown && finfo->interface_only
13657            && honor_interface)
13658     {
13659       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
13660          interface, we will have both finfo->interface_unknown and
13661          finfo->interface_only set.  In that case, we don't want to
13662          use the normal heuristics because someone will supply a
13663          #pragma implementation elsewhere, and deducing it here would
13664          produce a conflict.  */
13665       comdat_linkage (decl1);
13666       DECL_EXTERNAL (decl1) = 0;
13667       DECL_INTERFACE_KNOWN (decl1) = 1;
13668       DECL_DEFER_OUTPUT (decl1) = 1;
13669     }
13670   else
13671     {
13672       /* This is a definition, not a reference.
13673          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
13674       if (!GNU_INLINE_P (decl1))
13675         DECL_EXTERNAL (decl1) = 0;
13676
13677       if ((DECL_DECLARED_INLINE_P (decl1)
13678            || DECL_TEMPLATE_INSTANTIATION (decl1))
13679           && ! DECL_INTERFACE_KNOWN (decl1))
13680         DECL_DEFER_OUTPUT (decl1) = 1;
13681       else
13682         DECL_INTERFACE_KNOWN (decl1) = 1;
13683     }
13684
13685   /* Determine the ELF visibility attribute for the function.  We must not
13686      do this before calling "pushdecl", as we must allow "duplicate_decls"
13687      to merge any attributes appropriately.  We also need to wait until
13688      linkage is set.  */
13689   if (!DECL_CLONED_FUNCTION_P (decl1))
13690     determine_visibility (decl1);
13691
13692   if (!processing_template_decl)
13693     maybe_instantiate_noexcept (decl1);
13694
13695   begin_scope (sk_function_parms, decl1);
13696
13697   ++function_depth;
13698
13699   if (DECL_DESTRUCTOR_P (decl1)
13700       || (DECL_CONSTRUCTOR_P (decl1)
13701           && targetm.cxx.cdtor_returns_this ()))
13702     {
13703       cdtor_label = build_decl (input_location, 
13704                                 LABEL_DECL, NULL_TREE, NULL_TREE);
13705       DECL_CONTEXT (cdtor_label) = current_function_decl;
13706     }
13707
13708   start_fname_decls ();
13709
13710   store_parm_decls (current_function_parms);
13711
13712   return true;
13713 }
13714
13715
13716 /* Like start_preparsed_function, except that instead of a
13717    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13718
13719    Returns true on success.  If the DECLARATOR is not suitable
13720    for a function, we return false, which tells the parser to
13721    skip the entire function.  */
13722
13723 bool
13724 start_function (cp_decl_specifier_seq *declspecs,
13725                 const cp_declarator *declarator,
13726                 tree attrs)
13727 {
13728   tree decl1;
13729
13730   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13731   if (decl1 == error_mark_node)
13732     return false;
13733   /* If the declarator is not suitable for a function definition,
13734      cause a syntax error.  */
13735   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13736     {
13737       error ("invalid function declaration");
13738       return false;
13739     }
13740
13741   if (DECL_MAIN_P (decl1))
13742     /* main must return int.  grokfndecl should have corrected it
13743        (and issued a diagnostic) if the user got it wrong.  */
13744     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13745                              integer_type_node));
13746
13747   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13748 }
13749 \f
13750 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13751    FN.  */
13752
13753 static bool
13754 use_eh_spec_block (tree fn)
13755 {
13756   return (flag_exceptions && flag_enforce_eh_specs
13757           && !processing_template_decl
13758           && !type_throw_all_p (TREE_TYPE (fn))
13759           /* We insert the EH_SPEC_BLOCK only in the original
13760              function; then, it is copied automatically to the
13761              clones.  */
13762           && !DECL_CLONED_FUNCTION_P (fn)
13763           /* Implicitly-generated constructors and destructors have
13764              exception specifications.  However, those specifications
13765              are the union of the possible exceptions specified by the
13766              constructors/destructors for bases and members, so no
13767              unallowed exception will ever reach this function.  By
13768              not creating the EH_SPEC_BLOCK we save a little memory,
13769              and we avoid spurious warnings about unreachable
13770              code.  */
13771           && !DECL_DEFAULTED_FN (fn));
13772 }
13773
13774 /* Store the parameter declarations into the current function declaration.
13775    This is called after parsing the parameter declarations, before
13776    digesting the body of the function.
13777
13778    Also install to binding contour return value identifier, if any.  */
13779
13780 static void
13781 store_parm_decls (tree current_function_parms)
13782 {
13783   tree fndecl = current_function_decl;
13784   tree parm;
13785
13786   /* This is a chain of any other decls that came in among the parm
13787      declarations.  If a parm is declared with  enum {foo, bar} x;
13788      then CONST_DECLs for foo and bar are put here.  */
13789   tree nonparms = NULL_TREE;
13790
13791   if (current_function_parms)
13792     {
13793       /* This case is when the function was defined with an ANSI prototype.
13794          The parms already have decls, so we need not do anything here
13795          except record them as in effect
13796          and complain if any redundant old-style parm decls were written.  */
13797
13798       tree specparms = current_function_parms;
13799       tree next;
13800
13801       /* Must clear this because it might contain TYPE_DECLs declared
13802              at class level.  */
13803       current_binding_level->names = NULL;
13804
13805       /* If we're doing semantic analysis, then we'll call pushdecl
13806              for each of these.  We must do them in reverse order so that
13807              they end in the correct forward order.  */
13808       specparms = nreverse (specparms);
13809
13810       for (parm = specparms; parm; parm = next)
13811         {
13812           next = DECL_CHAIN (parm);
13813           if (TREE_CODE (parm) == PARM_DECL)
13814             {
13815               if (DECL_NAME (parm) == NULL_TREE
13816                   || !VOID_TYPE_P (parm))
13817                 pushdecl (parm);
13818               else
13819                 error ("parameter %qD declared void", parm);
13820             }
13821           else
13822             {
13823               /* If we find an enum constant or a type tag,
13824                  put it aside for the moment.  */
13825               TREE_CHAIN (parm) = NULL_TREE;
13826               nonparms = chainon (nonparms, parm);
13827             }
13828         }
13829
13830       /* Get the decls in their original chain order and record in the
13831          function.  This is all and only the PARM_DECLs that were
13832          pushed into scope by the loop above.  */
13833       DECL_ARGUMENTS (fndecl) = getdecls ();
13834     }
13835   else
13836     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13837
13838   /* Now store the final chain of decls for the arguments
13839      as the decl-chain of the current lexical scope.
13840      Put the enumerators in as well, at the front so that
13841      DECL_ARGUMENTS is not modified.  */
13842   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13843
13844   if (use_eh_spec_block (current_function_decl))
13845     current_eh_spec_block = begin_eh_spec_block ();
13846 }
13847
13848 \f
13849 /* We have finished doing semantic analysis on DECL, but have not yet
13850    generated RTL for its body.  Save away our current state, so that
13851    when we want to generate RTL later we know what to do.  */
13852
13853 static void
13854 save_function_data (tree decl)
13855 {
13856   struct language_function *f;
13857
13858   /* Save the language-specific per-function data so that we can
13859      get it back when we really expand this function.  */
13860   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13861
13862   /* Make a copy.  */
13863   f = ggc_alloc<language_function> ();
13864   memcpy (f, cp_function_chain, sizeof (struct language_function));
13865   DECL_SAVED_FUNCTION_DATA (decl) = f;
13866
13867   /* Clear out the bits we don't need.  */
13868   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13869   f->bindings = NULL;
13870   f->x_local_names = NULL;
13871   f->base.local_typedefs = NULL;
13872 }
13873
13874
13875 /* Set the return value of the constructor (if present).  */
13876
13877 static void
13878 finish_constructor_body (void)
13879 {
13880   tree val;
13881   tree exprstmt;
13882
13883   if (targetm.cxx.cdtor_returns_this ()
13884       && (! TYPE_FOR_JAVA (current_class_type)))
13885     {
13886       /* Any return from a constructor will end up here.  */
13887       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13888
13889       val = DECL_ARGUMENTS (current_function_decl);
13890       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13891                     DECL_RESULT (current_function_decl), val);
13892       /* Return the address of the object.  */
13893       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13894       add_stmt (exprstmt);
13895     }
13896 }
13897
13898 /* Do all the processing for the beginning of a destructor; set up the
13899    vtable pointers and cleanups for bases and members.  */
13900
13901 static void
13902 begin_destructor_body (void)
13903 {
13904   tree compound_stmt;
13905
13906   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13907      issued an error message.  We still want to try to process the
13908      body of the function, but initialize_vtbl_ptrs will crash if
13909      TYPE_BINFO is NULL.  */
13910   if (COMPLETE_TYPE_P (current_class_type))
13911     {
13912       compound_stmt = begin_compound_stmt (0);
13913       /* Make all virtual function table pointers in non-virtual base
13914          classes point to CURRENT_CLASS_TYPE's virtual function
13915          tables.  */
13916       initialize_vtbl_ptrs (current_class_ptr);
13917       finish_compound_stmt (compound_stmt);
13918
13919       /* Insert a cleanup to let the back end know that the object is dead
13920          when we exit the destructor, either normally or via exception.  */
13921       tree btype = CLASSTYPE_AS_BASE (current_class_type);
13922       tree clobber = build_constructor (btype, NULL);
13923       TREE_THIS_VOLATILE (clobber) = true;
13924       tree bref = build_nop (build_reference_type (btype), current_class_ptr);
13925       bref = convert_from_reference (bref);
13926       tree exprstmt = build2 (MODIFY_EXPR, btype, bref, clobber);
13927       finish_decl_cleanup (NULL_TREE, exprstmt);
13928
13929       /* And insert cleanups for our bases and members so that they
13930          will be properly destroyed if we throw.  */
13931       push_base_cleanups ();
13932     }
13933 }
13934
13935 /* At the end of every destructor we generate code to delete the object if
13936    necessary.  Do that now.  */
13937
13938 static void
13939 finish_destructor_body (void)
13940 {
13941   tree exprstmt;
13942
13943   /* Any return from a destructor will end up here; that way all base
13944      and member cleanups will be run when the function returns.  */
13945   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13946
13947   /* In a virtual destructor, we must call delete.  */
13948   if (DECL_VIRTUAL_P (current_function_decl))
13949     {
13950       tree if_stmt;
13951       tree virtual_size = cxx_sizeof (current_class_type);
13952
13953       /* [class.dtor]
13954
13955       At the point of definition of a virtual destructor (including
13956       an implicit definition), non-placement operator delete shall
13957       be looked up in the scope of the destructor's class and if
13958       found shall be accessible and unambiguous.  */
13959       exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr,
13960                                        virtual_size,
13961                                        /*global_p=*/false,
13962                                        /*placement=*/NULL_TREE,
13963                                        /*alloc_fn=*/NULL_TREE,
13964                                        tf_warning_or_error);
13965
13966       if_stmt = begin_if_stmt ();
13967       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13968                                    current_in_charge_parm,
13969                                    integer_one_node),
13970                            if_stmt);
13971       finish_expr_stmt (exprstmt);
13972       finish_then_clause (if_stmt);
13973       finish_if_stmt (if_stmt);
13974     }
13975
13976   if (targetm.cxx.cdtor_returns_this ())
13977     {
13978       tree val;
13979
13980       val = DECL_ARGUMENTS (current_function_decl);
13981       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13982                     DECL_RESULT (current_function_decl), val);
13983       /* Return the address of the object.  */
13984       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13985       add_stmt (exprstmt);
13986     }
13987 }
13988
13989 /* Do the necessary processing for the beginning of a function body, which
13990    in this case includes member-initializers, but not the catch clauses of
13991    a function-try-block.  Currently, this means opening a binding level
13992    for the member-initializers (in a ctor), member cleanups (in a dtor),
13993    and capture proxies (in a lambda operator()).  */
13994
13995 tree
13996 begin_function_body (void)
13997 {
13998   tree stmt;
13999
14000   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
14001     return NULL_TREE;
14002
14003   if (processing_template_decl)
14004     /* Do nothing now.  */;
14005   else
14006     /* Always keep the BLOCK node associated with the outermost pair of
14007        curly braces of a function.  These are needed for correct
14008        operation of dwarfout.c.  */
14009     keep_next_level (true);
14010
14011   stmt = begin_compound_stmt (BCS_FN_BODY);
14012
14013   if (processing_template_decl)
14014     /* Do nothing now.  */;
14015   else if (DECL_DESTRUCTOR_P (current_function_decl))
14016     begin_destructor_body ();
14017
14018   return stmt;
14019 }
14020
14021 /* Do the processing for the end of a function body.  Currently, this means
14022    closing out the cleanups for fully-constructed bases and members, and in
14023    the case of the destructor, deleting the object if desired.  Again, this
14024    is only meaningful for [cd]tors, since they are the only functions where
14025    there is a significant distinction between the main body and any
14026    function catch clauses.  Handling, say, main() return semantics here
14027    would be wrong, as flowing off the end of a function catch clause for
14028    main() would also need to return 0.  */
14029
14030 void
14031 finish_function_body (tree compstmt)
14032 {
14033   if (compstmt == NULL_TREE)
14034     return;
14035
14036   /* Close the block.  */
14037   finish_compound_stmt (compstmt);
14038
14039   if (processing_template_decl)
14040     /* Do nothing now.  */;
14041   else if (DECL_CONSTRUCTOR_P (current_function_decl))
14042     finish_constructor_body ();
14043   else if (DECL_DESTRUCTOR_P (current_function_decl))
14044     finish_destructor_body ();
14045 }
14046
14047 /* Given a function, returns the BLOCK corresponding to the outermost level
14048    of curly braces, skipping the artificial block created for constructor
14049    initializers.  */
14050
14051 tree
14052 outer_curly_brace_block (tree fndecl)
14053 {
14054   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
14055   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
14056     /* Skip the artificial function body block.  */
14057     block = BLOCK_SUBBLOCKS (block);
14058   return block;
14059 }
14060
14061 /* If FNDECL is a class's key method, add the class to the list of
14062    keyed classes that should be emitted.  */
14063
14064 static void
14065 record_key_method_defined (tree fndecl)
14066 {
14067   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
14068       && DECL_VIRTUAL_P (fndecl)
14069       && !processing_template_decl)
14070     {
14071       tree fnclass = DECL_CONTEXT (fndecl);
14072       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
14073         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
14074     }
14075 }
14076
14077 /* Subroutine of finish_function.
14078    Save the body of constexpr functions for possible
14079    future compile time evaluation.  */
14080
14081 static void
14082 maybe_save_function_definition (tree fun)
14083 {
14084   if (!processing_template_decl
14085       && DECL_DECLARED_CONSTEXPR_P (fun)
14086       && !cp_function_chain->invalid_constexpr
14087       && !DECL_CLONED_FUNCTION_P (fun))
14088     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
14089 }
14090
14091 /* Finish up a function declaration and compile that function
14092    all the way to assembler language output.  The free the storage
14093    for the function definition.
14094
14095    FLAGS is a bitwise or of the following values:
14096      2 - INCLASS_INLINE
14097        We just finished processing the body of an in-class inline
14098        function definition.  (This processing will have taken place
14099        after the class definition is complete.)  */
14100
14101 tree
14102 finish_function (int flags)
14103 {
14104   tree fndecl = current_function_decl;
14105   tree fntype, ctype = NULL_TREE;
14106   int inclass_inline = (flags & 2) != 0;
14107
14108   /* When we get some parse errors, we can end up without a
14109      current_function_decl, so cope.  */
14110   if (fndecl == NULL_TREE)
14111     return error_mark_node;
14112
14113   if (c_dialect_objc ())
14114     objc_finish_function ();
14115
14116   gcc_assert (!defer_mark_used_calls);
14117   defer_mark_used_calls = true;
14118
14119   record_key_method_defined (fndecl);
14120
14121   fntype = TREE_TYPE (fndecl);
14122
14123   /*  TREE_READONLY (fndecl) = 1;
14124       This caused &foo to be of type ptr-to-const-function
14125       which then got a warning when stored in a ptr-to-function variable.  */
14126
14127   gcc_assert (building_stmt_list_p ());
14128   /* The current function is being defined, so its DECL_INITIAL should
14129      be set, and unless there's a multiple definition, it should be
14130      error_mark_node.  */
14131   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
14132
14133   /* For a cloned function, we've already got all the code we need;
14134      there's no need to add any extra bits.  */
14135   if (!DECL_CLONED_FUNCTION_P (fndecl))
14136     {
14137       /* Make it so that `main' always returns 0 by default.  */
14138       if (DECL_MAIN_P (current_function_decl))
14139         finish_return_stmt (integer_zero_node);
14140
14141       if (use_eh_spec_block (current_function_decl))
14142         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
14143                               (TREE_TYPE (current_function_decl)),
14144                               current_eh_spec_block);
14145     }
14146
14147   /* If we're saving up tree structure, tie off the function now.  */
14148   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
14149
14150   if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
14151     cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
14152
14153   finish_fname_decls ();
14154
14155   /* If this function can't throw any exceptions, remember that.  */
14156   if (!processing_template_decl
14157       && !cp_function_chain->can_throw
14158       && !flag_non_call_exceptions
14159       && !decl_replaceable_p (fndecl))
14160     TREE_NOTHROW (fndecl) = 1;
14161
14162   /* This must come after expand_function_end because cleanups might
14163      have declarations (from inline functions) that need to go into
14164      this function's blocks.  */
14165
14166   /* If the current binding level isn't the outermost binding level
14167      for this function, either there is a bug, or we have experienced
14168      syntax errors and the statement tree is malformed.  */
14169   if (current_binding_level->kind != sk_function_parms)
14170     {
14171       /* Make sure we have already experienced errors.  */
14172       gcc_assert (errorcount);
14173
14174       /* Throw away the broken statement tree and extra binding
14175          levels.  */
14176       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
14177
14178       while (current_binding_level->kind != sk_function_parms)
14179         {
14180           if (current_binding_level->kind == sk_class)
14181             pop_nested_class ();
14182           else
14183             poplevel (0, 0, 0);
14184         }
14185     }
14186   poplevel (1, 0, 1);
14187
14188   /* Statements should always be full-expressions at the outermost set
14189      of curly braces for a function.  */
14190   gcc_assert (stmts_are_full_exprs_p ());
14191
14192   /* If there are no return statements in a function with auto return type,
14193      the return type is void.  But if the declared type is something like
14194      auto*, this is an error.  */
14195   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
14196       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
14197     {
14198       if (!is_auto (current_function_auto_return_pattern)
14199           && !current_function_returns_value && !current_function_returns_null)
14200         {
14201           error ("no return statements in function returning %qT",
14202                  current_function_auto_return_pattern);
14203           inform (input_location, "only plain %<auto%> return type can be "
14204                   "deduced to %<void%>");
14205         }
14206       apply_deduced_return_type (fndecl, void_type_node);
14207       fntype = TREE_TYPE (fndecl);
14208     }
14209
14210   /* Save constexpr function body before it gets munged by
14211      the NRV transformation.   */
14212   maybe_save_function_definition (fndecl);
14213
14214   /* Set up the named return value optimization, if we can.  Candidate
14215      variables are selected in check_return_expr.  */
14216   if (current_function_return_value)
14217     {
14218       tree r = current_function_return_value;
14219       tree outer;
14220
14221       if (r != error_mark_node
14222           /* This is only worth doing for fns that return in memory--and
14223              simpler, since we don't have to worry about promoted modes.  */
14224           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
14225           /* Only allow this for variables declared in the outer scope of
14226              the function so we know that their lifetime always ends with a
14227              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
14228              we were to do this optimization in tree-ssa.  */
14229           && (outer = outer_curly_brace_block (fndecl))
14230           && chain_member (r, BLOCK_VARS (outer)))
14231         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
14232
14233       current_function_return_value = NULL_TREE;
14234     }
14235
14236   /* Remember that we were in class scope.  */
14237   if (current_class_name)
14238     ctype = current_class_type;
14239
14240   /* Must mark the RESULT_DECL as being in this function.  */
14241   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
14242
14243   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
14244      to the FUNCTION_DECL node itself.  */
14245   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
14246
14247   /* Save away current state, if appropriate.  */
14248   if (!processing_template_decl)
14249     save_function_data (fndecl);
14250
14251   /* Complain if there's just no return statement.  */
14252   if (warn_return_type
14253       && !VOID_TYPE_P (TREE_TYPE (fntype))
14254       && !dependent_type_p (TREE_TYPE (fntype))
14255       && !current_function_returns_value && !current_function_returns_null
14256       /* Don't complain if we abort or throw.  */
14257       && !current_function_returns_abnormally
14258       /* Don't complain if there's an infinite loop.  */
14259       && !current_function_infinite_loop
14260       /* Don't complain if we are declared noreturn.  */
14261       && !TREE_THIS_VOLATILE (fndecl)
14262       && !DECL_NAME (DECL_RESULT (fndecl))
14263       && !TREE_NO_WARNING (fndecl)
14264       /* Structor return values (if any) are set by the compiler.  */
14265       && !DECL_CONSTRUCTOR_P (fndecl)
14266       && !DECL_DESTRUCTOR_P (fndecl)
14267       && targetm.warn_func_return (fndecl))
14268     {
14269       warning (OPT_Wreturn_type,
14270                "no return statement in function returning non-void");
14271       TREE_NO_WARNING (fndecl) = 1;
14272     }
14273
14274   /* Store the end of the function, so that we get good line number
14275      info for the epilogue.  */
14276   cfun->function_end_locus = input_location;
14277
14278   /* Complain about parameters that are only set, but never otherwise used.  */
14279   if (warn_unused_but_set_parameter
14280       && !processing_template_decl
14281       && errorcount == unused_but_set_errorcount
14282       && !DECL_CLONED_FUNCTION_P (fndecl))
14283     {
14284       tree decl;
14285
14286       for (decl = DECL_ARGUMENTS (fndecl);
14287            decl;
14288            decl = DECL_CHAIN (decl))
14289         if (TREE_USED (decl)
14290             && TREE_CODE (decl) == PARM_DECL
14291             && !DECL_READ_P (decl)
14292             && DECL_NAME (decl)
14293             && !DECL_ARTIFICIAL (decl)
14294             && !TREE_NO_WARNING (decl)
14295             && !DECL_IN_SYSTEM_HEADER (decl)
14296             && TREE_TYPE (decl) != error_mark_node
14297             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
14298             && (!CLASS_TYPE_P (TREE_TYPE (decl))
14299                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
14300           warning (OPT_Wunused_but_set_parameter,
14301                    "parameter %q+D set but not used", decl);
14302       unused_but_set_errorcount = errorcount;
14303     }
14304
14305   /* Complain about locally defined typedefs that are not used in this
14306      function.  */
14307   maybe_warn_unused_local_typedefs ();
14308
14309   /* Genericize before inlining.  */
14310   if (!processing_template_decl)
14311     {
14312       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
14313       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
14314       cp_genericize (fndecl);
14315       /* Clear out the bits we don't need.  */
14316       f->x_current_class_ptr = NULL;
14317       f->x_current_class_ref = NULL;
14318       f->x_eh_spec_block = NULL;
14319       f->x_in_charge_parm = NULL;
14320       f->x_vtt_parm = NULL;
14321       f->x_return_value = NULL;
14322       f->bindings = NULL;
14323       f->extern_decl_map = NULL;
14324       f->infinite_loops = NULL;
14325     }
14326   /* Clear out the bits we don't need.  */
14327   local_names = NULL;
14328
14329   /* We're leaving the context of this function, so zap cfun.  It's still in
14330      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
14331   set_cfun (NULL);
14332   current_function_decl = NULL;
14333
14334   /* If this is an in-class inline definition, we may have to pop the
14335      bindings for the template parameters that we added in
14336      maybe_begin_member_template_processing when start_function was
14337      called.  */
14338   if (inclass_inline)
14339     maybe_end_member_template_processing ();
14340
14341   /* Leave the scope of the class.  */
14342   if (ctype)
14343     pop_nested_class ();
14344
14345   --function_depth;
14346
14347   /* Clean up.  */
14348   current_function_decl = NULL_TREE;
14349
14350   defer_mark_used_calls = false;
14351   if (deferred_mark_used_calls)
14352     {
14353       unsigned int i;
14354       tree decl;
14355
14356       FOR_EACH_VEC_SAFE_ELT (deferred_mark_used_calls, i, decl)
14357         mark_used (decl);
14358       vec_free (deferred_mark_used_calls);
14359     }
14360
14361   return fndecl;
14362 }
14363 \f
14364 /* Create the FUNCTION_DECL for a function definition.
14365    DECLSPECS and DECLARATOR are the parts of the declaration;
14366    they describe the return type and the name of the function,
14367    but twisted together in a fashion that parallels the syntax of C.
14368
14369    This function creates a binding context for the function body
14370    as well as setting up the FUNCTION_DECL in current_function_decl.
14371
14372    Returns a FUNCTION_DECL on success.
14373
14374    If the DECLARATOR is not suitable for a function (it defines a datum
14375    instead), we return 0, which tells yyparse to report a parse error.
14376
14377    May return void_type_node indicating that this method is actually
14378    a friend.  See grokfield for more details.
14379
14380    Came here with a `.pushlevel' .
14381
14382    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
14383    CHANGES TO CODE IN `grokfield'.  */
14384
14385 tree
14386 grokmethod (cp_decl_specifier_seq *declspecs,
14387             const cp_declarator *declarator, tree attrlist)
14388 {
14389   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
14390                                 &attrlist);
14391
14392   if (fndecl == error_mark_node)
14393     return error_mark_node;
14394
14395   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
14396     {
14397       error ("invalid member function declaration");
14398       return error_mark_node;
14399     }
14400
14401   if (attrlist)
14402     cplus_decl_attributes (&fndecl, attrlist, 0);
14403
14404   /* Pass friends other than inline friend functions back.  */
14405   if (fndecl == void_type_node)
14406     return fndecl;
14407
14408   if (DECL_IN_AGGR_P (fndecl))
14409     {
14410       if (DECL_CLASS_SCOPE_P (fndecl))
14411         error ("%qD is already defined in class %qT", fndecl,
14412                DECL_CONTEXT (fndecl));
14413       return error_mark_node;
14414     }
14415
14416   check_template_shadow (fndecl);
14417
14418   DECL_COMDAT (fndecl) = 1;
14419   DECL_DECLARED_INLINE_P (fndecl) = 1;
14420   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
14421
14422   /* We process method specializations in finish_struct_1.  */
14423   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
14424     {
14425       fndecl = push_template_decl (fndecl);
14426       if (fndecl == error_mark_node)
14427         return fndecl;
14428     }
14429
14430   if (! DECL_FRIEND_P (fndecl))
14431     {
14432       if (DECL_CHAIN (fndecl))
14433         {
14434           fndecl = copy_node (fndecl);
14435           TREE_CHAIN (fndecl) = NULL_TREE;
14436         }
14437     }
14438
14439   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
14440
14441   DECL_IN_AGGR_P (fndecl) = 1;
14442   return fndecl;
14443 }
14444 \f
14445
14446 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
14447    we can lay it out later, when and if its type becomes complete.
14448
14449    Also handle constexpr variables where the initializer involves
14450    an unlowered PTRMEM_CST because the class isn't complete yet.  */
14451
14452 void
14453 maybe_register_incomplete_var (tree var)
14454 {
14455   gcc_assert (VAR_P (var));
14456
14457   /* Keep track of variables with incomplete types.  */
14458   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
14459       && DECL_EXTERNAL (var))
14460     {
14461       tree inner_type = TREE_TYPE (var);
14462
14463       while (TREE_CODE (inner_type) == ARRAY_TYPE)
14464         inner_type = TREE_TYPE (inner_type);
14465       inner_type = TYPE_MAIN_VARIANT (inner_type);
14466
14467       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
14468           /* RTTI TD entries are created while defining the type_info.  */
14469           || (TYPE_LANG_SPECIFIC (inner_type)
14470               && TYPE_BEING_DEFINED (inner_type)))
14471         {
14472           incomplete_var iv = {var, inner_type};
14473           vec_safe_push (incomplete_vars, iv);
14474         }
14475       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
14476                && decl_constant_var_p (var)
14477                && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
14478         {
14479           /* When the outermost open class is complete we can resolve any
14480              pointers-to-members.  */
14481           tree context = outermost_open_class ();
14482           incomplete_var iv = {var, context};
14483           vec_safe_push (incomplete_vars, iv);
14484         }
14485     }
14486 }
14487
14488 /* Called when a class type (given by TYPE) is defined.  If there are
14489    any existing VAR_DECLs whose type has been completed by this
14490    declaration, update them now.  */
14491
14492 void
14493 complete_vars (tree type)
14494 {
14495   unsigned ix;
14496   incomplete_var *iv;
14497
14498   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
14499     {
14500       if (same_type_p (type, iv->incomplete_type))
14501         {
14502           tree var = iv->decl;
14503           tree type = TREE_TYPE (var);
14504
14505           if (TYPE_MAIN_VARIANT (strip_array_types (type))
14506               == iv->incomplete_type)
14507             {
14508               /* Complete the type of the variable.  The VAR_DECL itself
14509                  will be laid out in expand_expr.  */
14510               complete_type (type);
14511               cp_apply_type_quals_to_decl (cp_type_quals (type), var);
14512             }
14513
14514           if (DECL_INITIAL (var)
14515               && decl_constant_var_p (var))
14516             DECL_INITIAL (var) = cplus_expand_constant (DECL_INITIAL (var));
14517
14518           /* Remove this entry from the list.  */
14519           incomplete_vars->unordered_remove (ix);
14520         }
14521       else
14522         ix++;
14523     }
14524
14525   /* Check for pending declarations which may have abstract type.  */
14526   complete_type_check_abstract (type);
14527 }
14528
14529 /* If DECL is of a type which needs a cleanup, build and return an
14530    expression to perform that cleanup here.  Return NULL_TREE if no
14531    cleanup need be done.  */
14532
14533 tree
14534 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
14535 {
14536   tree type;
14537   tree attr;
14538   tree cleanup;
14539
14540   /* Assume no cleanup is required.  */
14541   cleanup = NULL_TREE;
14542
14543   if (error_operand_p (decl))
14544     return cleanup;
14545
14546   /* Handle "__attribute__((cleanup))".  We run the cleanup function
14547      before the destructor since the destructor is what actually
14548      terminates the lifetime of the object.  */
14549   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
14550   if (attr)
14551     {
14552       tree id;
14553       tree fn;
14554       tree arg;
14555
14556       /* Get the name specified by the user for the cleanup function.  */
14557       id = TREE_VALUE (TREE_VALUE (attr));
14558       /* Look up the name to find the cleanup function to call.  It is
14559          important to use lookup_name here because that is what is
14560          used in c-common.c:handle_cleanup_attribute when performing
14561          initial checks on the attribute.  Note that those checks
14562          include ensuring that the function found is not an overloaded
14563          function, or an object with an overloaded call operator,
14564          etc.; we can rely on the fact that the function found is an
14565          ordinary FUNCTION_DECL.  */
14566       fn = lookup_name (id);
14567       arg = build_address (decl);
14568       mark_used (decl);
14569       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
14570       if (cleanup == error_mark_node)
14571         return error_mark_node;
14572     }
14573   /* Handle ordinary C++ destructors.  */
14574   type = TREE_TYPE (decl);
14575   if (type_build_dtor_call (type))
14576     {
14577       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
14578       tree addr;
14579       tree call;
14580
14581       if (TREE_CODE (type) == ARRAY_TYPE)
14582         addr = decl;
14583       else
14584         addr = build_address (decl);
14585
14586       call = build_delete (TREE_TYPE (addr), addr,
14587                            sfk_complete_destructor, flags, 0, complain);
14588       if (call == error_mark_node)
14589         cleanup = error_mark_node;
14590       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
14591         /* Discard the call.  */;
14592       else if (cleanup)
14593         cleanup = cp_build_compound_expr (cleanup, call, complain);
14594       else
14595         cleanup = call;
14596     }
14597
14598   /* build_delete sets the location of the destructor call to the
14599      current location, even though the destructor is going to be
14600      called later, at the end of the current scope.  This can lead to
14601      a "jumpy" behaviour for users of debuggers when they step around
14602      the end of the block.  So let's unset the location of the
14603      destructor call instead.  */
14604   if (cleanup != NULL && EXPR_P (cleanup))
14605     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
14606
14607   if (cleanup
14608       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl))))
14609     /* Treat objects with destructors as used; the destructor may do
14610        something substantive.  */
14611     mark_used (decl);
14612
14613   return cleanup;
14614 }
14615
14616 \f
14617 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
14618    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
14619    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
14620
14621 tree
14622 static_fn_type (tree memfntype)
14623 {
14624   tree fntype;
14625   tree args;
14626
14627   if (TYPE_PTRMEMFUNC_P (memfntype))
14628     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
14629   if (POINTER_TYPE_P (memfntype)
14630       || TREE_CODE (memfntype) == FUNCTION_DECL)
14631     memfntype = TREE_TYPE (memfntype);
14632   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
14633     return memfntype;
14634   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
14635   args = TYPE_ARG_TYPES (memfntype);
14636   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
14637   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
14638   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
14639   fntype = (cp_build_type_attribute_variant
14640             (fntype, TYPE_ATTRIBUTES (memfntype)));
14641   fntype = (build_exception_variant
14642             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
14643   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
14644     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
14645   return fntype;
14646 }
14647
14648 /* DECL was originally constructed as a non-static member function,
14649    but turned out to be static.  Update it accordingly.  */
14650
14651 void
14652 revert_static_member_fn (tree decl)
14653 {
14654   tree stype = static_fn_type (decl);
14655   cp_cv_quals quals = type_memfn_quals (stype);
14656   cp_ref_qualifier rqual = type_memfn_rqual (stype);
14657
14658   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
14659     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
14660
14661   TREE_TYPE (decl) = stype;
14662
14663   if (DECL_ARGUMENTS (decl))
14664     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
14665   DECL_STATIC_FUNCTION_P (decl) = 1;
14666 }
14667
14668 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
14669    one of the language-independent trees.  */
14670
14671 enum cp_tree_node_structure_enum
14672 cp_tree_node_structure (union lang_tree_node * t)
14673 {
14674   switch (TREE_CODE (&t->generic))
14675     {
14676     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
14677     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
14678     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
14679     case OVERLOAD:              return TS_CP_OVERLOAD;
14680     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
14681     case PTRMEM_CST:            return TS_CP_PTRMEM;
14682     case BASELINK:              return TS_CP_BASELINK;
14683     case TEMPLATE_DECL:         return TS_CP_TEMPLATE_DECL;
14684     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
14685     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
14686     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
14687     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
14688     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
14689     case USERDEF_LITERAL:       return TS_CP_USERDEF_LITERAL;
14690     default:                    return TS_CP_GENERIC;
14691     }
14692 }
14693
14694 /* Build the void_list_node (void_type_node having been created).  */
14695 tree
14696 build_void_list_node (void)
14697 {
14698   tree t = build_tree_list (NULL_TREE, void_type_node);
14699   return t;
14700 }
14701
14702 bool
14703 cp_missing_noreturn_ok_p (tree decl)
14704 {
14705   /* A missing noreturn is ok for the `main' function.  */
14706   return DECL_MAIN_P (decl);
14707 }
14708
14709 /* Return the decl used to identify the COMDAT group into which DECL should
14710    be placed.  */
14711
14712 tree
14713 cxx_comdat_group (tree decl)
14714 {
14715   /* Virtual tables, construction virtual tables, and virtual table
14716      tables all go in a single COMDAT group, named after the primary
14717      virtual table.  */
14718   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
14719     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
14720   /* For all other DECLs, the COMDAT group is the mangled name of the
14721      declaration itself.  */
14722   else
14723     {
14724       while (DECL_THUNK_P (decl))
14725         {
14726           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
14727              into the same section as the target function.  In that case
14728              we must return target's name.  */
14729           tree target = THUNK_TARGET (decl);
14730           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14731               && DECL_SECTION_NAME (target) != NULL
14732               && DECL_ONE_ONLY (target))
14733             decl = target;
14734           else
14735             break;
14736         }
14737     }
14738
14739   return decl;
14740 }
14741
14742 /* Returns the return type for FN as written by the user, which may include
14743    a placeholder for a deduced return type.  */
14744
14745 tree
14746 fndecl_declared_return_type (tree fn)
14747 {
14748   fn = STRIP_TEMPLATE (fn);
14749   if (FNDECL_USED_AUTO (fn))
14750     {
14751       struct language_function *f = NULL;
14752       if (DECL_STRUCT_FUNCTION (fn))
14753         f = DECL_STRUCT_FUNCTION (fn)->language;
14754       if (f == NULL)
14755         f = DECL_SAVED_FUNCTION_DATA (fn);
14756       return f->x_auto_return_pattern;
14757     }
14758   return TREE_TYPE (TREE_TYPE (fn));
14759 }
14760
14761 /* Returns true iff DECL was declared with an auto return type and it has
14762    not yet been deduced to a real type.  */
14763
14764 bool
14765 undeduced_auto_decl (tree decl)
14766 {
14767   if (cxx_dialect < cxx14)
14768     return false;
14769   return type_uses_auto (TREE_TYPE (decl));
14770 }
14771
14772 /* Complain if DECL has an undeduced return type.  */
14773
14774 void
14775 require_deduced_type (tree decl)
14776 {
14777   if (undeduced_auto_decl (decl))
14778     error ("use of %qD before deduction of %<auto%>", decl);
14779 }
14780
14781 #include "gt-cp-decl.h"