OSDN Git Service

Convert standard builtin functions from being arrays to using a functional interface
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Contributed by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23
24 /* Process declarations and symbol lookup for C++ front end.
25    Also constructs types; the standard scalar types at initialization,
26    and structure, union, array and enum types when they are declared.  */
27
28 /* ??? not all decl nodes are given the most useful possible
29    line numbers.  For example, the CONST_DECLs for enum values.  */
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "tree-iterator.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "intl.h"
42 #include "output.h"
43 #include "toplev.h"
44 #include "hashtab.h"
45 #include "tm_p.h"
46 #include "target.h"
47 #include "c-family/c-common.h"
48 #include "c-family/c-objc.h"
49 #include "c-family/c-pragma.h"
50 #include "diagnostic.h"
51 #include "intl.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "pointer-set.h"
55 #include "splay-tree.h"
56 #include "plugin.h"
57
58 /* Possible cases of bad specifiers type used by bad_specifiers. */
59 enum bad_spec_place {
60   BSP_VAR,    /* variable */
61   BSP_PARM,   /* parameter */
62   BSP_TYPE,   /* type */
63   BSP_FIELD   /* field */
64 };
65
66 static tree grokparms (tree parmlist, tree *);
67 static const char *redeclaration_error_message (tree, tree);
68
69 static int decl_jump_unsafe (tree);
70 static void require_complete_types_for_parms (tree);
71 static int ambi_op_p (enum tree_code);
72 static int unary_op_p (enum tree_code);
73 static void push_local_name (tree);
74 static tree grok_reference_init (tree, tree, tree, tree *, int);
75 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76                          int, int, tree);
77 static int check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static tree builtin_function_1 (tree, tree, bool);
80 static tree build_library_fn_1 (tree, enum tree_code, tree);
81 static int member_function_or_else (tree, tree, enum overload_flags);
82 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
83                             int);
84 static void check_for_uninitialized_const_var (tree);
85 static hashval_t typename_hash (const void *);
86 static int typename_compare (const void *, const void *);
87 static tree local_variable_p_walkfn (tree *, int *, void *);
88 static tree record_builtin_java_type (const char *, int);
89 static const char *tag_name (enum tag_types);
90 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
91 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
92 static void maybe_deduce_size_from_array_init (tree, tree);
93 static void layout_var_decl (tree);
94 static tree check_initializer (tree, tree, int, tree *);
95 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
96 static void save_function_data (tree);
97 static void copy_type_enum (tree , tree);
98 static void check_function_type (tree, tree);
99 static void finish_constructor_body (void);
100 static void begin_destructor_body (void);
101 static void finish_destructor_body (void);
102 static void record_key_method_defined (tree);
103 static tree create_array_type_for_decl (tree, tree, tree);
104 static tree get_atexit_node (void);
105 static tree get_dso_handle_node (void);
106 static tree start_cleanup_fn (void);
107 static void end_cleanup_fn (void);
108 static tree cp_make_fname_decl (location_t, tree, int);
109 static void initialize_predefined_identifiers (void);
110 static tree check_special_function_return_type
111         (special_function_kind, tree, tree);
112 static tree push_cp_library_fn (enum tree_code, tree);
113 static tree build_cp_library_fn (tree, enum tree_code, tree);
114 static void store_parm_decls (tree);
115 static void initialize_local_var (tree, tree);
116 static void expand_static_init (tree, tree);
117
118 /* The following symbols are subsumed in the cp_global_trees array, and
119    listed here individually for documentation purposes.
120
121    C++ extensions
122         tree wchar_decl_node;
123
124         tree vtable_entry_type;
125         tree delta_type_node;
126         tree __t_desc_type_node;
127
128         tree class_type_node;
129         tree unknown_type_node;
130
131    Array type `vtable_entry_type[]'
132
133         tree vtbl_type_node;
134         tree vtbl_ptr_type_node;
135
136    Namespaces,
137
138         tree std_node;
139         tree abi_node;
140
141    A FUNCTION_DECL which can call `abort'.  Not necessarily the
142    one that the user will declare, but sufficient to be called
143    by routines that want to abort the program.
144
145         tree abort_fndecl;
146
147    The FUNCTION_DECL for the default `::operator delete'.
148
149         tree global_delete_fndecl;
150
151    Used by RTTI
152         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
153         tree tinfo_var_id;  */
154
155 tree cp_global_trees[CPTI_MAX];
156
157 /* Indicates that there is a type value in some namespace, although
158    that is not necessarily in scope at the moment.  */
159
160 tree global_type_node;
161
162 /* The node that holds the "name" of the global scope.  */
163 tree global_scope_name;
164
165 #define local_names cp_function_chain->x_local_names
166
167 /* A list of objects which have constructors or destructors
168    which reside in the global scope.  The decl is stored in
169    the TREE_VALUE slot and the initializer is stored
170    in the TREE_PURPOSE slot.  */
171 tree static_aggregates;
172
173 /* -- end of C++ */
174
175 /* A node for the integer constant 2.  */
176
177 tree integer_two_node;
178
179 /* Used only for jumps to as-yet undefined labels, since jumps to
180    defined labels can have their validity checked immediately.  */
181
182 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
183   struct named_label_use_entry *next;
184   /* The binding level to which this entry is *currently* attached.
185      This is initially the binding level in which the goto appeared,
186      but is modified as scopes are closed.  */
187   cp_binding_level *binding_level;
188   /* The head of the names list that was current when the goto appeared,
189      or the inner scope popped.  These are the decls that will *not* be
190      skipped when jumping to the label.  */
191   tree names_in_scope;
192   /* The location of the goto, for error reporting.  */
193   location_t o_goto_locus;
194   /* True if an OpenMP structured block scope has been closed since
195      the goto appeared.  This means that the branch from the label will
196      illegally exit an OpenMP scope.  */
197   bool in_omp_scope;
198 };
199
200 /* A list of all LABEL_DECLs in the function that have names.  Here so
201    we can clear out their names' definitions at the end of the
202    function, and so we can check the validity of jumps to these labels.  */
203
204 struct GTY(()) named_label_entry {
205   /* The decl itself.  */
206   tree label_decl;
207
208   /* The binding level to which the label is *currently* attached.
209      This is initially set to the binding level in which the label
210      is defined, but is modified as scopes are closed.  */
211   cp_binding_level *binding_level;
212   /* The head of the names list that was current when the label was
213      defined, or the inner scope popped.  These are the decls that will
214      be skipped when jumping to the label.  */
215   tree names_in_scope;
216   /* A vector of all decls from all binding levels that would be
217      crossed by a backward branch to the label.  */
218   VEC(tree,gc) *bad_decls;
219
220   /* A list of uses of the label, before the label is defined.  */
221   struct named_label_use_entry *uses;
222
223   /* The following bits are set after the label is defined, and are
224      updated as scopes are popped.  They indicate that a backward jump
225      to the label will illegally enter a scope of the given flavor.  */
226   bool in_try_scope;
227   bool in_catch_scope;
228   bool in_omp_scope;
229 };
230
231 #define named_labels cp_function_chain->x_named_labels
232 \f
233 /* The number of function bodies which we are currently processing.
234    (Zero if we are at namespace scope, one inside the body of a
235    function, two inside the body of a function in a local class, etc.)  */
236 int function_depth;
237
238 /* To avoid unwanted recursion, finish_function defers all mark_used calls
239    encountered during its execution until it finishes.  */
240 bool defer_mark_used_calls;
241 VEC(tree, gc) *deferred_mark_used_calls;
242
243 /* States indicating how grokdeclarator() should handle declspecs marked
244    with __attribute__((deprecated)).  An object declared as
245    __attribute__((deprecated)) suppresses warnings of uses of other
246    deprecated items.  */
247 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
248
249 \f
250 /* A list of VAR_DECLs whose type was incomplete at the time the
251    variable was declared.  */
252
253 typedef struct GTY(()) incomplete_var_d {
254   tree decl;
255   tree incomplete_type;
256 } incomplete_var;
257
258 DEF_VEC_O(incomplete_var);
259 DEF_VEC_ALLOC_O(incomplete_var,gc);
260
261 static GTY(()) VEC(incomplete_var,gc) *incomplete_vars;
262 \f
263 /* Returns the kind of template specialization we are currently
264    processing, given that it's declaration contained N_CLASS_SCOPES
265    explicit scope qualifications.  */
266
267 tmpl_spec_kind
268 current_tmpl_spec_kind (int n_class_scopes)
269 {
270   int n_template_parm_scopes = 0;
271   int seen_specialization_p = 0;
272   int innermost_specialization_p = 0;
273   cp_binding_level *b;
274
275   /* Scan through the template parameter scopes.  */
276   for (b = current_binding_level;
277        b->kind == sk_template_parms;
278        b = b->level_chain)
279     {
280       /* If we see a specialization scope inside a parameter scope,
281          then something is wrong.  That corresponds to a declaration
282          like:
283
284             template <class T> template <> ...
285
286          which is always invalid since [temp.expl.spec] forbids the
287          specialization of a class member template if the enclosing
288          class templates are not explicitly specialized as well.  */
289       if (b->explicit_spec_p)
290         {
291           if (n_template_parm_scopes == 0)
292             innermost_specialization_p = 1;
293           else
294             seen_specialization_p = 1;
295         }
296       else if (seen_specialization_p == 1)
297         return tsk_invalid_member_spec;
298
299       ++n_template_parm_scopes;
300     }
301
302   /* Handle explicit instantiations.  */
303   if (processing_explicit_instantiation)
304     {
305       if (n_template_parm_scopes != 0)
306         /* We've seen a template parameter list during an explicit
307            instantiation.  For example:
308
309              template <class T> template void f(int);
310
311            This is erroneous.  */
312         return tsk_invalid_expl_inst;
313       else
314         return tsk_expl_inst;
315     }
316
317   if (n_template_parm_scopes < n_class_scopes)
318     /* We've not seen enough template headers to match all the
319        specialized classes present.  For example:
320
321          template <class T> void R<T>::S<T>::f(int);
322
323        This is invalid; there needs to be one set of template
324        parameters for each class.  */
325     return tsk_insufficient_parms;
326   else if (n_template_parm_scopes == n_class_scopes)
327     /* We're processing a non-template declaration (even though it may
328        be a member of a template class.)  For example:
329
330          template <class T> void S<T>::f(int);
331
332        The `class T' matches the `S<T>', leaving no template headers
333        corresponding to the `f'.  */
334     return tsk_none;
335   else if (n_template_parm_scopes > n_class_scopes + 1)
336     /* We've got too many template headers.  For example:
337
338          template <> template <class T> void f (T);
339
340        There need to be more enclosing classes.  */
341     return tsk_excessive_parms;
342   else
343     /* This must be a template.  It's of the form:
344
345          template <class T> template <class U> void S<T>::f(U);
346
347        This is a specialization if the innermost level was a
348        specialization; otherwise it's just a definition of the
349        template.  */
350     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
351 }
352
353 /* Exit the current scope.  */
354
355 void
356 finish_scope (void)
357 {
358   poplevel (0, 0, 0);
359 }
360
361 /* When a label goes out of scope, check to see if that label was used
362    in a valid manner, and issue any appropriate warnings or errors.  */
363
364 static void
365 pop_label (tree label, tree old_value)
366 {
367   if (!processing_template_decl)
368     {
369       if (DECL_INITIAL (label) == NULL_TREE)
370         {
371           location_t location;
372
373           error ("label %q+D used but not defined", label);
374           location = input_location; /* FIXME want (input_filename, (line)0) */
375           /* Avoid crashing later.  */
376           define_label (location, DECL_NAME (label));
377         }
378       else 
379         warn_for_unused_label (label);
380     }
381
382   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
383 }
384
385 /* At the end of a function, all labels declared within the function
386    go out of scope.  BLOCK is the top-level block for the
387    function.  */
388
389 static int
390 pop_labels_1 (void **slot, void *data)
391 {
392   struct named_label_entry *ent = (struct named_label_entry *) *slot;
393   tree block = (tree) data;
394
395   pop_label (ent->label_decl, NULL_TREE);
396
397   /* Put the labels into the "variables" of the top-level block,
398      so debugger can see them.  */
399   DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
400   BLOCK_VARS (block) = ent->label_decl;
401
402   htab_clear_slot (named_labels, slot);
403
404   return 1;
405 }
406
407 static void
408 pop_labels (tree block)
409 {
410   if (named_labels)
411     {
412       htab_traverse (named_labels, pop_labels_1, block);
413       named_labels = NULL;
414     }
415 }
416
417 /* At the end of a block with local labels, restore the outer definition.  */
418
419 static void
420 pop_local_label (tree label, tree old_value)
421 {
422   struct named_label_entry dummy;
423   void **slot;
424
425   pop_label (label, old_value);
426
427   dummy.label_decl = label;
428   slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
429   htab_clear_slot (named_labels, slot);
430 }
431
432 /* The following two routines are used to interface to Objective-C++.
433    The binding level is purposely treated as an opaque type.  */
434
435 void *
436 objc_get_current_scope (void)
437 {
438   return current_binding_level;
439 }
440
441 /* The following routine is used by the NeXT-style SJLJ exceptions;
442    variables get marked 'volatile' so as to not be clobbered by
443    _setjmp()/_longjmp() calls.  All variables in the current scope,
444    as well as parent scopes up to (but not including) ENCLOSING_BLK
445    shall be thusly marked.  */
446
447 void
448 objc_mark_locals_volatile (void *enclosing_blk)
449 {
450   cp_binding_level *scope;
451
452   for (scope = current_binding_level;
453        scope && scope != enclosing_blk;
454        scope = scope->level_chain)
455     {
456       tree decl;
457
458       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
459         objc_volatilize_decl (decl);
460
461       /* Do not climb up past the current function.  */
462       if (scope->kind == sk_function_parms)
463         break;
464     }
465 }
466
467 /* Update data for defined and undefined labels when leaving a scope.  */
468
469 static int
470 poplevel_named_label_1 (void **slot, void *data)
471 {
472   struct named_label_entry *ent = (struct named_label_entry *) *slot;
473   cp_binding_level *bl = (cp_binding_level *) data;
474   cp_binding_level *obl = bl->level_chain;
475
476   if (ent->binding_level == bl)
477     {
478       tree decl;
479
480       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
481          TREE_LISTs representing OVERLOADs, so be careful.  */
482       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
483                                                      ? DECL_CHAIN (decl)
484                                                      : TREE_CHAIN (decl)))
485         if (decl_jump_unsafe (decl))
486           VEC_safe_push (tree, gc, ent->bad_decls, decl);
487
488       ent->binding_level = obl;
489       ent->names_in_scope = obl->names;
490       switch (bl->kind)
491         {
492         case sk_try:
493           ent->in_try_scope = true;
494           break;
495         case sk_catch:
496           ent->in_catch_scope = true;
497           break;
498         case sk_omp:
499           ent->in_omp_scope = true;
500           break;
501         default:
502           break;
503         }
504     }
505   else if (ent->uses)
506     {
507       struct named_label_use_entry *use;
508
509       for (use = ent->uses; use ; use = use->next)
510         if (use->binding_level == bl)
511           {
512             use->binding_level = obl;
513             use->names_in_scope = obl->names;
514             if (bl->kind == sk_omp)
515               use->in_omp_scope = true;
516           }
517     }
518
519   return 1;
520 }
521
522 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
523    when errors were reported, except for -Werror-unused-but-set-*.  */
524 static int unused_but_set_errorcount;
525
526 /* Exit a binding level.
527    Pop the level off, and restore the state of the identifier-decl mappings
528    that were in effect when this level was entered.
529
530    If KEEP == 1, this level had explicit declarations, so
531    and create a "block" (a BLOCK node) for the level
532    to record its declarations and subblocks for symbol table output.
533
534    If FUNCTIONBODY is nonzero, this level is the body of a function,
535    so create a block as if KEEP were set and also clear out all
536    label names.
537
538    If REVERSE is nonzero, reverse the order of decls before putting
539    them into the BLOCK.  */
540
541 tree
542 poplevel (int keep, int reverse, int functionbody)
543 {
544   tree link;
545   /* The chain of decls was accumulated in reverse order.
546      Put it into forward order, just for cleanliness.  */
547   tree decls;
548   tree subblocks;
549   tree block;
550   tree decl;
551   int leaving_for_scope;
552   scope_kind kind;
553   unsigned ix;
554   cp_label_binding *label_bind;
555
556   timevar_start (TV_NAME_LOOKUP);
557  restart:
558
559   block = NULL_TREE;
560
561   gcc_assert (current_binding_level->kind != sk_class);
562
563   if (current_binding_level->kind == sk_cleanup)
564     functionbody = 0;
565   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
566
567   gcc_assert (!VEC_length(cp_class_binding,
568                           current_binding_level->class_shadowed));
569
570   /* We used to use KEEP == 2 to indicate that the new block should go
571      at the beginning of the list of blocks at this binding level,
572      rather than the end.  This hack is no longer used.  */
573   gcc_assert (keep == 0 || keep == 1);
574
575   if (current_binding_level->keep)
576     keep = 1;
577
578   /* Any uses of undefined labels, and any defined labels, now operate
579      under constraints of next binding contour.  */
580   if (cfun && !functionbody && named_labels)
581     htab_traverse (named_labels, poplevel_named_label_1,
582                    current_binding_level);
583
584   /* Get the decls in the order they were written.
585      Usually current_binding_level->names is in reverse order.
586      But parameter decls were previously put in forward order.  */
587
588   if (reverse)
589     current_binding_level->names
590       = decls = nreverse (current_binding_level->names);
591   else
592     decls = current_binding_level->names;
593
594   /* If there were any declarations or structure tags in that level,
595      or if this level is a function body,
596      create a BLOCK to record them for the life of this function.  */
597   block = NULL_TREE;
598   if (keep == 1 || functionbody)
599     block = make_node (BLOCK);
600   if (block != NULL_TREE)
601     {
602       BLOCK_VARS (block) = decls;
603       BLOCK_SUBBLOCKS (block) = subblocks;
604     }
605
606   /* In each subblock, record that this is its superior.  */
607   if (keep >= 0)
608     for (link = subblocks; link; link = BLOCK_CHAIN (link))
609       BLOCK_SUPERCONTEXT (link) = block;
610
611   /* We still support the old for-scope rules, whereby the variables
612      in a for-init statement were in scope after the for-statement
613      ended.  We only use the new rules if flag_new_for_scope is
614      nonzero.  */
615   leaving_for_scope
616     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
617
618   /* Before we remove the declarations first check for unused variables.  */
619   if ((warn_unused_variable || warn_unused_but_set_variable)
620       && !processing_template_decl)
621     for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
622       if (TREE_CODE (decl) == VAR_DECL
623           && (! TREE_USED (decl) || !DECL_READ_P (decl))
624           && ! DECL_IN_SYSTEM_HEADER (decl)
625           && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
626         {
627           if (! TREE_USED (decl))
628             warning (OPT_Wunused_variable, "unused variable %q+D", decl);
629           else if (DECL_CONTEXT (decl) == current_function_decl
630                    && TREE_TYPE (decl) != error_mark_node
631                    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
632                    && errorcount == unused_but_set_errorcount
633                    && (!CLASS_TYPE_P (TREE_TYPE (decl))
634                        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
635             {
636               warning (OPT_Wunused_but_set_variable,
637                        "variable %q+D set but not used", decl); 
638               unused_but_set_errorcount = errorcount;
639             }
640         }
641
642   /* Remove declarations for all the DECLs in this level.  */
643   for (link = decls; link; link = TREE_CHAIN (link))
644     {
645       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
646           /* It's hard to make this ARM compatibility hack play nicely with
647              lambdas, and it really isn't necessary in C++11 mode.  */
648           && cxx_dialect < cxx0x
649           && DECL_NAME (link))
650         {
651           tree name = DECL_NAME (link);
652           cxx_binding *ob;
653           tree ns_binding;
654
655           ob = outer_binding (name,
656                               IDENTIFIER_BINDING (name),
657                               /*class_p=*/true);
658           if (!ob)
659             ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
660           else
661             ns_binding = NULL_TREE;
662
663           if (ob && ob->scope == current_binding_level->level_chain)
664             /* We have something like:
665
666                  int i;
667                  for (int i; ;);
668
669                and we are leaving the `for' scope.  There's no reason to
670                keep the binding of the inner `i' in this case.  */
671             pop_binding (name, link);
672           else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
673                    || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
674             /* Here, we have something like:
675
676                  typedef int I;
677
678                  void f () {
679                    for (int I; ;);
680                  }
681
682                We must pop the for-scope binding so we know what's a
683                type and what isn't.  */
684             pop_binding (name, link);
685           else
686             {
687               /* Mark this VAR_DECL as dead so that we can tell we left it
688                  there only for backward compatibility.  */
689               DECL_DEAD_FOR_LOCAL (link) = 1;
690
691               /* Keep track of what should have happened when we
692                  popped the binding.  */
693               if (ob && ob->value)
694                 {
695                   SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
696                   DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
697                 }
698
699               /* Add it to the list of dead variables in the next
700                  outermost binding to that we can remove these when we
701                  leave that binding.  */
702               VEC_safe_push (tree, gc,
703                              current_binding_level->level_chain->dead_vars_from_for,
704                              link);
705
706               /* Although we don't pop the cxx_binding, we do clear
707                  its SCOPE since the scope is going away now.  */
708               IDENTIFIER_BINDING (name)->scope
709                 = current_binding_level->level_chain;
710             }
711         }
712       else
713         {
714           tree name;
715
716           /* Remove the binding.  */
717           decl = link;
718
719           if (TREE_CODE (decl) == TREE_LIST)
720             decl = TREE_VALUE (decl);
721           name = decl;
722
723           if (TREE_CODE (name) == OVERLOAD)
724             name = OVL_FUNCTION (name);
725
726           gcc_assert (DECL_P (name));
727           pop_binding (DECL_NAME (name), decl);
728         }
729     }
730
731   /* Remove declarations for any `for' variables from inner scopes
732      that we kept around.  */
733   FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
734                             ix, decl)
735     pop_binding (DECL_NAME (decl), decl);
736
737   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
738   for (link = current_binding_level->type_shadowed;
739        link; link = TREE_CHAIN (link))
740     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
741
742   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
743   FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
744                             current_binding_level->shadowed_labels,
745                             ix, label_bind)
746     pop_local_label (label_bind->label, label_bind->prev_value);
747
748   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
749      list if a `using' declaration put them there.  The debugging
750      back ends won't understand OVERLOAD, so we remove them here.
751      Because the BLOCK_VARS are (temporarily) shared with
752      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
753      popped all the bindings.  */
754   if (block)
755     {
756       tree* d;
757
758       for (d = &BLOCK_VARS (block); *d; )
759         {
760           if (TREE_CODE (*d) == TREE_LIST)
761             *d = TREE_CHAIN (*d);
762           else
763             d = &DECL_CHAIN (*d);
764         }
765     }
766
767   /* If the level being exited is the top level of a function,
768      check over all the labels.  */
769   if (functionbody)
770     {
771       /* Since this is the top level block of a function, the vars are
772          the function's parameters.  Don't leave them in the BLOCK
773          because they are found in the FUNCTION_DECL instead.  */
774       BLOCK_VARS (block) = 0;
775       pop_labels (block);
776     }
777
778   kind = current_binding_level->kind;
779   if (kind == sk_cleanup)
780     {
781       tree stmt;
782
783       /* If this is a temporary binding created for a cleanup, then we'll
784          have pushed a statement list level.  Pop that, create a new
785          BIND_EXPR for the block, and insert it into the stream.  */
786       stmt = pop_stmt_list (current_binding_level->statement_list);
787       stmt = c_build_bind_expr (input_location, block, stmt);
788       add_stmt (stmt);
789     }
790
791   leave_scope ();
792   if (functionbody)
793     {
794       /* The current function is being defined, so its DECL_INITIAL
795          should be error_mark_node.  */
796       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
797       DECL_INITIAL (current_function_decl) = block;
798     }
799   else if (block)
800     current_binding_level->blocks
801       = block_chainon (current_binding_level->blocks, block);
802
803   /* If we did not make a block for the level just exited,
804      any blocks made for inner levels
805      (since they cannot be recorded as subblocks in that level)
806      must be carried forward so they will later become subblocks
807      of something else.  */
808   else if (subblocks)
809     current_binding_level->blocks
810       = block_chainon (current_binding_level->blocks, subblocks);
811
812   /* Each and every BLOCK node created here in `poplevel' is important
813      (e.g. for proper debugging information) so if we created one
814      earlier, mark it as "used".  */
815   if (block)
816     TREE_USED (block) = 1;
817
818   /* All temporary bindings created for cleanups are popped silently.  */
819   if (kind == sk_cleanup)
820     goto restart;
821
822   timevar_stop (TV_NAME_LOOKUP);
823   return block;
824 }
825
826 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
827    itself, calling F for each.  The DATA is passed to F as well.  */
828
829 static int
830 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
831 {
832   int result = 0;
833   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
834
835   result |= (*f) (name_space, data);
836
837   for (; current; current = DECL_CHAIN (current))
838     result |= walk_namespaces_r (current, f, data);
839
840   return result;
841 }
842
843 /* Walk all the namespaces, calling F for each.  The DATA is passed to
844    F as well.  */
845
846 int
847 walk_namespaces (walk_namespaces_fn f, void* data)
848 {
849   return walk_namespaces_r (global_namespace, f, data);
850 }
851
852 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
853    DATA is non-NULL, this is the last time we will call
854    wrapup_global_declarations for this NAMESPACE.  */
855
856 int
857 wrapup_globals_for_namespace (tree name_space, void* data)
858 {
859   cp_binding_level *level = NAMESPACE_LEVEL (name_space);
860   VEC(tree,gc) *statics = level->static_decls;
861   tree *vec = VEC_address (tree, statics);
862   int len = VEC_length (tree, statics);
863   int last_time = (data != 0);
864
865   if (last_time)
866     {
867       check_global_declarations (vec, len);
868       emit_debug_global_declarations (vec, len);
869       return 0;
870     }
871
872   /* Write out any globals that need to be output.  */
873   return wrapup_global_declarations (vec, len);
874 }
875
876 \f
877 /* In C++, you don't have to write `struct S' to refer to `S'; you
878    can just use `S'.  We accomplish this by creating a TYPE_DECL as
879    if the user had written `typedef struct S S'.  Create and return
880    the TYPE_DECL for TYPE.  */
881
882 tree
883 create_implicit_typedef (tree name, tree type)
884 {
885   tree decl;
886
887   decl = build_decl (input_location, TYPE_DECL, name, type);
888   DECL_ARTIFICIAL (decl) = 1;
889   /* There are other implicit type declarations, like the one *within*
890      a class that allows you to write `S::S'.  We must distinguish
891      amongst these.  */
892   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
893   TYPE_NAME (type) = decl;
894   TYPE_STUB_DECL (type) = decl;
895
896   return decl;
897 }
898
899 /* Remember a local name for name-mangling purposes.  */
900
901 static void
902 push_local_name (tree decl)
903 {
904   size_t i, nelts;
905   tree t, name;
906
907   timevar_start (TV_NAME_LOOKUP);
908
909   name = DECL_NAME (decl);
910
911   nelts = VEC_length (tree, local_names);
912   for (i = 0; i < nelts; i++)
913     {
914       t = VEC_index (tree, local_names, i);
915       if (DECL_NAME (t) == name)
916         {
917           if (!DECL_LANG_SPECIFIC (decl))
918             retrofit_lang_decl (decl);
919           DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
920           if (DECL_LANG_SPECIFIC (t))
921             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
922           else
923             DECL_DISCRIMINATOR (decl) = 1;
924
925           VEC_replace (tree, local_names, i, decl);
926           timevar_stop (TV_NAME_LOOKUP);
927           return;
928         }
929     }
930
931   VEC_safe_push (tree, gc, local_names, decl);
932   timevar_stop (TV_NAME_LOOKUP);
933 }
934 \f
935 /* Subroutine of duplicate_decls: return truthvalue of whether
936    or not types of these decls match.
937
938    For C++, we must compare the parameter list so that `int' can match
939    `int&' in a parameter position, but `int&' is not confused with
940    `const int&'.  */
941
942 int
943 decls_match (tree newdecl, tree olddecl)
944 {
945   int types_match;
946
947   if (newdecl == olddecl)
948     return 1;
949
950   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
951     /* If the two DECLs are not even the same kind of thing, we're not
952        interested in their types.  */
953     return 0;
954
955   if (TREE_CODE (newdecl) == FUNCTION_DECL)
956     {
957       tree f1 = TREE_TYPE (newdecl);
958       tree f2 = TREE_TYPE (olddecl);
959       tree p1 = TYPE_ARG_TYPES (f1);
960       tree p2 = TYPE_ARG_TYPES (f2);
961
962       /* Specializations of different templates are different functions
963          even if they have the same type.  */
964       tree t1 = (DECL_USE_TEMPLATE (newdecl)
965                  ? DECL_TI_TEMPLATE (newdecl)
966                  : NULL_TREE);
967       tree t2 = (DECL_USE_TEMPLATE (olddecl)
968                  ? DECL_TI_TEMPLATE (olddecl)
969                  : NULL_TREE);
970       if (t1 != t2)
971         return 0;
972
973       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
974           && ! (DECL_EXTERN_C_P (newdecl)
975                 && DECL_EXTERN_C_P (olddecl)))
976         return 0;
977
978 #ifdef NO_IMPLICIT_EXTERN_C
979       /* A new declaration doesn't match a built-in one unless it
980          is also extern "C".  */
981       if (DECL_IS_BUILTIN (olddecl)
982           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
983         return 0;
984 #endif
985
986       if (TREE_CODE (f1) != TREE_CODE (f2))
987         return 0;
988
989       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
990         {
991           if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
992               && (DECL_BUILT_IN (olddecl)
993 #ifndef NO_IMPLICIT_EXTERN_C
994                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
995                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
996 #endif
997               ))
998             {
999               types_match = self_promoting_args_p (p1);
1000               if (p1 == void_list_node)
1001                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1002             }
1003 #ifndef NO_IMPLICIT_EXTERN_C
1004           else if (!prototype_p (f1)
1005                    && (DECL_EXTERN_C_P (olddecl)
1006                        && DECL_IN_SYSTEM_HEADER (olddecl)
1007                        && !DECL_CLASS_SCOPE_P (olddecl))
1008                    && (DECL_EXTERN_C_P (newdecl)
1009                        && DECL_IN_SYSTEM_HEADER (newdecl)
1010                        && !DECL_CLASS_SCOPE_P (newdecl)))
1011             {
1012               types_match = self_promoting_args_p (p2);
1013               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1014             }
1015 #endif
1016           else
1017             types_match =
1018               compparms (p1, p2)
1019               && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1020                   || comp_type_attributes (TREE_TYPE (newdecl),
1021                                            TREE_TYPE (olddecl)) != 0);
1022         }
1023       else
1024         types_match = 0;
1025     }
1026   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1027     {
1028       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1029           != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1030         return 0;
1031
1032       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1033                                 DECL_TEMPLATE_PARMS (olddecl)))
1034         return 0;
1035
1036       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1037         types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1038                                    TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1039       else
1040         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1041                                    DECL_TEMPLATE_RESULT (newdecl));
1042     }
1043   else
1044     {
1045       /* Need to check scope for variable declaration (VAR_DECL).
1046          For typedef (TYPE_DECL), scope is ignored.  */
1047       if (TREE_CODE (newdecl) == VAR_DECL
1048           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1049           /* [dcl.link]
1050              Two declarations for an object with C language linkage
1051              with the same name (ignoring the namespace that qualify
1052              it) that appear in different namespace scopes refer to
1053              the same object.  */
1054           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1055         return 0;
1056
1057       if (TREE_TYPE (newdecl) == error_mark_node)
1058         types_match = TREE_TYPE (olddecl) == error_mark_node;
1059       else if (TREE_TYPE (olddecl) == NULL_TREE)
1060         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1061       else if (TREE_TYPE (newdecl) == NULL_TREE)
1062         types_match = 0;
1063       else
1064         types_match = comptypes (TREE_TYPE (newdecl),
1065                                  TREE_TYPE (olddecl),
1066                                  COMPARE_REDECLARATION);
1067     }
1068
1069   return types_match;
1070 }
1071
1072 /* If NEWDECL is `static' and an `extern' was seen previously,
1073    warn about it.  OLDDECL is the previous declaration.
1074
1075    Note that this does not apply to the C++ case of declaring
1076    a variable `extern const' and then later `const'.
1077
1078    Don't complain about built-in functions, since they are beyond
1079    the user's control.  */
1080
1081 void
1082 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1083 {
1084   if (TREE_CODE (newdecl) == TYPE_DECL
1085       || TREE_CODE (newdecl) == TEMPLATE_DECL
1086       || TREE_CODE (newdecl) == CONST_DECL
1087       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1088     return;
1089
1090   /* Don't get confused by static member functions; that's a different
1091      use of `static'.  */
1092   if (TREE_CODE (newdecl) == FUNCTION_DECL
1093       && DECL_STATIC_FUNCTION_P (newdecl))
1094     return;
1095
1096   /* If the old declaration was `static', or the new one isn't, then
1097      everything is OK.  */
1098   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1099     return;
1100
1101   /* It's OK to declare a builtin function as `static'.  */
1102   if (TREE_CODE (olddecl) == FUNCTION_DECL
1103       && DECL_ARTIFICIAL (olddecl))
1104     return;
1105
1106   permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1107   permerror (input_location, "previous declaration of %q+D", olddecl);
1108 }
1109
1110 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1111    function templates.  If their exception specifications do not
1112    match, issue a diagnostic.  */
1113
1114 static void
1115 check_redeclaration_exception_specification (tree new_decl,
1116                                              tree old_decl)
1117 {
1118   tree new_type;
1119   tree old_type;
1120   tree new_exceptions;
1121   tree old_exceptions;
1122
1123   new_type = TREE_TYPE (new_decl);
1124   new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1125   old_type = TREE_TYPE (old_decl);
1126   old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1127
1128   /* [except.spec]
1129
1130      If any declaration of a function has an exception-specification,
1131      all declarations, including the definition and an explicit
1132      specialization, of that function shall have an
1133      exception-specification with the same set of type-ids.  */
1134   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1135       && ! DECL_IS_BUILTIN (old_decl)
1136       && flag_exceptions
1137       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1138     {
1139       error ("declaration of %qF has a different exception specifier",
1140              new_decl);
1141       error ("from previous declaration %q+F", old_decl);
1142     }
1143 }
1144
1145 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1146    Otherwise issue diagnostics.  */
1147
1148 static bool
1149 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1150 {
1151   old_decl = STRIP_TEMPLATE (old_decl);
1152   new_decl = STRIP_TEMPLATE (new_decl);
1153   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1154       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1155     return true;
1156   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1157       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1158     return true;
1159   if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1160     {
1161       /* Hide a built-in declaration.  */
1162       DECL_DECLARED_CONSTEXPR_P (old_decl)
1163         = DECL_DECLARED_CONSTEXPR_P (new_decl);
1164       return true;
1165     }
1166   error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1167   error ("from previous declaration %q+D", old_decl);
1168   return false;
1169 }
1170
1171 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1172                           && lookup_attribute ("gnu_inline",            \
1173                                                DECL_ATTRIBUTES (fn)))
1174
1175 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1176    If the redeclaration is invalid, a diagnostic is issued, and the
1177    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1178
1179    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1180    returned.
1181
1182    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1183
1184 tree
1185 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1186 {
1187   unsigned olddecl_uid = DECL_UID (olddecl);
1188   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1189   int new_defines_function = 0;
1190   tree new_template_info;
1191
1192   if (newdecl == olddecl)
1193     return olddecl;
1194
1195   types_match = decls_match (newdecl, olddecl);
1196
1197   /* If either the type of the new decl or the type of the old decl is an
1198      error_mark_node, then that implies that we have already issued an
1199      error (earlier) for some bogus type specification, and in that case,
1200      it is rather pointless to harass the user with yet more error message
1201      about the same declaration, so just pretend the types match here.  */
1202   if (TREE_TYPE (newdecl) == error_mark_node
1203       || TREE_TYPE (olddecl) == error_mark_node)
1204     return error_mark_node;
1205
1206   if (DECL_P (olddecl)
1207       && TREE_CODE (newdecl) == FUNCTION_DECL
1208       && TREE_CODE (olddecl) == FUNCTION_DECL
1209       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1210     {
1211       if (DECL_DECLARED_INLINE_P (newdecl)
1212           && DECL_UNINLINABLE (newdecl)
1213           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1214         /* Already warned elsewhere.  */;
1215       else if (DECL_DECLARED_INLINE_P (olddecl)
1216                && DECL_UNINLINABLE (olddecl)
1217                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1218         /* Already warned.  */;
1219       else if (DECL_DECLARED_INLINE_P (newdecl)
1220                && DECL_UNINLINABLE (olddecl)
1221                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1222         {
1223           warning (OPT_Wattributes, "function %q+D redeclared as inline",
1224                    newdecl);
1225           warning (OPT_Wattributes, "previous declaration of %q+D "
1226                    "with attribute noinline", olddecl);
1227         }
1228       else if (DECL_DECLARED_INLINE_P (olddecl)
1229                && DECL_UNINLINABLE (newdecl)
1230                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1231         {
1232           warning (OPT_Wattributes, "function %q+D redeclared with "
1233                    "attribute noinline", newdecl);
1234           warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1235                    olddecl);
1236         }
1237     }
1238
1239   /* Check for redeclaration and other discrepancies.  */
1240   if (TREE_CODE (olddecl) == FUNCTION_DECL
1241       && DECL_ARTIFICIAL (olddecl))
1242     {
1243       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1244       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1245         {
1246           /* Avoid warnings redeclaring built-ins which have not been
1247              explicitly declared.  */
1248           if (DECL_ANTICIPATED (olddecl))
1249             return NULL_TREE;
1250
1251           /* If you declare a built-in or predefined function name as static,
1252              the old definition is overridden, but optionally warn this was a
1253              bad choice of name.  */
1254           if (! TREE_PUBLIC (newdecl))
1255             {
1256               warning (OPT_Wshadow, 
1257                        DECL_BUILT_IN (olddecl)
1258                        ? G_("shadowing built-in function %q#D")
1259                        : G_("shadowing library function %q#D"), olddecl);
1260               /* Discard the old built-in function.  */
1261               return NULL_TREE;
1262             }
1263           /* If the built-in is not ansi, then programs can override
1264              it even globally without an error.  */
1265           else if (! DECL_BUILT_IN (olddecl))
1266             warning (0, "library function %q#D redeclared as non-function %q#D",
1267                      olddecl, newdecl);
1268           else
1269             {
1270               error ("declaration of %q#D", newdecl);
1271               error ("conflicts with built-in declaration %q#D",
1272                      olddecl);
1273             }
1274           return NULL_TREE;
1275         }
1276       else if (!types_match)
1277         {
1278           /* Avoid warnings redeclaring built-ins which have not been
1279              explicitly declared.  */
1280           if (DECL_ANTICIPATED (olddecl))
1281             {
1282               /* Deal with fileptr_type_node.  FILE type is not known
1283                  at the time we create the builtins.  */
1284               tree t1, t2;
1285
1286               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1287                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1288                    t1 || t2;
1289                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1290                 if (!t1 || !t2)
1291                   break;
1292                 else if (TREE_VALUE (t2) == fileptr_type_node)
1293                   {
1294                     tree t = TREE_VALUE (t1);
1295
1296                     if (TREE_CODE (t) == POINTER_TYPE
1297                         && TYPE_NAME (TREE_TYPE (t))
1298                         && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1299                            == get_identifier ("FILE")
1300                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1301                       {
1302                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1303
1304                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1305                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1306                         types_match = decls_match (newdecl, olddecl);
1307                         if (types_match)
1308                           return duplicate_decls (newdecl, olddecl,
1309                                                   newdecl_is_friend);
1310                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1311                       }
1312                   }
1313                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1314                   break;
1315             }
1316           else if ((DECL_EXTERN_C_P (newdecl)
1317                     && DECL_EXTERN_C_P (olddecl))
1318                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1319                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1320             {
1321               /* A near match; override the builtin.  */
1322
1323               if (TREE_PUBLIC (newdecl))
1324                 {
1325                   warning (0, "new declaration %q#D", newdecl);
1326                   warning (0, "ambiguates built-in declaration %q#D",
1327                            olddecl);
1328                 }
1329               else
1330                 warning (OPT_Wshadow, 
1331                          DECL_BUILT_IN (olddecl)
1332                          ? G_("shadowing built-in function %q#D")
1333                          : G_("shadowing library function %q#D"), olddecl);
1334             }
1335           else
1336             /* Discard the old built-in function.  */
1337             return NULL_TREE;
1338
1339           /* Replace the old RTL to avoid problems with inlining.  */
1340           COPY_DECL_RTL (newdecl, olddecl);
1341         }
1342       /* Even if the types match, prefer the new declarations type for
1343          built-ins which have not been explicitly declared, for
1344          exception lists, etc...  */
1345       else if (DECL_IS_BUILTIN (olddecl))
1346         {
1347           tree type = TREE_TYPE (newdecl);
1348           tree attribs = (*targetm.merge_type_attributes)
1349             (TREE_TYPE (olddecl), type);
1350
1351           type = cp_build_type_attribute_variant (type, attribs);
1352           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1353         }
1354
1355       /* If a function is explicitly declared "throw ()", propagate that to
1356          the corresponding builtin.  */
1357       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1358           && DECL_ANTICIPATED (olddecl)
1359           && TREE_NOTHROW (newdecl)
1360           && !TREE_NOTHROW (olddecl))
1361         {
1362           enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1363           tree tmpdecl = builtin_decl_explicit (fncode);
1364           if (tmpdecl && tmpdecl != olddecl && types_match)
1365             TREE_NOTHROW (tmpdecl)  = 1;
1366         }
1367
1368       /* Whether or not the builtin can throw exceptions has no
1369          bearing on this declarator.  */
1370       TREE_NOTHROW (olddecl) = 0;
1371
1372       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1373         {
1374           /* If a builtin function is redeclared as `static', merge
1375              the declarations, but make the original one static.  */
1376           DECL_THIS_STATIC (olddecl) = 1;
1377           TREE_PUBLIC (olddecl) = 0;
1378
1379           /* Make the old declaration consistent with the new one so
1380              that all remnants of the builtin-ness of this function
1381              will be banished.  */
1382           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1383           COPY_DECL_RTL (newdecl, olddecl);
1384         }
1385     }
1386   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1387     {
1388       /* C++ Standard, 3.3, clause 4:
1389          "[Note: a namespace name or a class template name must be unique
1390          in its declarative region (7.3.2, clause 14). ]"  */
1391       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1392           && TREE_CODE (newdecl) != NAMESPACE_DECL
1393           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1394               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1395           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1396               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1397         {
1398           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1399                && TREE_CODE (newdecl) != TYPE_DECL)
1400               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1401                   && TREE_CODE (olddecl) != TYPE_DECL))
1402             {
1403               /* We do nothing special here, because C++ does such nasty
1404                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1405                  get shadowed, and know that if we need to find a TYPE_DECL
1406                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1407                  slot of the identifier.  */
1408               return NULL_TREE;
1409             }
1410             
1411             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1412                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1413                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1414                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1415               return NULL_TREE;
1416         }
1417
1418       error ("%q#D redeclared as different kind of symbol", newdecl);
1419       if (TREE_CODE (olddecl) == TREE_LIST)
1420         olddecl = TREE_VALUE (olddecl);
1421       error ("previous declaration of %q+#D", olddecl);
1422
1423       return error_mark_node;
1424     }
1425   else if (!types_match)
1426     {
1427       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1428         /* These are certainly not duplicate declarations; they're
1429            from different scopes.  */
1430         return NULL_TREE;
1431
1432       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1433         {
1434           /* The name of a class template may not be declared to refer to
1435              any other template, class, function, object, namespace, value,
1436              or type in the same scope.  */
1437           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1438               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1439             {
1440               error ("declaration of template %q#D", newdecl);
1441               error ("conflicts with previous declaration %q+#D", olddecl);
1442             }
1443           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1444                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1445                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1446                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1447                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1448                                            DECL_TEMPLATE_PARMS (olddecl))
1449                    /* Template functions can be disambiguated by
1450                       return type.  */
1451                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1452                                    TREE_TYPE (TREE_TYPE (olddecl))))
1453             {
1454               error ("new declaration %q#D", newdecl);
1455               error ("ambiguates old declaration %q+#D", olddecl);
1456             }
1457           return NULL_TREE;
1458         }
1459       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1460         {
1461           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1462             {
1463               error ("declaration of C function %q#D conflicts with",
1464                      newdecl);
1465               error ("previous declaration %q+#D here", olddecl);
1466               return NULL_TREE;
1467             }
1468           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1469                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1470             {
1471               error ("new declaration %q#D", newdecl);
1472               error ("ambiguates old declaration %q+#D", olddecl);
1473               return error_mark_node;
1474             }
1475           else
1476             return NULL_TREE;
1477         }
1478       else
1479         {
1480           error ("conflicting declaration %q#D", newdecl);
1481           error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1482           return error_mark_node;
1483         }
1484     }
1485   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1486             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1487                  && (!DECL_TEMPLATE_INFO (newdecl)
1488                      || (DECL_TI_TEMPLATE (newdecl)
1489                          != DECL_TI_TEMPLATE (olddecl))))
1490                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1491                     && (!DECL_TEMPLATE_INFO (olddecl)
1492                         || (DECL_TI_TEMPLATE (olddecl)
1493                             != DECL_TI_TEMPLATE (newdecl))))))
1494     /* It's OK to have a template specialization and a non-template
1495        with the same type, or to have specializations of two
1496        different templates with the same type.  Note that if one is a
1497        specialization, and the other is an instantiation of the same
1498        template, that we do not exit at this point.  That situation
1499        can occur if we instantiate a template class, and then
1500        specialize one of its methods.  This situation is valid, but
1501        the declarations must be merged in the usual way.  */
1502     return NULL_TREE;
1503   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1504            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1505                 && !DECL_USE_TEMPLATE (newdecl))
1506                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1507                    && !DECL_USE_TEMPLATE (olddecl))))
1508     /* One of the declarations is a template instantiation, and the
1509        other is not a template at all.  That's OK.  */
1510     return NULL_TREE;
1511   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1512     {
1513       /* In [namespace.alias] we have:
1514
1515            In a declarative region, a namespace-alias-definition can be
1516            used to redefine a namespace-alias declared in that declarative
1517            region to refer only to the namespace to which it already
1518            refers.
1519
1520          Therefore, if we encounter a second alias directive for the same
1521          alias, we can just ignore the second directive.  */
1522       if (DECL_NAMESPACE_ALIAS (newdecl)
1523           && (DECL_NAMESPACE_ALIAS (newdecl)
1524               == DECL_NAMESPACE_ALIAS (olddecl)))
1525         return olddecl;
1526       /* [namespace.alias]
1527
1528          A namespace-name or namespace-alias shall not be declared as
1529          the name of any other entity in the same declarative region.
1530          A namespace-name defined at global scope shall not be
1531          declared as the name of any other entity in any global scope
1532          of the program.  */
1533       error ("declaration of namespace %qD conflicts with", newdecl);
1534       error ("previous declaration of namespace %q+D here", olddecl);
1535       return error_mark_node;
1536     }
1537   else
1538     {
1539       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1540       if (errmsg)
1541         {
1542           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1543           if (DECL_NAME (olddecl) != NULL_TREE)
1544             error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1545                          ? "%q+#D previously defined here"
1546                          : "%q+#D previously declared here", olddecl);
1547           return error_mark_node;
1548         }
1549       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1550                && DECL_INITIAL (olddecl) != NULL_TREE
1551                && !prototype_p (TREE_TYPE (olddecl))
1552                && prototype_p (TREE_TYPE (newdecl)))
1553         {
1554           /* Prototype decl follows defn w/o prototype.  */
1555           warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1556           warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1557                       "follows non-prototype definition here");
1558         }
1559       else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1560                 || TREE_CODE (olddecl) == VAR_DECL)
1561                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1562         {
1563           /* [dcl.link]
1564              If two declarations of the same function or object
1565              specify different linkage-specifications ..., the program
1566              is ill-formed.... Except for functions with C++ linkage,
1567              a function declaration without a linkage specification
1568              shall not precede the first linkage specification for
1569              that function.  A function can be declared without a
1570              linkage specification after an explicit linkage
1571              specification has been seen; the linkage explicitly
1572              specified in the earlier declaration is not affected by
1573              such a function declaration.
1574
1575              DR 563 raises the question why the restrictions on
1576              functions should not also apply to objects.  Older
1577              versions of G++ silently ignore the linkage-specification
1578              for this example:
1579
1580                namespace N { 
1581                  extern int i;
1582                  extern "C" int i;
1583                }
1584
1585              which is clearly wrong.  Therefore, we now treat objects
1586              like functions.  */
1587           if (current_lang_depth () == 0)
1588             {
1589               /* There is no explicit linkage-specification, so we use
1590                  the linkage from the previous declaration.  */
1591               if (!DECL_LANG_SPECIFIC (newdecl))
1592                 retrofit_lang_decl (newdecl);
1593               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1594             }
1595           else
1596             {
1597               error ("previous declaration of %q+#D with %qL linkage",
1598                      olddecl, DECL_LANGUAGE (olddecl));
1599               error ("conflicts with new declaration with %qL linkage",
1600                      DECL_LANGUAGE (newdecl));
1601             }
1602         }
1603
1604       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1605         ;
1606       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1607         {
1608           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1609           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1610           int i = 1;
1611
1612           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1613             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1614
1615           for (; t1 && t1 != void_list_node;
1616                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1617             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1618               {
1619                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1620                                            TREE_PURPOSE (t2)))
1621                   {
1622                     permerror (input_location, "default argument given for parameter %d of %q#D",
1623                                i, newdecl);
1624                     permerror (input_location, "after previous specification in %q+#D", olddecl);
1625                   }
1626                 else
1627                   {
1628                     error ("default argument given for parameter %d of %q#D",
1629                            i, newdecl);
1630                     error ("after previous specification in %q+#D",
1631                                  olddecl);
1632                   }
1633               }
1634         }
1635     }
1636
1637   /* Do not merge an implicit typedef with an explicit one.  In:
1638
1639        class A;
1640        ...
1641        typedef class A A __attribute__ ((foo));
1642
1643      the attribute should apply only to the typedef.  */
1644   if (TREE_CODE (olddecl) == TYPE_DECL
1645       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1646           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1647     return NULL_TREE;
1648
1649   /* If new decl is `static' and an `extern' was seen previously,
1650      warn about it.  */
1651   warn_extern_redeclared_static (newdecl, olddecl);
1652
1653   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1654     return error_mark_node;
1655
1656   /* We have committed to returning 1 at this point.  */
1657   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1658     {
1659       /* Now that functions must hold information normally held
1660          by field decls, there is extra work to do so that
1661          declaration information does not get destroyed during
1662          definition.  */
1663       if (DECL_VINDEX (olddecl))
1664         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1665       if (DECL_CONTEXT (olddecl))
1666         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1667       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1668       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1669       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1670       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1671       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1672       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1673       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1674         SET_OVERLOADED_OPERATOR_CODE
1675           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1676       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1677
1678       /* Optionally warn about more than one declaration for the same
1679          name, but don't warn about a function declaration followed by a
1680          definition.  */
1681       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1682           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1683           /* Don't warn about extern decl followed by definition.  */
1684           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1685           /* Don't warn about friends, let add_friend take care of it.  */
1686           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1687         {
1688           warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1689           warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1690         }
1691
1692       if (DECL_DELETED_FN (newdecl))
1693         {
1694           error ("deleted definition of %qD", newdecl);
1695           error ("after previous declaration %q+D", olddecl);
1696         }
1697       DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1698     }
1699
1700   /* Deal with C++: must preserve virtual function table size.  */
1701   if (TREE_CODE (olddecl) == TYPE_DECL)
1702     {
1703       tree newtype = TREE_TYPE (newdecl);
1704       tree oldtype = TREE_TYPE (olddecl);
1705
1706       if (newtype != error_mark_node && oldtype != error_mark_node
1707           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1708         CLASSTYPE_FRIEND_CLASSES (newtype)
1709           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1710
1711       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1712     }
1713
1714   /* Copy all the DECL_... slots specified in the new decl
1715      except for any that we copy here from the old type.  */
1716   DECL_ATTRIBUTES (newdecl)
1717     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1718
1719   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1720     {
1721       tree old_result;
1722       tree new_result;
1723       old_result = DECL_TEMPLATE_RESULT (olddecl);
1724       new_result = DECL_TEMPLATE_RESULT (newdecl);
1725       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1726       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1727         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1728                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1729
1730       DECL_ATTRIBUTES (old_result)
1731         = (*targetm.merge_decl_attributes) (old_result, new_result);
1732
1733       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1734         {
1735           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1736               && DECL_INITIAL (new_result))
1737             {
1738               if (DECL_INITIAL (old_result))
1739                 DECL_UNINLINABLE (old_result) = 1;
1740               else
1741                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1742               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1743               DECL_NOT_REALLY_EXTERN (old_result)
1744                 = DECL_NOT_REALLY_EXTERN (new_result);
1745               DECL_INTERFACE_KNOWN (old_result)
1746                 = DECL_INTERFACE_KNOWN (new_result);
1747               DECL_DECLARED_INLINE_P (old_result)
1748                 = DECL_DECLARED_INLINE_P (new_result);
1749               DECL_DISREGARD_INLINE_LIMITS (old_result)
1750                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1751
1752             }
1753           else
1754             {
1755               DECL_DECLARED_INLINE_P (old_result)
1756                 |= DECL_DECLARED_INLINE_P (new_result);
1757               DECL_DISREGARD_INLINE_LIMITS (old_result)
1758                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1759               check_redeclaration_exception_specification (newdecl, olddecl);
1760             }
1761         }
1762
1763       /* If the new declaration is a definition, update the file and
1764          line information on the declaration, and also make
1765          the old declaration the same definition.  */
1766       if (DECL_INITIAL (new_result) != NULL_TREE)
1767         {
1768           DECL_SOURCE_LOCATION (olddecl)
1769             = DECL_SOURCE_LOCATION (old_result)
1770             = DECL_SOURCE_LOCATION (newdecl);
1771           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1772           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1773             {
1774               tree parm;
1775               DECL_ARGUMENTS (old_result)
1776                 = DECL_ARGUMENTS (new_result);
1777               for (parm = DECL_ARGUMENTS (old_result); parm;
1778                    parm = DECL_CHAIN (parm))
1779                 DECL_CONTEXT (parm) = old_result;
1780             }
1781         }
1782
1783       return olddecl;
1784     }
1785
1786   if (types_match)
1787     {
1788       /* Automatically handles default parameters.  */
1789       tree oldtype = TREE_TYPE (olddecl);
1790       tree newtype;
1791
1792       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1793         maybe_instantiate_noexcept (olddecl);
1794
1795       /* Merge the data types specified in the two decls.  */
1796       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1797
1798       /* If merge_types produces a non-typedef type, just use the old type.  */
1799       if (TREE_CODE (newdecl) == TYPE_DECL
1800           && newtype == DECL_ORIGINAL_TYPE (newdecl))
1801         newtype = oldtype;
1802
1803       if (TREE_CODE (newdecl) == VAR_DECL)
1804         {
1805           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1806           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1807           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1808             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1809           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1810             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1811
1812           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1813           if (DECL_LANG_SPECIFIC (olddecl)
1814               && CP_DECL_THREADPRIVATE_P (olddecl))
1815             {
1816               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1817               if (!DECL_LANG_SPECIFIC (newdecl))
1818                 retrofit_lang_decl (newdecl);
1819
1820               DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1821               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1822             }
1823         }
1824
1825       /* Do this after calling `merge_types' so that default
1826          parameters don't confuse us.  */
1827       else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1828         check_redeclaration_exception_specification (newdecl, olddecl);
1829       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1830
1831       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1832         check_default_args (newdecl);
1833
1834       /* Lay the type out, unless already done.  */
1835       if (! same_type_p (newtype, oldtype)
1836           && TREE_TYPE (newdecl) != error_mark_node
1837           && !(processing_template_decl && uses_template_parms (newdecl)))
1838         layout_type (TREE_TYPE (newdecl));
1839
1840       if ((TREE_CODE (newdecl) == VAR_DECL
1841            || TREE_CODE (newdecl) == PARM_DECL
1842            || TREE_CODE (newdecl) == RESULT_DECL
1843            || TREE_CODE (newdecl) == FIELD_DECL
1844            || TREE_CODE (newdecl) == TYPE_DECL)
1845           && !(processing_template_decl && uses_template_parms (newdecl)))
1846         layout_decl (newdecl, 0);
1847
1848       /* Merge the type qualifiers.  */
1849       if (TREE_READONLY (newdecl))
1850         TREE_READONLY (olddecl) = 1;
1851       if (TREE_THIS_VOLATILE (newdecl))
1852         TREE_THIS_VOLATILE (olddecl) = 1;
1853       if (TREE_NOTHROW (newdecl))
1854         TREE_NOTHROW (olddecl) = 1;
1855
1856       /* Merge deprecatedness.  */
1857       if (TREE_DEPRECATED (newdecl))
1858         TREE_DEPRECATED (olddecl) = 1;
1859
1860       /* Preserve function specific target and optimization options */
1861       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1862         {
1863           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1864               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1865             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1866               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1867
1868           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1869               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1870             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1871               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1872         }
1873
1874       /* Merge the initialization information.  */
1875       if (DECL_INITIAL (newdecl) == NULL_TREE
1876           && DECL_INITIAL (olddecl) != NULL_TREE)
1877         {
1878           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1879           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1880           if (TREE_CODE (newdecl) == FUNCTION_DECL)
1881             {
1882               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1883               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1884             }
1885         }
1886
1887       /* Merge the section attribute.
1888          We want to issue an error if the sections conflict but that must be
1889          done later in decl_attributes since we are called before attributes
1890          are assigned.  */
1891       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1892         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1893
1894       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1895         {
1896           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1897             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1898           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1899           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1900           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1901           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1902           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1903           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1904           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1905           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
1906             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1907           /* Keep the old RTL.  */
1908           COPY_DECL_RTL (olddecl, newdecl);
1909         }
1910       else if (TREE_CODE (newdecl) == VAR_DECL
1911                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1912         {
1913           /* Keep the old RTL.  We cannot keep the old RTL if the old
1914              declaration was for an incomplete object and the new
1915              declaration is not since many attributes of the RTL will
1916              change.  */
1917           COPY_DECL_RTL (olddecl, newdecl);
1918         }
1919     }
1920   /* If cannot merge, then use the new type and qualifiers,
1921      and don't preserve the old rtl.  */
1922   else
1923     {
1924       /* Clean out any memory we had of the old declaration.  */
1925       tree oldstatic = value_member (olddecl, static_aggregates);
1926       if (oldstatic)
1927         TREE_VALUE (oldstatic) = error_mark_node;
1928
1929       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1930       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1931       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1932       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1933     }
1934
1935   /* Merge the storage class information.  */
1936   merge_weak (newdecl, olddecl);
1937
1938   if (DECL_ONE_ONLY (olddecl))
1939     DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1940
1941   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1942   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1943   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1944   if (! DECL_EXTERNAL (olddecl))
1945     DECL_EXTERNAL (newdecl) = 0;
1946
1947   new_template_info = NULL_TREE;
1948   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1949     {
1950       bool new_redefines_gnu_inline = false;
1951
1952       if (new_defines_function
1953           && ((DECL_INTERFACE_KNOWN (olddecl)
1954                && TREE_CODE (olddecl) == FUNCTION_DECL)
1955               || (TREE_CODE (olddecl) == TEMPLATE_DECL
1956                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1957                       == FUNCTION_DECL))))
1958         {
1959           tree fn = olddecl;
1960
1961           if (TREE_CODE (fn) == TEMPLATE_DECL)
1962             fn = DECL_TEMPLATE_RESULT (olddecl);
1963
1964           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1965         }
1966
1967       if (!new_redefines_gnu_inline)
1968         {
1969           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1970           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1971           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1972         }
1973       DECL_TEMPLATE_INSTANTIATED (newdecl)
1974         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1975       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1976
1977       /* If the OLDDECL is an instantiation and/or specialization,
1978          then the NEWDECL must be too.  But, it may not yet be marked
1979          as such if the caller has created NEWDECL, but has not yet
1980          figured out that it is a redeclaration.  */
1981       if (!DECL_USE_TEMPLATE (newdecl))
1982         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1983
1984       /* Don't really know how much of the language-specific
1985          values we should copy from old to new.  */
1986       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1987       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1988       DECL_INITIALIZED_IN_CLASS_P (newdecl)
1989         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1990
1991       if (LANG_DECL_HAS_MIN (newdecl))
1992         {
1993           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1994             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1995           if (DECL_TEMPLATE_INFO (newdecl))
1996             new_template_info = DECL_TEMPLATE_INFO (newdecl);
1997           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1998         }
1999       /* Only functions have these fields.  */
2000       if (TREE_CODE (newdecl) == FUNCTION_DECL
2001           || DECL_FUNCTION_TEMPLATE_P (newdecl))
2002         {
2003           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2004           olddecl_friend = DECL_FRIEND_P (olddecl);
2005           hidden_friend = (DECL_ANTICIPATED (olddecl)
2006                            && DECL_HIDDEN_FRIEND_P (olddecl)
2007                            && newdecl_is_friend);
2008           DECL_BEFRIENDING_CLASSES (newdecl)
2009             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2010                        DECL_BEFRIENDING_CLASSES (olddecl));
2011           /* DECL_THUNKS is only valid for virtual functions,
2012              otherwise it is a DECL_FRIEND_CONTEXT.  */
2013           if (DECL_VIRTUAL_P (newdecl))
2014             DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2015         }
2016       /* Only variables have this field.  */
2017       else if (TREE_CODE (newdecl) == VAR_DECL
2018                && VAR_HAD_UNKNOWN_BOUND (olddecl))
2019         SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2020     }
2021
2022   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2023     {
2024       tree parm;
2025
2026       /* Merge parameter attributes. */
2027       tree oldarg, newarg;
2028       for (oldarg = DECL_ARGUMENTS(olddecl), 
2029                newarg = DECL_ARGUMENTS(newdecl);
2030            oldarg && newarg;
2031            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2032           DECL_ATTRIBUTES (newarg)
2033               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2034           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2035       }
2036       
2037       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2038           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2039         {
2040           /* If newdecl is not a specialization, then it is not a
2041              template-related function at all.  And that means that we
2042              should have exited above, returning 0.  */
2043           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2044
2045           if (DECL_ODR_USED (olddecl))
2046             /* From [temp.expl.spec]:
2047
2048                If a template, a member template or the member of a class
2049                template is explicitly specialized then that
2050                specialization shall be declared before the first use of
2051                that specialization that would cause an implicit
2052                instantiation to take place, in every translation unit in
2053                which such a use occurs.  */
2054             error ("explicit specialization of %qD after first use",
2055                       olddecl);
2056
2057           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2058
2059           /* Don't propagate visibility from the template to the
2060              specialization here.  We'll do that in determine_visibility if
2061              appropriate.  */
2062           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2063
2064           /* [temp.expl.spec/14] We don't inline explicit specialization
2065              just because the primary template says so.  */
2066
2067           /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2068              the always_inline attribute.  */
2069           if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2070               && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2071             {
2072               if (DECL_DECLARED_INLINE_P (newdecl))
2073                 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2074               else
2075                 DECL_ATTRIBUTES (newdecl)
2076                   = remove_attribute ("always_inline",
2077                                       DECL_ATTRIBUTES (newdecl));
2078             }
2079         }
2080       else if (new_defines_function && DECL_INITIAL (olddecl))
2081         {
2082           /* Never inline re-defined extern inline functions.
2083              FIXME: this could be better handled by keeping both
2084              function as separate declarations.  */
2085           DECL_UNINLINABLE (newdecl) = 1;
2086         }
2087       else
2088         {
2089           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2090             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2091
2092           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2093
2094           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2095             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2096
2097           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2098             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2099             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2100                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2101         }
2102
2103       /* Preserve abstractness on cloned [cd]tors.  */
2104       DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2105
2106       /* Update newdecl's parms to point at olddecl.  */
2107       for (parm = DECL_ARGUMENTS (newdecl); parm;
2108            parm = DECL_CHAIN (parm))
2109         DECL_CONTEXT (parm) = olddecl;
2110
2111       if (! types_match)
2112         {
2113           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2114           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2115           COPY_DECL_RTL (newdecl, olddecl);
2116         }
2117       if (! types_match || new_defines_function)
2118         {
2119           /* These need to be copied so that the names are available.
2120              Note that if the types do match, we'll preserve inline
2121              info and other bits, but if not, we won't.  */
2122           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2123           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2124         }
2125       if (new_defines_function)
2126         /* If defining a function declared with other language
2127            linkage, use the previously declared language linkage.  */
2128         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2129       else if (types_match)
2130         {
2131           /* If redeclaring a builtin function, and not a definition,
2132              it stays built in.  */
2133           if (DECL_BUILT_IN (olddecl))
2134             {
2135               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2136               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2137               /* If we're keeping the built-in definition, keep the rtl,
2138                  regardless of declaration matches.  */
2139               COPY_DECL_RTL (olddecl, newdecl);
2140               if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2141                 {
2142                   enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2143                   switch (fncode)
2144                     {
2145                       /* If a compatible prototype of these builtin functions
2146                          is seen, assume the runtime implements it with the
2147                          expected semantics.  */
2148                     case BUILT_IN_STPCPY:
2149                       if (builtin_decl_explicit_p (fncode))
2150                         set_builtin_decl_implicit_p (fncode, true);
2151                       break;
2152                     default:
2153                       break;
2154                     }
2155                 }
2156             }
2157
2158           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2159           /* Don't clear out the arguments if we're just redeclaring a
2160              function.  */
2161           if (DECL_ARGUMENTS (olddecl))
2162             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2163         }
2164     }
2165   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2166     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2167
2168   /* Now preserve various other info from the definition.  */
2169   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2170   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2171   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2172   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2173
2174   /* Warn about conflicting visibility specifications.  */
2175   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2176       && DECL_VISIBILITY_SPECIFIED (newdecl)
2177       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2178     {
2179       warning_at (input_location, OPT_Wattributes,
2180                   "%q+D: visibility attribute ignored because it", newdecl);
2181       warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2182                   "conflicts with previous declaration here");
2183     }
2184   /* Choose the declaration which specified visibility.  */
2185   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2186     {
2187       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2188       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2189     }
2190   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2191      so keep this behavior.  */
2192   if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2193     {
2194       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2195       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2196     }
2197   /* Likewise for DECL_USER_ALIGN and DECL_PACKED.  */
2198   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2199   if (TREE_CODE (newdecl) == FIELD_DECL)
2200     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2201
2202   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2203      with that from NEWDECL below.  */
2204   if (DECL_LANG_SPECIFIC (olddecl))
2205     {
2206       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2207                   != DECL_LANG_SPECIFIC (newdecl));
2208       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2209     }
2210
2211   /* Merge the USED information.  */
2212   if (TREE_USED (olddecl))
2213     TREE_USED (newdecl) = 1;
2214   else if (TREE_USED (newdecl))
2215     TREE_USED (olddecl) = 1;
2216   if (TREE_CODE (newdecl) == VAR_DECL)
2217     {
2218       if (DECL_READ_P (olddecl))
2219         DECL_READ_P (newdecl) = 1;
2220       else if (DECL_READ_P (newdecl))
2221         DECL_READ_P (olddecl) = 1;
2222     }
2223   if (DECL_PRESERVE_P (olddecl))
2224     DECL_PRESERVE_P (newdecl) = 1;
2225   else if (DECL_PRESERVE_P (newdecl))
2226     DECL_PRESERVE_P (olddecl) = 1;
2227
2228   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2229     {
2230       int function_size;
2231
2232       function_size = sizeof (struct tree_decl_common);
2233
2234       memcpy ((char *) olddecl + sizeof (struct tree_common),
2235               (char *) newdecl + sizeof (struct tree_common),
2236               function_size - sizeof (struct tree_common));
2237
2238       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2239               (char *) newdecl + sizeof (struct tree_decl_common),
2240               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2241       if (new_template_info)
2242         /* If newdecl is a template instantiation, it is possible that
2243            the following sequence of events has occurred:
2244
2245            o A friend function was declared in a class template.  The
2246            class template was instantiated.
2247
2248            o The instantiation of the friend declaration was
2249            recorded on the instantiation list, and is newdecl.
2250
2251            o Later, however, instantiate_class_template called pushdecl
2252            on the newdecl to perform name injection.  But, pushdecl in
2253            turn called duplicate_decls when it discovered that another
2254            declaration of a global function with the same name already
2255            existed.
2256
2257            o Here, in duplicate_decls, we decided to clobber newdecl.
2258
2259            If we're going to do that, we'd better make sure that
2260            olddecl, and not newdecl, is on the list of
2261            instantiations so that if we try to do the instantiation
2262            again we won't get the clobbered declaration.  */
2263         reregister_specialization (newdecl,
2264                                    new_template_info,
2265                                    olddecl);
2266     }
2267   else
2268     {
2269       size_t size = tree_code_size (TREE_CODE (olddecl));
2270       memcpy ((char *) olddecl + sizeof (struct tree_common),
2271               (char *) newdecl + sizeof (struct tree_common),
2272               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2273       switch (TREE_CODE (olddecl))
2274         {
2275         case LABEL_DECL:
2276         case VAR_DECL:
2277         case RESULT_DECL:
2278         case PARM_DECL:
2279         case FIELD_DECL:
2280         case TYPE_DECL:
2281         case CONST_DECL:
2282           {
2283             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2284                     (char *) newdecl + sizeof (struct tree_decl_common),
2285                     size - sizeof (struct tree_decl_common)
2286                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2287           }
2288           break;
2289         default:
2290           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2291                   (char *) newdecl + sizeof (struct tree_decl_common),
2292                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2293                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2294           break;
2295         }
2296     }
2297   DECL_UID (olddecl) = olddecl_uid;
2298   if (olddecl_friend)
2299     DECL_FRIEND_P (olddecl) = 1;
2300   if (hidden_friend)
2301     {
2302       DECL_ANTICIPATED (olddecl) = 1;
2303       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2304     }
2305
2306   /* NEWDECL contains the merged attribute lists.
2307      Update OLDDECL to be the same.  */
2308   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2309
2310   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2311     so that encode_section_info has a chance to look at the new decl
2312     flags and attributes.  */
2313   if (DECL_RTL_SET_P (olddecl)
2314       && (TREE_CODE (olddecl) == FUNCTION_DECL
2315           || (TREE_CODE (olddecl) == VAR_DECL
2316               && TREE_STATIC (olddecl))))
2317     make_decl_rtl (olddecl);
2318
2319   /* The NEWDECL will no longer be needed.  Because every out-of-class
2320      declaration of a member results in a call to duplicate_decls,
2321      freeing these nodes represents in a significant savings.  */
2322   ggc_free (newdecl);
2323
2324   return olddecl;
2325 }
2326 \f
2327 /* Return zero if the declaration NEWDECL is valid
2328    when the declaration OLDDECL (assumed to be for the same name)
2329    has already been seen.
2330    Otherwise return an error message format string with a %s
2331    where the identifier should go.  */
2332
2333 static const char *
2334 redeclaration_error_message (tree newdecl, tree olddecl)
2335 {
2336   if (TREE_CODE (newdecl) == TYPE_DECL)
2337     {
2338       /* Because C++ can put things into name space for free,
2339          constructs like "typedef struct foo { ... } foo"
2340          would look like an erroneous redeclaration.  */
2341       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2342         return NULL;
2343       else
2344         return G_("redefinition of %q#D");
2345     }
2346   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2347     {
2348       /* If this is a pure function, its olddecl will actually be
2349          the original initialization to `0' (which we force to call
2350          abort()).  Don't complain about redefinition in this case.  */
2351       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2352           && DECL_INITIAL (olddecl) == NULL_TREE)
2353         return NULL;
2354
2355       /* If both functions come from different namespaces, this is not
2356          a redeclaration - this is a conflict with a used function.  */
2357       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2358           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2359           && ! decls_match (olddecl, newdecl))
2360         return G_("%qD conflicts with used function");
2361
2362       /* We'll complain about linkage mismatches in
2363          warn_extern_redeclared_static.  */
2364
2365       /* Defining the same name twice is no good.  */
2366       if (DECL_INITIAL (olddecl) != NULL_TREE
2367           && DECL_INITIAL (newdecl) != NULL_TREE)
2368         {
2369           if (DECL_NAME (olddecl) == NULL_TREE)
2370             return G_("%q#D not declared in class");
2371           else if (!GNU_INLINE_P (olddecl)
2372                    || GNU_INLINE_P (newdecl))
2373             return G_("redefinition of %q#D");
2374         }
2375
2376       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2377         {
2378           bool olda = GNU_INLINE_P (olddecl);
2379           bool newa = GNU_INLINE_P (newdecl);
2380
2381           if (olda != newa)
2382             {
2383               if (newa)
2384                 return G_("%q+D redeclared inline with "
2385                           "%<gnu_inline%> attribute");
2386               else
2387                 return G_("%q+D redeclared inline without "
2388                           "%<gnu_inline%> attribute");
2389             }
2390         }
2391
2392       return NULL;
2393     }
2394   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2395     {
2396       tree nt, ot;
2397
2398       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2399         {
2400           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2401               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2402             return G_("redefinition of %q#D");
2403           return NULL;
2404         }
2405
2406       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2407           || (DECL_TEMPLATE_RESULT (newdecl)
2408               == DECL_TEMPLATE_RESULT (olddecl)))
2409         return NULL;
2410
2411       nt = DECL_TEMPLATE_RESULT (newdecl);
2412       if (DECL_TEMPLATE_INFO (nt))
2413         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2414       ot = DECL_TEMPLATE_RESULT (olddecl);
2415       if (DECL_TEMPLATE_INFO (ot))
2416         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2417       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2418           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2419         return G_("redefinition of %q#D");
2420
2421       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2422         {
2423           bool olda = GNU_INLINE_P (ot);
2424           bool newa = GNU_INLINE_P (nt);
2425
2426           if (olda != newa)
2427             {
2428               if (newa)
2429                 return G_("%q+D redeclared inline with "
2430                           "%<gnu_inline%> attribute");
2431               else
2432                 return G_("%q+D redeclared inline without "
2433                           "%<gnu_inline%> attribute");
2434             }
2435         }
2436
2437       /* Core issue #226 (C++0x): 
2438            
2439            If a friend function template declaration specifies a
2440            default template-argument, that declaration shall be a
2441            definition and shall be the only declaration of the
2442            function template in the translation unit.  */
2443       if ((cxx_dialect != cxx98) 
2444           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2445           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2446                                        /*is_primary=*/1, /*is_partial=*/0,
2447                                        /*is_friend_decl=*/2))
2448         return G_("redeclaration of friend %q#D "
2449                   "may not have default template arguments");
2450
2451       return NULL;
2452     }
2453   else if (TREE_CODE (newdecl) == VAR_DECL
2454            && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2455            && (! DECL_LANG_SPECIFIC (olddecl)
2456                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2457                || DECL_THREAD_LOCAL_P (newdecl)))
2458     {
2459       /* Only variables can be thread-local, and all declarations must
2460          agree on this property.  */
2461       if (DECL_THREAD_LOCAL_P (newdecl))
2462         return G_("thread-local declaration of %q#D follows "
2463                   "non-thread-local declaration");
2464       else
2465         return G_("non-thread-local declaration of %q#D follows "
2466                   "thread-local declaration");
2467     }
2468   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2469     {
2470       /* The objects have been declared at namespace scope.  If either
2471          is a member of an anonymous union, then this is an invalid
2472          redeclaration.  For example:
2473
2474            int i;
2475            union { int i; };
2476
2477            is invalid.  */
2478       if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2479           || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2480         return G_("redeclaration of %q#D");
2481       /* If at least one declaration is a reference, there is no
2482          conflict.  For example:
2483
2484            int i = 3;
2485            extern int i;
2486
2487          is valid.  */
2488       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2489         return NULL;
2490       /* Reject two definitions.  */
2491       return G_("redefinition of %q#D");
2492     }
2493   else
2494     {
2495       /* Objects declared with block scope:  */
2496       /* Reject two definitions, and reject a definition
2497          together with an external reference.  */
2498       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2499         return G_("redeclaration of %q#D");
2500       return NULL;
2501     }
2502 }
2503 \f
2504 /* Hash and equality functions for the named_label table.  */
2505
2506 static hashval_t
2507 named_label_entry_hash (const void *data)
2508 {
2509   const struct named_label_entry *ent = (const struct named_label_entry *) data;
2510   return DECL_UID (ent->label_decl);
2511 }
2512
2513 static int
2514 named_label_entry_eq (const void *a, const void *b)
2515 {
2516   const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2517   const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2518   return ent_a->label_decl == ent_b->label_decl;
2519 }
2520
2521 /* Create a new label, named ID.  */
2522
2523 static tree
2524 make_label_decl (tree id, int local_p)
2525 {
2526   struct named_label_entry *ent;
2527   void **slot;
2528   tree decl;
2529
2530   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2531
2532   DECL_CONTEXT (decl) = current_function_decl;
2533   DECL_MODE (decl) = VOIDmode;
2534   C_DECLARED_LABEL_FLAG (decl) = local_p;
2535
2536   /* Say where one reference is to the label, for the sake of the
2537      error if it is not defined.  */
2538   DECL_SOURCE_LOCATION (decl) = input_location;
2539
2540   /* Record the fact that this identifier is bound to this label.  */
2541   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2542
2543   /* Create the label htab for the function on demand.  */
2544   if (!named_labels)
2545     named_labels = htab_create_ggc (13, named_label_entry_hash,
2546                                     named_label_entry_eq, NULL);
2547
2548   /* Record this label on the list of labels used in this function.
2549      We do this before calling make_label_decl so that we get the
2550      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2551   ent = ggc_alloc_cleared_named_label_entry ();
2552   ent->label_decl = decl;
2553
2554   slot = htab_find_slot (named_labels, ent, INSERT);
2555   gcc_assert (*slot == NULL);
2556   *slot = ent;
2557
2558   return decl;
2559 }
2560
2561 /* Look for a label named ID in the current function.  If one cannot
2562    be found, create one.  (We keep track of used, but undefined,
2563    labels, and complain about them at the end of a function.)  */
2564
2565 static tree
2566 lookup_label_1 (tree id)
2567 {
2568   tree decl;
2569
2570   /* You can't use labels at global scope.  */
2571   if (current_function_decl == NULL_TREE)
2572     {
2573       error ("label %qE referenced outside of any function", id);
2574       return NULL_TREE;
2575     }
2576
2577   /* See if we've already got this label.  */
2578   decl = IDENTIFIER_LABEL_VALUE (id);
2579   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2580     return decl;
2581
2582   decl = make_label_decl (id, /*local_p=*/0);
2583   return decl;
2584 }
2585
2586 /* Wrapper for lookup_label_1.  */
2587
2588 tree
2589 lookup_label (tree id)
2590 {
2591   tree ret;
2592   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2593   ret = lookup_label_1 (id);
2594   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2595   return ret;
2596 }
2597
2598 /* Declare a local label named ID.  */
2599
2600 tree
2601 declare_local_label (tree id)
2602 {
2603   tree decl;
2604   cp_label_binding *bind;
2605
2606   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2607      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2608   bind = VEC_safe_push (cp_label_binding, gc,
2609                         current_binding_level->shadowed_labels, NULL);
2610   bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2611
2612   decl = make_label_decl (id, /*local_p=*/1);
2613   bind->label = decl;
2614
2615   return decl;
2616 }
2617
2618 /* Returns nonzero if it is ill-formed to jump past the declaration of
2619    DECL.  Returns 2 if it's also a real problem.  */
2620
2621 static int
2622 decl_jump_unsafe (tree decl)
2623 {
2624   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2625      with automatic storage duration is not in scope to a point where it is
2626      in scope is ill-formed unless the variable has scalar type, class type
2627      with a trivial default constructor and a trivial destructor, a
2628      cv-qualified version of one of these types, or an array of one of the
2629      preceding types and is declared without an initializer (8.5).  */
2630   tree type = TREE_TYPE (decl);
2631
2632   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2633       || type == error_mark_node)
2634     return 0;
2635
2636   type = strip_array_types (type);
2637
2638   if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2639       || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2640     return 2;
2641
2642   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2643     return 1;
2644
2645   return 0;
2646 }
2647
2648 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2649
2650 static void
2651 identify_goto (tree decl, const location_t *locus)
2652 {
2653   if (decl)
2654     permerror (input_location, "jump to label %qD", decl);
2655   else
2656     permerror (input_location, "jump to case label");
2657   if (locus)
2658     permerror (*locus, "  from here");
2659 }
2660
2661 /* Check that a single previously seen jump to a newly defined label
2662    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2663    the jump context; NAMES are the names in scope in LEVEL at the jump
2664    context; LOCUS is the source position of the jump or 0.  Returns
2665    true if all is well.  */
2666
2667 static bool
2668 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2669                        bool exited_omp, const location_t *locus)
2670 {
2671   cp_binding_level *b;
2672   bool identified = false, saw_eh = false, saw_omp = false;
2673
2674   if (exited_omp)
2675     {
2676       identify_goto (decl, locus);
2677       error ("  exits OpenMP structured block");
2678       identified = saw_omp = true;
2679     }
2680
2681   for (b = current_binding_level; b ; b = b->level_chain)
2682     {
2683       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2684
2685       for (new_decls = b->names; new_decls != old_decls;
2686            new_decls = DECL_CHAIN (new_decls))
2687         {
2688           int problem = decl_jump_unsafe (new_decls);
2689           if (! problem)
2690             continue;
2691
2692           if (!identified)
2693             {
2694               identify_goto (decl, locus);
2695               identified = true;
2696             }
2697           if (problem > 1)
2698             error ("  crosses initialization of %q+#D", new_decls);
2699           else
2700             permerror (input_location, "  enters scope of %q+#D which has "
2701                        "non-trivial destructor", new_decls);
2702         }
2703
2704       if (b == level)
2705         break;
2706       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2707         {
2708           if (!identified)
2709             {
2710               identify_goto (decl, locus);
2711               identified = true;
2712             }
2713           if (b->kind == sk_try)
2714             error ("  enters try block");
2715           else
2716             error ("  enters catch block");
2717           saw_eh = true;
2718         }
2719       if (b->kind == sk_omp && !saw_omp)
2720         {
2721           if (!identified)
2722             {
2723               identify_goto (decl, locus);
2724               identified = true;
2725             }
2726           error ("  enters OpenMP structured block");
2727           saw_omp = true;
2728         }
2729     }
2730
2731   return !identified;
2732 }
2733
2734 static void
2735 check_previous_goto (tree decl, struct named_label_use_entry *use)
2736 {
2737   check_previous_goto_1 (decl, use->binding_level,
2738                          use->names_in_scope, use->in_omp_scope,
2739                          &use->o_goto_locus);
2740 }
2741
2742 static bool
2743 check_switch_goto (cp_binding_level* level)
2744 {
2745   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2746 }
2747
2748 /* Check that a new jump to a label DECL is OK.  Called by
2749    finish_goto_stmt.  */
2750
2751 void
2752 check_goto (tree decl)
2753 {
2754   struct named_label_entry *ent, dummy;
2755   bool saw_catch = false, identified = false;
2756   tree bad;
2757   unsigned ix;
2758
2759   /* We can't know where a computed goto is jumping.
2760      So we assume that it's OK.  */
2761   if (TREE_CODE (decl) != LABEL_DECL)
2762     return;
2763
2764   /* We didn't record any information about this label when we created it,
2765      and there's not much point since it's trivial to analyze as a return.  */
2766   if (decl == cdtor_label)
2767     return;
2768
2769   dummy.label_decl = decl;
2770   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2771   gcc_assert (ent != NULL);
2772
2773   /* If the label hasn't been defined yet, defer checking.  */
2774   if (! DECL_INITIAL (decl))
2775     {
2776       struct named_label_use_entry *new_use;
2777
2778       /* Don't bother creating another use if the last goto had the
2779          same data, and will therefore create the same set of errors.  */
2780       if (ent->uses
2781           && ent->uses->names_in_scope == current_binding_level->names)
2782         return;
2783
2784       new_use = ggc_alloc_named_label_use_entry ();
2785       new_use->binding_level = current_binding_level;
2786       new_use->names_in_scope = current_binding_level->names;
2787       new_use->o_goto_locus = input_location;
2788       new_use->in_omp_scope = false;
2789
2790       new_use->next = ent->uses;
2791       ent->uses = new_use;
2792       return;
2793     }
2794
2795   if (ent->in_try_scope || ent->in_catch_scope
2796       || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2797     {
2798       permerror (input_location, "jump to label %q+D", decl);
2799       permerror (input_location, "  from here");
2800       identified = true;
2801     }
2802
2803   FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2804     {
2805       int u = decl_jump_unsafe (bad);
2806
2807       if (u > 1 && DECL_ARTIFICIAL (bad))
2808         {
2809           /* Can't skip init of __exception_info.  */
2810           error_at (DECL_SOURCE_LOCATION (bad), "  enters catch block");
2811           saw_catch = true;
2812         }
2813       else if (u > 1)
2814         error ("  skips initialization of %q+#D", bad);
2815       else
2816         permerror (input_location, "  enters scope of %q+#D which has "
2817                    "non-trivial destructor", bad);
2818     }
2819
2820   if (ent->in_try_scope)
2821     error ("  enters try block");
2822   else if (ent->in_catch_scope && !saw_catch)
2823     error ("  enters catch block");
2824
2825   if (ent->in_omp_scope)
2826     error ("  enters OpenMP structured block");
2827   else if (flag_openmp)
2828     {
2829       cp_binding_level *b;
2830       for (b = current_binding_level; b ; b = b->level_chain)
2831         {
2832           if (b == ent->binding_level)
2833             break;
2834           if (b->kind == sk_omp)
2835             {
2836               if (!identified)
2837                 {
2838                   permerror (input_location, "jump to label %q+D", decl);
2839                   permerror (input_location, "  from here");
2840                   identified = true;
2841                 }
2842               error ("  exits OpenMP structured block");
2843               break;
2844             }
2845         }
2846     }
2847 }
2848
2849 /* Check that a return is ok wrt OpenMP structured blocks.
2850    Called by finish_return_stmt.  Returns true if all is well.  */
2851
2852 bool
2853 check_omp_return (void)
2854 {
2855   cp_binding_level *b;
2856   for (b = current_binding_level; b ; b = b->level_chain)
2857     if (b->kind == sk_omp)
2858       {
2859         error ("invalid exit from OpenMP structured block");
2860         return false;
2861       }
2862     else if (b->kind == sk_function_parms)
2863       break;
2864   return true;
2865 }
2866
2867 /* Define a label, specifying the location in the source file.
2868    Return the LABEL_DECL node for the label.  */
2869
2870 static tree
2871 define_label_1 (location_t location, tree name)
2872 {
2873   struct named_label_entry *ent, dummy;
2874   cp_binding_level *p;
2875   tree decl;
2876
2877   decl = lookup_label (name);
2878
2879   dummy.label_decl = decl;
2880   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2881   gcc_assert (ent != NULL);
2882
2883   /* After labels, make any new cleanups in the function go into their
2884      own new (temporary) binding contour.  */
2885   for (p = current_binding_level;
2886        p->kind != sk_function_parms;
2887        p = p->level_chain)
2888     p->more_cleanups_ok = 0;
2889
2890   if (name == get_identifier ("wchar_t"))
2891     permerror (input_location, "label named wchar_t");
2892
2893   if (DECL_INITIAL (decl) != NULL_TREE)
2894     {
2895       error ("duplicate label %qD", decl);
2896       return error_mark_node;
2897     }
2898   else
2899     {
2900       struct named_label_use_entry *use;
2901
2902       /* Mark label as having been defined.  */
2903       DECL_INITIAL (decl) = error_mark_node;
2904       /* Say where in the source.  */
2905       DECL_SOURCE_LOCATION (decl) = location;
2906
2907       ent->binding_level = current_binding_level;
2908       ent->names_in_scope = current_binding_level->names;
2909
2910       for (use = ent->uses; use ; use = use->next)
2911         check_previous_goto (decl, use);
2912       ent->uses = NULL;
2913     }
2914
2915   return decl;
2916 }
2917
2918 /* Wrapper for define_label_1.  */
2919
2920 tree
2921 define_label (location_t location, tree name)
2922 {
2923   tree ret;
2924   timevar_start (TV_NAME_LOOKUP);
2925   ret = define_label_1 (location, name);
2926   timevar_stop (TV_NAME_LOOKUP);
2927   return ret;
2928 }
2929
2930
2931 struct cp_switch
2932 {
2933   cp_binding_level *level;
2934   struct cp_switch *next;
2935   /* The SWITCH_STMT being built.  */
2936   tree switch_stmt;
2937   /* A splay-tree mapping the low element of a case range to the high
2938      element, or NULL_TREE if there is no high element.  Used to
2939      determine whether or not a new case label duplicates an old case
2940      label.  We need a tree, rather than simply a hash table, because
2941      of the GNU case range extension.  */
2942   splay_tree cases;
2943 };
2944
2945 /* A stack of the currently active switch statements.  The innermost
2946    switch statement is on the top of the stack.  There is no need to
2947    mark the stack for garbage collection because it is only active
2948    during the processing of the body of a function, and we never
2949    collect at that point.  */
2950
2951 static struct cp_switch *switch_stack;
2952
2953 /* Called right after a switch-statement condition is parsed.
2954    SWITCH_STMT is the switch statement being parsed.  */
2955
2956 void
2957 push_switch (tree switch_stmt)
2958 {
2959   struct cp_switch *p = XNEW (struct cp_switch);
2960   p->level = current_binding_level;
2961   p->next = switch_stack;
2962   p->switch_stmt = switch_stmt;
2963   p->cases = splay_tree_new (case_compare, NULL, NULL);
2964   switch_stack = p;
2965 }
2966
2967 void
2968 pop_switch (void)
2969 {
2970   struct cp_switch *cs = switch_stack;
2971   location_t switch_location;
2972
2973   /* Emit warnings as needed.  */
2974   switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
2975   if (!processing_template_decl)
2976     c_do_switch_warnings (cs->cases, switch_location,
2977                           SWITCH_STMT_TYPE (cs->switch_stmt),
2978                           SWITCH_STMT_COND (cs->switch_stmt));
2979
2980   splay_tree_delete (cs->cases);
2981   switch_stack = switch_stack->next;
2982   free (cs);
2983 }
2984
2985 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
2986    condition.  Note that if TYPE and VALUE are already integral we don't
2987    really do the conversion because the language-independent
2988    warning/optimization code will work better that way.  */
2989
2990 static tree
2991 case_conversion (tree type, tree value)
2992 {
2993   if (value == NULL_TREE)
2994     return value;
2995
2996   if (cxx_dialect >= cxx0x
2997       && (SCOPED_ENUM_P (type)
2998           || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
2999     {
3000       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3001         type = type_promotes_to (type);
3002       value = perform_implicit_conversion (type, value, tf_warning_or_error);
3003     }
3004   return cxx_constant_value (value);
3005 }
3006
3007 /* Note that we've seen a definition of a case label, and complain if this
3008    is a bad place for one.  */
3009
3010 tree
3011 finish_case_label (location_t loc, tree low_value, tree high_value)
3012 {
3013   tree cond, r;
3014   cp_binding_level *p;
3015   tree type;
3016
3017   if (processing_template_decl)
3018     {
3019       tree label;
3020
3021       /* For templates, just add the case label; we'll do semantic
3022          analysis at instantiation-time.  */
3023       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3024       return add_stmt (build_case_label (low_value, high_value, label));
3025     }
3026
3027   /* Find the condition on which this switch statement depends.  */
3028   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3029   if (cond && TREE_CODE (cond) == TREE_LIST)
3030     cond = TREE_VALUE (cond);
3031
3032   if (!check_switch_goto (switch_stack->level))
3033     return error_mark_node;
3034
3035   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3036
3037   low_value = case_conversion (type, low_value);
3038   high_value = case_conversion (type, high_value);
3039
3040   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3041                         low_value, high_value);
3042
3043   /* After labels, make any new cleanups in the function go into their
3044      own new (temporary) binding contour.  */
3045   for (p = current_binding_level;
3046        p->kind != sk_function_parms;
3047        p = p->level_chain)
3048     p->more_cleanups_ok = 0;
3049
3050   return r;
3051 }
3052 \f
3053 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
3054
3055 static hashval_t
3056 typename_hash (const void* k)
3057 {
3058   hashval_t hash;
3059   const_tree const t = (const_tree) k;
3060
3061   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3062           ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3063
3064   return hash;
3065 }
3066
3067 typedef struct typename_info {
3068   tree scope;
3069   tree name;
3070   tree template_id;
3071   bool enum_p;
3072   bool class_p;
3073 } typename_info;
3074
3075 /* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
3076    really of type `typename_info*'  */
3077
3078 static int
3079 typename_compare (const void * k1, const void * k2)
3080 {
3081   const_tree const t1 = (const_tree) k1;
3082   const typename_info *const t2 = (const typename_info *) k2;
3083
3084   return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3085           && TYPE_CONTEXT (t1) == t2->scope
3086           && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3087           && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3088           && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3089 }
3090
3091 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3092    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3093
3094    Returns the new TYPENAME_TYPE.  */
3095
3096 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3097
3098 static tree
3099 build_typename_type (tree context, tree name, tree fullname,
3100                      enum tag_types tag_type)
3101 {
3102   tree t;
3103   tree d;
3104   typename_info ti;
3105   void **e;
3106   hashval_t hash;
3107
3108   if (typename_htab == NULL)
3109     typename_htab = htab_create_ggc (61, &typename_hash,
3110                                      &typename_compare, NULL);
3111
3112   ti.scope = FROB_CONTEXT (context);
3113   ti.name = name;
3114   ti.template_id = fullname;
3115   ti.enum_p = tag_type == enum_type;
3116   ti.class_p = (tag_type == class_type
3117                 || tag_type == record_type
3118                 || tag_type == union_type);
3119   hash =  (htab_hash_pointer (ti.scope)
3120            ^ htab_hash_pointer (ti.name));
3121
3122   /* See if we already have this type.  */
3123   e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3124   if (*e)
3125     t = (tree) *e;
3126   else
3127     {
3128       /* Build the TYPENAME_TYPE.  */
3129       t = cxx_make_type (TYPENAME_TYPE);
3130       TYPE_CONTEXT (t) = ti.scope;
3131       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3132       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3133       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3134
3135       /* Build the corresponding TYPE_DECL.  */
3136       d = build_decl (input_location, TYPE_DECL, name, t);
3137       TYPE_NAME (TREE_TYPE (d)) = d;
3138       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3139       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3140       DECL_ARTIFICIAL (d) = 1;
3141
3142       /* Store it in the hash table.  */
3143       *e = t;
3144
3145       /* TYPENAME_TYPEs must always be compared structurally, because
3146          they may or may not resolve down to another type depending on
3147          the currently open classes. */
3148       SET_TYPE_STRUCTURAL_EQUALITY (t);
3149     }
3150
3151   return t;
3152 }
3153
3154 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3155    provided to name the type.  Returns an appropriate type, unless an
3156    error occurs, in which case error_mark_node is returned.  If we
3157    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3158    return that, rather than the _TYPE it corresponds to, in other
3159    cases we look through the type decl.  If TF_ERROR is set, complain
3160    about errors, otherwise be quiet.  */
3161
3162 tree
3163 make_typename_type (tree context, tree name, enum tag_types tag_type,
3164                     tsubst_flags_t complain)
3165 {
3166   tree fullname;
3167   tree t;
3168   bool want_template;
3169
3170   if (name == error_mark_node
3171       || context == NULL_TREE
3172       || context == error_mark_node)
3173     return error_mark_node;
3174
3175   if (TYPE_P (name))
3176     {
3177       if (!(TYPE_LANG_SPECIFIC (name)
3178             && (CLASSTYPE_IS_TEMPLATE (name)
3179                 || CLASSTYPE_USE_TEMPLATE (name))))
3180         name = TYPE_IDENTIFIER (name);
3181       else
3182         /* Create a TEMPLATE_ID_EXPR for the type.  */
3183         name = build_nt (TEMPLATE_ID_EXPR,
3184                          CLASSTYPE_TI_TEMPLATE (name),
3185                          CLASSTYPE_TI_ARGS (name));
3186     }
3187   else if (TREE_CODE (name) == TYPE_DECL)
3188     name = DECL_NAME (name);
3189
3190   fullname = name;
3191
3192   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3193     {
3194       name = TREE_OPERAND (name, 0);
3195       if (TREE_CODE (name) == TEMPLATE_DECL)
3196         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3197       else if (TREE_CODE (name) == OVERLOAD)
3198         {
3199           error ("%qD is not a type", name);
3200           return error_mark_node;
3201         }
3202     }
3203   if (TREE_CODE (name) == TEMPLATE_DECL)
3204     {
3205       error ("%qD used without template parameters", name);
3206       return error_mark_node;
3207     }
3208   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3209   gcc_assert (TYPE_P (context));
3210
3211   if (!MAYBE_CLASS_TYPE_P (context))
3212     {
3213       if (complain & tf_error)
3214         error ("%q#T is not a class", context);
3215       return error_mark_node;
3216     }
3217   
3218   /* When the CONTEXT is a dependent type,  NAME could refer to a
3219      dependent base class of CONTEXT.  But look inside it anyway
3220      if CONTEXT is a currently open scope, in case it refers to a
3221      member of the current instantiation or a non-dependent base;
3222      lookup will stop when we hit a dependent base.  */
3223   if (!dependent_scope_p (context))
3224     /* We should only set WANT_TYPE when we're a nested typename type.
3225        Then we can give better diagnostics if we find a non-type.  */
3226     t = lookup_field (context, name, 2, /*want_type=*/true);
3227   else
3228     t = NULL_TREE;
3229
3230   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3231     return build_typename_type (context, name, fullname, tag_type);
3232
3233   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3234   
3235   if (!t)
3236     {
3237       if (complain & tf_error)
3238         error (want_template ? "no class template named %q#T in %q#T"
3239                : "no type named %q#T in %q#T", name, context);
3240       return error_mark_node;
3241     }
3242   
3243   /* Pull out the template from an injected-class-name (or multiple).  */
3244   if (want_template)
3245     t = maybe_get_template_decl_from_type_decl (t);
3246
3247   if (TREE_CODE (t) == TREE_LIST)
3248     {
3249       if (complain & tf_error)
3250         {
3251           error ("lookup of %qT in %qT is ambiguous", name, context);
3252           print_candidates (t);
3253         }
3254       return error_mark_node;
3255     }
3256
3257   if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3258     {
3259       if (complain & tf_error)
3260         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3261                context, name, t);
3262       return error_mark_node;
3263     }
3264   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3265     {
3266       if (complain & tf_error)
3267         error ("%<typename %T::%D%> names %q#T, which is not a type",
3268                context, name, t);
3269       return error_mark_node;
3270     }
3271   
3272   if (complain & tf_error)
3273     perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3274
3275   /* If we are currently parsing a template and if T is a typedef accessed
3276      through CONTEXT then we need to remember and check access of T at
3277      template instantiation time.  */
3278   add_typedef_to_current_template_for_access_check (t, context, input_location);
3279
3280   if (want_template)
3281     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3282                                   NULL_TREE, context,
3283                                   /*entering_scope=*/0,
3284                                   tf_warning_or_error | tf_user);
3285   
3286   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3287     t = TREE_TYPE (t);
3288   
3289   return t;
3290 }
3291
3292 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3293    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3294    in which case error_mark_node is returned.
3295
3296    If PARM_LIST is non-NULL, also make sure that the template parameter
3297    list of TEMPLATE_DECL matches.
3298
3299    If COMPLAIN zero, don't complain about any errors that occur.  */
3300
3301 tree
3302 make_unbound_class_template (tree context, tree name, tree parm_list,
3303                              tsubst_flags_t complain)
3304 {
3305   tree t;
3306   tree d;
3307
3308   if (TYPE_P (name))
3309     name = TYPE_IDENTIFIER (name);
3310   else if (DECL_P (name))
3311     name = DECL_NAME (name);
3312   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3313
3314   if (!dependent_type_p (context)
3315       || currently_open_class (context))
3316     {
3317       tree tmpl = NULL_TREE;
3318
3319       if (MAYBE_CLASS_TYPE_P (context))
3320         tmpl = lookup_field (context, name, 0, false);
3321
3322       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3323         tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3324
3325       if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3326         {
3327           if (complain & tf_error)
3328             error ("no class template named %q#T in %q#T", name, context);
3329           return error_mark_node;
3330         }
3331
3332       if (parm_list
3333           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3334         {
3335           if (complain & tf_error)
3336             {
3337               error ("template parameters do not match template");
3338               error ("%q+D declared here", tmpl);
3339             }
3340           return error_mark_node;
3341         }
3342
3343       if (complain & tf_error)
3344         perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3345
3346       return tmpl;
3347     }
3348
3349   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3350   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3351   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3352   TREE_TYPE (t) = NULL_TREE;
3353   SET_TYPE_STRUCTURAL_EQUALITY (t);
3354
3355   /* Build the corresponding TEMPLATE_DECL.  */
3356   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3357   TYPE_NAME (TREE_TYPE (d)) = d;
3358   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3359   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3360   DECL_ARTIFICIAL (d) = 1;
3361   DECL_TEMPLATE_PARMS (d) = parm_list;
3362
3363   return t;
3364 }
3365
3366 \f
3367
3368 /* Push the declarations of builtin types into the namespace.
3369    RID_INDEX is the index of the builtin type in the array
3370    RID_POINTERS.  NAME is the name used when looking up the builtin
3371    type.  TYPE is the _TYPE node for the builtin type.  */
3372
3373 void
3374 record_builtin_type (enum rid rid_index,
3375                      const char* name,
3376                      tree type)
3377 {
3378   tree rname = NULL_TREE, tname = NULL_TREE;
3379   tree tdecl = NULL_TREE;
3380
3381   if ((int) rid_index < (int) RID_MAX)
3382     rname = ridpointers[(int) rid_index];
3383   if (name)
3384     tname = get_identifier (name);
3385
3386   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3387      eliminated.  Built-in types should not be looked up name; their
3388      names are keywords that the parser can recognize.  However, there
3389      is code in c-common.c that uses identifier_global_value to look
3390      up built-in types by name.  */
3391   if (tname)
3392     {
3393       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3394       DECL_ARTIFICIAL (tdecl) = 1;
3395       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3396     }
3397   if (rname)
3398     {
3399       if (!tdecl)
3400         {
3401           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3402           DECL_ARTIFICIAL (tdecl) = 1;
3403         }
3404       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3405     }
3406
3407   if (!TYPE_NAME (type))
3408     TYPE_NAME (type) = tdecl;
3409
3410   if (tdecl)
3411     debug_hooks->type_decl (tdecl, 0);
3412 }
3413
3414 /* Record one of the standard Java types.
3415  * Declare it as having the given NAME.
3416  * If SIZE > 0, it is the size of one of the integral types;
3417  * otherwise it is the negative of the size of one of the other types.  */
3418
3419 static tree
3420 record_builtin_java_type (const char* name, int size)
3421 {
3422   tree type, decl;
3423   if (size > 0)
3424     {
3425       type = build_nonstandard_integer_type (size, 0);
3426       type = build_distinct_type_copy (type);
3427     }
3428   else if (size > -32)
3429     {
3430       tree stype;
3431       /* "__java_char" or ""__java_boolean".  */
3432       type = build_nonstandard_integer_type (-size, 1);
3433       type = build_distinct_type_copy (type);
3434       /* Get the signed type cached and attached to the unsigned type,
3435          so it doesn't get garbage-collected at "random" times,
3436          causing potential codegen differences out of different UIDs
3437          and different alias set numbers.  */
3438       stype = build_nonstandard_integer_type (-size, 0);
3439       stype = build_distinct_type_copy (stype);
3440       TREE_CHAIN (type) = stype;
3441       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3442     }
3443   else
3444     { /* "__java_float" or ""__java_double".  */
3445       type = make_node (REAL_TYPE);
3446       TYPE_PRECISION (type) = - size;
3447       layout_type (type);
3448     }
3449   record_builtin_type (RID_MAX, name, type);
3450   decl = TYPE_NAME (type);
3451
3452   /* Suppress generate debug symbol entries for these types,
3453      since for normal C++ they are just clutter.
3454      However, push_lang_context undoes this if extern "Java" is seen.  */
3455   DECL_IGNORED_P (decl) = 1;
3456
3457   TYPE_FOR_JAVA (type) = 1;
3458   return type;
3459 }
3460
3461 /* Push a type into the namespace so that the back ends ignore it.  */
3462
3463 static void
3464 record_unknown_type (tree type, const char* name)
3465 {
3466   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3467                                     TYPE_DECL, get_identifier (name), type));
3468   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3469   DECL_IGNORED_P (decl) = 1;
3470   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3471   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3472   TYPE_ALIGN (type) = 1;
3473   TYPE_USER_ALIGN (type) = 0;
3474   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3475 }
3476
3477 /* A string for which we should create an IDENTIFIER_NODE at
3478    startup.  */
3479
3480 typedef struct predefined_identifier
3481 {
3482   /* The name of the identifier.  */
3483   const char *const name;
3484   /* The place where the IDENTIFIER_NODE should be stored.  */
3485   tree *const node;
3486   /* Nonzero if this is the name of a constructor or destructor.  */
3487   const int ctor_or_dtor_p;
3488 } predefined_identifier;
3489
3490 /* Create all the predefined identifiers.  */
3491
3492 static void
3493 initialize_predefined_identifiers (void)
3494 {
3495   const predefined_identifier *pid;
3496
3497   /* A table of identifiers to create at startup.  */
3498   static const predefined_identifier predefined_identifiers[] = {
3499     { "C++", &lang_name_cplusplus, 0 },
3500     { "C", &lang_name_c, 0 },
3501     { "Java", &lang_name_java, 0 },
3502     /* Some of these names have a trailing space so that it is
3503        impossible for them to conflict with names written by users.  */
3504     { "__ct ", &ctor_identifier, 1 },
3505     { "__base_ctor ", &base_ctor_identifier, 1 },
3506     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3507     { "__dt ", &dtor_identifier, 1 },
3508     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3509     { "__base_dtor ", &base_dtor_identifier, 1 },
3510     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3511     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3512     { "nelts", &nelts_identifier, 0 },
3513     { THIS_NAME, &this_identifier, 0 },
3514     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3515     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3516     { "_vptr", &vptr_identifier, 0 },
3517     { "__vtt_parm", &vtt_parm_identifier, 0 },
3518     { "::", &global_scope_name, 0 },
3519     { "std", &std_identifier, 0 },
3520     { NULL, NULL, 0 }
3521   };
3522
3523   for (pid = predefined_identifiers; pid->name; ++pid)
3524     {
3525       *pid->node = get_identifier (pid->name);
3526       if (pid->ctor_or_dtor_p)
3527         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3528     }
3529 }
3530
3531 /* Create the predefined scalar types of C,
3532    and some nodes representing standard constants (0, 1, (void *)0).
3533    Initialize the global binding level.
3534    Make definitions for built-in primitive functions.  */
3535
3536 void
3537 cxx_init_decl_processing (void)
3538 {
3539   tree void_ftype;
3540   tree void_ftype_ptr;
3541
3542   /* Create all the identifiers we need.  */
3543   initialize_predefined_identifiers ();
3544
3545   /* Create the global variables.  */
3546   push_to_top_level ();
3547
3548   current_function_decl = NULL_TREE;
3549   current_binding_level = NULL;
3550   /* Enter the global namespace.  */
3551   gcc_assert (global_namespace == NULL_TREE);
3552   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3553                                       void_type_node);
3554   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3555   TREE_PUBLIC (global_namespace) = 1;
3556   begin_scope (sk_namespace, global_namespace);
3557
3558   if (flag_visibility_ms_compat)
3559     default_visibility = VISIBILITY_HIDDEN;
3560
3561   /* Initially, C.  */
3562   current_lang_name = lang_name_c;
3563
3564   /* Create the `std' namespace.  */
3565   push_namespace (std_identifier);
3566   std_node = current_namespace;
3567   pop_namespace ();
3568
3569   c_common_nodes_and_builtins ();
3570
3571   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3572   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3573   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3574   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3575   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3576   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3577   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3578   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3579
3580   integer_two_node = build_int_cst (NULL_TREE, 2);
3581
3582   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3583   truthvalue_type_node = boolean_type_node;
3584   truthvalue_false_node = boolean_false_node;
3585   truthvalue_true_node = boolean_true_node;
3586
3587   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3588   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3589   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3590
3591 #if 0
3592   record_builtin_type (RID_MAX, NULL, string_type_node);
3593 #endif
3594
3595   delta_type_node = ptrdiff_type_node;
3596   vtable_index_type = ptrdiff_type_node;
3597
3598   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3599   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3600   void_ftype_ptr = build_function_type_list (void_type_node,
3601                                              ptr_type_node, NULL_TREE);
3602   void_ftype_ptr
3603     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3604
3605   /* C++ extensions */
3606
3607   unknown_type_node = make_node (LANG_TYPE);
3608   record_unknown_type (unknown_type_node, "unknown type");
3609
3610   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3611   TREE_TYPE (unknown_type_node) = unknown_type_node;
3612
3613   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3614      result.  */
3615   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3616   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3617
3618   init_list_type_node = make_node (LANG_TYPE);
3619   record_unknown_type (init_list_type_node, "init list");
3620
3621   dependent_lambda_return_type_node = make_node (LANG_TYPE);
3622   record_unknown_type (dependent_lambda_return_type_node,
3623                        "undeduced lambda return type");
3624
3625   {
3626     /* Make sure we get a unique function type, so we can give
3627        its pointer type a name.  (This wins for gdb.) */
3628     tree vfunc_type = make_node (FUNCTION_TYPE);
3629     TREE_TYPE (vfunc_type) = integer_type_node;
3630     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3631     layout_type (vfunc_type);
3632
3633     vtable_entry_type = build_pointer_type (vfunc_type);
3634   }
3635   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3636
3637   vtbl_type_node
3638     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3639   layout_type (vtbl_type_node);
3640   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3641   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3642   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3643   layout_type (vtbl_ptr_type_node);
3644   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3645
3646   push_namespace (get_identifier ("__cxxabiv1"));
3647   abi_node = current_namespace;
3648   pop_namespace ();
3649
3650   global_type_node = make_node (LANG_TYPE);
3651   record_unknown_type (global_type_node, "global type");
3652
3653   /* Now, C++.  */
3654   current_lang_name = lang_name_cplusplus;
3655
3656   {
3657     tree newattrs;
3658     tree newtype, deltype;
3659     tree ptr_ftype_sizetype;
3660     tree new_eh_spec;
3661
3662     ptr_ftype_sizetype
3663       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3664     if (cxx_dialect == cxx98)
3665       {
3666         tree bad_alloc_id;
3667         tree bad_alloc_type_node;
3668         tree bad_alloc_decl;
3669
3670         push_namespace (std_identifier);
3671         bad_alloc_id = get_identifier ("bad_alloc");
3672         bad_alloc_type_node = make_class_type (RECORD_TYPE);
3673         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3674         bad_alloc_decl
3675           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3676         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3677         pop_namespace ();
3678
3679         new_eh_spec
3680           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3681       }
3682     else
3683       new_eh_spec = noexcept_false_spec;
3684
3685     /* Ensure attribs.c is initialized.  */
3686     init_attributes ();
3687     newattrs
3688       = build_tree_list (get_identifier ("alloc_size"),
3689                          build_tree_list (NULL_TREE, integer_one_node));
3690     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3691     newtype = build_exception_variant (newtype, new_eh_spec);
3692     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3693     push_cp_library_fn (NEW_EXPR, newtype);
3694     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3695     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3696     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3697
3698     nullptr_type_node = make_node (NULLPTR_TYPE);
3699     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3700     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3701     TYPE_UNSIGNED (nullptr_type_node) = 1;
3702     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3703     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3704     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3705     nullptr_node = build_int_cst (nullptr_type_node, 0);
3706   }
3707
3708   abort_fndecl
3709     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3710
3711   /* Perform other language dependent initializations.  */
3712   init_class_processing ();
3713   init_rtti_processing ();
3714   init_template_processing ();
3715
3716   if (flag_exceptions)
3717     init_exception_processing ();
3718
3719   if (! supports_one_only ())
3720     flag_weak = 0;
3721
3722   make_fname_decl = cp_make_fname_decl;
3723   start_fname_decls ();
3724
3725   /* Show we use EH for cleanups.  */
3726   if (flag_exceptions)
3727     using_eh_for_cleanups ();
3728 }
3729
3730 /* Generate an initializer for a function naming variable from
3731    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3732    filled in with the type of the init.  */
3733
3734 tree
3735 cp_fname_init (const char* name, tree *type_p)
3736 {
3737   tree domain = NULL_TREE;
3738   tree type;
3739   tree init = NULL_TREE;
3740   size_t length = 0;
3741
3742   if (name)
3743     {
3744       length = strlen (name);
3745       domain = build_index_type (size_int (length));
3746       init = build_string (length + 1, name);
3747     }
3748
3749   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3750   type = build_cplus_array_type (type, domain);
3751
3752   *type_p = type;
3753
3754   if (init)
3755     TREE_TYPE (init) = type;
3756   else
3757     init = error_mark_node;
3758
3759   return init;
3760 }
3761
3762 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3763    the decl, LOC is the location to give the decl, NAME is the
3764    initialization string and TYPE_DEP indicates whether NAME depended
3765    on the type of the function. We make use of that to detect
3766    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3767    at the point of first use, so we mustn't push the decl now.  */
3768
3769 static tree
3770 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3771 {
3772   const char *const name = (type_dep && processing_template_decl
3773                             ? NULL : fname_as_string (type_dep));
3774   tree type;
3775   tree init = cp_fname_init (name, &type);
3776   tree decl = build_decl (loc, VAR_DECL, id, type);
3777
3778   if (name)
3779     free (CONST_CAST (char *, name));
3780
3781   /* As we're using pushdecl_with_scope, we must set the context.  */
3782   DECL_CONTEXT (decl) = current_function_decl;
3783   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3784
3785   TREE_STATIC (decl) = 1;
3786   TREE_READONLY (decl) = 1;
3787   DECL_ARTIFICIAL (decl) = 1;
3788
3789   TREE_USED (decl) = 1;
3790
3791   if (current_function_decl)
3792     {
3793       cp_binding_level *b = current_binding_level;
3794       if (b->kind == sk_function_parms)
3795         return error_mark_node;
3796       while (b->level_chain->kind != sk_function_parms)
3797         b = b->level_chain;
3798       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3799       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3800                       LOOKUP_ONLYCONVERTING);
3801     }
3802   else
3803     {
3804       DECL_THIS_STATIC (decl) = true;
3805       pushdecl_top_level_and_finish (decl, init);
3806     }
3807
3808   return decl;
3809 }
3810
3811 static tree
3812 builtin_function_1 (tree decl, tree context, bool is_global)
3813 {
3814   tree          id = DECL_NAME (decl);
3815   const char *name = IDENTIFIER_POINTER (id);
3816
3817   retrofit_lang_decl (decl);
3818
3819   DECL_ARTIFICIAL (decl) = 1;
3820   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3821   SET_DECL_LANGUAGE (decl, lang_c);
3822   /* Runtime library routines are, by definition, available in an
3823      external shared object.  */
3824   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3825   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3826
3827   DECL_CONTEXT (decl) = context;
3828
3829   if (is_global)
3830     pushdecl_top_level (decl);
3831   else
3832     pushdecl (decl);
3833
3834   /* A function in the user's namespace should have an explicit
3835      declaration before it is used.  Mark the built-in function as
3836      anticipated but not actually declared.  */
3837   if (name[0] != '_' || name[1] != '_')
3838     DECL_ANTICIPATED (decl) = 1;
3839   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3840     {
3841       size_t len = strlen (name);
3842
3843       /* Treat __*_chk fortification functions as anticipated as well,
3844          unless they are __builtin_*.  */
3845       if (len > strlen ("___chk")
3846           && memcmp (name + len - strlen ("_chk"),
3847                      "_chk", strlen ("_chk") + 1) == 0)
3848         DECL_ANTICIPATED (decl) = 1;
3849     }
3850
3851   return decl;
3852 }
3853
3854 tree
3855 cxx_builtin_function (tree decl)
3856 {
3857   tree          id = DECL_NAME (decl);
3858   const char *name = IDENTIFIER_POINTER (id);
3859   /* All builtins that don't begin with an '_' should additionally
3860      go in the 'std' namespace.  */
3861   if (name[0] != '_')
3862     {
3863       tree decl2 = copy_node(decl);
3864       push_namespace (std_identifier);
3865       builtin_function_1 (decl2, std_node, false);
3866       pop_namespace ();
3867     }
3868
3869   return builtin_function_1 (decl, NULL_TREE, false);
3870 }
3871
3872 /* Like cxx_builtin_function, but guarantee the function is added to the global
3873    scope.  This is to allow function specific options to add new machine
3874    dependent builtins when the target ISA changes via attribute((target(...)))
3875    which saves space on program startup if the program does not use non-generic
3876    ISAs.  */
3877
3878 tree
3879 cxx_builtin_function_ext_scope (tree decl)
3880 {
3881
3882   tree          id = DECL_NAME (decl);
3883   const char *name = IDENTIFIER_POINTER (id);
3884   /* All builtins that don't begin with an '_' should additionally
3885      go in the 'std' namespace.  */
3886   if (name[0] != '_')
3887     {
3888       tree decl2 = copy_node(decl);
3889       push_namespace (std_identifier);
3890       builtin_function_1 (decl2, std_node, true);
3891       pop_namespace ();
3892     }
3893
3894   return builtin_function_1 (decl, NULL_TREE, true);
3895 }
3896
3897 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3898    function.  Not called directly.  */
3899
3900 static tree
3901 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3902 {
3903   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3904   DECL_EXTERNAL (fn) = 1;
3905   TREE_PUBLIC (fn) = 1;
3906   DECL_ARTIFICIAL (fn) = 1;
3907   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3908   SET_DECL_LANGUAGE (fn, lang_c);
3909   /* Runtime library routines are, by definition, available in an
3910      external shared object.  */
3911   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3912   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3913   return fn;
3914 }
3915
3916 /* Returns the _DECL for a library function with C linkage.
3917    We assume that such functions never throw; if this is incorrect,
3918    callers should unset TREE_NOTHROW.  */
3919
3920 static tree
3921 build_library_fn (tree name, tree type)
3922 {
3923   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3924   TREE_NOTHROW (fn) = 1;
3925   return fn;
3926 }
3927
3928 /* Returns the _DECL for a library function with C++ linkage.  */
3929
3930 static tree
3931 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3932 {
3933   tree fn = build_library_fn_1 (name, operator_code, type);
3934   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3935   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3936   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3937   return fn;
3938 }
3939
3940 /* Like build_library_fn, but takes a C string instead of an
3941    IDENTIFIER_NODE.  */
3942
3943 tree
3944 build_library_fn_ptr (const char* name, tree type)
3945 {
3946   return build_library_fn (get_identifier (name), type);
3947 }
3948
3949 /* Like build_cp_library_fn, but takes a C string instead of an
3950    IDENTIFIER_NODE.  */
3951
3952 tree
3953 build_cp_library_fn_ptr (const char* name, tree type)
3954 {
3955   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3956 }
3957
3958 /* Like build_library_fn, but also pushes the function so that we will
3959    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3960    may throw exceptions listed in RAISES.  */
3961
3962 tree
3963 push_library_fn (tree name, tree type, tree raises)
3964 {
3965   tree fn;
3966
3967   if (raises)
3968     type = build_exception_variant (type, raises);
3969
3970   fn = build_library_fn (name, type);
3971   pushdecl_top_level (fn);
3972   return fn;
3973 }
3974
3975 /* Like build_cp_library_fn, but also pushes the function so that it
3976    will be found by normal lookup.  */
3977
3978 static tree
3979 push_cp_library_fn (enum tree_code operator_code, tree type)
3980 {
3981   tree fn = build_cp_library_fn (ansi_opname (operator_code),
3982                                  operator_code,
3983                                  type);
3984   pushdecl (fn);
3985   return fn;
3986 }
3987
3988 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3989    a FUNCTION_TYPE.  */
3990
3991 tree
3992 push_void_library_fn (tree name, tree parmtypes)
3993 {
3994   tree type = build_function_type (void_type_node, parmtypes);
3995   return push_library_fn (name, type, NULL_TREE);
3996 }
3997
3998 /* Like push_library_fn, but also note that this function throws
3999    and does not return.  Used for __throw_foo and the like.  */
4000
4001 tree
4002 push_throw_library_fn (tree name, tree type)
4003 {
4004   tree fn = push_library_fn (name, type, NULL_TREE);
4005   TREE_THIS_VOLATILE (fn) = 1;
4006   TREE_NOTHROW (fn) = 0;
4007   return fn;
4008 }
4009 \f
4010 /* When we call finish_struct for an anonymous union, we create
4011    default copy constructors and such.  But, an anonymous union
4012    shouldn't have such things; this function undoes the damage to the
4013    anonymous union type T.
4014
4015    (The reason that we create the synthesized methods is that we don't
4016    distinguish `union { int i; }' from `typedef union { int i; } U'.
4017    The first is an anonymous union; the second is just an ordinary
4018    union type.)  */
4019
4020 void
4021 fixup_anonymous_aggr (tree t)
4022 {
4023   tree *q;
4024
4025   /* Wipe out memory of synthesized methods.  */
4026   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4027   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4028   TYPE_HAS_COPY_CTOR (t) = 0;
4029   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4030   TYPE_HAS_COPY_ASSIGN (t) = 0;
4031   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4032
4033   /* Splice the implicitly generated functions out of the TYPE_METHODS
4034      list.  */
4035   q = &TYPE_METHODS (t);
4036   while (*q)
4037     {
4038       if (DECL_ARTIFICIAL (*q))
4039         *q = TREE_CHAIN (*q);
4040       else
4041         q = &DECL_CHAIN (*q);
4042     }
4043
4044   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4045   if (TYPE_METHODS (t))
4046     {
4047       tree decl = TYPE_MAIN_DECL (t);
4048
4049       if (TREE_CODE (t) != UNION_TYPE)
4050         error_at (DECL_SOURCE_LOCATION (decl), 
4051                   "an anonymous struct cannot have function members");
4052       else
4053         error_at (DECL_SOURCE_LOCATION (decl),
4054                   "an anonymous union cannot have function members");
4055     }
4056
4057   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4058      assignment operators (because they cannot have these methods themselves).
4059      For anonymous unions this is already checked because they are not allowed
4060      in any union, otherwise we have to check it.  */
4061   if (TREE_CODE (t) != UNION_TYPE)
4062     {
4063       tree field, type;
4064
4065       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4066         if (TREE_CODE (field) == FIELD_DECL)
4067           {
4068             type = TREE_TYPE (field);
4069             if (CLASS_TYPE_P (type))
4070               {
4071                 if (TYPE_NEEDS_CONSTRUCTING (type))
4072                   error ("member %q+#D with constructor not allowed "
4073                          "in anonymous aggregate", field);
4074                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4075                   error ("member %q+#D with destructor not allowed "
4076                          "in anonymous aggregate", field);
4077                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4078                   error ("member %q+#D with copy assignment operator "
4079                          "not allowed in anonymous aggregate", field);
4080               }
4081           }
4082     }
4083 }
4084
4085 /* Make sure that a declaration with no declarator is well-formed, i.e.
4086    just declares a tagged type or anonymous union.
4087
4088    Returns the type declared; or NULL_TREE if none.  */
4089
4090 tree
4091 check_tag_decl (cp_decl_specifier_seq *declspecs)
4092 {
4093   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4094   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4095   /* If a class, struct, or enum type is declared by the DECLSPECS
4096      (i.e, if a class-specifier, enum-specifier, or non-typename
4097      elaborated-type-specifier appears in the DECLSPECS),
4098      DECLARED_TYPE is set to the corresponding type.  */
4099   tree declared_type = NULL_TREE;
4100   bool error_p = false;
4101
4102   if (declspecs->multiple_types_p)
4103     error ("multiple types in one declaration");
4104   else if (declspecs->redefined_builtin_type)
4105     {
4106       if (!in_system_header)
4107         permerror (input_location, "redeclaration of C++ built-in type %qT",
4108                    declspecs->redefined_builtin_type);
4109       return NULL_TREE;
4110     }
4111
4112   if (declspecs->type
4113       && TYPE_P (declspecs->type)
4114       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4115            && MAYBE_CLASS_TYPE_P (declspecs->type))
4116           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4117     declared_type = declspecs->type;
4118   else if (declspecs->type == error_mark_node)
4119     error_p = true;
4120   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4121     permerror (input_location, "declaration does not declare anything");
4122   /* Check for an anonymous union.  */
4123   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4124            && TYPE_ANONYMOUS_P (declared_type))
4125     {
4126       /* 7/3 In a simple-declaration, the optional init-declarator-list
4127          can be omitted only when declaring a class (clause 9) or
4128          enumeration (7.2), that is, when the decl-specifier-seq contains
4129          either a class-specifier, an elaborated-type-specifier with
4130          a class-key (9.1), or an enum-specifier.  In these cases and
4131          whenever a class-specifier or enum-specifier is present in the
4132          decl-specifier-seq, the identifiers in these specifiers are among
4133          the names being declared by the declaration (as class-name,
4134          enum-names, or enumerators, depending on the syntax).  In such
4135          cases, and except for the declaration of an unnamed bit-field (9.6),
4136          the decl-specifier-seq shall introduce one or more names into the
4137          program, or shall redeclare a name introduced by a previous
4138          declaration.  [Example:
4139              enum { };                  // ill-formed
4140              typedef class { };         // ill-formed
4141          --end example]  */
4142       if (saw_typedef)
4143         {
4144           error ("missing type-name in typedef-declaration");
4145           return NULL_TREE;
4146         }
4147       /* Anonymous unions are objects, so they can have specifiers.  */;
4148       SET_ANON_AGGR_TYPE_P (declared_type);
4149
4150       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4151         pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4152     }
4153
4154   else
4155     {
4156       if (declspecs->specs[(int)ds_inline]
4157           || declspecs->specs[(int)ds_virtual])
4158         error ("%qs can only be specified for functions",
4159                declspecs->specs[(int)ds_inline]
4160                ? "inline" : "virtual");
4161       else if (saw_friend
4162                && (!current_class_type
4163                    || current_scope () != current_class_type))
4164         error ("%<friend%> can only be specified inside a class");
4165       else if (declspecs->specs[(int)ds_explicit])
4166         error ("%<explicit%> can only be specified for constructors");
4167       else if (declspecs->storage_class)
4168         error ("a storage class can only be specified for objects "
4169                "and functions");
4170       else if (declspecs->specs[(int)ds_const]
4171                || declspecs->specs[(int)ds_volatile]
4172                || declspecs->specs[(int)ds_restrict]
4173                || declspecs->specs[(int)ds_thread])
4174         error ("qualifiers can only be specified for objects "
4175                "and functions");
4176       else if (saw_typedef)
4177         warning (0, "%<typedef%> was ignored in this declaration");
4178       else if (declspecs->specs[(int) ds_constexpr])
4179         error ("%<constexpr%> cannot be used for type declarations");
4180     }
4181
4182   return declared_type;
4183 }
4184
4185 /* Called when a declaration is seen that contains no names to declare.
4186    If its type is a reference to a structure, union or enum inherited
4187    from a containing scope, shadow that tag name for the current scope
4188    with a forward reference.
4189    If its type defines a new named structure or union
4190    or defines an enum, it is valid but we need not do anything here.
4191    Otherwise, it is an error.
4192
4193    C++: may have to grok the declspecs to learn about static,
4194    complain for anonymous unions.
4195
4196    Returns the TYPE declared -- or NULL_TREE if none.  */
4197
4198 tree
4199 shadow_tag (cp_decl_specifier_seq *declspecs)
4200 {
4201   tree t = check_tag_decl (declspecs);
4202
4203   if (!t)
4204     return NULL_TREE;
4205
4206   if (declspecs->attributes)
4207     {
4208       warning (0, "attribute ignored in declaration of %q+#T", t);
4209       warning (0, "attribute for %q+#T must follow the %qs keyword",
4210                t, class_key_or_enum_as_string (t));
4211
4212     }
4213
4214   if (maybe_process_partial_specialization (t) == error_mark_node)
4215     return NULL_TREE;
4216
4217   /* This is where the variables in an anonymous union are
4218      declared.  An anonymous union declaration looks like:
4219      union { ... } ;
4220      because there is no declarator after the union, the parser
4221      sends that declaration here.  */
4222   if (ANON_AGGR_TYPE_P (t))
4223     {
4224       fixup_anonymous_aggr (t);
4225
4226       if (TYPE_FIELDS (t))
4227         {
4228           tree decl = grokdeclarator (/*declarator=*/NULL,
4229                                       declspecs, NORMAL, 0, NULL);
4230           finish_anon_union (decl);
4231         }
4232     }
4233
4234   return t;
4235 }
4236 \f
4237 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4238
4239 tree
4240 groktypename (cp_decl_specifier_seq *type_specifiers,
4241               const cp_declarator *declarator,
4242               bool is_template_arg)
4243 {
4244   tree attrs;
4245   tree type;
4246   enum decl_context context
4247     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4248   attrs = type_specifiers->attributes;
4249   type_specifiers->attributes = NULL_TREE;
4250   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4251   if (attrs && type != error_mark_node)
4252     {
4253       if (CLASS_TYPE_P (type))
4254         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4255                  "outside of definition", type);
4256       else if (MAYBE_CLASS_TYPE_P (type))
4257         /* A template type parameter or other dependent type.  */
4258         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4259                  "type %qT without an associated declaration", type);
4260       else
4261         cplus_decl_attributes (&type, attrs, 0);
4262     }
4263   return type;
4264 }
4265
4266 /* Process a DECLARATOR for a function-scope variable declaration,
4267    namespace-scope variable declaration, or function declaration.
4268    (Function definitions go through start_function; class member
4269    declarations appearing in the body of the class go through
4270    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4271    If an error occurs, the error_mark_node is returned instead.
4272    
4273    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4274    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4275    for an explicitly defaulted function, or SD_DELETED for an explicitly
4276    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4277    implicitly initialized via a default constructor.  ATTRIBUTES and
4278    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4279    *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4280    set, the caller is responsible for calling pop_scope.  */
4281
4282 tree
4283 start_decl (const cp_declarator *declarator,
4284             cp_decl_specifier_seq *declspecs,
4285             int initialized,
4286             tree attributes,
4287             tree prefix_attributes,
4288             tree *pushed_scope_p)
4289 {
4290   tree decl;
4291   tree context;
4292   bool was_public;
4293   int flags;
4294   bool alias;
4295
4296   *pushed_scope_p = NULL_TREE;
4297
4298   /* An object declared as __attribute__((deprecated)) suppresses
4299      warnings of uses of other deprecated items.  */
4300   if (lookup_attribute ("deprecated", attributes))
4301     deprecated_state = DEPRECATED_SUPPRESS;
4302
4303   attributes = chainon (attributes, prefix_attributes);
4304
4305   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4306                          &attributes);
4307
4308   deprecated_state = DEPRECATED_NORMAL;
4309
4310   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4311       || decl == error_mark_node)
4312     return error_mark_node;
4313
4314   context = CP_DECL_CONTEXT (decl);
4315   if (context != global_namespace)
4316     *pushed_scope_p = push_scope (context);
4317
4318   if (initialized)
4319     /* Is it valid for this decl to have an initializer at all?
4320        If not, set INITIALIZED to zero, which will indirectly
4321        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4322     switch (TREE_CODE (decl))
4323       {
4324       case TYPE_DECL:
4325         error ("typedef %qD is initialized (use decltype instead)", decl);
4326         return error_mark_node;
4327
4328       case FUNCTION_DECL:
4329         if (initialized == SD_DELETED)
4330           /* We'll handle the rest of the semantics later, but we need to
4331              set this now so it's visible to duplicate_decls.  */
4332           DECL_DELETED_FN (decl) = 1;
4333         break;
4334
4335       default:
4336         break;
4337       }
4338
4339   if (initialized)
4340     {
4341       if (! toplevel_bindings_p ()
4342           && DECL_EXTERNAL (decl))
4343         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4344                  decl);
4345       DECL_EXTERNAL (decl) = 0;
4346       if (toplevel_bindings_p ())
4347         TREE_STATIC (decl) = 1;
4348     }
4349   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4350   
4351   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4352     record_key_method_defined (decl);
4353
4354   /* If this is a typedef that names the class for linkage purposes
4355      (7.1.3p8), apply any attributes directly to the type.  */
4356   if (TREE_CODE (decl) == TYPE_DECL
4357       && TAGGED_TYPE_P (TREE_TYPE (decl))
4358       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4359     flags = ATTR_FLAG_TYPE_IN_PLACE;
4360   else
4361     flags = 0;
4362
4363   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4364   cplus_decl_attributes (&decl, attributes, flags);
4365
4366   /* Dllimported symbols cannot be defined.  Static data members (which
4367      can be initialized in-class and dllimported) go through grokfield,
4368      not here, so we don't need to exclude those decls when checking for
4369      a definition.  */
4370   if (initialized && DECL_DLLIMPORT_P (decl))
4371     {
4372       error ("definition of %q#D is marked %<dllimport%>", decl);
4373       DECL_DLLIMPORT_P (decl) = 0;
4374     }
4375
4376   /* If #pragma weak was used, mark the decl weak now.  */
4377   maybe_apply_pragma_weak (decl);
4378
4379   if (TREE_CODE (decl) == FUNCTION_DECL
4380       && DECL_DECLARED_INLINE_P (decl)
4381       && DECL_UNINLINABLE (decl)
4382       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4383     warning (0, "inline function %q+D given attribute noinline", decl);
4384
4385   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4386     {
4387       if (TREE_CODE (decl) == VAR_DECL)
4388         {
4389           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4390           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4391             error ("%q#D is not a static member of %q#T", decl, context);
4392           else
4393             {
4394               if (DECL_CONTEXT (field) != context)
4395                 {
4396                   if (!same_type_p (DECL_CONTEXT (field), context))
4397                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4398                                "to be defined as %<%T::%D%>",
4399                                DECL_CONTEXT (field), DECL_NAME (decl),
4400                                context, DECL_NAME (decl));
4401                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4402                 }
4403               if (processing_specialization
4404                   && template_class_depth (context) == 0
4405                   && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4406                 error ("template header not allowed in member definition "
4407                        "of explicitly specialized class");
4408               /* Static data member are tricky; an in-class initialization
4409                  still doesn't provide a definition, so the in-class
4410                  declaration will have DECL_EXTERNAL set, but will have an
4411                  initialization.  Thus, duplicate_decls won't warn
4412                  about this situation, and so we check here.  */
4413               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4414                 error ("duplicate initialization of %qD", decl);
4415               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4416                 decl = field;
4417               if (declspecs->specs[(int) ds_constexpr]
4418                   && !DECL_DECLARED_CONSTEXPR_P (field))
4419                 error ("%qD declared %<constexpr%> outside its class", field);
4420             }
4421         }
4422       else
4423         {
4424           tree field = check_classfn (context, decl,
4425                                       (processing_template_decl
4426                                        > template_class_depth (context))
4427                                       ? current_template_parms
4428                                       : NULL_TREE);
4429           if (field && field != error_mark_node
4430               && duplicate_decls (decl, field,
4431                                  /*newdecl_is_friend=*/false))
4432             decl = field;
4433         }
4434
4435       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4436       DECL_IN_AGGR_P (decl) = 0;
4437       /* Do not mark DECL as an explicit specialization if it was not
4438          already marked as an instantiation; a declaration should
4439          never be marked as a specialization unless we know what
4440          template is being specialized.  */
4441       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4442         {
4443           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4444
4445           /* [temp.expl.spec] An explicit specialization of a static data
4446              member of a template is a definition if the declaration
4447              includes an initializer; otherwise, it is a declaration.
4448
4449              We check for processing_specialization so this only applies
4450              to the new specialization syntax.  */
4451           if (!initialized && processing_specialization)
4452             DECL_EXTERNAL (decl) = 1;
4453         }
4454
4455       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4456           /* Aliases are definitions. */
4457           && !alias)
4458         permerror (input_location, "declaration of %q#D outside of class is not definition",
4459                    decl);
4460     }
4461
4462   was_public = TREE_PUBLIC (decl);
4463
4464   /* Enter this declaration into the symbol table.  */
4465   decl = maybe_push_decl (decl);
4466
4467   if (processing_template_decl)
4468     decl = push_template_decl (decl);
4469   if (decl == error_mark_node)
4470     return error_mark_node;
4471
4472   /* Tell the back end to use or not use .common as appropriate.  If we say
4473      -fconserve-space, we want this to save .data space, at the expense of
4474      wrong semantics.  If we say -fno-conserve-space, we want this to
4475      produce errors about redefs; to do this we force variables into the
4476      data segment.  */
4477   if (flag_conserve_space
4478       && TREE_CODE (decl) == VAR_DECL
4479       && TREE_PUBLIC (decl)
4480       && !DECL_THREAD_LOCAL_P (decl)
4481       && !have_global_bss_p ())
4482     DECL_COMMON (decl) = 1;
4483
4484   if (TREE_CODE (decl) == VAR_DECL
4485       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4486       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4487     {
4488       /* This is a const variable with implicit 'static'.  Set
4489          DECL_THIS_STATIC so we can tell it from variables that are
4490          !TREE_PUBLIC because of the anonymous namespace.  */
4491       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4492       DECL_THIS_STATIC (decl) = 1;
4493     }
4494
4495   if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4496     start_decl_1 (decl, initialized);
4497
4498   return decl;
4499 }
4500
4501 /* Process the declaration of a variable DECL.  INITIALIZED is true
4502    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4503    variable is initialized via an implicitly-called constructor.)
4504    This function must be called for ordinary variables (including, for
4505    example, implicit instantiations of templates), but must not be
4506    called for template declarations.  */
4507
4508 void
4509 start_decl_1 (tree decl, bool initialized)
4510 {
4511   tree type;
4512   bool complete_p;
4513   bool aggregate_definition_p;
4514
4515   gcc_assert (!processing_template_decl);
4516
4517   if (error_operand_p (decl))
4518     return;
4519
4520   gcc_assert (TREE_CODE (decl) == VAR_DECL);
4521
4522   type = TREE_TYPE (decl);
4523   complete_p = COMPLETE_TYPE_P (type);
4524   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4525
4526   /* If an explicit initializer is present, or if this is a definition
4527      of an aggregate, then we need a complete type at this point.
4528      (Scalars are always complete types, so there is nothing to
4529      check.)  This code just sets COMPLETE_P; errors (if necessary)
4530      are issued below.  */
4531   if ((initialized || aggregate_definition_p) 
4532       && !complete_p
4533       && COMPLETE_TYPE_P (complete_type (type)))
4534     {
4535       complete_p = true;
4536       /* We will not yet have set TREE_READONLY on DECL if the type
4537          was "const", but incomplete, before this point.  But, now, we
4538          have a complete type, so we can try again.  */
4539       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4540     }
4541
4542   if (initialized)
4543     /* Is it valid for this decl to have an initializer at all?  */
4544     {
4545       /* Don't allow initializations for incomplete types except for
4546          arrays which might be completed by the initialization.  */
4547       if (complete_p)
4548         ;                       /* A complete type is ok.  */
4549       else if (type_uses_auto (type))
4550         ;                       /* An auto type is ok.  */
4551       else if (TREE_CODE (type) != ARRAY_TYPE)
4552         {
4553           error ("variable %q#D has initializer but incomplete type", decl);
4554           type = TREE_TYPE (decl) = error_mark_node;
4555         }
4556       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4557         {
4558           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4559             error ("elements of array %q#D have incomplete type", decl);
4560           /* else we already gave an error in start_decl.  */
4561         }
4562     }
4563   else if (aggregate_definition_p && !complete_p)
4564     {
4565       if (type_uses_auto (type))
4566         error ("declaration of %q#D has no initializer", decl);
4567       else
4568         error ("aggregate %q#D has incomplete type and cannot be defined",
4569                decl);
4570       /* Change the type so that assemble_variable will give
4571          DECL an rtl we can live with: (mem (const_int 0)).  */
4572       type = TREE_TYPE (decl) = error_mark_node;
4573     }
4574
4575   /* Create a new scope to hold this declaration if necessary.
4576      Whether or not a new scope is necessary cannot be determined
4577      until after the type has been completed; if the type is a
4578      specialization of a class template it is not until after
4579      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4580      will be set correctly.  */
4581   maybe_push_cleanup_level (type);
4582 }
4583
4584 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4585    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4586    but will be set to a new CLEANUP_STMT if a temporary is created
4587    that must be destroyed subsequently.
4588
4589    Returns an initializer expression to use to initialize DECL, or
4590    NULL if the initialization can be performed statically.
4591
4592    Quotes on semantics can be found in ARM 8.4.3.  */
4593
4594 static tree
4595 grok_reference_init (tree decl, tree type, tree init, tree *cleanup,
4596                      int flags)
4597 {
4598   tree tmp;
4599
4600   if (init == NULL_TREE)
4601     {
4602       if ((DECL_LANG_SPECIFIC (decl) == 0
4603            || DECL_IN_AGGR_P (decl) == 0)
4604           && ! DECL_THIS_EXTERN (decl))
4605         error ("%qD declared as reference but not initialized", decl);
4606       return NULL_TREE;
4607     }
4608
4609   if (TREE_CODE (init) == TREE_LIST)
4610     init = build_x_compound_expr_from_list (init, ELK_INIT,
4611                                             tf_warning_or_error);
4612
4613   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4614       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4615     /* Note: default conversion is only called in very special cases.  */
4616     init = decay_conversion (init);
4617
4618   /* Convert INIT to the reference type TYPE.  This may involve the
4619      creation of a temporary, whose lifetime must be the same as that
4620      of the reference.  If so, a DECL_EXPR for the temporary will be
4621      added just after the DECL_EXPR for DECL.  That's why we don't set
4622      DECL_INITIAL for local references (instead assigning to them
4623      explicitly); we need to allow the temporary to be initialized
4624      first.  */
4625   tmp = initialize_reference (type, init, decl, cleanup, flags,
4626                               tf_warning_or_error);
4627   if (DECL_DECLARED_CONSTEXPR_P (decl))
4628     {
4629       tmp = cxx_constant_value (tmp);
4630       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
4631         = reduced_constant_expression_p (tmp);
4632     }
4633
4634   if (tmp == error_mark_node)
4635     return NULL_TREE;
4636   else if (tmp == NULL_TREE)
4637     {
4638       error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4639       return NULL_TREE;
4640     }
4641
4642   if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4643     return tmp;
4644
4645   DECL_INITIAL (decl) = tmp;
4646
4647   return NULL_TREE;
4648 }
4649
4650 /* Subroutine of check_initializer.  We're initializing a DECL of
4651    std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4652    extend the lifetime of the underlying array to match that of the decl,
4653    just like for reference initialization.  CLEANUP is as for
4654    grok_reference_init.  */
4655
4656 static tree
4657 build_init_list_var_init (tree decl, tree type, tree init, tree *array_init,
4658                           tree *cleanup)
4659 {
4660   tree aggr_init, array, arrtype;
4661   init = perform_implicit_conversion (type, init, tf_warning_or_error);
4662   if (error_operand_p (init))
4663     return error_mark_node;
4664
4665   aggr_init = TARGET_EXPR_INITIAL (init);
4666   array = CONSTRUCTOR_ELT (aggr_init, 0)->value;
4667   arrtype = TREE_TYPE (array);
4668   STRIP_NOPS (array);
4669   gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4670   array = TREE_OPERAND (array, 0);
4671   /* If the array is constant, finish_compound_literal already made it a
4672      static variable and we don't need to do anything here.  */
4673   if (decl && TREE_CODE (array) == TARGET_EXPR)
4674     {
4675       tree var = set_up_extended_ref_temp (decl, array, cleanup, array_init);
4676       var = build_address (var);
4677       var = convert (arrtype, var);
4678       CONSTRUCTOR_ELT (aggr_init, 0)->value = var;
4679     }
4680   return init;
4681 }
4682
4683 /* Designated initializers in arrays are not supported in GNU C++.
4684    The parser cannot detect this error since it does not know whether
4685    a given brace-enclosed initializer is for a class type or for an
4686    array.  This function checks that CE does not use a designated
4687    initializer.  If it does, an error is issued.  Returns true if CE
4688    is valid, i.e., does not have a designated initializer.  */
4689
4690 static bool
4691 check_array_designated_initializer (const constructor_elt *ce,
4692                                     unsigned HOST_WIDE_INT index)
4693 {
4694   /* Designated initializers for array elements are not supported.  */
4695   if (ce->index)
4696     {
4697       /* The parser only allows identifiers as designated
4698          initializers.  */
4699       if (ce->index == error_mark_node)
4700         error ("name used in a GNU-style designated "
4701                "initializer for an array");
4702       else if (TREE_CODE (ce->index) == INTEGER_CST)
4703         {
4704           /* A C99 designator is OK if it matches the current index.  */
4705           if (TREE_INT_CST_LOW (ce->index) == index)
4706             return true;
4707           else
4708             sorry ("non-trivial designated initializers not supported");
4709         }
4710       else
4711         {
4712           gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4713           error ("name %qD used in a GNU-style designated "
4714                  "initializer for an array", ce->index);
4715         }
4716       return false;
4717     }
4718
4719   return true;
4720 }
4721
4722 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4723    array until we finish parsing the initializer.  If that's the
4724    situation we're in, update DECL accordingly.  */
4725
4726 static void
4727 maybe_deduce_size_from_array_init (tree decl, tree init)
4728 {
4729   tree type = TREE_TYPE (decl);
4730
4731   if (TREE_CODE (type) == ARRAY_TYPE
4732       && TYPE_DOMAIN (type) == NULL_TREE
4733       && TREE_CODE (decl) != TYPE_DECL)
4734     {
4735       /* do_default is really a C-ism to deal with tentative definitions.
4736          But let's leave it here to ease the eventual merge.  */
4737       int do_default = !DECL_EXTERNAL (decl);
4738       tree initializer = init ? init : DECL_INITIAL (decl);
4739       int failure = 0;
4740
4741       /* Check that there are no designated initializers in INIT, as
4742          those are not supported in GNU C++, and as the middle-end
4743          will crash if presented with a non-numeric designated
4744          initializer.  */
4745       if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4746         {
4747           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4748           constructor_elt *ce;
4749           HOST_WIDE_INT i;
4750           FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4751             if (!check_array_designated_initializer (ce, i))
4752               failure = 1;
4753         }
4754
4755       if (!failure)
4756         {
4757           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4758                                             do_default);
4759           if (failure == 1)
4760             {
4761               error ("initializer fails to determine size of %qD", decl);
4762               TREE_TYPE (decl) = error_mark_node;
4763             }
4764           else if (failure == 2)
4765             {
4766               if (do_default)
4767                 {
4768                   error ("array size missing in %qD", decl);
4769                   TREE_TYPE (decl) = error_mark_node;
4770                 }
4771               /* If a `static' var's size isn't known, make it extern as
4772                  well as static, so it does not get allocated.  If it's not
4773                  `static', then don't mark it extern; finish_incomplete_decl
4774                  will give it a default size and it will get allocated.  */
4775               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4776                 DECL_EXTERNAL (decl) = 1;
4777             }
4778           else if (failure == 3)
4779             {
4780               error ("zero-size array %qD", decl);
4781               TREE_TYPE (decl) = error_mark_node;
4782             }
4783         }
4784
4785       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4786
4787       relayout_decl (decl);
4788     }
4789 }
4790
4791 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4792    any appropriate error messages regarding the layout.  */
4793
4794 static void
4795 layout_var_decl (tree decl)
4796 {
4797   tree type;
4798
4799   type = TREE_TYPE (decl);
4800   if (type == error_mark_node)
4801     return;
4802
4803   /* If we haven't already layed out this declaration, do so now.
4804      Note that we must not call complete type for an external object
4805      because it's type might involve templates that we are not
4806      supposed to instantiate yet.  (And it's perfectly valid to say
4807      `extern X x' for some incomplete type `X'.)  */
4808   if (!DECL_EXTERNAL (decl))
4809     complete_type (type);
4810   if (!DECL_SIZE (decl)
4811       && TREE_TYPE (decl) != error_mark_node
4812       && (COMPLETE_TYPE_P (type)
4813           || (TREE_CODE (type) == ARRAY_TYPE
4814               && !TYPE_DOMAIN (type)
4815               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4816     layout_decl (decl, 0);
4817
4818   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4819     {
4820       /* An automatic variable with an incomplete type: that is an error.
4821          Don't talk about array types here, since we took care of that
4822          message in grokdeclarator.  */
4823       error ("storage size of %qD isn%'t known", decl);
4824       TREE_TYPE (decl) = error_mark_node;
4825     }
4826 #if 0
4827   /* Keep this code around in case we later want to control debug info
4828      based on whether a type is "used".  (jason 1999-11-11) */
4829
4830   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4831     /* Let debugger know it should output info for this type.  */
4832     note_debug_info_needed (ttype);
4833
4834   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4835     note_debug_info_needed (DECL_CONTEXT (decl));
4836 #endif
4837
4838   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4839       && DECL_SIZE (decl) != NULL_TREE
4840       && ! TREE_CONSTANT (DECL_SIZE (decl)))
4841     {
4842       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4843         constant_expression_warning (DECL_SIZE (decl));
4844       else
4845         {
4846           error ("storage size of %qD isn%'t constant", decl);
4847           TREE_TYPE (decl) = error_mark_node;
4848         }
4849     }
4850 }
4851
4852 /* If a local static variable is declared in an inline function, or if
4853    we have a weak definition, we must endeavor to create only one
4854    instance of the variable at link-time.  */
4855
4856 void
4857 maybe_commonize_var (tree decl)
4858 {
4859   /* Static data in a function with comdat linkage also has comdat
4860      linkage.  */
4861   if (TREE_STATIC (decl)
4862       /* Don't mess with __FUNCTION__.  */
4863       && ! DECL_ARTIFICIAL (decl)
4864       && DECL_FUNCTION_SCOPE_P (decl)
4865       && vague_linkage_p (DECL_CONTEXT (decl)))
4866     {
4867       if (flag_weak)
4868         {
4869           /* With weak symbols, we simply make the variable COMDAT;
4870              that will cause copies in multiple translations units to
4871              be merged.  */
4872           comdat_linkage (decl);
4873         }
4874       else
4875         {
4876           if (DECL_INITIAL (decl) == NULL_TREE
4877               || DECL_INITIAL (decl) == error_mark_node)
4878             {
4879               /* Without weak symbols, we can use COMMON to merge
4880                  uninitialized variables.  */
4881               TREE_PUBLIC (decl) = 1;
4882               DECL_COMMON (decl) = 1;
4883             }
4884           else
4885             {
4886               /* While for initialized variables, we must use internal
4887                  linkage -- which means that multiple copies will not
4888                  be merged.  */
4889               TREE_PUBLIC (decl) = 0;
4890               DECL_COMMON (decl) = 0;
4891               warning_at (input_location, 0,
4892                           "sorry: semantics of inline function static "
4893                           "data %q+#D are wrong (you%'ll wind up "
4894                           "with multiple copies)", decl);
4895               warning_at (DECL_SOURCE_LOCATION (decl), 0, 
4896                           "  you can work around this by removing "
4897                           "the initializer");
4898             }
4899         }
4900     }
4901   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4902     /* Set it up again; we might have set DECL_INITIAL since the last
4903        time.  */
4904     comdat_linkage (decl);
4905 }
4906
4907 /* Issue an error message if DECL is an uninitialized const variable.  */
4908
4909 static void
4910 check_for_uninitialized_const_var (tree decl)
4911 {
4912   tree type = strip_array_types (TREE_TYPE (decl));
4913
4914   /* ``Unless explicitly declared extern, a const object does not have
4915      external linkage and must be initialized. ($8.4; $12.1)'' ARM
4916      7.1.6 */
4917   if (TREE_CODE (decl) == VAR_DECL
4918       && TREE_CODE (type) != REFERENCE_TYPE
4919       && CP_TYPE_CONST_P (type)
4920       && !DECL_INITIAL (decl))
4921     {
4922       tree field = default_init_uninitialized_part (type);
4923       if (!field)
4924         return;
4925
4926       permerror (DECL_SOURCE_LOCATION (decl),
4927                  "uninitialized const %qD", decl);
4928
4929       if (CLASS_TYPE_P (type))
4930         {
4931           tree defaulted_ctor;
4932
4933           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4934                   "%q#T has no user-provided default constructor", type);
4935           defaulted_ctor = in_class_defaulted_default_constructor (type);
4936           if (defaulted_ctor)
4937             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4938                     "constructor is not user-provided because it is "
4939                     "explicitly defaulted in the class body");
4940           inform (0, "and the implicitly-defined constructor does not "
4941                   "initialize %q+#D", field);
4942         }
4943     }
4944 }
4945 \f
4946 /* Structure holding the current initializer being processed by reshape_init.
4947    CUR is a pointer to the current element being processed, END is a pointer
4948    after the last element present in the initializer.  */
4949 typedef struct reshape_iterator_t
4950 {
4951   constructor_elt *cur;
4952   constructor_elt *end;
4953 } reshape_iter;
4954
4955 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4956
4957 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4958    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4959    initialized.  If there are no more such fields, the return value
4960    will be NULL.  */
4961
4962 tree
4963 next_initializable_field (tree field)
4964 {
4965   while (field
4966          && (TREE_CODE (field) != FIELD_DECL
4967              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4968              || DECL_ARTIFICIAL (field)))
4969     field = DECL_CHAIN (field);
4970
4971   return field;
4972 }
4973
4974 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4975    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4976    INTEGER_CST representing the size of the array minus one (the maximum index),
4977    or NULL_TREE if the array was declared without specifying the size. D is
4978    the iterator within the constructor.  */
4979
4980 static tree
4981 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4982                       tsubst_flags_t complain)
4983 {
4984   tree new_init;
4985   bool sized_array_p = (max_index != NULL_TREE);
4986   unsigned HOST_WIDE_INT max_index_cst = 0;
4987   unsigned HOST_WIDE_INT index;
4988
4989   /* The initializer for an array is always a CONSTRUCTOR.  */
4990   new_init = build_constructor (init_list_type_node, NULL);
4991
4992   if (sized_array_p)
4993     {
4994       /* Minus 1 is used for zero sized arrays.  */
4995       if (integer_all_onesp (max_index))
4996         return new_init;
4997
4998       if (host_integerp (max_index, 1))
4999         max_index_cst = tree_low_cst (max_index, 1);
5000       /* sizetype is sign extended, not zero extended.  */
5001       else
5002         max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
5003                                       1);
5004     }
5005
5006   /* Loop until there are no more initializers.  */
5007   for (index = 0;
5008        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5009        ++index)
5010     {
5011       tree elt_init;
5012
5013       check_array_designated_initializer (d->cur, index);
5014       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5015                                  complain);
5016       if (elt_init == error_mark_node)
5017         return error_mark_node;
5018       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5019                               size_int (index), elt_init);
5020       if (!TREE_CONSTANT (elt_init))
5021         TREE_CONSTANT (new_init) = false;
5022     }
5023
5024   return new_init;
5025 }
5026
5027 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5028    Parameters are the same of reshape_init_r.  */
5029
5030 static tree
5031 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5032 {
5033   tree max_index = NULL_TREE;
5034
5035   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5036
5037   if (TYPE_DOMAIN (type))
5038     max_index = array_type_nelts (type);
5039
5040   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5041 }
5042
5043 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5044    Parameters are the same of reshape_init_r.  */
5045
5046 static tree
5047 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5048 {
5049   tree max_index = NULL_TREE;
5050
5051   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5052
5053   if (COMPOUND_LITERAL_P (d->cur->value))
5054     {
5055       tree value = d->cur->value;
5056       if (!same_type_p (TREE_TYPE (value), type))
5057         {
5058           if (complain & tf_error)
5059             error ("invalid type %qT as initializer for a vector of type %qT",
5060                    TREE_TYPE (d->cur->value), type);
5061           value = error_mark_node;
5062         }
5063       ++d->cur;
5064       return value;
5065     }
5066
5067   /* For a vector, we initialize it as an array of the appropriate size.  */
5068   if (TREE_CODE (type) == VECTOR_TYPE)
5069     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5070
5071   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5072 }
5073
5074 /* Subroutine of reshape_init_r, processes the initializers for classes
5075    or union. Parameters are the same of reshape_init_r.  */
5076
5077 static tree
5078 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5079                     tsubst_flags_t complain)
5080 {
5081   tree field;
5082   tree new_init;
5083
5084   gcc_assert (CLASS_TYPE_P (type));
5085
5086   /* The initializer for a class is always a CONSTRUCTOR.  */
5087   new_init = build_constructor (init_list_type_node, NULL);
5088   field = next_initializable_field (TYPE_FIELDS (type));
5089
5090   if (!field)
5091     {
5092       /* [dcl.init.aggr]
5093
5094         An initializer for an aggregate member that is an
5095         empty class shall have the form of an empty
5096         initializer-list {}.  */
5097       if (!first_initializer_p)
5098         {
5099           if (complain & tf_error)
5100             error ("initializer for %qT must be brace-enclosed", type);
5101           return error_mark_node;
5102         }
5103       return new_init;
5104     }
5105
5106   /* Loop through the initializable fields, gathering initializers.  */
5107   while (d->cur != d->end)
5108     {
5109       tree field_init;
5110
5111       /* Handle designated initializers, as an extension.  */
5112       if (d->cur->index)
5113         {
5114           field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5115
5116           if (!field || TREE_CODE (field) != FIELD_DECL)
5117             {
5118               if (complain & tf_error)
5119                 error ("%qT has no non-static data member named %qD", type,
5120                        d->cur->index);
5121               return error_mark_node;
5122             }
5123         }
5124
5125       /* If we processed all the member of the class, we are done.  */
5126       if (!field)
5127         break;
5128
5129       field_init = reshape_init_r (TREE_TYPE (field), d,
5130                                    /*first_initializer_p=*/false, complain);
5131       if (field_init == error_mark_node)
5132         return error_mark_node;
5133
5134       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5135
5136       /* [dcl.init.aggr]
5137
5138         When a union  is  initialized with a brace-enclosed
5139         initializer, the braces shall only contain an
5140         initializer for the first member of the union.  */
5141       if (TREE_CODE (type) == UNION_TYPE)
5142         break;
5143
5144       field = next_initializable_field (DECL_CHAIN (field));
5145     }
5146
5147   return new_init;
5148 }
5149
5150 /* Subroutine of reshape_init, which processes a single initializer (part of
5151    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5152    iterator within the CONSTRUCTOR which points to the initializer to process.
5153    FIRST_INITIALIZER_P is true if this is the first initializer of the
5154    outermost CONSTRUCTOR node.  */
5155
5156 static tree
5157 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5158                 tsubst_flags_t complain)
5159 {
5160   tree init = d->cur->value;
5161
5162   if (error_operand_p (init))
5163     return error_mark_node;
5164
5165   if (TREE_CODE (type) == COMPLEX_TYPE)
5166     {
5167       /* A complex type can be initialized from one or two initializers,
5168          but braces are not elided.  */
5169       d->cur++;
5170       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5171         {
5172           if (CONSTRUCTOR_NELTS (init) > 2)
5173             {
5174               if (complain & tf_error)
5175                 error ("too many initializers for %qT", type);
5176               else
5177                 return error_mark_node;
5178             }
5179         }
5180       else if (first_initializer_p && d->cur != d->end)
5181         {
5182           VEC(constructor_elt, gc) *v = 0;
5183           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5184           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5185           d->cur++;
5186           init = build_constructor (init_list_type_node, v);
5187         }
5188       return init;
5189     }
5190
5191   /* A non-aggregate type is always initialized with a single
5192      initializer.  */
5193   if (!CP_AGGREGATE_TYPE_P (type))
5194     {
5195       /* It is invalid to initialize a non-aggregate type with a
5196          brace-enclosed initializer before C++0x.
5197          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5198          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5199          a CONSTRUCTOR (with a record type).  */
5200       if (TREE_CODE (init) == CONSTRUCTOR
5201           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5202         {
5203           if (SCALAR_TYPE_P (type))
5204             {
5205               if (complain & tf_error)
5206                 error ("braces around scalar initializer for type %qT", type);
5207               init = error_mark_node;
5208             }
5209           else
5210             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5211         }
5212
5213       d->cur++;
5214       return init;
5215     }
5216
5217   /* [dcl.init.aggr]
5218
5219      All implicit type conversions (clause _conv_) are considered when
5220      initializing the aggregate member with an initializer from an
5221      initializer-list.  If the initializer can initialize a member,
5222      the member is initialized.  Otherwise, if the member is itself a
5223      non-empty subaggregate, brace elision is assumed and the
5224      initializer is considered for the initialization of the first
5225      member of the subaggregate.  */
5226   if (TREE_CODE (init) != CONSTRUCTOR
5227       /* But don't try this for the first initializer, since that would be
5228          looking through the outermost braces; A a2 = { a1 }; is not a
5229          valid aggregate initialization.  */
5230       && !first_initializer_p
5231       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5232           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5233     {
5234       d->cur++;
5235       return init;
5236     }
5237
5238   /* [dcl.init.string]
5239
5240       A char array (whether plain char, signed char, or unsigned char)
5241       can be initialized by a string-literal (optionally enclosed in
5242       braces); a wchar_t array can be initialized by a wide
5243       string-literal (optionally enclosed in braces).  */
5244   if (TREE_CODE (type) == ARRAY_TYPE
5245       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5246     {
5247       tree str_init = init;
5248
5249       /* Strip one level of braces if and only if they enclose a single
5250          element (as allowed by [dcl.init.string]).  */
5251       if (!first_initializer_p
5252           && TREE_CODE (str_init) == CONSTRUCTOR
5253           && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5254         {
5255           str_init = VEC_index (constructor_elt,
5256                                 CONSTRUCTOR_ELTS (str_init), 0)->value;
5257         }
5258
5259       /* If it's a string literal, then it's the initializer for the array
5260          as a whole. Otherwise, continue with normal initialization for
5261          array types (one value per array element).  */
5262       if (TREE_CODE (str_init) == STRING_CST)
5263         {
5264           d->cur++;
5265           return str_init;
5266         }
5267     }
5268
5269   /* The following cases are about aggregates. If we are not within a full
5270      initializer already, and there is not a CONSTRUCTOR, it means that there
5271      is a missing set of braces (that is, we are processing the case for
5272      which reshape_init exists).  */
5273   if (!first_initializer_p)
5274     {
5275       if (TREE_CODE (init) == CONSTRUCTOR)
5276         {
5277           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5278             /* There is no need to reshape pointer-to-member function
5279                initializers, as they are always constructed correctly
5280                by the front end.  */
5281            ;
5282           else if (COMPOUND_LITERAL_P (init))
5283           /* For a nested compound literal, there is no need to reshape since
5284              brace elision is not allowed. Even if we decided to allow it,
5285              we should add a call to reshape_init in finish_compound_literal,
5286              before calling digest_init, so changing this code would still
5287              not be necessary.  */
5288             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5289           else
5290             {
5291               ++d->cur;
5292               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5293               return reshape_init (type, init, complain);
5294             }
5295         }
5296
5297       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5298                type);
5299     }
5300
5301   /* Dispatch to specialized routines.  */
5302   if (CLASS_TYPE_P (type))
5303     return reshape_init_class (type, d, first_initializer_p, complain);
5304   else if (TREE_CODE (type) == ARRAY_TYPE)
5305     return reshape_init_array (type, d, complain);
5306   else if (TREE_CODE (type) == VECTOR_TYPE)
5307     return reshape_init_vector (type, d, complain);
5308   else
5309     gcc_unreachable();
5310 }
5311
5312 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5313    brace-enclosed aggregate initializer.
5314
5315    INIT is the CONSTRUCTOR containing the list of initializers describing
5316    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5317    It may not presently match the shape of the TYPE; for example:
5318
5319      struct S { int a; int b; };
5320      struct S a[] = { 1, 2, 3, 4 };
5321
5322    Here INIT will hold a VEC of four elements, rather than a
5323    VEC of two elements, each itself a VEC of two elements.  This
5324    routine transforms INIT from the former form into the latter.  The
5325    revised CONSTRUCTOR node is returned.  */
5326
5327 tree
5328 reshape_init (tree type, tree init, tsubst_flags_t complain)
5329 {
5330   VEC(constructor_elt, gc) *v;
5331   reshape_iter d;
5332   tree new_init;
5333
5334   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5335
5336   v = CONSTRUCTOR_ELTS (init);
5337
5338   /* An empty constructor does not need reshaping, and it is always a valid
5339      initializer.  */
5340   if (VEC_empty (constructor_elt, v))
5341     return init;
5342
5343   /* Recurse on this CONSTRUCTOR.  */
5344   d.cur = VEC_index (constructor_elt, v, 0);
5345   d.end = d.cur + VEC_length (constructor_elt, v);
5346
5347   new_init = reshape_init_r (type, &d, true, complain);
5348   if (new_init == error_mark_node)
5349     return error_mark_node;
5350
5351   /* Make sure all the element of the constructor were used. Otherwise,
5352      issue an error about exceeding initializers.  */
5353   if (d.cur != d.end)
5354     {
5355       if (complain & tf_error)
5356         error ("too many initializers for %qT", type);
5357       else
5358         return error_mark_node;
5359     }
5360
5361   return new_init;
5362 }
5363
5364 /* Verify array initializer.  Returns true if errors have been reported.  */
5365
5366 bool
5367 check_array_initializer (tree decl, tree type, tree init)
5368 {
5369   tree element_type = TREE_TYPE (type);
5370
5371   /* The array type itself need not be complete, because the
5372      initializer may tell us how many elements are in the array.
5373      But, the elements of the array must be complete.  */
5374   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5375     {
5376       if (decl)
5377         error ("elements of array %q#D have incomplete type", decl);
5378       else
5379         error ("elements of array %q#T have incomplete type", type);
5380       return true;
5381     }
5382   /* It is not valid to initialize a VLA.  */
5383   if (init
5384       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5385           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5386     {
5387       if (decl)
5388         error ("variable-sized object %qD may not be initialized", decl);
5389       else
5390         error ("variable-sized compound literal");
5391       return true;
5392     }
5393   return false;
5394 }
5395
5396 /* Subroutine of check_initializer; args are passed down from that function.
5397    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5398
5399 static tree
5400 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5401      
5402 {
5403   int saved_stmts_are_full_exprs_p = 0;
5404   if (building_stmt_list_p ())
5405     {
5406       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5407       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5408     }
5409   init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5410   if (building_stmt_list_p ())
5411     current_stmt_tree ()->stmts_are_full_exprs_p =
5412       saved_stmts_are_full_exprs_p;
5413   return init;
5414 }
5415
5416 /* Verify INIT (the initializer for DECL), and record the
5417    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5418    grok_reference_init.
5419
5420    If the return value is non-NULL, it is an expression that must be
5421    evaluated dynamically to initialize DECL.  */
5422
5423 static tree
5424 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5425 {
5426   tree type = TREE_TYPE (decl);
5427   tree init_code = NULL;
5428   tree extra_init = NULL_TREE;
5429   tree core_type;
5430
5431   /* Things that are going to be initialized need to have complete
5432      type.  */
5433   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5434
5435   if (DECL_HAS_VALUE_EXPR_P (decl))
5436     {
5437       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5438          it doesn't have storage to be initialized.  */
5439       gcc_assert (init == NULL_TREE);
5440       return NULL_TREE;
5441     }
5442
5443   if (type == error_mark_node)
5444     /* We will have already complained.  */
5445     return NULL_TREE;
5446
5447   if (TREE_CODE (type) == ARRAY_TYPE)
5448     {
5449       if (check_array_initializer (decl, type, init))
5450         return NULL_TREE;
5451     }
5452   else if (!COMPLETE_TYPE_P (type))
5453     {
5454       error ("%qD has incomplete type", decl);
5455       TREE_TYPE (decl) = error_mark_node;
5456       return NULL_TREE;
5457     }
5458   else
5459     /* There is no way to make a variable-sized class type in GNU C++.  */
5460     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5461
5462   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5463     {
5464       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5465       if (SCALAR_TYPE_P (type))
5466         {
5467           if (init_len == 0)
5468             {
5469               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5470               init = build_zero_init (type, NULL_TREE, false);
5471             }
5472           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5473             {
5474               error ("scalar object %qD requires one element in initializer",
5475                      decl);
5476               TREE_TYPE (decl) = error_mark_node;
5477               return NULL_TREE;
5478             }
5479         }
5480     }
5481
5482   if (TREE_CODE (decl) == CONST_DECL)
5483     {
5484       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5485
5486       DECL_INITIAL (decl) = init;
5487
5488       gcc_assert (init != NULL_TREE);
5489       init = NULL_TREE;
5490     }
5491   else if (!init && DECL_REALLY_EXTERN (decl))
5492     ;
5493   else if (TREE_CODE (type) == REFERENCE_TYPE)
5494     init = grok_reference_init (decl, type, init, cleanup, flags);
5495   else if (init || type_build_ctor_call (type))
5496     {
5497       if (!init)
5498         check_for_uninitialized_const_var (decl);
5499       /* Do not reshape constructors of vectors (they don't need to be
5500          reshaped.  */
5501       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5502         {
5503           if (is_std_init_list (type))
5504             init = build_init_list_var_init (decl, type, init,
5505                                              &extra_init, cleanup);
5506           else if (TYPE_NON_AGGREGATE_CLASS (type))
5507             {
5508               /* Don't reshape if the class has constructors.  */
5509               if (cxx_dialect == cxx98)
5510                 error ("in C++98 %qD must be initialized by constructor, "
5511                        "not by %<{...}%>",
5512                        decl);
5513             }
5514           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5515             {
5516               error ("opaque vector types cannot be initialized");
5517               init = error_mark_node;
5518             }
5519           else
5520             {
5521               init = reshape_init (type, init, tf_warning_or_error);
5522               if (cxx_dialect >= cxx0x && SCALAR_TYPE_P (type))
5523                 check_narrowing (type, init);
5524             }
5525         }
5526
5527       /* If DECL has an array type without a specific bound, deduce the
5528          array size from the initializer.  */
5529       maybe_deduce_size_from_array_init (decl, init);
5530       type = TREE_TYPE (decl);
5531       if (type == error_mark_node)
5532         return NULL_TREE;
5533
5534       if (type_build_ctor_call (type)
5535           || (CLASS_TYPE_P (type)
5536               && !(init && BRACE_ENCLOSED_INITIALIZER_P (init))))
5537         {
5538           init_code = build_aggr_init_full_exprs (decl, init, flags);
5539
5540           /* If this is a constexpr initializer, expand_default_init will
5541              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5542              case, pull the initializer back out and pass it down into
5543              store_init_value.  */
5544           while (TREE_CODE (init_code) == EXPR_STMT
5545                  || TREE_CODE (init_code) == CONVERT_EXPR)
5546             init_code = TREE_OPERAND (init_code, 0);
5547           if (TREE_CODE (init_code) == INIT_EXPR)
5548             {
5549               init = TREE_OPERAND (init_code, 1);
5550               init_code = NULL_TREE;
5551               /* Don't call digest_init; it's unnecessary and will complain
5552                  about aggregate initialization of non-aggregate classes.  */
5553               flags |= LOOKUP_ALREADY_DIGESTED;
5554             }
5555           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5556             {
5557               /* Declared constexpr, but no suitable initializer; massage
5558                  init appropriately so we can pass it into store_init_value
5559                  for the error.  */
5560               if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5561                 init = finish_compound_literal (type, init,
5562                                                 tf_warning_or_error);
5563               else if (CLASS_TYPE_P (type)
5564                        && (!init || TREE_CODE (init) == TREE_LIST))
5565                 {
5566                   init = build_functional_cast (type, init, tf_none);
5567                   if (init != error_mark_node)
5568                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5569                 }
5570               init_code = NULL_TREE;
5571             }
5572           else
5573             init = NULL_TREE;
5574         }
5575
5576       if (init && TREE_CODE (init) != TREE_VEC)
5577         {
5578           init_code = store_init_value (decl, init, flags);
5579           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5580               && DECL_INITIAL (decl)
5581               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5582               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5583             warning (0, "array %qD initialized by parenthesized string literal %qE",
5584                      decl, DECL_INITIAL (decl));
5585           init = NULL;
5586         }
5587     }
5588   else
5589     {
5590       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5591           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5592               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5593         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5594                                                   /*complain=*/true);
5595
5596       check_for_uninitialized_const_var (decl);
5597     }
5598
5599   if (init && init != error_mark_node)
5600     init_code = build2 (INIT_EXPR, type, decl, init);
5601
5602   if (extra_init)
5603     init_code = add_stmt_to_compound (extra_init, init_code);
5604
5605   if (init_code && DECL_IN_AGGR_P (decl))
5606     {
5607       static int explained = 0;
5608
5609       if (cxx_dialect < cxx0x)
5610         error ("initializer invalid for static member with constructor");
5611       else
5612         error ("non-constant in-class initialization invalid for static "
5613                "member %qD", decl);
5614       if (!explained)
5615         {
5616           error ("(an out of class initialization is required)");
5617           explained = 1;
5618         }
5619     }
5620
5621   return init_code;
5622 }
5623
5624 /* If DECL is not a local variable, give it RTL.  */
5625
5626 static void
5627 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5628 {
5629   int toplev = toplevel_bindings_p ();
5630   int defer_p;
5631   const char *filename;
5632
5633   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5634   if (asmspec)
5635     {
5636       /* The `register' keyword, when used together with an
5637          asm-specification, indicates that the variable should be
5638          placed in a particular register.  */
5639       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5640         {
5641           set_user_assembler_name (decl, asmspec);
5642           DECL_HARD_REGISTER (decl) = 1;
5643         }
5644       else
5645         {
5646           if (TREE_CODE (decl) == FUNCTION_DECL
5647               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5648             set_builtin_user_assembler_name (decl, asmspec);
5649           set_user_assembler_name (decl, asmspec);
5650         }
5651     }
5652
5653   /* Handle non-variables up front.  */
5654   if (TREE_CODE (decl) != VAR_DECL)
5655     {
5656       rest_of_decl_compilation (decl, toplev, at_eof);
5657       return;
5658     }
5659
5660   /* If we see a class member here, it should be a static data
5661      member.  */
5662   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5663     {
5664       gcc_assert (TREE_STATIC (decl));
5665       /* An in-class declaration of a static data member should be
5666          external; it is only a declaration, and not a definition.  */
5667       if (init == NULL_TREE)
5668         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5669     }
5670
5671   /* We don't create any RTL for local variables.  */
5672   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5673     return;
5674
5675   /* We defer emission of local statics until the corresponding
5676      DECL_EXPR is expanded.  */
5677   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5678
5679   /* We try to defer namespace-scope static constants so that they are
5680      not emitted into the object file unnecessarily.  */
5681   filename = input_filename;
5682   if (!DECL_VIRTUAL_P (decl)
5683       && TREE_READONLY (decl)
5684       && DECL_INITIAL (decl) != NULL_TREE
5685       && DECL_INITIAL (decl) != error_mark_node
5686       && filename != NULL
5687       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5688       && toplev
5689       && !TREE_PUBLIC (decl))
5690     {
5691       /* Fool with the linkage of static consts according to #pragma
5692          interface.  */
5693       struct c_fileinfo *finfo = get_fileinfo (filename);
5694       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5695         {
5696           TREE_PUBLIC (decl) = 1;
5697           DECL_EXTERNAL (decl) = finfo->interface_only;
5698         }
5699
5700       defer_p = 1;
5701     }
5702   /* Likewise for template instantiations.  */
5703   else if (DECL_LANG_SPECIFIC (decl)
5704            && DECL_IMPLICIT_INSTANTIATION (decl))
5705     defer_p = 1;
5706
5707   /* If we're not deferring, go ahead and assemble the variable.  */
5708   if (!defer_p)
5709     rest_of_decl_compilation (decl, toplev, at_eof);
5710 }
5711
5712 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5713
5714 static tree
5715 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5716 {
5717   if (TYPE_P (*stmt_p))
5718     {
5719       *walk_subtrees = 0;
5720       return NULL_TREE;
5721     }
5722
5723   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5724     {
5725       tree guard = (tree)data;
5726       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5727
5728       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5729       /* Tell honor_protect_cleanup_actions to handle this as a separate
5730          cleanup.  */
5731       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5732  
5733       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5734     }
5735
5736   return NULL_TREE;
5737 }
5738
5739 /* We're initializing a local variable which has a cleanup GUARD.  If there
5740    are any temporaries used in the initializer INIT of this variable, we
5741    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5742    variable will be cleaned up properly if one of them throws.
5743
5744    Unfortunately, there's no way to express this properly in terms of
5745    nesting, as the regions for the temporaries overlap the region for the
5746    variable itself; if there are two temporaries, the variable needs to be
5747    the first thing destroyed if either of them throws.  However, we only
5748    want to run the variable's cleanup if it actually got constructed.  So
5749    we need to guard the temporary cleanups with the variable's cleanup if
5750    they are run on the normal path, but not if they are run on the
5751    exceptional path.  We implement this by telling
5752    honor_protect_cleanup_actions to strip the variable cleanup from the
5753    exceptional path.  */
5754
5755 static void
5756 wrap_temporary_cleanups (tree init, tree guard)
5757 {
5758   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5759 }
5760
5761 /* Generate code to initialize DECL (a local variable).  */
5762
5763 static void
5764 initialize_local_var (tree decl, tree init)
5765 {
5766   tree type = TREE_TYPE (decl);
5767   tree cleanup;
5768   int already_used;
5769
5770   gcc_assert (TREE_CODE (decl) == VAR_DECL
5771               || TREE_CODE (decl) == RESULT_DECL);
5772   gcc_assert (!TREE_STATIC (decl));
5773
5774   if (DECL_SIZE (decl) == NULL_TREE)
5775     {
5776       /* If we used it already as memory, it must stay in memory.  */
5777       DECL_INITIAL (decl) = NULL_TREE;
5778       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5779       return;
5780     }
5781
5782   if (type == error_mark_node)
5783     return;
5784
5785   /* Compute and store the initial value.  */
5786   already_used = TREE_USED (decl) || TREE_USED (type);
5787   if (TREE_USED (type))
5788     DECL_READ_P (decl) = 1;
5789
5790   /* Generate a cleanup, if necessary.  */
5791   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5792
5793   /* Perform the initialization.  */
5794   if (init)
5795     {
5796       if (TREE_CODE (init) == INIT_EXPR
5797           && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5798         {
5799           /* Stick simple initializers in DECL_INITIAL so that
5800              -Wno-init-self works (c++/34772).  */
5801           gcc_assert (TREE_OPERAND (init, 0) == decl);
5802           DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5803         }
5804       else
5805         {
5806           int saved_stmts_are_full_exprs_p;
5807
5808           /* If we're only initializing a single object, guard the
5809              destructors of any temporaries used in its initializer with
5810              its destructor.  This isn't right for arrays because each
5811              element initialization is a full-expression.  */
5812           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5813             wrap_temporary_cleanups (init, cleanup);
5814
5815           gcc_assert (building_stmt_list_p ());
5816           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5817           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5818           finish_expr_stmt (init);
5819           current_stmt_tree ()->stmts_are_full_exprs_p =
5820             saved_stmts_are_full_exprs_p;
5821         }
5822     }
5823
5824   /* Set this to 0 so we can tell whether an aggregate which was
5825      initialized was ever used.  Don't do this if it has a
5826      destructor, so we don't complain about the 'resource
5827      allocation is initialization' idiom.  Now set
5828      attribute((unused)) on types so decls of that type will be
5829      marked used. (see TREE_USED, above.)  */
5830   if (TYPE_NEEDS_CONSTRUCTING (type)
5831       && ! already_used
5832       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5833       && DECL_NAME (decl))
5834     TREE_USED (decl) = 0;
5835   else if (already_used)
5836     TREE_USED (decl) = 1;
5837
5838   if (cleanup)
5839     finish_decl_cleanup (decl, cleanup);
5840 }
5841
5842 /* DECL is a VAR_DECL for a compiler-generated variable with static
5843    storage duration (like a virtual table) whose initializer is a
5844    compile-time constant.  Initialize the variable and provide it to the
5845    back end.  */
5846
5847 void
5848 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5849 {
5850   tree init;
5851   gcc_assert (DECL_ARTIFICIAL (decl));
5852   init = build_constructor (TREE_TYPE (decl), v);
5853   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5854   DECL_INITIAL (decl) = init;
5855   DECL_INITIALIZED_P (decl) = 1;
5856   determine_visibility (decl);
5857   layout_var_decl (decl);
5858   maybe_commonize_var (decl);
5859   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5860 }
5861
5862 /* INIT is the initializer for a variable, as represented by the
5863    parser.  Returns true iff INIT is type-dependent.  */
5864
5865 static bool
5866 type_dependent_init_p (tree init)
5867 {
5868   if (TREE_CODE (init) == TREE_LIST)
5869     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5870     return any_type_dependent_elements_p (init);
5871   else if (TREE_CODE (init) == CONSTRUCTOR)
5872   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5873     {
5874       VEC(constructor_elt, gc) *elts;
5875       size_t nelts;
5876       size_t i;
5877
5878       elts = CONSTRUCTOR_ELTS (init);
5879       nelts = VEC_length (constructor_elt, elts);
5880       for (i = 0; i < nelts; ++i)
5881         if (type_dependent_init_p (VEC_index (constructor_elt,
5882                                               elts, i)->value))
5883           return true;
5884     }
5885   else
5886     /* It must be a simple expression, e.g., int i = 3;  */
5887     return type_dependent_expression_p (init);
5888
5889   return false;
5890 }
5891
5892 /* INIT is the initializer for a variable, as represented by the
5893    parser.  Returns true iff INIT is value-dependent.  */
5894
5895 static bool
5896 value_dependent_init_p (tree init)
5897 {
5898   if (TREE_CODE (init) == TREE_LIST)
5899     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5900     return any_value_dependent_elements_p (init);
5901   else if (TREE_CODE (init) == CONSTRUCTOR)
5902   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5903     {
5904       VEC(constructor_elt, gc) *elts;
5905       size_t nelts;
5906       size_t i;
5907
5908       elts = CONSTRUCTOR_ELTS (init);
5909       nelts = VEC_length (constructor_elt, elts);
5910       for (i = 0; i < nelts; ++i)
5911         if (value_dependent_init_p (VEC_index (constructor_elt,
5912                                                elts, i)->value))
5913           return true;
5914     }
5915   else
5916     /* It must be a simple expression, e.g., int i = 3;  */
5917     return value_dependent_expression_p (init);
5918   
5919   return false;
5920 }
5921
5922 /* Finish processing of a declaration;
5923    install its line number and initial value.
5924    If the length of an array type is not known before,
5925    it must be determined now, from the initial value, or it is an error.
5926
5927    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5928    true, then INIT is an integral constant expression.
5929
5930    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5931    if the (init) syntax was used.  */
5932
5933 void
5934 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5935                 tree asmspec_tree, int flags)
5936 {
5937   tree type;
5938   tree cleanup;
5939   const char *asmspec = NULL;
5940   int was_readonly = 0;
5941   bool var_definition_p = false;
5942   tree auto_node;
5943
5944   if (decl == error_mark_node)
5945     return;
5946   else if (! decl)
5947     {
5948       if (init)
5949         error ("assignment (not initialization) in declaration");
5950       return;
5951     }
5952
5953   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5954   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5955   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5956
5957   type = TREE_TYPE (decl);
5958   if (type == error_mark_node)
5959     return;
5960
5961   /* Assume no cleanup is required.  */
5962   cleanup = NULL_TREE;
5963
5964   /* If a name was specified, get the string.  */
5965   if (at_namespace_scope_p ())
5966     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5967   if (asmspec_tree && asmspec_tree != error_mark_node)
5968     asmspec = TREE_STRING_POINTER (asmspec_tree);
5969
5970   if (current_class_type
5971       && CP_DECL_CONTEXT (decl) == current_class_type
5972       && TYPE_BEING_DEFINED (current_class_type)
5973       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
5974       && (DECL_INITIAL (decl) || init))
5975     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5976
5977   auto_node = type_uses_auto (type);
5978   if (auto_node)
5979     {
5980       tree d_init;
5981       if (init == NULL_TREE)
5982         {
5983           error ("declaration of %q#D has no initializer", decl);
5984           TREE_TYPE (decl) = error_mark_node;
5985           return;
5986         }
5987       d_init = init;
5988       if (TREE_CODE (d_init) == TREE_LIST)
5989         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
5990                                                   tf_warning_or_error);
5991       d_init = resolve_nondeduced_context (d_init);
5992       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
5993                                                    auto_node);
5994       if (type == error_mark_node)
5995         return;
5996     }
5997
5998   if (!ensure_literal_type_for_constexpr_object (decl))
5999     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6000
6001   if (TREE_CODE (decl) == VAR_DECL
6002       && DECL_CLASS_SCOPE_P (decl)
6003       && DECL_INITIALIZED_IN_CLASS_P (decl))
6004     check_static_variable_definition (decl, type);
6005
6006   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6007     {
6008       tree clone;
6009       if (init == ridpointers[(int)RID_DELETE])
6010         {
6011           /* FIXME check this is 1st decl.  */
6012           DECL_DELETED_FN (decl) = 1;
6013           DECL_DECLARED_INLINE_P (decl) = 1;
6014           DECL_INITIAL (decl) = error_mark_node;
6015           FOR_EACH_CLONE (clone, decl)
6016             {
6017               DECL_DELETED_FN (clone) = 1;
6018               DECL_DECLARED_INLINE_P (clone) = 1;
6019               DECL_INITIAL (clone) = error_mark_node;
6020             }
6021           init = NULL_TREE;
6022         }
6023       else if (init == ridpointers[(int)RID_DEFAULT])
6024         {
6025           if (defaultable_fn_check (decl))
6026             DECL_DEFAULTED_FN (decl) = 1;
6027           else
6028             DECL_INITIAL (decl) = NULL_TREE;
6029         }
6030     }
6031
6032   if (init && TREE_CODE (decl) == VAR_DECL)
6033     {
6034       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6035       /* If DECL is a reference, then we want to know whether init is a
6036          reference constant; init_const_expr_p as passed tells us whether
6037          it's an rvalue constant.  */
6038       if (TREE_CODE (type) == REFERENCE_TYPE)
6039         init_const_expr_p = potential_constant_expression (init);
6040       if (init_const_expr_p)
6041         {
6042           /* Set these flags now for templates.  We'll update the flags in
6043              store_init_value for instantiations.  */
6044           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6045           if (decl_maybe_constant_var_p (decl))
6046             TREE_CONSTANT (decl) = 1;
6047         }
6048     }
6049
6050   if (processing_template_decl)
6051     {
6052       bool type_dependent_p;
6053
6054       /* Add this declaration to the statement-tree.  */
6055       if (at_function_scope_p ())
6056         add_decl_expr (decl);
6057
6058       type_dependent_p = dependent_type_p (type);
6059
6060       if (check_for_bare_parameter_packs (init))
6061         {
6062           init = NULL_TREE;
6063           DECL_INITIAL (decl) = NULL_TREE;
6064         }
6065
6066       /* Generally, initializers in templates are expanded when the
6067          template is instantiated.  But, if DECL is a variable constant
6068          then it can be used in future constant expressions, so its value
6069          must be available. */
6070
6071       if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6072         /* We can't do anything if the decl has dependent type.  */;
6073       else if (init
6074                && init_const_expr_p
6075                && !type_dependent_p
6076                && decl_maybe_constant_var_p (decl)
6077                && !type_dependent_init_p (init)
6078                && !value_dependent_init_p (init))
6079         {
6080           /* This variable seems to be a non-dependent constant, so process
6081              its initializer.  If check_initializer returns non-null the
6082              initialization wasn't constant after all.  */
6083           tree init_code = check_initializer (decl, init, flags, &cleanup);
6084           if (init_code == NULL_TREE)
6085             init = NULL_TREE;
6086         }
6087       else if (!DECL_PRETTY_FUNCTION_P (decl))
6088         /* Deduce array size even if the initializer is dependent.  */
6089         maybe_deduce_size_from_array_init (decl, init);
6090
6091       if (init)
6092         DECL_INITIAL (decl) = init;
6093       return;
6094     }
6095
6096   /* Just store non-static data member initializers for later.  */
6097   if (init && TREE_CODE (decl) == FIELD_DECL)
6098     DECL_INITIAL (decl) = init;
6099
6100   /* Take care of TYPE_DECLs up front.  */
6101   if (TREE_CODE (decl) == TYPE_DECL)
6102     {
6103       if (type != error_mark_node
6104           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6105         {
6106           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6107             warning (0, "shadowing previous type declaration of %q#D", decl);
6108           set_identifier_type_value (DECL_NAME (decl), decl);
6109         }
6110
6111       /* If we have installed this as the canonical typedef for this
6112          type, and that type has not been defined yet, delay emitting
6113          the debug information for it, as we will emit it later.  */
6114       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6115           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6116         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6117
6118       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6119                                 at_eof);
6120       return;
6121     }
6122
6123   /* A reference will be modified here, as it is initialized.  */
6124   if (! DECL_EXTERNAL (decl)
6125       && TREE_READONLY (decl)
6126       && TREE_CODE (type) == REFERENCE_TYPE)
6127     {
6128       was_readonly = 1;
6129       TREE_READONLY (decl) = 0;
6130     }
6131
6132   if (TREE_CODE (decl) == VAR_DECL)
6133     {
6134       /* Only variables with trivial initialization and destruction can
6135          have thread-local storage.  */
6136       if (DECL_THREAD_LOCAL_P (decl)
6137           && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6138               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6139         error ("%qD cannot be thread-local because it has non-trivial "
6140                "type %qT", decl, TREE_TYPE (decl));
6141       /* If this is a local variable that will need a mangled name,
6142          register it now.  We must do this before processing the
6143          initializer for the variable, since the initialization might
6144          require a guard variable, and since the mangled name of the
6145          guard variable will depend on the mangled name of this
6146          variable.  */
6147       if (DECL_FUNCTION_SCOPE_P (decl)
6148           && TREE_STATIC (decl)
6149           && !DECL_ARTIFICIAL (decl))
6150         {
6151           push_local_name (decl);
6152           if (DECL_CONSTRUCTOR_P (current_function_decl)
6153               || DECL_DESTRUCTOR_P (current_function_decl))
6154             /* Normally local_decls is populated during GIMPLE lowering,
6155                but [cd]tors are never actually compiled directly.  We need
6156                to put statics on the list so we can deal with the label
6157                address extension.  */
6158             add_local_decl (cfun, decl);
6159         }
6160
6161       /* Convert the initializer to the type of DECL, if we have not
6162          already initialized DECL.  */
6163       if (!DECL_INITIALIZED_P (decl)
6164           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6165              case of a static data member initialized inside the
6166              class-specifier, there can be an initializer even if DECL
6167              is *not* defined.  */
6168           && (!DECL_EXTERNAL (decl) || init))
6169         {
6170           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6171             {
6172               tree jclass
6173                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6174               /* Allow libjava/prims.cc define primitive classes.  */
6175               if (init != NULL_TREE
6176                   || jclass == NULL_TREE
6177                   || TREE_CODE (jclass) != TYPE_DECL
6178                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6179                   || !same_type_ignoring_top_level_qualifiers_p
6180                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6181                 error ("Java object %qD not allocated with %<new%>", decl);
6182               init = NULL_TREE;
6183             }
6184           init = check_initializer (decl, init, flags, &cleanup);
6185           /* Thread-local storage cannot be dynamically initialized.  */
6186           if (DECL_THREAD_LOCAL_P (decl) && init)
6187             {
6188               error ("%qD is thread-local and so cannot be dynamically "
6189                      "initialized", decl);
6190               init = NULL_TREE;
6191             }
6192
6193           /* Check that the initializer for a static data member was a
6194              constant.  Although we check in the parser that the
6195              initializer is an integral constant expression, we do not
6196              simplify division-by-zero at the point at which it
6197              occurs.  Therefore, in:
6198
6199                struct S { static const int i = 7 / 0; };
6200
6201              we issue an error at this point.  It would
6202              probably be better to forbid division by zero in
6203              integral constant expressions.  */
6204           if (DECL_EXTERNAL (decl) && init)
6205             {
6206               error ("%qD cannot be initialized by a non-constant expression"
6207                      " when being declared", decl);
6208               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6209               init = NULL_TREE;
6210             }
6211
6212           /* Handle:
6213
6214              [dcl.init]
6215
6216              The memory occupied by any object of static storage
6217              duration is zero-initialized at program startup before
6218              any other initialization takes place.
6219
6220              We cannot create an appropriate initializer until after
6221              the type of DECL is finalized.  If DECL_INITIAL is set,
6222              then the DECL is statically initialized, and any
6223              necessary zero-initialization has already been performed.  */
6224           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6225             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6226                                                    /*nelts=*/NULL_TREE,
6227                                                    /*static_storage_p=*/true);
6228           /* Remember that the initialization for this variable has
6229              taken place.  */
6230           DECL_INITIALIZED_P (decl) = 1;
6231           /* This declaration is the definition of this variable,
6232              unless we are initializing a static data member within
6233              the class specifier.  */
6234           if (!DECL_EXTERNAL (decl))
6235             var_definition_p = true;
6236         }
6237       /* If the variable has an array type, lay out the type, even if
6238          there is no initializer.  It is valid to index through the
6239          array, and we must get TYPE_ALIGN set correctly on the array
6240          type.  */
6241       else if (TREE_CODE (type) == ARRAY_TYPE)
6242         layout_type (type);
6243
6244       if (TREE_STATIC (decl)
6245           && !at_function_scope_p ()
6246           && current_function_decl == NULL)
6247         /* So decl is a global variable or a static member of a
6248            non local class. Record the types it uses
6249            so that we can decide later to emit debug info for them.  */
6250         record_types_used_by_current_var_decl (decl);
6251     }
6252   else if (TREE_CODE (decl) == FIELD_DECL
6253            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6254     error ("non-static data member %qD has Java class type", decl);
6255
6256   /* Add this declaration to the statement-tree.  This needs to happen
6257      after the call to check_initializer so that the DECL_EXPR for a
6258      reference temp is added before the DECL_EXPR for the reference itself.  */
6259   if (DECL_FUNCTION_SCOPE_P (decl))
6260     add_decl_expr (decl);
6261
6262   /* Let the middle end know about variables and functions -- but not
6263      static data members in uninstantiated class templates.  */
6264   if (TREE_CODE (decl) == VAR_DECL
6265       || TREE_CODE (decl) == FUNCTION_DECL)
6266     {
6267       if (TREE_CODE (decl) == VAR_DECL)
6268         {
6269           layout_var_decl (decl);
6270           maybe_commonize_var (decl);
6271         }
6272
6273       /* This needs to happen after the linkage is set. */
6274       determine_visibility (decl);
6275
6276       if (var_definition_p && TREE_STATIC (decl))
6277         {
6278           /* If a TREE_READONLY variable needs initialization
6279              at runtime, it is no longer readonly and we need to
6280              avoid MEM_READONLY_P being set on RTL created for it.  */
6281           if (init)
6282             {
6283               if (TREE_READONLY (decl))
6284                 TREE_READONLY (decl) = 0;
6285               was_readonly = 0;
6286             }
6287           else if (was_readonly)
6288             TREE_READONLY (decl) = 1;
6289         }
6290
6291       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6292
6293       /* Check for abstractness of the type. Notice that there is no
6294          need to strip array types here since the check for those types
6295          is already done within create_array_type_for_decl.  */
6296       if (TREE_CODE (type) == FUNCTION_TYPE
6297           || TREE_CODE (type) == METHOD_TYPE)
6298         abstract_virtuals_error (decl, TREE_TYPE (type));
6299       else
6300         abstract_virtuals_error (decl, type);
6301
6302       if (TREE_TYPE (decl) == error_mark_node)
6303         /* No initialization required.  */
6304         ;
6305       else if (TREE_CODE (decl) == FUNCTION_DECL)
6306         {
6307           if (init)
6308             {
6309               if (init == ridpointers[(int)RID_DEFAULT])
6310                 {
6311                   /* An out-of-class default definition is defined at
6312                      the point where it is explicitly defaulted.  */
6313                   if (DECL_DELETED_FN (decl))
6314                     maybe_explain_implicit_delete (decl);
6315                   else if (DECL_INITIAL (decl) == error_mark_node)
6316                     synthesize_method (decl);
6317                 }
6318               else
6319                 error ("function %q#D is initialized like a variable", decl);
6320             }
6321           /* else no initialization required.  */
6322         }
6323       else if (DECL_EXTERNAL (decl)
6324                && ! (DECL_LANG_SPECIFIC (decl)
6325                      && DECL_NOT_REALLY_EXTERN (decl)))
6326         {
6327           if (init)
6328             DECL_INITIAL (decl) = init;
6329         }
6330       /* A variable definition.  */
6331       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6332         /* Initialize the local variable.  */
6333         initialize_local_var (decl, init);
6334
6335       /* If a variable is defined, and then a subsequent
6336          definition with external linkage is encountered, we will
6337          get here twice for the same variable.  We want to avoid
6338          calling expand_static_init more than once.  For variables
6339          that are not static data members, we can call
6340          expand_static_init only when we actually process the
6341          initializer.  It is not legal to redeclare a static data
6342          member, so this issue does not arise in that case.  */
6343       else if (var_definition_p && TREE_STATIC (decl))
6344         expand_static_init (decl, init);
6345     }
6346
6347   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6348      reference, insert it in the statement-tree now.  */
6349   if (cleanup)
6350     push_cleanup (decl, cleanup, false);
6351
6352   if (was_readonly)
6353     TREE_READONLY (decl) = 1;
6354
6355   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6356 }
6357
6358 /* Returns a declaration for a VAR_DECL as if:
6359
6360      extern "C" TYPE NAME;
6361
6362    had been seen.  Used to create compiler-generated global
6363    variables.  */
6364
6365 static tree
6366 declare_global_var (tree name, tree type)
6367 {
6368   tree decl;
6369
6370   push_to_top_level ();
6371   decl = build_decl (input_location, VAR_DECL, name, type);
6372   TREE_PUBLIC (decl) = 1;
6373   DECL_EXTERNAL (decl) = 1;
6374   DECL_ARTIFICIAL (decl) = 1;
6375   /* If the user has explicitly declared this variable (perhaps
6376      because the code we are compiling is part of a low-level runtime
6377      library), then it is possible that our declaration will be merged
6378      with theirs by pushdecl.  */
6379   decl = pushdecl (decl);
6380   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6381   pop_from_top_level ();
6382
6383   return decl;
6384 }
6385
6386 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6387    if "__cxa_atexit" is not being used) corresponding to the function
6388    to be called when the program exits.  */
6389
6390 static tree
6391 get_atexit_fn_ptr_type (void)
6392 {
6393   tree fn_type;
6394
6395   if (!atexit_fn_ptr_type_node)
6396     {
6397       tree arg_type;
6398       if (flag_use_cxa_atexit 
6399           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6400         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6401         arg_type = ptr_type_node;
6402       else
6403         /* The parameter to "atexit" is "void (*)(void)".  */
6404         arg_type = NULL_TREE;
6405       
6406       fn_type = build_function_type_list (void_type_node,
6407                                           arg_type, NULL_TREE);
6408       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6409     }
6410
6411   return atexit_fn_ptr_type_node;
6412 }
6413
6414 /* Returns a pointer to the `atexit' function.  Note that if
6415    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6416    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6417
6418 static tree
6419 get_atexit_node (void)
6420 {
6421   tree atexit_fndecl;
6422   tree fn_type;
6423   tree fn_ptr_type;
6424   const char *name;
6425   bool use_aeabi_atexit;
6426
6427   if (atexit_node)
6428     return atexit_node;
6429
6430   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6431     {
6432       /* The declaration for `__cxa_atexit' is:
6433
6434            int __cxa_atexit (void (*)(void *), void *, void *)
6435
6436          We build up the argument types and then the function type
6437          itself.  */
6438       tree argtype0, argtype1, argtype2;
6439
6440       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6441       /* First, build the pointer-to-function type for the first
6442          argument.  */
6443       fn_ptr_type = get_atexit_fn_ptr_type ();
6444       /* Then, build the rest of the argument types.  */
6445       argtype2 = ptr_type_node;
6446       if (use_aeabi_atexit)
6447         {
6448           argtype1 = fn_ptr_type;
6449           argtype0 = ptr_type_node;
6450         }
6451       else
6452         {
6453           argtype1 = ptr_type_node;
6454           argtype0 = fn_ptr_type;
6455         }
6456       /* And the final __cxa_atexit type.  */
6457       fn_type = build_function_type_list (integer_type_node,
6458                                           argtype0, argtype1, argtype2,
6459                                           NULL_TREE);
6460       fn_ptr_type = build_pointer_type (fn_type);
6461       if (use_aeabi_atexit)
6462         name = "__aeabi_atexit";
6463       else
6464         name = "__cxa_atexit";
6465     }
6466   else
6467     {
6468       /* The declaration for `atexit' is:
6469
6470            int atexit (void (*)());
6471
6472          We build up the argument types and then the function type
6473          itself.  */
6474       fn_ptr_type = get_atexit_fn_ptr_type ();
6475       /* Build the final atexit type.  */
6476       fn_type = build_function_type_list (integer_type_node,
6477                                           fn_ptr_type, NULL_TREE);
6478       name = "atexit";
6479     }
6480
6481   /* Now, build the function declaration.  */
6482   push_lang_context (lang_name_c);
6483   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6484   mark_used (atexit_fndecl);
6485   pop_lang_context ();
6486   atexit_node = decay_conversion (atexit_fndecl);
6487
6488   return atexit_node;
6489 }
6490
6491 /* Returns the __dso_handle VAR_DECL.  */
6492
6493 static tree
6494 get_dso_handle_node (void)
6495 {
6496   if (dso_handle_node)
6497     return dso_handle_node;
6498
6499   /* Declare the variable.  */
6500   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6501                                         ptr_type_node);
6502
6503 #ifdef HAVE_GAS_HIDDEN
6504   DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6505   DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6506 #endif
6507
6508   return dso_handle_node;
6509 }
6510
6511 /* Begin a new function with internal linkage whose job will be simply
6512    to destroy some particular variable.  */
6513
6514 static GTY(()) int start_cleanup_cnt;
6515
6516 static tree
6517 start_cleanup_fn (void)
6518 {
6519   char name[32];
6520   tree fntype;
6521   tree fndecl;
6522   bool use_cxa_atexit = flag_use_cxa_atexit
6523                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6524
6525   push_to_top_level ();
6526
6527   /* No need to mangle this.  */
6528   push_lang_context (lang_name_c);
6529
6530   /* Build the name of the function.  */
6531   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6532   /* Build the function declaration.  */
6533   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6534   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6535   /* It's a function with internal linkage, generated by the
6536      compiler.  */
6537   TREE_PUBLIC (fndecl) = 0;
6538   DECL_ARTIFICIAL (fndecl) = 1;
6539   /* Make the function `inline' so that it is only emitted if it is
6540      actually needed.  It is unlikely that it will be inlined, since
6541      it is only called via a function pointer, but we avoid unnecessary
6542      emissions this way.  */
6543   DECL_DECLARED_INLINE_P (fndecl) = 1;
6544   DECL_INTERFACE_KNOWN (fndecl) = 1;
6545   /* Build the parameter.  */
6546   if (use_cxa_atexit)
6547     {
6548       tree parmdecl;
6549
6550       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6551       DECL_CONTEXT (parmdecl) = fndecl;
6552       TREE_USED (parmdecl) = 1;
6553       DECL_READ_P (parmdecl) = 1;
6554       DECL_ARGUMENTS (fndecl) = parmdecl;
6555     }
6556
6557   pushdecl (fndecl);
6558   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6559
6560   pop_lang_context ();
6561
6562   return current_function_decl;
6563 }
6564
6565 /* Finish the cleanup function begun by start_cleanup_fn.  */
6566
6567 static void
6568 end_cleanup_fn (void)
6569 {
6570   expand_or_defer_fn (finish_function (0));
6571
6572   pop_from_top_level ();
6573 }
6574
6575 /* Generate code to handle the destruction of DECL, an object with
6576    static storage duration.  */
6577
6578 tree
6579 register_dtor_fn (tree decl)
6580 {
6581   tree cleanup;
6582   tree compound_stmt;
6583   tree fcall;
6584   tree type;
6585   bool use_dtor;
6586   tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6587
6588   type = TREE_TYPE (decl);
6589   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6590     return void_zero_node;
6591
6592   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6593      a class object, we can just pass the destructor to
6594      "__cxa_atexit"; we don't have to build a temporary function to do
6595      the cleanup.  */
6596   use_dtor = (flag_use_cxa_atexit 
6597               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6598               && CLASS_TYPE_P (type));
6599   if (use_dtor)
6600     {
6601       int idx;
6602
6603       /* Find the destructor.  */
6604       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6605       gcc_assert (idx >= 0);
6606       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6607       /* Make sure it is accessible.  */
6608       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6609     }
6610   else
6611     {
6612       /* Call build_cleanup before we enter the anonymous function so
6613          that any access checks will be done relative to the current
6614          scope, rather than the scope of the anonymous function.  */
6615       build_cleanup (decl);
6616   
6617       /* Now start the function.  */
6618       cleanup = start_cleanup_fn ();
6619       
6620       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6621          to the original function, rather than the anonymous one.  That
6622          will make the back end think that nested functions are in use,
6623          which causes confusion.  */
6624       push_deferring_access_checks (dk_no_check);
6625       fcall = build_cleanup (decl);
6626       pop_deferring_access_checks ();
6627       
6628       /* Create the body of the anonymous function.  */
6629       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6630       finish_expr_stmt (fcall);
6631       finish_compound_stmt (compound_stmt);
6632       end_cleanup_fn ();
6633     }
6634
6635   /* Call atexit with the cleanup function.  */
6636   mark_used (cleanup);
6637   cleanup = build_address (cleanup);
6638   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6639     {
6640       tree addr;
6641
6642       if (use_dtor)
6643         {
6644           /* We must convert CLEANUP to the type that "__cxa_atexit"
6645              expects.  */
6646           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6647           /* "__cxa_atexit" will pass the address of DECL to the
6648              cleanup function.  */
6649           mark_used (decl);
6650           addr = build_address (decl);
6651           /* The declared type of the parameter to "__cxa_atexit" is
6652              "void *".  For plain "T*", we could just let the
6653              machinery in cp_build_function_call convert it -- but if the
6654              type is "cv-qualified T *", then we need to convert it
6655              before passing it in, to avoid spurious errors.  */
6656           addr = build_nop (ptr_type_node, addr);
6657         }
6658       else
6659         /* Since the cleanup functions we build ignore the address
6660            they're given, there's no reason to pass the actual address
6661            in, and, in general, it's cheaper to pass NULL than any
6662            other value.  */
6663         addr = null_pointer_node;
6664       arg2 = cp_build_addr_expr (get_dso_handle_node (),
6665                                  tf_warning_or_error);
6666       if (targetm.cxx.use_aeabi_atexit ())
6667         {
6668           arg1 = cleanup;
6669           arg0 = addr;
6670         }
6671       else
6672         {
6673           arg1 = addr;
6674           arg0 = cleanup;
6675         }
6676     }
6677   else
6678     arg0 = cleanup;
6679   return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6680                                       arg0, arg1, arg2, NULL_TREE);
6681 }
6682
6683 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6684    is its initializer.  Generate code to handle the construction
6685    and destruction of DECL.  */
6686
6687 static void
6688 expand_static_init (tree decl, tree init)
6689 {
6690   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6691   gcc_assert (TREE_STATIC (decl));
6692
6693   /* Some variables require no dynamic initialization.  */
6694   if (!init
6695       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6696     return;
6697
6698   if (DECL_FUNCTION_SCOPE_P (decl))
6699     {
6700       /* Emit code to perform this initialization but once.  */
6701       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6702       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6703       tree guard, guard_addr;
6704       tree flag, begin;
6705
6706       /* Emit code to perform this initialization but once.  This code
6707          looks like:
6708
6709            static <type> guard;
6710            if (!guard.first_byte) {
6711              if (__cxa_guard_acquire (&guard)) {
6712                bool flag = false;
6713                try {
6714                  // Do initialization.
6715                  flag = true; __cxa_guard_release (&guard);
6716                  // Register variable for destruction at end of program.
6717                } catch {
6718                  if (!flag) __cxa_guard_abort (&guard);
6719                }
6720            }
6721
6722          Note that the `flag' variable is only set to 1 *after* the
6723          initialization is complete.  This ensures that an exception,
6724          thrown during the construction, will cause the variable to
6725          reinitialized when we pass through this code again, as per:
6726
6727            [stmt.dcl]
6728
6729            If the initialization exits by throwing an exception, the
6730            initialization is not complete, so it will be tried again
6731            the next time control enters the declaration.
6732
6733          This process should be thread-safe, too; multiple threads
6734          should not be able to initialize the variable more than
6735          once.  */
6736
6737       /* Create the guard variable.  */
6738       guard = get_guard (decl);
6739
6740       /* This optimization isn't safe on targets with relaxed memory
6741          consistency.  On such targets we force synchronization in
6742          __cxa_guard_acquire.  */
6743       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6744         {
6745           /* Begin the conditional initialization.  */
6746           if_stmt = begin_if_stmt ();
6747           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6748           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6749         }
6750
6751       if (flag_threadsafe_statics)
6752         {
6753           tree vfntype = NULL_TREE;
6754           tree acquire_name, release_name, abort_name;
6755           tree acquire_fn, release_fn, abort_fn;
6756           guard_addr = build_address (guard);
6757
6758           acquire_name = get_identifier ("__cxa_guard_acquire");
6759           release_name = get_identifier ("__cxa_guard_release");
6760           abort_name = get_identifier ("__cxa_guard_abort");
6761           acquire_fn = identifier_global_value (acquire_name);
6762           release_fn = identifier_global_value (release_name);
6763           abort_fn = identifier_global_value (abort_name);
6764           if (!acquire_fn)
6765             acquire_fn = push_library_fn
6766               (acquire_name, build_function_type_list (integer_type_node,
6767                                                        TREE_TYPE (guard_addr),
6768                                                        NULL_TREE),
6769                NULL_TREE);
6770           if (!release_fn || !abort_fn)
6771             vfntype = build_function_type_list (void_type_node,
6772                                                 TREE_TYPE (guard_addr),
6773                                                 NULL_TREE);
6774           if (!release_fn)
6775             release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6776           if (!abort_fn)
6777             abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6778
6779           inner_if_stmt = begin_if_stmt ();
6780           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6781                                inner_if_stmt);
6782
6783           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6784           begin = get_target_expr (boolean_false_node);
6785           flag = TARGET_EXPR_SLOT (begin);
6786
6787           TARGET_EXPR_CLEANUP (begin)
6788             = build3 (COND_EXPR, void_type_node, flag,
6789                       void_zero_node,
6790                       build_call_n (abort_fn, 1, guard_addr));
6791           CLEANUP_EH_ONLY (begin) = 1;
6792
6793           /* Do the initialization itself.  */
6794           init = add_stmt_to_compound (begin, init);
6795           init = add_stmt_to_compound
6796             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6797           init = add_stmt_to_compound
6798             (init, build_call_n (release_fn, 1, guard_addr));
6799         }
6800       else
6801         init = add_stmt_to_compound (init, set_guard (guard));
6802
6803       /* Use atexit to register a function for destroying this static
6804          variable.  */
6805       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6806
6807       finish_expr_stmt (init);
6808
6809       if (flag_threadsafe_statics)
6810         {
6811           finish_compound_stmt (inner_then_clause);
6812           finish_then_clause (inner_if_stmt);
6813           finish_if_stmt (inner_if_stmt);
6814         }
6815
6816       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6817         {
6818           finish_compound_stmt (then_clause);
6819           finish_then_clause (if_stmt);
6820           finish_if_stmt (if_stmt);
6821         }
6822     }
6823   else
6824     static_aggregates = tree_cons (init, decl, static_aggregates);
6825 }
6826
6827 \f
6828 /* Make TYPE a complete type based on INITIAL_VALUE.
6829    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6830    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6831    3 if the initializer list is empty (in pedantic mode). */
6832
6833 int
6834 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6835 {
6836   int failure;
6837   tree type, elt_type;
6838
6839   if (initial_value)
6840     {
6841       unsigned HOST_WIDE_INT i;
6842       tree value;
6843
6844       /* An array of character type can be initialized from a
6845          brace-enclosed string constant.
6846
6847          FIXME: this code is duplicated from reshape_init. Probably
6848          we should just call reshape_init here?  */
6849       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6850           && TREE_CODE (initial_value) == CONSTRUCTOR
6851           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6852         {
6853           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6854           tree value = VEC_index (constructor_elt, v, 0)->value;
6855
6856           if (TREE_CODE (value) == STRING_CST
6857               && VEC_length (constructor_elt, v) == 1)
6858             initial_value = value;
6859         }
6860
6861       /* If any of the elements are parameter packs, we can't actually
6862          complete this type now because the array size is dependent.  */
6863       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6864         {
6865           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6866                                       i, value)
6867             {
6868               if (PACK_EXPANSION_P (value))
6869                 return 0;
6870             }
6871         }
6872     }
6873
6874   failure = complete_array_type (ptype, initial_value, do_default);
6875
6876   /* We can create the array before the element type is complete, which
6877      means that we didn't have these two bits set in the original type
6878      either.  In completing the type, we are expected to propagate these
6879      bits.  See also complete_type which does the same thing for arrays
6880      of fixed size.  */
6881   type = *ptype;
6882   if (TYPE_DOMAIN (type))
6883     {
6884       elt_type = TREE_TYPE (type);
6885       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6886       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6887         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6888     }
6889
6890   return failure;
6891 }
6892
6893 /* As above, but either give an error or reject zero-size arrays, depending
6894    on COMPLAIN.  */
6895
6896 int
6897 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6898                                  bool do_default, tsubst_flags_t complain)
6899 {
6900   int failure;
6901   bool sfinae = !(complain & tf_error);
6902   /* In SFINAE context we can't be lenient about zero-size arrays.  */
6903   if (sfinae)
6904     ++pedantic;
6905   failure = cp_complete_array_type (ptype, initial_value, do_default);
6906   if (sfinae)
6907     --pedantic;
6908   if (failure)
6909     {
6910       if (sfinae)
6911         /* Not an error.  */;
6912       else if (failure == 1)
6913         error ("initializer fails to determine size of %qT", *ptype);
6914       else if (failure == 2)
6915         {
6916           if (do_default)
6917             error ("array size missing in %qT", *ptype);
6918         }
6919       else if (failure == 3)
6920         error ("zero-size array %qT", *ptype);
6921       *ptype = error_mark_node;
6922     }
6923   return failure;
6924 }
6925 \f
6926 /* Return zero if something is declared to be a member of type
6927    CTYPE when in the context of CUR_TYPE.  STRING is the error
6928    message to print in that case.  Otherwise, quietly return 1.  */
6929
6930 static int
6931 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6932 {
6933   if (ctype && ctype != cur_type)
6934     {
6935       if (flags == DTOR_FLAG)
6936         error ("destructor for alien class %qT cannot be a member", ctype);
6937       else
6938         error ("constructor for alien class %qT cannot be a member", ctype);
6939       return 0;
6940     }
6941   return 1;
6942 }
6943 \f
6944 /* Subroutine of `grokdeclarator'.  */
6945
6946 /* Generate errors possibly applicable for a given set of specifiers.
6947    This is for ARM $7.1.2.  */
6948
6949 static void
6950 bad_specifiers (tree object,
6951                 enum bad_spec_place type,
6952                 int virtualp,
6953                 int quals,
6954                 int inlinep,
6955                 int friendp,
6956                 int raises)
6957 {
6958   switch (type)
6959     {
6960       case BSP_VAR:
6961         if (virtualp)
6962           error ("%qD declared as a %<virtual%> variable", object);
6963         if (inlinep)
6964           error ("%qD declared as an %<inline%> variable", object);
6965         if (quals)
6966           error ("%<const%> and %<volatile%> function specifiers on "
6967                  "%qD invalid in variable declaration", object);
6968         break;
6969       case BSP_PARM:
6970         if (virtualp)
6971           error ("%qD declared as a %<virtual%> parameter", object);
6972         if (inlinep)
6973           error ("%qD declared as an %<inline%> parameter", object);
6974         if (quals)
6975           error ("%<const%> and %<volatile%> function specifiers on "
6976                  "%qD invalid in parameter declaration", object);
6977         break;
6978       case BSP_TYPE:
6979         if (virtualp)
6980           error ("%qD declared as a %<virtual%> type", object);
6981         if (inlinep)
6982           error ("%qD declared as an %<inline%> type", object);
6983         if (quals)
6984           error ("%<const%> and %<volatile%> function specifiers on "
6985                  "%qD invalid in type declaration", object);
6986         break;
6987       case BSP_FIELD:
6988         if (virtualp)
6989           error ("%qD declared as a %<virtual%> field", object);
6990         if (inlinep)
6991           error ("%qD declared as an %<inline%> field", object);
6992         if (quals)
6993           error ("%<const%> and %<volatile%> function specifiers on "
6994                  "%qD invalid in field declaration", object);
6995         break;
6996       default:
6997         gcc_unreachable();
6998     }
6999   if (friendp)
7000     error ("%q+D declared as a friend", object);
7001   if (raises
7002       && (TREE_CODE (object) == TYPE_DECL
7003           || (!TYPE_PTRFN_P (TREE_TYPE (object))
7004               && !TYPE_REFFN_P (TREE_TYPE (object))
7005               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7006     error ("%q+D declared with an exception specification", object);
7007 }
7008
7009 /* DECL is a member function or static data member and is presently
7010    being defined.  Check that the definition is taking place in a
7011    valid namespace.  */
7012
7013 static void
7014 check_class_member_definition_namespace (tree decl)
7015 {
7016   /* These checks only apply to member functions and static data
7017      members.  */
7018   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7019               || TREE_CODE (decl) == VAR_DECL);
7020   /* We check for problems with specializations in pt.c in
7021      check_specialization_namespace, where we can issue better
7022      diagnostics.  */
7023   if (processing_specialization)
7024     return;
7025   /* There are no restrictions on the placement of
7026      explicit instantiations.  */
7027   if (processing_explicit_instantiation)
7028     return;
7029   /* [class.mfct]
7030
7031      A member function definition that appears outside of the
7032      class definition shall appear in a namespace scope enclosing
7033      the class definition.
7034
7035      [class.static.data]
7036
7037      The definition for a static data member shall appear in a
7038      namespace scope enclosing the member's class definition.  */
7039   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7040     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7041                decl, DECL_CONTEXT (decl));
7042 }
7043
7044 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7045    METHOD_TYPE for a non-static member function; QUALS are the
7046    cv-qualifiers that apply to the function.  */
7047
7048 tree
7049 build_this_parm (tree type, cp_cv_quals quals)
7050 {
7051   tree this_type;
7052   tree qual_type;
7053   tree parm;
7054   cp_cv_quals this_quals;
7055
7056   if (CLASS_TYPE_P (type))
7057     {
7058       this_type
7059         = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7060       this_type = build_pointer_type (this_type);
7061     }
7062   else
7063     this_type = type_of_this_parm (type);
7064   /* The `this' parameter is implicitly `const'; it cannot be
7065      assigned to.  */
7066   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7067   qual_type = cp_build_qualified_type (this_type, this_quals);
7068   parm = build_artificial_parm (this_identifier, qual_type);
7069   cp_apply_type_quals_to_decl (this_quals, parm);
7070   return parm;
7071 }
7072
7073 /* DECL is a static member function.  Complain if it was declared
7074    with function-cv-quals.  */
7075
7076 static void
7077 check_static_quals (tree decl, cp_cv_quals quals)
7078 {
7079   if (quals != TYPE_UNQUALIFIED)
7080     error ("static member function %q#D declared with type qualifiers",
7081            decl);
7082 }
7083
7084 /* CTYPE is class type, or null if non-class.
7085    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7086    or METHOD_TYPE.
7087    DECLARATOR is the function's name.
7088    PARMS is a chain of PARM_DECLs for the function.
7089    VIRTUALP is truthvalue of whether the function is virtual or not.
7090    FLAGS are to be passed through to `grokclassfn'.
7091    QUALS are qualifiers indicating whether the function is `const'
7092    or `volatile'.
7093    RAISES is a list of exceptions that this function can raise.
7094    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7095    not look, and -1 if we should not call `grokclassfn' at all.
7096
7097    SFK is the kind of special function (if any) for the new function.
7098
7099    Returns `NULL_TREE' if something goes wrong, after issuing
7100    applicable error messages.  */
7101
7102 static tree
7103 grokfndecl (tree ctype,
7104             tree type,
7105             tree declarator,
7106             tree parms,
7107             tree orig_declarator,
7108             int virtualp,
7109             enum overload_flags flags,
7110             cp_cv_quals quals,
7111             tree raises,
7112             int check,
7113             int friendp,
7114             int publicp,
7115             int inlinep,
7116             special_function_kind sfk,
7117             bool funcdef_flag,
7118             int template_count,
7119             tree in_namespace,
7120             tree* attrlist,
7121             location_t location)
7122 {
7123   tree decl;
7124   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7125   tree t;
7126
7127   if (raises)
7128     type = build_exception_variant (type, raises);
7129
7130   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7131
7132   /* If we have an explicit location, use it, otherwise use whatever
7133      build_lang_decl used (probably input_location).  */
7134   if (location != UNKNOWN_LOCATION)
7135     DECL_SOURCE_LOCATION (decl) = location;
7136
7137   if (TREE_CODE (type) == METHOD_TYPE)
7138     {
7139       tree parm;
7140       parm = build_this_parm (type, quals);
7141       DECL_CHAIN (parm) = parms;
7142       parms = parm;
7143     }
7144   DECL_ARGUMENTS (decl) = parms;
7145   for (t = parms; t; t = DECL_CHAIN (t))
7146     DECL_CONTEXT (t) = decl;
7147   /* Propagate volatile out from type to decl.  */
7148   if (TYPE_VOLATILE (type))
7149     TREE_THIS_VOLATILE (decl) = 1;
7150
7151   /* Setup decl according to sfk.  */
7152   switch (sfk)
7153     {
7154     case sfk_constructor:
7155     case sfk_copy_constructor:
7156     case sfk_move_constructor:
7157       DECL_CONSTRUCTOR_P (decl) = 1;
7158       break;
7159     case sfk_destructor:
7160       DECL_DESTRUCTOR_P (decl) = 1;
7161       break;
7162     default:
7163       break;
7164     }
7165
7166   /* If pointers to member functions use the least significant bit to
7167      indicate whether a function is virtual, ensure a pointer
7168      to this function will have that bit clear.  */
7169   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7170       && TREE_CODE (type) == METHOD_TYPE
7171       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7172     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7173
7174   if (friendp
7175       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7176     {
7177       if (funcdef_flag)
7178         error
7179           ("defining explicit specialization %qD in friend declaration",
7180            orig_declarator);
7181       else
7182         {
7183           tree fns = TREE_OPERAND (orig_declarator, 0);
7184           tree args = TREE_OPERAND (orig_declarator, 1);
7185
7186           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7187             {
7188               /* Something like `template <class T> friend void f<T>()'.  */
7189               error ("invalid use of template-id %qD in declaration "
7190                      "of primary template",
7191                      orig_declarator);
7192               return NULL_TREE;
7193             }
7194
7195
7196           /* A friend declaration of the form friend void f<>().  Record
7197              the information in the TEMPLATE_ID_EXPR.  */
7198           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7199
7200           if (TREE_CODE (fns) == COMPONENT_REF)
7201             {
7202               /* Due to bison parser ickiness, we will have already looked
7203                  up an operator_name or PFUNCNAME within the current class
7204                  (see template_id in parse.y). If the current class contains
7205                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
7206
7207               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7208                           == current_class_type);
7209               fns = TREE_OPERAND (fns, 1);
7210             }
7211           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7212                       || TREE_CODE (fns) == OVERLOAD);
7213           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7214
7215           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7216             if (TREE_PURPOSE (t)
7217                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7218             {
7219               error ("default arguments are not allowed in declaration "
7220                      "of friend template specialization %qD",
7221                      decl);
7222               return NULL_TREE;
7223             }
7224
7225           if (inlinep)
7226             {
7227               error ("%<inline%> is not allowed in declaration of friend "
7228                      "template specialization %qD",
7229                      decl);
7230               return NULL_TREE;
7231             }
7232         }
7233     }
7234
7235   /* If this decl has namespace scope, set that up.  */
7236   if (in_namespace)
7237     set_decl_namespace (decl, in_namespace, friendp);
7238   else if (!ctype)
7239     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7240
7241   /* `main' and builtins have implicit 'C' linkage.  */
7242   if ((MAIN_NAME_P (declarator)
7243        || (IDENTIFIER_LENGTH (declarator) > 10
7244            && IDENTIFIER_POINTER (declarator)[0] == '_'
7245            && IDENTIFIER_POINTER (declarator)[1] == '_'
7246            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7247       && current_lang_name == lang_name_cplusplus
7248       && ctype == NULL_TREE
7249       && DECL_FILE_SCOPE_P (decl))
7250     SET_DECL_LANGUAGE (decl, lang_c);
7251
7252   /* Should probably propagate const out from type to decl I bet (mrs).  */
7253   if (staticp)
7254     {
7255       DECL_STATIC_FUNCTION_P (decl) = 1;
7256       DECL_CONTEXT (decl) = ctype;
7257     }
7258
7259   if (ctype)
7260     {
7261       DECL_CONTEXT (decl) = ctype;
7262       if (funcdef_flag)
7263         check_class_member_definition_namespace (decl);
7264     }
7265
7266   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7267     {
7268       if (processing_template_decl)
7269         error ("cannot declare %<::main%> to be a template");
7270       if (inlinep)
7271         error ("cannot declare %<::main%> to be inline");
7272       if (!publicp)
7273         error ("cannot declare %<::main%> to be static");
7274       inlinep = 0;
7275       publicp = 1;
7276     }
7277
7278   /* Members of anonymous types and local classes have no linkage; make
7279      them internal.  If a typedef is made later, this will be changed.  */
7280   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7281                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7282     publicp = 0;
7283
7284   if (publicp && cxx_dialect == cxx98)
7285     {
7286       /* [basic.link]: A name with no linkage (notably, the name of a class
7287          or enumeration declared in a local scope) shall not be used to
7288          declare an entity with linkage.
7289
7290          DR 757 relaxes this restriction for C++0x.  */
7291       t = no_linkage_check (TREE_TYPE (decl),
7292                             /*relaxed_p=*/false);
7293       if (t)
7294         {
7295           if (TYPE_ANONYMOUS_P (t))
7296             {
7297               if (DECL_EXTERN_C_P (decl))
7298                 /* Allow this; it's pretty common in C.  */;
7299               else
7300                 {
7301                   permerror (input_location, "anonymous type with no linkage "
7302                              "used to declare function %q#D with linkage",
7303                              decl);
7304                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7305                     permerror (input_location, "%q+#D does not refer to the unqualified "
7306                                "type, so it is not used for linkage",
7307                                TYPE_NAME (t));
7308                 }
7309             }
7310           else
7311             permerror (input_location, "type %qT with no linkage used to "
7312                        "declare function %q#D with linkage", t, decl);
7313         }
7314     }
7315
7316   TREE_PUBLIC (decl) = publicp;
7317   if (! publicp)
7318     {
7319       DECL_INTERFACE_KNOWN (decl) = 1;
7320       DECL_NOT_REALLY_EXTERN (decl) = 1;
7321     }
7322
7323   /* If the declaration was declared inline, mark it as such.  */
7324   if (inlinep)
7325     DECL_DECLARED_INLINE_P (decl) = 1;
7326   if (inlinep & 2)
7327     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7328
7329   DECL_EXTERNAL (decl) = 1;
7330   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7331     {
7332       error (ctype
7333              ? G_("static member function %qD cannot have cv-qualifier")
7334              : G_("non-member function %qD cannot have cv-qualifier"),
7335              decl);
7336       quals = TYPE_UNQUALIFIED;
7337     }
7338
7339   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7340       && !grok_op_properties (decl, /*complain=*/true))
7341     return NULL_TREE;
7342
7343   if (funcdef_flag)
7344     /* Make the init_value nonzero so pushdecl knows this is not
7345        tentative.  error_mark_node is replaced later with the BLOCK.  */
7346     DECL_INITIAL (decl) = error_mark_node;
7347
7348   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7349     TREE_NOTHROW (decl) = 1;
7350
7351   /* Caller will do the rest of this.  */
7352   if (check < 0)
7353     return decl;
7354
7355   if (ctype != NULL_TREE)
7356     grokclassfn (ctype, decl, flags);
7357
7358   decl = check_explicit_specialization (orig_declarator, decl,
7359                                         template_count,
7360                                         2 * funcdef_flag +
7361                                         4 * (friendp != 0));
7362   if (decl == error_mark_node)
7363     return NULL_TREE;
7364
7365   if (DECL_STATIC_FUNCTION_P (decl))
7366     check_static_quals (decl, quals);
7367
7368   if (attrlist)
7369     {
7370       cplus_decl_attributes (&decl, *attrlist, 0);
7371       *attrlist = NULL_TREE;
7372     }
7373
7374   /* Check main's type after attributes have been applied.  */
7375   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7376     {
7377       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7378                         integer_type_node))
7379         {
7380           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7381           tree newtype;
7382           error ("%<::main%> must return %<int%>");
7383           newtype = build_function_type (integer_type_node, oldtypeargs);
7384           TREE_TYPE (decl) = newtype;
7385         }
7386       if (warn_main)
7387         check_main_parameter_types (decl);
7388     }
7389
7390   if (ctype != NULL_TREE
7391       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7392       && check)
7393     {
7394       tree old_decl = check_classfn (ctype, decl,
7395                                      (processing_template_decl
7396                                       > template_class_depth (ctype))
7397                                      ? current_template_parms
7398                                      : NULL_TREE);
7399
7400       if (old_decl == error_mark_node)
7401         return NULL_TREE;
7402
7403       if (old_decl)
7404         {
7405           tree ok;
7406           tree pushed_scope;
7407
7408           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7409             /* Because grokfndecl is always supposed to return a
7410                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7411                here.  We depend on our callers to figure out that its
7412                really a template that's being returned.  */
7413             old_decl = DECL_TEMPLATE_RESULT (old_decl);
7414
7415           if (DECL_STATIC_FUNCTION_P (old_decl)
7416               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7417             {
7418               /* Remove the `this' parm added by grokclassfn.  */
7419               revert_static_member_fn (decl);
7420               check_static_quals (decl, quals);
7421             }
7422           if (DECL_ARTIFICIAL (old_decl))
7423             {
7424               error ("definition of implicitly-declared %qD", old_decl);
7425               return NULL_TREE;
7426             }
7427           else if (DECL_DEFAULTED_FN (old_decl))
7428             {
7429               error ("definition of explicitly-defaulted %q+D", decl);
7430               error ("%q+#D explicitly defaulted here", old_decl);
7431               return NULL_TREE;
7432             }
7433
7434           /* Since we've smashed OLD_DECL to its
7435              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7436           if (TREE_CODE (decl) == TEMPLATE_DECL)
7437             decl = DECL_TEMPLATE_RESULT (decl);
7438
7439           /* Attempt to merge the declarations.  This can fail, in
7440              the case of some invalid specialization declarations.  */
7441           pushed_scope = push_scope (ctype);
7442           ok = duplicate_decls (decl, old_decl, friendp);
7443           if (pushed_scope)
7444             pop_scope (pushed_scope);
7445           if (!ok)
7446             {
7447               error ("no %q#D member function declared in class %qT",
7448                      decl, ctype);
7449               return NULL_TREE;
7450             }
7451           return old_decl;
7452         }
7453     }
7454
7455   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7456     return NULL_TREE;
7457
7458   if (ctype == NULL_TREE || check)
7459     return decl;
7460
7461   if (virtualp)
7462     DECL_VIRTUAL_P (decl) = 1;
7463
7464   return decl;
7465 }
7466
7467 /* decl is a FUNCTION_DECL.
7468    specifiers are the parsed virt-specifiers.
7469
7470    Set flags to reflect the virt-specifiers.
7471
7472    Returns decl.  */
7473
7474 static tree
7475 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7476 {
7477   if (decl == NULL_TREE)
7478     return decl;
7479   if (specifiers & VIRT_SPEC_OVERRIDE)
7480     DECL_OVERRIDE_P (decl) = 1;
7481   if (specifiers & VIRT_SPEC_FINAL)
7482     DECL_FINAL_P (decl) = 1;
7483   return decl;
7484 }
7485
7486 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7487    the linkage that DECL will receive in the object file.  */
7488
7489 static void
7490 set_linkage_for_static_data_member (tree decl)
7491 {
7492   /* A static data member always has static storage duration and
7493      external linkage.  Note that static data members are forbidden in
7494      local classes -- the only situation in which a class has
7495      non-external linkage.  */
7496   TREE_PUBLIC (decl) = 1;
7497   TREE_STATIC (decl) = 1;
7498   /* For non-template classes, static data members are always put
7499      out in exactly those files where they are defined, just as
7500      with ordinary namespace-scope variables.  */
7501   if (!processing_template_decl)
7502     DECL_INTERFACE_KNOWN (decl) = 1;
7503 }
7504
7505 /* Create a VAR_DECL named NAME with the indicated TYPE.
7506
7507    If SCOPE is non-NULL, it is the class type or namespace containing
7508    the variable.  If SCOPE is NULL, the variable should is created in
7509    the innermost enclosings scope.  */
7510
7511 static tree
7512 grokvardecl (tree type,
7513              tree name,
7514              const cp_decl_specifier_seq *declspecs,
7515              int initialized,
7516              int constp,
7517              tree scope)
7518 {
7519   tree decl;
7520   tree explicit_scope;
7521
7522   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7523
7524   /* Compute the scope in which to place the variable, but remember
7525      whether or not that scope was explicitly specified by the user.   */
7526   explicit_scope = scope;
7527   if (!scope)
7528     {
7529       /* An explicit "extern" specifier indicates a namespace-scope
7530          variable.  */
7531       if (declspecs->storage_class == sc_extern)
7532         scope = current_decl_namespace ();
7533       else if (!at_function_scope_p ())
7534         scope = current_scope ();
7535     }
7536
7537   if (scope
7538       && (/* If the variable is a namespace-scope variable declared in a
7539              template, we need DECL_LANG_SPECIFIC.  */
7540           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7541           /* Similarly for namespace-scope variables with language linkage
7542              other than C++.  */
7543           || (TREE_CODE (scope) == NAMESPACE_DECL
7544               && current_lang_name != lang_name_cplusplus)
7545           /* Similarly for static data members.  */
7546           || TYPE_P (scope)))
7547     decl = build_lang_decl (VAR_DECL, name, type);
7548   else
7549     decl = build_decl (input_location, VAR_DECL, name, type);
7550
7551   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7552     set_decl_namespace (decl, explicit_scope, 0);
7553   else
7554     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7555
7556   if (declspecs->storage_class == sc_extern)
7557     {
7558       DECL_THIS_EXTERN (decl) = 1;
7559       DECL_EXTERNAL (decl) = !initialized;
7560     }
7561
7562   if (DECL_CLASS_SCOPE_P (decl))
7563     {
7564       set_linkage_for_static_data_member (decl);
7565       /* This function is only called with out-of-class definitions.  */
7566       DECL_EXTERNAL (decl) = 0;
7567       check_class_member_definition_namespace (decl);
7568     }
7569   /* At top level, either `static' or no s.c. makes a definition
7570      (perhaps tentative), and absence of `static' makes it public.  */
7571   else if (toplevel_bindings_p ())
7572     {
7573       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7574                             && (DECL_THIS_EXTERN (decl) || ! constp));
7575       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7576     }
7577   /* Not at top level, only `static' makes a static definition.  */
7578   else
7579     {
7580       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7581       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7582     }
7583
7584   if (declspecs->specs[(int)ds_thread])
7585     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7586
7587   /* If the type of the decl has no linkage, make sure that we'll
7588      notice that in mark_used.  */
7589   if (cxx_dialect > cxx98
7590       && decl_linkage (decl) != lk_none
7591       && DECL_LANG_SPECIFIC (decl) == NULL
7592       && !DECL_EXTERN_C_P (decl)
7593       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7594     retrofit_lang_decl (decl);
7595
7596   if (TREE_PUBLIC (decl))
7597     {
7598       /* [basic.link]: A name with no linkage (notably, the name of a class
7599          or enumeration declared in a local scope) shall not be used to
7600          declare an entity with linkage.
7601
7602          DR 757 relaxes this restriction for C++0x.  */
7603       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7604                 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7605       if (t)
7606         {
7607           if (TYPE_ANONYMOUS_P (t))
7608             {
7609               if (DECL_EXTERN_C_P (decl))
7610                 /* Allow this; it's pretty common in C.  */
7611                 ;
7612               else
7613                 {
7614                   /* DRs 132, 319 and 389 seem to indicate types with
7615                      no linkage can only be used to declare extern "C"
7616                      entities.  Since it's not always an error in the
7617                      ISO C++ 90 Standard, we only issue a warning.  */
7618                   warning (0, "anonymous type with no linkage used to declare "
7619                            "variable %q#D with linkage", decl);
7620                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7621                     warning (0, "%q+#D does not refer to the unqualified "
7622                              "type, so it is not used for linkage",
7623                              TYPE_NAME (t));
7624                 }
7625             }
7626           else
7627             warning (0, "type %qT with no linkage used to declare variable "
7628                      "%q#D with linkage", t, decl);
7629         }
7630     }
7631   else
7632     DECL_INTERFACE_KNOWN (decl) = 1;
7633
7634   return decl;
7635 }
7636
7637 /* Create and return a canonical pointer to member function type, for
7638    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7639
7640 tree
7641 build_ptrmemfunc_type (tree type)
7642 {
7643   tree field, fields;
7644   tree t;
7645   tree unqualified_variant = NULL_TREE;
7646
7647   if (type == error_mark_node)
7648     return type;
7649
7650   /* If a canonical type already exists for this type, use it.  We use
7651      this method instead of type_hash_canon, because it only does a
7652      simple equality check on the list of field members.  */
7653
7654   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7655     return t;
7656
7657   /* Make sure that we always have the unqualified pointer-to-member
7658      type first.  */
7659   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7660     unqualified_variant
7661       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7662
7663   t = make_class_type (RECORD_TYPE);
7664   xref_basetypes (t, NULL_TREE);
7665
7666   /* Let the front end know this is a pointer to member function...  */
7667   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7668   /* ... and not really a class type.  */
7669   SET_CLASS_TYPE_P (t, 0);
7670
7671   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7672   fields = field;
7673
7674   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
7675                       delta_type_node);
7676   DECL_CHAIN (field) = fields;
7677   fields = field;
7678
7679   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7680
7681   /* Zap out the name so that the back end will give us the debugging
7682      information for this anonymous RECORD_TYPE.  */
7683   TYPE_NAME (t) = NULL_TREE;
7684
7685   /* If this is not the unqualified form of this pointer-to-member
7686      type, set the TYPE_MAIN_VARIANT for this type to be the
7687      unqualified type.  Since they are actually RECORD_TYPEs that are
7688      not variants of each other, we must do this manually.
7689      As we just built a new type there is no need to do yet another copy.  */
7690   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7691     {
7692       int type_quals = cp_type_quals (type);
7693       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7694       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7695       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7696       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7697       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7698       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7699       TREE_TYPE (TYPE_BINFO (t)) = t;
7700     }
7701
7702   /* Cache this pointer-to-member type so that we can find it again
7703      later.  */
7704   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7705
7706   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7707     SET_TYPE_STRUCTURAL_EQUALITY (t);
7708   else if (TYPE_CANONICAL (type) != type)
7709     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7710
7711   return t;
7712 }
7713
7714 /* Create and return a pointer to data member type.  */
7715
7716 tree
7717 build_ptrmem_type (tree class_type, tree member_type)
7718 {
7719   if (TREE_CODE (member_type) == METHOD_TYPE)
7720     {
7721       cp_cv_quals quals = type_memfn_quals (member_type);
7722       member_type = build_memfn_type (member_type, class_type, quals);
7723       return build_ptrmemfunc_type (build_pointer_type (member_type));
7724     }
7725   else
7726     {
7727       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7728       return build_offset_type (class_type, member_type);
7729     }
7730 }
7731
7732 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7733    Check to see that the definition is valid.  Issue appropriate error
7734    messages.  Return 1 if the definition is particularly bad, or 0
7735    otherwise.  */
7736
7737 static int
7738 check_static_variable_definition (tree decl, tree type)
7739 {
7740   /* Can't check yet if we don't know the type.  */
7741   if (dependent_type_p (type))
7742     return 0;
7743   /* If DECL is declared constexpr, we'll do the appropriate checks
7744      in check_initializer.  */
7745   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7746     return 0;
7747   else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7748     {
7749       if (literal_type_p (type))
7750         permerror (input_location,
7751                    "%<constexpr%> needed for in-class initialization of "
7752                    "static data member %q#D of non-integral type", decl);
7753       else
7754         error ("in-class initialization of static data member %q#D of "
7755                "non-literal type", decl);
7756       return 1;
7757     }
7758
7759   /* Motion 10 at San Diego: If a static const integral data member is
7760      initialized with an integral constant expression, the initializer
7761      may appear either in the declaration (within the class), or in
7762      the definition, but not both.  If it appears in the class, the
7763      member is a member constant.  The file-scope definition is always
7764      required.  */
7765   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7766     {
7767       error ("invalid in-class initialization of static data member "
7768              "of non-integral type %qT",
7769              type);
7770       return 1;
7771     }
7772   else if (!CP_TYPE_CONST_P (type))
7773     error ("ISO C++ forbids in-class initialization of non-const "
7774            "static member %qD",
7775            decl);
7776   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7777     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7778              "%qD of non-integral type %qT", decl, type);
7779
7780   return 0;
7781 }
7782
7783 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7784    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7785    expressions out into temporary variables so that walk_tree doesn't
7786    step into them (c++/15764).  */
7787
7788 static tree
7789 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7790 {
7791   struct pointer_set_t *pset = (struct pointer_set_t *)data;
7792   tree expr = *expr_p;
7793   if (TREE_CODE (expr) == SAVE_EXPR)
7794     {
7795       tree op = TREE_OPERAND (expr, 0);
7796       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7797       if (TREE_SIDE_EFFECTS (op))
7798         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7799       *walk_subtrees = 0;
7800     }
7801   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7802     *walk_subtrees = 0;
7803   return NULL;
7804 }
7805
7806 /* Entry point for the above.  */
7807
7808 static void
7809 stabilize_vla_size (tree size)
7810 {
7811   struct pointer_set_t *pset = pointer_set_create ();
7812   /* Break out any function calls into temporary variables.  */
7813   cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7814 }
7815
7816 /* Given the SIZE (i.e., number of elements) in an array, compute an
7817    appropriate index type for the array.  If non-NULL, NAME is the
7818    name of the thing being declared.  */
7819
7820 tree
7821 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7822 {
7823   tree type;
7824   tree itype;
7825   tree osize = size;
7826   tree abi_1_itype = NULL_TREE;
7827
7828   if (error_operand_p (size))
7829     return error_mark_node;
7830
7831   type = TREE_TYPE (size);
7832   /* type_dependent_expression_p? */
7833   if (!dependent_type_p (type))
7834     {
7835       mark_rvalue_use (size);
7836
7837       if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7838           && TREE_SIDE_EFFECTS (size))
7839         /* In C++98, we mark a non-constant array bound with a magic
7840            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7841       else
7842         {
7843           size = fold_non_dependent_expr (size);
7844
7845           if (CLASS_TYPE_P (type)
7846               && CLASSTYPE_LITERAL_P (type))
7847             {
7848               size = build_expr_type_conversion (WANT_INT, size, true);
7849               if (!size)
7850                 {
7851                   if (!(complain & tf_error))
7852                     return error_mark_node;
7853                   if (name)
7854                     error ("size of array %qD has non-integral type %qT",
7855                            name, type);
7856                   else
7857                     error ("size of array has non-integral type %qT", type);
7858                   size = integer_one_node;
7859                 }
7860               if (size == error_mark_node)
7861                 return error_mark_node;
7862               type = TREE_TYPE (size);
7863               /* We didn't support this case in GCC 3.2, so don't bother
7864                  trying to model it now in ABI v1.  */
7865               abi_1_itype = error_mark_node;
7866             }
7867
7868           size = maybe_constant_value (size);
7869           if (!TREE_CONSTANT (size))
7870             size = osize;
7871         }
7872
7873       if (error_operand_p (size))
7874         return error_mark_node;
7875
7876       /* The array bound must be an integer type.  */
7877       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7878         {
7879           if (!(complain & tf_error))
7880             return error_mark_node;
7881           if (name)
7882             error ("size of array %qD has non-integral type %qT", name, type);
7883           else
7884             error ("size of array has non-integral type %qT", type);
7885           size = integer_one_node;
7886           type = TREE_TYPE (size);
7887         }
7888     }
7889
7890   /* A type is dependent if it is...an array type constructed from any
7891      dependent type or whose size is specified by a constant expression
7892      that is value-dependent.  */
7893   /* We can only call value_dependent_expression_p on integral constant
7894      expressions; treat non-constant expressions as dependent, too.  */
7895   if (processing_template_decl
7896       && (dependent_type_p (type)
7897           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7898     {
7899       /* We cannot do any checking for a SIZE that isn't known to be
7900          constant. Just build the index type and mark that it requires
7901          structural equality checks.  */
7902       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7903                                            size, integer_one_node));
7904       TYPE_DEPENDENT_P (itype) = 1;
7905       TYPE_DEPENDENT_P_VALID (itype) = 1;
7906       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7907       return itype;
7908     }
7909   
7910   if (!abi_version_at_least (2) && processing_template_decl
7911       && abi_1_itype == NULL_TREE)
7912     /* For abi-1, we handled all instances in templates the same way,
7913        even when they were non-dependent. This affects the manglings
7914        produced.  So, we do the normal checking for non-dependent
7915        sizes, but at the end we'll return the same type that abi-1
7916        would have, but with TYPE_CANONICAL set to the "right"
7917        value that the current ABI would provide. */
7918     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7919                                                osize, integer_one_node));
7920
7921   /* Normally, the array-bound will be a constant.  */
7922   if (TREE_CODE (size) == INTEGER_CST)
7923     {
7924       /* Check to see if the array bound overflowed.  Make that an
7925          error, no matter how generous we're being.  */
7926       constant_expression_error (size);
7927
7928       /* An array must have a positive number of elements.  */
7929       if (INT_CST_LT (size, integer_zero_node))
7930         {
7931           if (!(complain & tf_error))
7932             return error_mark_node;
7933           if (name)
7934             error ("size of array %qD is negative", name);
7935           else
7936             error ("size of array is negative");
7937           size = integer_one_node;
7938         }
7939       /* As an extension we allow zero-sized arrays.  */
7940       else if (integer_zerop (size))
7941         {
7942           if (!(complain & tf_error))
7943             /* We must fail if performing argument deduction (as
7944                indicated by the state of complain), so that
7945                another substitution can be found.  */
7946             return error_mark_node;
7947           else if (in_system_header)
7948             /* Allow them in system headers because glibc uses them.  */;
7949           else if (name)
7950             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7951           else
7952             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7953         }
7954     }
7955   else if (TREE_CONSTANT (size)
7956            /* We don't allow VLAs at non-function scopes, or during
7957               tentative template substitution.  */
7958            || !at_function_scope_p () || !(complain & tf_error))
7959     {
7960       if (!(complain & tf_error))
7961         return error_mark_node;
7962       /* `(int) &fn' is not a valid array bound.  */
7963       if (name)
7964         error ("size of array %qD is not an integral constant-expression",
7965                name);
7966       else
7967         error ("size of array is not an integral constant-expression");
7968       size = integer_one_node;
7969     }
7970   else if (pedantic && warn_vla != 0)
7971     {
7972       if (name)
7973         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7974       else
7975         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7976     }
7977   else if (warn_vla > 0)
7978     {
7979       if (name)
7980         warning (OPT_Wvla, 
7981                  "variable length array %qD is used", name);
7982       else
7983         warning (OPT_Wvla, 
7984                  "variable length array is used");
7985     }
7986
7987   if (processing_template_decl && !TREE_CONSTANT (size))
7988     /* A variable sized array.  */
7989     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7990   else
7991     {
7992       HOST_WIDE_INT saved_processing_template_decl;
7993
7994       /* Compute the index of the largest element in the array.  It is
7995          one less than the number of elements in the array.  We save
7996          and restore PROCESSING_TEMPLATE_DECL so that computations in
7997          cp_build_binary_op will be appropriately folded.  */
7998       saved_processing_template_decl = processing_template_decl;
7999       processing_template_decl = 0;
8000       itype = cp_build_binary_op (input_location,
8001                                   MINUS_EXPR,
8002                                   cp_convert (ssizetype, size),
8003                                   cp_convert (ssizetype, integer_one_node),
8004                                   tf_warning_or_error);
8005       itype = fold (itype);
8006       processing_template_decl = saved_processing_template_decl;
8007
8008       if (!TREE_CONSTANT (itype))
8009         /* A variable sized array.  */
8010         itype = variable_size (itype);
8011       /* Make sure that there was no overflow when creating to a signed
8012          index type.  (For example, on a 32-bit machine, an array with
8013          size 2^32 - 1 is too big.)  */
8014       else if (TREE_CODE (itype) == INTEGER_CST
8015                && TREE_OVERFLOW (itype))
8016         {
8017           if (!(complain & tf_error))
8018             return error_mark_node;
8019           error ("overflow in array dimension");
8020           TREE_OVERFLOW (itype) = 0;
8021         }
8022     }
8023
8024   /* Create and return the appropriate index type.  */
8025   if (abi_1_itype && abi_1_itype != error_mark_node)
8026     {
8027       tree t = build_index_type (itype);
8028       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8029       itype = abi_1_itype;
8030     }
8031   else
8032     itype = build_index_type (itype);
8033
8034   /* If the index type were dependent, we would have returned early, so
8035      remember that it isn't.  */
8036   TYPE_DEPENDENT_P (itype) = 0;
8037   TYPE_DEPENDENT_P_VALID (itype) = 1;
8038   return itype;
8039 }
8040
8041 /* Returns the scope (if any) in which the entity declared by
8042    DECLARATOR will be located.  If the entity was declared with an
8043    unqualified name, NULL_TREE is returned.  */
8044
8045 tree
8046 get_scope_of_declarator (const cp_declarator *declarator)
8047 {
8048   while (declarator && declarator->kind != cdk_id)
8049     declarator = declarator->declarator;
8050
8051   /* If the declarator-id is a SCOPE_REF, the scope in which the
8052      declaration occurs is the first operand.  */
8053   if (declarator
8054       && declarator->u.id.qualifying_scope)
8055     return declarator->u.id.qualifying_scope;
8056
8057   /* Otherwise, the declarator is not a qualified name; the entity will
8058      be declared in the current scope.  */
8059   return NULL_TREE;
8060 }
8061
8062 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8063    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8064    with this type.  */
8065
8066 static tree
8067 create_array_type_for_decl (tree name, tree type, tree size)
8068 {
8069   tree itype = NULL_TREE;
8070
8071   /* If things have already gone awry, bail now.  */
8072   if (type == error_mark_node || size == error_mark_node)
8073     return error_mark_node;
8074
8075   /* 8.3.4/1: If the type of the identifier of D contains the auto
8076      type-specifier, the program is ill-formed.  */
8077   if (pedantic && type_uses_auto (type))
8078     pedwarn (input_location, OPT_pedantic,
8079              "declaration of %qD as array of %<auto%>", name);
8080
8081   /* If there are some types which cannot be array elements,
8082      issue an error-message and return.  */
8083   switch (TREE_CODE (type))
8084     {
8085     case VOID_TYPE:
8086       if (name)
8087         error ("declaration of %qD as array of void", name);
8088       else
8089         error ("creating array of void");
8090       return error_mark_node;
8091
8092     case FUNCTION_TYPE:
8093       if (name)
8094         error ("declaration of %qD as array of functions", name);
8095       else
8096         error ("creating array of functions");
8097       return error_mark_node;
8098
8099     case REFERENCE_TYPE:
8100       if (name)
8101         error ("declaration of %qD as array of references", name);
8102       else
8103         error ("creating array of references");
8104       return error_mark_node;
8105
8106     case METHOD_TYPE:
8107       if (name)
8108         error ("declaration of %qD as array of function members", name);
8109       else
8110         error ("creating array of function members");
8111       return error_mark_node;
8112
8113     default:
8114       break;
8115     }
8116
8117   /* [dcl.array]
8118
8119      The constant expressions that specify the bounds of the arrays
8120      can be omitted only for the first member of the sequence.  */
8121   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8122     {
8123       if (name)
8124         error ("declaration of %qD as multidimensional array must "
8125                "have bounds for all dimensions except the first",
8126                name);
8127       else
8128         error ("multidimensional array must have bounds for all "
8129                "dimensions except the first");
8130
8131       return error_mark_node;
8132     }
8133
8134   /* Figure out the index type for the array.  */
8135   if (size)
8136     itype = compute_array_index_type (name, size, tf_warning_or_error);
8137
8138   /* [dcl.array]
8139      T is called the array element type; this type shall not be [...] an
8140      abstract class type.  */
8141   abstract_virtuals_error (name, type);
8142
8143   return build_cplus_array_type (type, itype);
8144 }
8145
8146 /* Check that it's OK to declare a function with the indicated TYPE.
8147    SFK indicates the kind of special function (if any) that this
8148    function is.  OPTYPE is the type given in a conversion operator
8149    declaration, or the class type for a constructor/destructor.
8150    Returns the actual return type of the function; that
8151    may be different than TYPE if an error occurs, or for certain
8152    special functions.  */
8153
8154 static tree
8155 check_special_function_return_type (special_function_kind sfk,
8156                                     tree type,
8157                                     tree optype)
8158 {
8159   switch (sfk)
8160     {
8161     case sfk_constructor:
8162       if (type)
8163         error ("return type specification for constructor invalid");
8164
8165       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8166         type = build_pointer_type (optype);
8167       else
8168         type = void_type_node;
8169       break;
8170
8171     case sfk_destructor:
8172       if (type)
8173         error ("return type specification for destructor invalid");
8174       /* We can't use the proper return type here because we run into
8175          problems with ambiguous bases and covariant returns.
8176          Java classes are left unchanged because (void *) isn't a valid
8177          Java type, and we don't want to change the Java ABI.  */
8178       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8179         type = build_pointer_type (void_type_node);
8180       else
8181         type = void_type_node;
8182       break;
8183
8184     case sfk_conversion:
8185       if (type)
8186         error ("return type specified for %<operator %T%>",  optype);
8187       type = optype;
8188       break;
8189
8190     default:
8191       gcc_unreachable ();
8192     }
8193
8194   return type;
8195 }
8196
8197 /* A variable or data member (whose unqualified name is IDENTIFIER)
8198    has been declared with the indicated TYPE.  If the TYPE is not
8199    acceptable, issue an error message and return a type to use for
8200    error-recovery purposes.  */
8201
8202 tree
8203 check_var_type (tree identifier, tree type)
8204 {
8205   if (VOID_TYPE_P (type))
8206     {
8207       if (!identifier)
8208         error ("unnamed variable or field declared void");
8209       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8210         {
8211           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8212           error ("variable or field %qE declared void", identifier);
8213         }
8214       else
8215         error ("variable or field declared void");
8216       type = error_mark_node;
8217     }
8218
8219   return type;
8220 }
8221
8222 /* Given declspecs and a declarator (abstract or otherwise), determine
8223    the name and type of the object declared and construct a DECL node
8224    for it.
8225
8226    DECLSPECS points to the representation of declaration-specifier
8227    sequence that precedes declarator.
8228
8229    DECL_CONTEXT says which syntactic context this declaration is in:
8230      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8231      FUNCDEF for a function definition.  Like NORMAL but a few different
8232       error messages in each case.  Return value may be zero meaning
8233       this definition is too screwy to try to parse.
8234      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8235       handle member functions (which have FIELD context).
8236       Return value may be zero meaning this definition is too screwy to
8237       try to parse.
8238      PARM for a parameter declaration (either within a function prototype
8239       or before a function body).  Make a PARM_DECL, or return void_type_node.
8240      TPARM for a template parameter declaration.
8241      CATCHPARM for a parameter declaration before a catch clause.
8242      TYPENAME if for a typename (in a cast or sizeof).
8243       Don't make a DECL node; just return the ..._TYPE node.
8244      FIELD for a struct or union field; make a FIELD_DECL.
8245      BITFIELD for a field with specified width.
8246
8247    INITIALIZED is as for start_decl.
8248
8249    ATTRLIST is a pointer to the list of attributes, which may be NULL
8250    if there are none; *ATTRLIST may be modified if attributes from inside
8251    the declarator should be applied to the declaration.
8252
8253    When this function is called, scoping variables (such as
8254    CURRENT_CLASS_TYPE) should reflect the scope in which the
8255    declaration occurs, not the scope in which the new declaration will
8256    be placed.  For example, on:
8257
8258      void S::f() { ... }
8259
8260    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8261    should not be `S'.
8262
8263    Returns a DECL (if a declarator is present), a TYPE (if there is no
8264    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8265    error occurs. */
8266
8267 tree
8268 grokdeclarator (const cp_declarator *declarator,
8269                 const cp_decl_specifier_seq *declspecs,
8270                 enum decl_context decl_context,
8271                 int initialized,
8272                 tree* attrlist)
8273 {
8274   tree type = NULL_TREE;
8275   int longlong = 0;
8276   int explicit_int128 = 0;
8277   int virtualp, explicitp, friendp, inlinep, staticp;
8278   int explicit_int = 0;
8279   int explicit_char = 0;
8280   int defaulted_int = 0;
8281   tree dependent_name = NULL_TREE;
8282
8283   tree typedef_decl = NULL_TREE;
8284   const char *name = NULL;
8285   tree typedef_type = NULL_TREE;
8286   /* True if this declarator is a function definition.  */
8287   bool funcdef_flag = false;
8288   cp_declarator_kind innermost_code = cdk_error;
8289   int bitfield = 0;
8290 #if 0
8291   /* See the code below that used this.  */
8292   tree decl_attr = NULL_TREE;
8293 #endif
8294
8295   /* Keep track of what sort of function is being processed
8296      so that we can warn about default return values, or explicit
8297      return values which do not match prescribed defaults.  */
8298   special_function_kind sfk = sfk_none;
8299
8300   tree dname = NULL_TREE;
8301   tree ctor_return_type = NULL_TREE;
8302   enum overload_flags flags = NO_SPECIAL;
8303   /* cv-qualifiers that apply to the declarator, for a declaration of
8304      a member function.  */
8305   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8306   /* virt-specifiers that apply to the declarator, for a declaration of
8307      a member function.  */
8308   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8309   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8310   int type_quals;
8311   tree raises = NULL_TREE;
8312   int template_count = 0;
8313   tree returned_attrs = NULL_TREE;
8314   tree parms = NULL_TREE;
8315   const cp_declarator *id_declarator;
8316   /* The unqualified name of the declarator; either an
8317      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8318   tree unqualified_id;
8319   /* The class type, if any, in which this entity is located,
8320      or NULL_TREE if none.  Note that this value may be different from
8321      the current class type; for example if an attempt is made to declare
8322      "A::f" inside "B", this value will be "A".  */
8323   tree ctype = current_class_type;
8324   /* The NAMESPACE_DECL for the namespace in which this entity is
8325      located.  If an unqualified name is used to declare the entity,
8326      this value will be NULL_TREE, even if the entity is located at
8327      namespace scope.  */
8328   tree in_namespace = NULL_TREE;
8329   cp_storage_class storage_class;
8330   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8331   bool type_was_error_mark_node = false;
8332   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8333   bool template_type_arg = false;
8334   bool template_parm_flag = false;
8335   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8336   const char *errmsg;
8337
8338   signed_p = declspecs->specs[(int)ds_signed];
8339   unsigned_p = declspecs->specs[(int)ds_unsigned];
8340   short_p = declspecs->specs[(int)ds_short];
8341   long_p = declspecs->specs[(int)ds_long];
8342   longlong = declspecs->specs[(int)ds_long] >= 2;
8343   explicit_int128 = declspecs->explicit_int128_p;
8344   thread_p = declspecs->specs[(int)ds_thread];
8345
8346   if (decl_context == FUNCDEF)
8347     funcdef_flag = true, decl_context = NORMAL;
8348   else if (decl_context == MEMFUNCDEF)
8349     funcdef_flag = true, decl_context = FIELD;
8350   else if (decl_context == BITFIELD)
8351     bitfield = 1, decl_context = FIELD;
8352   else if (decl_context == TEMPLATE_TYPE_ARG)
8353     template_type_arg = true, decl_context = TYPENAME;
8354   else if (decl_context == TPARM)
8355     template_parm_flag = true, decl_context = PARM;
8356
8357   if (initialized > 1)
8358     funcdef_flag = true;
8359
8360   /* Look inside a declarator for the name being declared
8361      and get it as a string, for an error message.  */
8362   for (id_declarator = declarator;
8363        id_declarator;
8364        id_declarator = id_declarator->declarator)
8365     {
8366       if (id_declarator->kind != cdk_id)
8367         innermost_code = id_declarator->kind;
8368
8369       switch (id_declarator->kind)
8370         {
8371         case cdk_function:
8372           if (id_declarator->declarator
8373               && id_declarator->declarator->kind == cdk_id)
8374             {
8375               sfk = id_declarator->declarator->u.id.sfk;
8376               if (sfk == sfk_destructor)
8377                 flags = DTOR_FLAG;
8378             }
8379           break;
8380
8381         case cdk_id:
8382           {
8383             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8384             tree decl = id_declarator->u.id.unqualified_name;
8385             if (!decl)
8386               break;
8387             if (qualifying_scope)
8388               {
8389                 if (at_function_scope_p ())
8390                   {
8391                     /* [dcl.meaning] 
8392
8393                        A declarator-id shall not be qualified except
8394                        for ... 
8395
8396                        None of the cases are permitted in block
8397                        scope.  */
8398                     if (qualifying_scope == global_namespace)
8399                       error ("invalid use of qualified-name %<::%D%>",
8400                              decl);
8401                     else if (TYPE_P (qualifying_scope))
8402                       error ("invalid use of qualified-name %<%T::%D%>",
8403                              qualifying_scope, decl);
8404                     else 
8405                       error ("invalid use of qualified-name %<%D::%D%>",
8406                              qualifying_scope, decl);
8407                     return error_mark_node;
8408                   }
8409                 else if (TYPE_P (qualifying_scope))
8410                   {
8411                     ctype = qualifying_scope;
8412                     if (!MAYBE_CLASS_TYPE_P (ctype))
8413                       {
8414                         error ("%q#T is not a class or a namespace", ctype);
8415                         ctype = NULL_TREE;
8416                       }
8417                     else if (innermost_code != cdk_function
8418                              && current_class_type
8419                              && !UNIQUELY_DERIVED_FROM_P (ctype,
8420                                                           current_class_type))
8421                       {
8422                         error ("type %qT is not derived from type %qT",
8423                                ctype, current_class_type);
8424                         return error_mark_node;
8425                       }
8426                   }
8427                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8428                   in_namespace = qualifying_scope;
8429               }
8430             switch (TREE_CODE (decl))
8431               {
8432               case BIT_NOT_EXPR:
8433                 {
8434                   tree type;
8435
8436                   if (innermost_code != cdk_function)
8437                     {
8438                       error ("declaration of %qD as non-function", decl);
8439                       return error_mark_node;
8440                     }
8441                   else if (!qualifying_scope
8442                            && !(current_class_type && at_class_scope_p ()))
8443                     {
8444                       error ("declaration of %qD as non-member", decl);
8445                       return error_mark_node;
8446                     }
8447
8448                   type = TREE_OPERAND (decl, 0);
8449                   if (TYPE_P (type))
8450                     type = constructor_name (type);
8451                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
8452                   dname = decl;
8453                 }
8454                 break;
8455
8456               case TEMPLATE_ID_EXPR:
8457                 {
8458                   tree fns = TREE_OPERAND (decl, 0);
8459
8460                   dname = fns;
8461                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
8462                     {
8463                       gcc_assert (is_overloaded_fn (dname));
8464                       dname = DECL_NAME (get_first_fn (dname));
8465                     }
8466                 }
8467                 /* Fall through.  */
8468
8469               case IDENTIFIER_NODE:
8470                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8471                   dname = decl;
8472
8473                 if (C_IS_RESERVED_WORD (dname))
8474                   {
8475                     error ("declarator-id missing; using reserved word %qD",
8476                            dname);
8477                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8478                   }
8479                 else if (!IDENTIFIER_TYPENAME_P (dname))
8480                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8481                 else
8482                   {
8483                     gcc_assert (flags == NO_SPECIAL);
8484                     flags = TYPENAME_FLAG;
8485                     ctor_return_type = TREE_TYPE (dname);
8486                     sfk = sfk_conversion;
8487                     if (is_typename_at_global_scope (dname))
8488                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8489                     else
8490                       name = "<invalid operator>";
8491                   }
8492                 break;
8493
8494               default:
8495                 gcc_unreachable ();
8496               }
8497             break;
8498           }
8499
8500         case cdk_array:
8501         case cdk_pointer:
8502         case cdk_reference:
8503         case cdk_ptrmem:
8504           break;
8505
8506         case cdk_error:
8507           return error_mark_node;
8508
8509         default:
8510           gcc_unreachable ();
8511         }
8512       if (id_declarator->kind == cdk_id)
8513         break;
8514     }
8515
8516   /* [dcl.fct.edf]
8517
8518      The declarator in a function-definition shall have the form
8519      D1 ( parameter-declaration-clause) ...  */
8520   if (funcdef_flag && innermost_code != cdk_function)
8521     {
8522       error ("function definition does not declare parameters");
8523       return error_mark_node;
8524     }
8525
8526   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8527       && innermost_code != cdk_function
8528       && ! (ctype && !declspecs->any_specifiers_p))
8529     {
8530       error ("declaration of %qD as non-function", dname);
8531       return error_mark_node;
8532     }
8533
8534   if (dname && IDENTIFIER_OPNAME_P (dname))
8535     {
8536       if (declspecs->specs[(int)ds_typedef])
8537         {
8538           error ("declaration of %qD as %<typedef%>", dname);
8539           return error_mark_node;
8540         }
8541       else if (decl_context == PARM || decl_context == CATCHPARM)
8542         {
8543           error ("declaration of %qD as parameter", dname);
8544           return error_mark_node;
8545         }
8546     }
8547
8548   /* Anything declared one level down from the top level
8549      must be one of the parameters of a function
8550      (because the body is at least two levels down).  */
8551
8552   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8553      by not allowing C++ class definitions to specify their parameters
8554      with xdecls (must be spec.d in the parmlist).
8555
8556      Since we now wait to push a class scope until we are sure that
8557      we are in a legitimate method context, we must set oldcname
8558      explicitly (since current_class_name is not yet alive).
8559
8560      We also want to avoid calling this a PARM if it is in a namespace.  */
8561
8562   if (decl_context == NORMAL && !toplevel_bindings_p ())
8563     {
8564       cp_binding_level *b = current_binding_level;
8565       current_binding_level = b->level_chain;
8566       if (current_binding_level != 0 && toplevel_bindings_p ())
8567         decl_context = PARM;
8568       current_binding_level = b;
8569     }
8570
8571   if (name == NULL)
8572     name = decl_context == PARM ? "parameter" : "type name";
8573
8574   if (constexpr_p && declspecs->specs[(int)ds_typedef])
8575     {
8576       error ("%<constexpr%> cannot appear in a typedef declaration");
8577       return error_mark_node;
8578     }
8579
8580   /* If there were multiple types specified in the decl-specifier-seq,
8581      issue an error message.  */
8582   if (declspecs->multiple_types_p)
8583     {
8584       error ("two or more data types in declaration of %qs", name);
8585       return error_mark_node;
8586     }
8587
8588   if (declspecs->conflicting_specifiers_p)
8589     {
8590       error ("conflicting specifiers in declaration of %qs", name);
8591       return error_mark_node;
8592     }
8593
8594   /* Extract the basic type from the decl-specifier-seq.  */
8595   type = declspecs->type;
8596   if (type == error_mark_node)
8597     {
8598       type = NULL_TREE;
8599       type_was_error_mark_node = true;
8600     }
8601   /* If the entire declaration is itself tagged as deprecated then
8602      suppress reports of deprecated items.  */
8603   if (type && TREE_DEPRECATED (type)
8604       && deprecated_state != DEPRECATED_SUPPRESS)
8605     warn_deprecated_use (type, NULL_TREE);
8606   if (type && TREE_CODE (type) == TYPE_DECL)
8607     {
8608       typedef_decl = type;
8609       type = TREE_TYPE (typedef_decl);
8610       if (TREE_DEPRECATED (type)
8611           && DECL_ARTIFICIAL (typedef_decl)
8612           && deprecated_state != DEPRECATED_SUPPRESS)
8613         warn_deprecated_use (type, NULL_TREE);
8614     }
8615   /* No type at all: default to `int', and set DEFAULTED_INT
8616      because it was not a user-defined typedef.  */
8617   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8618     {
8619       /* These imply 'int'.  */
8620       type = integer_type_node;
8621       defaulted_int = 1;
8622     }
8623   /* Gather flags.  */
8624   explicit_int = declspecs->explicit_int_p;
8625   explicit_char = declspecs->explicit_char_p;
8626
8627 #if 0
8628   /* See the code below that used this.  */
8629   if (typedef_decl)
8630     decl_attr = DECL_ATTRIBUTES (typedef_decl);
8631 #endif
8632   typedef_type = type;
8633
8634
8635   if (sfk != sfk_conversion)
8636     ctor_return_type = ctype;
8637
8638   if (sfk != sfk_none)
8639     type = check_special_function_return_type (sfk, type,
8640                                                ctor_return_type);
8641   else if (type == NULL_TREE)
8642     {
8643       int is_main;
8644
8645       explicit_int = -1;
8646
8647       /* We handle `main' specially here, because 'main () { }' is so
8648          common.  With no options, it is allowed.  With -Wreturn-type,
8649          it is a warning.  It is only an error with -pedantic-errors.  */
8650       is_main = (funcdef_flag
8651                  && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8652                  && MAIN_NAME_P (dname)
8653                  && ctype == NULL_TREE
8654                  && in_namespace == NULL_TREE
8655                  && current_namespace == global_namespace);
8656
8657       if (type_was_error_mark_node)
8658         /* We've already issued an error, don't complain more.  */;
8659       else if (in_system_header || flag_ms_extensions)
8660         /* Allow it, sigh.  */;
8661       else if (! is_main)
8662         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8663       else if (pedantic)
8664         pedwarn (input_location, OPT_pedantic,
8665                  "ISO C++ forbids declaration of %qs with no type", name);
8666       else
8667         warning (OPT_Wreturn_type,
8668                  "ISO C++ forbids declaration of %qs with no type", name);
8669
8670       type = integer_type_node;
8671     }
8672
8673   ctype = NULL_TREE;
8674
8675   if (explicit_int128)
8676     {
8677       if (int128_integer_type_node == NULL_TREE)
8678         {
8679           error ("%<__int128%> is not supported by this target");
8680           explicit_int128 = false;
8681         }
8682       else if (pedantic && ! in_system_header)
8683         pedwarn (input_location, OPT_pedantic,
8684                  "ISO C++ does not support %<__int128%> for %qs", name);
8685     }
8686
8687   /* Now process the modifiers that were specified
8688      and check for invalid combinations.  */
8689
8690   /* Long double is a special combination.  */
8691   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8692     {
8693       long_p = false;
8694       type = cp_build_qualified_type (long_double_type_node,
8695                                       cp_type_quals (type));
8696     }
8697
8698   /* Check all other uses of type modifiers.  */
8699
8700   if (unsigned_p || signed_p || long_p || short_p)
8701     {
8702       int ok = 0;
8703
8704       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8705         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8706       else if (signed_p && unsigned_p)
8707         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8708       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8709         error ("%<long long%> invalid for %qs", name);
8710       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8711         error ("%<long%> invalid for %qs", name);
8712       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8713         error ("%<short%> invalid for %qs", name);
8714       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8715         error ("%<long%> or %<short%> invalid for %qs", name);
8716       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8717         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8718       else if ((long_p || short_p) && explicit_char)
8719         error ("%<long%> or %<short%> specified with char for %qs", name);
8720       else if (long_p && short_p)
8721         error ("%<long%> and %<short%> specified together for %qs", name);
8722       else if (type == char16_type_node || type == char32_type_node)
8723         {
8724           if (signed_p || unsigned_p)
8725             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8726           else if (short_p || long_p)
8727             error ("%<short%> or %<long%> invalid for %qs", name);
8728         }
8729       else
8730         {
8731           ok = 1;
8732           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8733             {
8734               pedwarn (input_location, OPT_pedantic, 
8735                        "long, short, signed or unsigned used invalidly for %qs",
8736                        name);
8737               if (flag_pedantic_errors)
8738                 ok = 0;
8739             }
8740         }
8741
8742       /* Discard the type modifiers if they are invalid.  */
8743       if (! ok)
8744         {
8745           unsigned_p = false;
8746           signed_p = false;
8747           long_p = false;
8748           short_p = false;
8749           longlong = 0;
8750         }
8751     }
8752
8753   /* Decide whether an integer type is signed or not.
8754      Optionally treat bitfields as signed by default.  */
8755   if (unsigned_p
8756       /* [class.bit]
8757
8758          It is implementation-defined whether a plain (neither
8759          explicitly signed or unsigned) char, short, int, or long
8760          bit-field is signed or unsigned.
8761
8762          Naturally, we extend this to long long as well.  Note that
8763          this does not include wchar_t.  */
8764       || (bitfield && !flag_signed_bitfields
8765           && !signed_p
8766           /* A typedef for plain `int' without `signed' can be
8767              controlled just like plain `int', but a typedef for
8768              `signed int' cannot be so controlled.  */
8769           && !(typedef_decl
8770                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8771           && TREE_CODE (type) == INTEGER_TYPE
8772           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8773     {
8774       if (explicit_int128)
8775         type = int128_unsigned_type_node;
8776       else if (longlong)
8777         type = long_long_unsigned_type_node;
8778       else if (long_p)
8779         type = long_unsigned_type_node;
8780       else if (short_p)
8781         type = short_unsigned_type_node;
8782       else if (type == char_type_node)
8783         type = unsigned_char_type_node;
8784       else if (typedef_decl)
8785         type = unsigned_type_for (type);
8786       else
8787         type = unsigned_type_node;
8788     }
8789   else if (signed_p && type == char_type_node)
8790     type = signed_char_type_node;
8791   else if (explicit_int128)
8792     type = int128_integer_type_node;
8793   else if (longlong)
8794     type = long_long_integer_type_node;
8795   else if (long_p)
8796     type = long_integer_type_node;
8797   else if (short_p)
8798     type = short_integer_type_node;
8799
8800   if (declspecs->specs[(int)ds_complex])
8801     {
8802       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8803         error ("complex invalid for %qs", name);
8804       /* If we just have "complex", it is equivalent to
8805          "complex double", but if any modifiers at all are specified it is
8806          the complex form of TYPE.  E.g, "complex short" is
8807          "complex short int".  */
8808       else if (defaulted_int && ! longlong && ! explicit_int128
8809                && ! (long_p || short_p || signed_p || unsigned_p))
8810         type = complex_double_type_node;
8811       else if (type == integer_type_node)
8812         type = complex_integer_type_node;
8813       else if (type == float_type_node)
8814         type = complex_float_type_node;
8815       else if (type == double_type_node)
8816         type = complex_double_type_node;
8817       else if (type == long_double_type_node)
8818         type = complex_long_double_type_node;
8819       else
8820         type = build_complex_type (type);
8821     }
8822
8823   type_quals = TYPE_UNQUALIFIED;
8824   if (declspecs->specs[(int)ds_const])
8825     type_quals |= TYPE_QUAL_CONST;
8826   if (declspecs->specs[(int)ds_volatile])
8827     type_quals |= TYPE_QUAL_VOLATILE;
8828   if (declspecs->specs[(int)ds_restrict])
8829     type_quals |= TYPE_QUAL_RESTRICT;
8830   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8831     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8832            ctor_return_type);
8833
8834   type_quals |= cp_type_quals (type);
8835   type = cp_build_qualified_type_real
8836     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8837                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8838   /* We might have ignored or rejected some of the qualifiers.  */
8839   type_quals = cp_type_quals (type);
8840
8841   staticp = 0;
8842   inlinep = !! declspecs->specs[(int)ds_inline];
8843   virtualp = !! declspecs->specs[(int)ds_virtual];
8844   explicitp = !! declspecs->specs[(int)ds_explicit];
8845
8846   storage_class = declspecs->storage_class;
8847   if (storage_class == sc_static)
8848     staticp = 1 + (decl_context == FIELD);
8849
8850   if (virtualp && staticp == 2)
8851     {
8852       error ("member %qD cannot be declared both virtual and static", dname);
8853       storage_class = sc_none;
8854       staticp = 0;
8855     }
8856   friendp = !! declspecs->specs[(int)ds_friend];
8857
8858   if (dependent_name && !friendp)
8859     {
8860       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8861       return error_mark_node;
8862     }
8863
8864   /* Issue errors about use of storage classes for parameters.  */
8865   if (decl_context == PARM)
8866     {
8867       if (declspecs->specs[(int)ds_typedef])
8868         {
8869           error ("typedef declaration invalid in parameter declaration");
8870           return error_mark_node;
8871         }
8872       else if (template_parm_flag && storage_class != sc_none)
8873         {
8874           error ("storage class specified for template parameter %qs", name);
8875           return error_mark_node;
8876         }
8877       else if (storage_class == sc_static
8878                || storage_class == sc_extern
8879                || thread_p)
8880         error ("storage class specifiers invalid in parameter declarations");
8881
8882       /* Function parameters cannot be constexpr.  If we saw one, moan
8883          and pretend it wasn't there.  */
8884       if (constexpr_p)
8885         {
8886           error ("a parameter cannot be declared %<constexpr%>");
8887           constexpr_p = 0;
8888         }
8889     }
8890
8891   /* Give error if `virtual' is used outside of class declaration.  */
8892   if (virtualp
8893       && (current_class_name == NULL_TREE || decl_context != FIELD))
8894     {
8895       error ("%<virtual%> outside class declaration");
8896       virtualp = 0;
8897     }
8898
8899   /* Static anonymous unions are dealt with here.  */
8900   if (staticp && decl_context == TYPENAME
8901       && declspecs->type
8902       && ANON_AGGR_TYPE_P (declspecs->type))
8903     decl_context = FIELD;
8904
8905   /* Warn about storage classes that are invalid for certain
8906      kinds of declarations (parameters, typenames, etc.).  */
8907   if (thread_p
8908       && ((storage_class
8909            && storage_class != sc_extern
8910            && storage_class != sc_static)
8911           || declspecs->specs[(int)ds_typedef]))
8912     {
8913       error ("multiple storage classes in declaration of %qs", name);
8914       thread_p = false;
8915     }
8916   if (decl_context != NORMAL
8917       && ((storage_class != sc_none
8918            && storage_class != sc_mutable)
8919           || thread_p))
8920     {
8921       if ((decl_context == PARM || decl_context == CATCHPARM)
8922           && (storage_class == sc_register
8923               || storage_class == sc_auto))
8924         ;
8925       else if (declspecs->specs[(int)ds_typedef])
8926         ;
8927       else if (decl_context == FIELD
8928                /* C++ allows static class elements.  */
8929                && storage_class == sc_static)
8930         /* C++ also allows inlines and signed and unsigned elements,
8931            but in those cases we don't come in here.  */
8932         ;
8933       else
8934         {
8935           if (decl_context == FIELD)
8936             error ("storage class specified for %qs", name);
8937           else
8938             {
8939               if (decl_context == PARM || decl_context == CATCHPARM)
8940                 error ("storage class specified for parameter %qs", name);
8941               else
8942                 error ("storage class specified for typename");
8943             }
8944           if (storage_class == sc_register
8945               || storage_class == sc_auto
8946               || storage_class == sc_extern
8947               || thread_p)
8948             storage_class = sc_none;
8949         }
8950     }
8951   else if (storage_class == sc_extern && funcdef_flag
8952            && ! toplevel_bindings_p ())
8953     error ("nested function %qs declared %<extern%>", name);
8954   else if (toplevel_bindings_p ())
8955     {
8956       if (storage_class == sc_auto)
8957         error ("top-level declaration of %qs specifies %<auto%>", name);
8958     }
8959   else if (thread_p
8960            && storage_class != sc_extern
8961            && storage_class != sc_static)
8962     {
8963       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8964              name);
8965       thread_p = false;
8966     }
8967
8968   if (storage_class && friendp)
8969     {
8970       error ("storage class specifiers invalid in friend function declarations");
8971       storage_class = sc_none;
8972       staticp = 0;
8973     }
8974
8975   if (!id_declarator)
8976     unqualified_id = NULL_TREE;
8977   else
8978     {
8979       unqualified_id = id_declarator->u.id.unqualified_name;
8980       switch (TREE_CODE (unqualified_id))
8981         {
8982         case BIT_NOT_EXPR:
8983           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8984           if (TYPE_P (unqualified_id))
8985             unqualified_id = constructor_name (unqualified_id);
8986           break;
8987
8988         case IDENTIFIER_NODE:
8989         case TEMPLATE_ID_EXPR:
8990           break;
8991
8992         default:
8993           gcc_unreachable ();
8994         }
8995     }
8996
8997   /* Determine the type of the entity declared by recurring on the
8998      declarator.  */
8999   for (; declarator; declarator = declarator->declarator)
9000     {
9001       const cp_declarator *inner_declarator;
9002       tree attrs;
9003
9004       if (type == error_mark_node)
9005         return error_mark_node;
9006
9007       attrs = declarator->attributes;
9008       if (attrs)
9009         {
9010           int attr_flags;
9011
9012           attr_flags = 0;
9013           if (declarator == NULL || declarator->kind == cdk_id)
9014             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9015           if (declarator->kind == cdk_function)
9016             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9017           if (declarator->kind == cdk_array)
9018             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9019           returned_attrs = decl_attributes (&type,
9020                                             chainon (returned_attrs, attrs),
9021                                             attr_flags);
9022         }
9023
9024       if (declarator->kind == cdk_id)
9025         break;
9026
9027       inner_declarator = declarator->declarator;
9028
9029       switch (declarator->kind)
9030         {
9031         case cdk_array:
9032           type = create_array_type_for_decl (dname, type,
9033                                              declarator->u.array.bounds);
9034           break;
9035
9036         case cdk_function:
9037           {
9038             tree arg_types;
9039             int funcdecl_p;
9040
9041             /* Declaring a function type.
9042                Make sure we have a valid type for the function to return.  */
9043
9044             if (type_quals != TYPE_UNQUALIFIED)
9045               {
9046                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9047                   warning (OPT_Wignored_qualifiers,
9048                            "type qualifiers ignored on function return type");
9049                 /* We now know that the TYPE_QUALS don't apply to the
9050                    decl, but to its return type.  */
9051                 type_quals = TYPE_UNQUALIFIED;
9052               }
9053             errmsg = targetm.invalid_return_type (type);
9054             if (errmsg)
9055               {
9056                 error (errmsg);
9057                 type = integer_type_node;
9058               }
9059
9060             /* Error about some types functions can't return.  */
9061
9062             if (TREE_CODE (type) == FUNCTION_TYPE)
9063               {
9064                 error ("%qs declared as function returning a function", name);
9065                 return error_mark_node;
9066               }
9067             if (TREE_CODE (type) == ARRAY_TYPE)
9068               {
9069                 error ("%qs declared as function returning an array", name);
9070                 return error_mark_node;
9071               }
9072
9073             /* Pick up type qualifiers which should be applied to `this'.  */
9074             memfn_quals = declarator->u.function.qualifiers;
9075             /* Pick up virt-specifiers.  */
9076             virt_specifiers = declarator->u.function.virt_specifiers;
9077             /* Pick up the exception specifications.  */
9078             raises = declarator->u.function.exception_specification;
9079             /* If the exception-specification is ill-formed, let's pretend
9080                there wasn't one.  */
9081             if (raises == error_mark_node)
9082               raises = NULL_TREE;
9083
9084             /* Say it's a definition only for the CALL_EXPR
9085                closest to the identifier.  */
9086             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9087
9088             /* Handle a late-specified return type.  */
9089             if (funcdecl_p)
9090               {
9091                 if (type_uses_auto (type))
9092                   {
9093                     if (!declarator->u.function.late_return_type)
9094                       {
9095                         error ("%qs function uses %<auto%> type specifier without"
9096                                " late return type", name);
9097                         return error_mark_node;
9098                       }
9099                     else if (!is_auto (type))
9100                       {
9101                         error ("%qs function with late return type has"
9102                                " %qT as its type rather than plain %<auto%>",
9103                                name, type);
9104                         return error_mark_node;
9105                       }
9106                   }
9107                 else if (declarator->u.function.late_return_type)
9108                   {
9109                     error ("%qs function with late return type not declared"
9110                            " with %<auto%> type specifier", name);
9111                     return error_mark_node;
9112                   }
9113               }
9114             type = splice_late_return_type
9115               (type, declarator->u.function.late_return_type);
9116             if (type == error_mark_node)
9117               return error_mark_node;
9118
9119             if (ctype == NULL_TREE
9120                 && decl_context == FIELD
9121                 && funcdecl_p
9122                 && (friendp == 0 || dname == current_class_name))
9123               ctype = current_class_type;
9124
9125             if (ctype && (sfk == sfk_constructor
9126                           || sfk == sfk_destructor))
9127               {
9128                 /* We are within a class's scope. If our declarator name
9129                    is the same as the class name, and we are defining
9130                    a function, then it is a constructor/destructor, and
9131                    therefore returns a void type.  */
9132
9133                 /* ISO C++ 12.4/2.  A destructor may not be declared
9134                    const or volatile.  A destructor may not be
9135                    static.
9136
9137                    ISO C++ 12.1.  A constructor may not be declared
9138                    const or volatile.  A constructor may not be
9139                    virtual.  A constructor may not be static.  */
9140                 if (staticp == 2)
9141                   error ((flags == DTOR_FLAG)
9142                          ? "destructor cannot be static member function"
9143                          : "constructor cannot be static member function");
9144                 if (memfn_quals)
9145                   {
9146                     error ((flags == DTOR_FLAG)
9147                            ? "destructors may not be cv-qualified"
9148                            : "constructors may not be cv-qualified");
9149                     memfn_quals = TYPE_UNQUALIFIED;
9150                   }
9151
9152                 if (decl_context == FIELD
9153                     && !member_function_or_else (ctype,
9154                                                  current_class_type,
9155                                                  flags))
9156                   return error_mark_node;
9157
9158                 if (flags != DTOR_FLAG)
9159                   {
9160                     /* It's a constructor.  */
9161                     if (explicitp == 1)
9162                       explicitp = 2;
9163                     if (virtualp)
9164                       {
9165                         permerror (input_location, "constructors cannot be declared virtual");
9166                         virtualp = 0;
9167                       }
9168                     if (decl_context == FIELD
9169                         && sfk != sfk_constructor)
9170                       return error_mark_node;
9171                   }
9172                 if (decl_context == FIELD)
9173                   staticp = 0;
9174               }
9175             else if (friendp)
9176               {
9177                 if (initialized)
9178                   error ("can%'t initialize friend function %qs", name);
9179                 if (virtualp)
9180                   {
9181                     /* Cannot be both friend and virtual.  */
9182                     error ("virtual functions cannot be friends");
9183                     friendp = 0;
9184                   }
9185                 if (decl_context == NORMAL)
9186                   error ("friend declaration not in class definition");
9187                 if (current_function_decl && funcdef_flag)
9188                   error ("can%'t define friend function %qs in a local "
9189                          "class definition",
9190                          name);
9191               }
9192             else if (ctype && sfk == sfk_conversion)
9193               {
9194                 if (explicitp == 1)
9195                   {
9196                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9197                     explicitp = 2;
9198                   }
9199               }
9200
9201             arg_types = grokparms (declarator->u.function.parameters,
9202                                    &parms);
9203
9204             if (inner_declarator
9205                 && inner_declarator->kind == cdk_id
9206                 && inner_declarator->u.id.sfk == sfk_destructor
9207                 && arg_types != void_list_node)
9208               {
9209                 error ("destructors may not have parameters");
9210                 arg_types = void_list_node;
9211                 parms = NULL_TREE;
9212               }
9213
9214             type = build_function_type (type, arg_types);
9215           }
9216           break;
9217
9218         case cdk_pointer:
9219         case cdk_reference:
9220         case cdk_ptrmem:
9221           /* Filter out pointers-to-references and references-to-references.
9222              We can get these if a TYPE_DECL is used.  */
9223
9224           if (TREE_CODE (type) == REFERENCE_TYPE)
9225             {
9226               if (declarator->kind != cdk_reference)
9227                 {
9228                   error ("cannot declare pointer to %q#T", type);
9229                   type = TREE_TYPE (type);
9230                 }
9231
9232               /* In C++0x, we allow reference to reference declarations
9233                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9234                  and template type arguments [14.3.1/4 temp.arg.type]. The
9235                  check for direct reference to reference declarations, which
9236                  are still forbidden, occurs below. Reasoning behind the change
9237                  can be found in DR106, DR540, and the rvalue reference
9238                  proposals. */
9239               else if (cxx_dialect == cxx98)
9240                 {
9241                   error ("cannot declare reference to %q#T", type);
9242                   type = TREE_TYPE (type);
9243                 }
9244             }
9245           else if (VOID_TYPE_P (type))
9246             {
9247               if (declarator->kind == cdk_reference)
9248                 error ("cannot declare reference to %q#T", type);
9249               else if (declarator->kind == cdk_ptrmem)
9250                 error ("cannot declare pointer to %q#T member", type);
9251             }
9252
9253           /* We now know that the TYPE_QUALS don't apply to the decl,
9254              but to the target of the pointer.  */
9255           type_quals = TYPE_UNQUALIFIED;
9256
9257           if (declarator->kind == cdk_ptrmem
9258               && (TREE_CODE (type) == FUNCTION_TYPE
9259                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9260             {
9261               memfn_quals |= type_memfn_quals (type);
9262               type = build_memfn_type (type,
9263                                        declarator->u.pointer.class_type,
9264                                        memfn_quals);
9265               if (type == error_mark_node)
9266                 return error_mark_node;
9267               memfn_quals = TYPE_UNQUALIFIED;
9268             }
9269
9270           if (TREE_CODE (type) == FUNCTION_TYPE
9271               && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9272             error (declarator->kind == cdk_reference
9273                    ? G_("cannot declare reference to qualified function type %qT")
9274                    : G_("cannot declare pointer to qualified function type %qT"),
9275                    type);
9276
9277           /* When the pointed-to type involves components of variable size,
9278              care must be taken to ensure that the size evaluation code is
9279              emitted early enough to dominate all the possible later uses
9280              and late enough for the variables on which it depends to have
9281              been assigned.
9282
9283              This is expected to happen automatically when the pointed-to
9284              type has a name/declaration of it's own, but special attention
9285              is required if the type is anonymous.
9286
9287              We handle the NORMAL and FIELD contexts here by inserting a
9288              dummy statement that just evaluates the size at a safe point
9289              and ensures it is not deferred until e.g. within a deeper
9290              conditional context (c++/43555).
9291
9292              We expect nothing to be needed here for PARM or TYPENAME.
9293              Evaluating the size at this point for TYPENAME would
9294              actually be incorrect, as we might be in the middle of an
9295              expression with side effects on the pointed-to type size
9296              "arguments" prior to the pointer declaration point and the
9297              size evaluation could end up prior to the side effects.  */
9298
9299           if (!TYPE_NAME (type)
9300               && (decl_context == NORMAL || decl_context == FIELD)
9301               && at_function_scope_p ()
9302               && variably_modified_type_p (type, NULL_TREE))
9303             {
9304               /* First break out any side-effects.  */
9305               stabilize_vla_size (TYPE_SIZE (type));
9306               /* And then force evaluation of the SAVE_EXPR.  */
9307               finish_expr_stmt (TYPE_SIZE (type));
9308             }
9309
9310           if (declarator->kind == cdk_reference)
9311             {
9312               /* In C++0x, the type we are creating a reference to might be
9313                  a typedef which is itself a reference type. In that case,
9314                  we follow the reference collapsing rules in
9315                  [7.1.3/8 dcl.typedef] to create the final reference type:
9316
9317                  "If a typedef TD names a type that is a reference to a type
9318                  T, an attempt to create the type 'lvalue reference to cv TD'
9319                  creates the type 'lvalue reference to T,' while an attempt
9320                  to create the type "rvalue reference to cv TD' creates the
9321                  type TD."
9322               */
9323               if (VOID_TYPE_P (type))
9324                 /* We already gave an error.  */;
9325               else if (TREE_CODE (type) == REFERENCE_TYPE)
9326                 {
9327                   if (declarator->u.reference.rvalue_ref)
9328                     /* Leave type alone.  */;
9329                   else
9330                     type = cp_build_reference_type (TREE_TYPE (type), false);
9331                 }
9332               else
9333                 type = cp_build_reference_type
9334                   (type, declarator->u.reference.rvalue_ref);
9335
9336               /* In C++0x, we need this check for direct reference to
9337                  reference declarations, which are forbidden by
9338                  [8.3.2/5 dcl.ref]. Reference to reference declarations
9339                  are only allowed indirectly through typedefs and template
9340                  type arguments. Example:
9341
9342                    void foo(int & &);      // invalid ref-to-ref decl
9343
9344                    typedef int & int_ref;
9345                    void foo(int_ref &);    // valid ref-to-ref decl
9346               */
9347               if (inner_declarator && inner_declarator->kind == cdk_reference)
9348                 error ("cannot declare reference to %q#T, which is not "
9349                        "a typedef or a template type argument", type);
9350             }
9351           else if (TREE_CODE (type) == METHOD_TYPE)
9352             type = build_ptrmemfunc_type (build_pointer_type (type));
9353           else if (declarator->kind == cdk_ptrmem)
9354             {
9355               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9356                           != NAMESPACE_DECL);
9357               if (declarator->u.pointer.class_type == error_mark_node)
9358                 /* We will already have complained.  */
9359                 type = error_mark_node;
9360               else
9361                 type = build_ptrmem_type (declarator->u.pointer.class_type,
9362                                           type);
9363             }
9364           else
9365             type = build_pointer_type (type);
9366
9367           /* Process a list of type modifier keywords (such as
9368              const or volatile) that were given inside the `*' or `&'.  */
9369
9370           if (declarator->u.pointer.qualifiers)
9371             {
9372               type
9373                 = cp_build_qualified_type (type,
9374                                            declarator->u.pointer.qualifiers);
9375               type_quals = cp_type_quals (type);
9376             }
9377           ctype = NULL_TREE;
9378           break;
9379
9380         case cdk_error:
9381           break;
9382
9383         default:
9384           gcc_unreachable ();
9385         }
9386     }
9387
9388   /* We need to stabilize side-effects in VLA sizes for regular array
9389      declarations too, not just pointers to arrays.  */
9390   if (type != error_mark_node && !TYPE_NAME (type)
9391       && (decl_context == NORMAL || decl_context == FIELD)
9392       && at_function_scope_p ()
9393       && variably_modified_type_p (type, NULL_TREE))
9394     stabilize_vla_size (TYPE_SIZE (type));
9395
9396   /* A `constexpr' specifier used in an object declaration declares
9397      the object as `const'.  */
9398   if (constexpr_p && innermost_code != cdk_function)
9399     {
9400       if (type_quals & TYPE_QUAL_CONST)
9401         error ("both %<const%> and %<constexpr%> cannot be used here");
9402       if (type_quals & TYPE_QUAL_VOLATILE)
9403         error ("both %<volatile%> and %<constexpr%> cannot be used here");
9404       if (TREE_CODE (type) != REFERENCE_TYPE)
9405         {
9406           type_quals |= TYPE_QUAL_CONST;
9407           type = cp_build_qualified_type (type, type_quals);
9408         }
9409     }
9410
9411   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9412       && TREE_CODE (type) != FUNCTION_TYPE
9413       && TREE_CODE (type) != METHOD_TYPE)
9414     {
9415       error ("template-id %qD used as a declarator",
9416              unqualified_id);
9417       unqualified_id = dname;
9418     }
9419
9420   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9421      qualified with a class-name, turn it into a METHOD_TYPE, unless
9422      we know that the function is static.  We take advantage of this
9423      opportunity to do other processing that pertains to entities
9424      explicitly declared to be class members.  Note that if DECLARATOR
9425      is non-NULL, we know it is a cdk_id declarator; otherwise, we
9426      would not have exited the loop above.  */
9427   if (declarator
9428       && declarator->u.id.qualifying_scope
9429       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9430     {
9431       tree t;
9432
9433       ctype = declarator->u.id.qualifying_scope;
9434       ctype = TYPE_MAIN_VARIANT (ctype);
9435       t = ctype;
9436       while (t != NULL_TREE && CLASS_TYPE_P (t))
9437         {
9438           /* You're supposed to have one `template <...>' for every
9439              template class, but you don't need one for a full
9440              specialization.  For example:
9441
9442                template <class T> struct S{};
9443                template <> struct S<int> { void f(); };
9444                void S<int>::f () {}
9445
9446              is correct; there shouldn't be a `template <>' for the
9447              definition of `S<int>::f'.  */
9448           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9449               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9450             /* T is an explicit (not partial) specialization.  All
9451                containing classes must therefore also be explicitly
9452                specialized.  */
9453             break;
9454           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9455               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9456             template_count += 1;
9457
9458           t = TYPE_MAIN_DECL (t);
9459           t = DECL_CONTEXT (t);
9460         }
9461
9462       if (ctype == current_class_type)
9463         {
9464           if (friendp)
9465             {
9466               permerror (input_location, "member functions are implicitly friends of their class");
9467               friendp = 0;
9468             }
9469           else
9470             permerror (declarator->id_loc, 
9471                           "extra qualification %<%T::%> on member %qs",
9472                           ctype, name);
9473         }
9474       else if (/* If the qualifying type is already complete, then we
9475                   can skip the following checks.  */
9476                !COMPLETE_TYPE_P (ctype)
9477                && (/* If the function is being defined, then
9478                       qualifying type must certainly be complete.  */
9479                    funcdef_flag
9480                    /* A friend declaration of "T::f" is OK, even if
9481                       "T" is a template parameter.  But, if this
9482                       function is not a friend, the qualifying type
9483                       must be a class.  */
9484                    || (!friendp && !CLASS_TYPE_P (ctype))
9485                    /* For a declaration, the type need not be
9486                       complete, if either it is dependent (since there
9487                       is no meaningful definition of complete in that
9488                       case) or the qualifying class is currently being
9489                       defined.  */
9490                    || !(dependent_type_p (ctype)
9491                         || currently_open_class (ctype)))
9492                /* Check that the qualifying type is complete.  */
9493                && !complete_type_or_else (ctype, NULL_TREE))
9494         return error_mark_node;
9495       else if (TREE_CODE (type) == FUNCTION_TYPE)
9496         {
9497           if (current_class_type
9498               && (!friendp || funcdef_flag))
9499             {
9500               error (funcdef_flag
9501                      ? "cannot define member function %<%T::%s%> within %<%T%>"
9502                      : "cannot declare member function %<%T::%s%> within %<%T%>",
9503                      ctype, name, current_class_type);
9504               return error_mark_node;
9505             }
9506         }
9507       else if (declspecs->specs[(int)ds_typedef]
9508                && current_class_type)
9509         {
9510           error ("cannot declare member %<%T::%s%> within %qT",
9511                  ctype, name, current_class_type);
9512           return error_mark_node;
9513         }
9514     }
9515
9516   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9517     ctype = current_class_type;
9518
9519   /* Now TYPE has the actual type.  */
9520
9521   if (returned_attrs)
9522     {
9523       if (attrlist)
9524         *attrlist = chainon (returned_attrs, *attrlist);
9525       else
9526         attrlist = &returned_attrs;
9527     }
9528
9529   /* Handle parameter packs. */
9530   if (parameter_pack_p)
9531     {
9532       if (decl_context == PARM)
9533         /* Turn the type into a pack expansion.*/
9534         type = make_pack_expansion (type);
9535       else
9536         error ("non-parameter %qs cannot be a parameter pack", name);
9537     }
9538
9539   /* Did array size calculations overflow?  */
9540
9541   if (TREE_CODE (type) == ARRAY_TYPE
9542       && COMPLETE_TYPE_P (type)
9543       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9544       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9545     {
9546       error ("size of array %qs is too large", name);
9547       /* If we proceed with the array type as it is, we'll eventually
9548          crash in tree_low_cst().  */
9549       type = error_mark_node;
9550     }
9551
9552   if ((decl_context == FIELD || decl_context == PARM)
9553       && !processing_template_decl
9554       && variably_modified_type_p (type, NULL_TREE))
9555     {
9556       if (decl_context == FIELD)
9557         error ("data member may not have variably modified type %qT", type);
9558       else
9559         error ("parameter may not have variably modified type %qT", type);
9560       type = error_mark_node;
9561     }
9562
9563   if (explicitp == 1 || (explicitp && friendp))
9564     {
9565       /* [dcl.fct.spec] The explicit specifier shall only be used in
9566          declarations of constructors within a class definition.  */
9567       error ("only declarations of constructors can be %<explicit%>");
9568       explicitp = 0;
9569     }
9570
9571   if (storage_class == sc_mutable)
9572     {
9573       if (decl_context != FIELD || friendp)
9574         {
9575           error ("non-member %qs cannot be declared %<mutable%>", name);
9576           storage_class = sc_none;
9577         }
9578       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9579         {
9580           error ("non-object member %qs cannot be declared %<mutable%>", name);
9581           storage_class = sc_none;
9582         }
9583       else if (TREE_CODE (type) == FUNCTION_TYPE
9584                || TREE_CODE (type) == METHOD_TYPE)
9585         {
9586           error ("function %qs cannot be declared %<mutable%>", name);
9587           storage_class = sc_none;
9588         }
9589       else if (staticp)
9590         {
9591           error ("static %qs cannot be declared %<mutable%>", name);
9592           storage_class = sc_none;
9593         }
9594       else if (type_quals & TYPE_QUAL_CONST)
9595         {
9596           error ("const %qs cannot be declared %<mutable%>", name);
9597           storage_class = sc_none;
9598         }
9599       else if (TREE_CODE (type) == REFERENCE_TYPE)
9600         {
9601           permerror (input_location, "reference %qs cannot be declared "
9602                      "%<mutable%>", name);
9603           storage_class = sc_none;
9604         }
9605     }
9606
9607   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9608   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9609     {
9610       tree decl;
9611
9612       /* Note that the grammar rejects storage classes
9613          in typenames, fields or parameters.  */
9614       if (current_lang_name == lang_name_java)
9615         TYPE_FOR_JAVA (type) = 1;
9616
9617       /* This declaration:
9618
9619            typedef void f(int) const;
9620
9621          declares a function type which is not a member of any
9622          particular class, but which is cv-qualified; for
9623          example "f S::*" declares a pointer to a const-qualified
9624          member function of S.  We record the cv-qualification in the
9625          function type.  */
9626       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9627         {
9628           type = apply_memfn_quals (type, memfn_quals);
9629           
9630           /* We have now dealt with these qualifiers.  */
9631           memfn_quals = TYPE_UNQUALIFIED;
9632         }
9633
9634       if (type_uses_auto (type))
9635         {
9636           error ("typedef declared %<auto%>");
9637           type = error_mark_node;
9638         }
9639
9640       if (decl_context == FIELD)
9641         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9642       else
9643         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9644       if (id_declarator && declarator->u.id.qualifying_scope) {
9645         error_at (DECL_SOURCE_LOCATION (decl), 
9646                   "typedef name may not be a nested-name-specifier");
9647         TREE_TYPE (decl) = error_mark_node;
9648       }
9649
9650       if (decl_context != FIELD)
9651         {
9652           if (!current_function_decl)
9653             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9654           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9655                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9656                        (current_function_decl)))
9657             /* The TYPE_DECL is "abstract" because there will be
9658                clones of this constructor/destructor, and there will
9659                be copies of this TYPE_DECL generated in those
9660                clones.  */
9661             DECL_ABSTRACT (decl) = 1;
9662         }
9663       else if (constructor_name_p (unqualified_id, current_class_type))
9664         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9665                    "as enclosing class",
9666                    unqualified_id);
9667
9668       /* If the user declares "typedef struct {...} foo" then the
9669          struct will have an anonymous name.  Fill that name in now.
9670          Nothing can refer to it, so nothing needs know about the name
9671          change.  */
9672       if (type != error_mark_node
9673           && unqualified_id
9674           && TYPE_NAME (type)
9675           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9676           && TYPE_ANONYMOUS_P (type)
9677           && declspecs->type_definition_p
9678           && cp_type_quals (type) == TYPE_UNQUALIFIED)
9679         {
9680           tree t;
9681
9682           /* Replace the anonymous name with the real name everywhere.  */
9683           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9684             {
9685               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9686                 /* We do not rename the debug info representing the
9687                    anonymous tagged type because the standard says in
9688                    [dcl.typedef] that the naming applies only for
9689                    linkage purposes.  */
9690                 /*debug_hooks->set_name (t, decl);*/
9691                 TYPE_NAME (t) = decl;
9692             }
9693
9694           if (TYPE_LANG_SPECIFIC (type))
9695             TYPE_WAS_ANONYMOUS (type) = 1;
9696
9697           /* If this is a typedef within a template class, the nested
9698              type is a (non-primary) template.  The name for the
9699              template needs updating as well.  */
9700           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9701             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9702               = TYPE_IDENTIFIER (type);
9703
9704           /* Adjust linkage now that we aren't anonymous anymore.  */
9705           set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9706           determine_visibility (TYPE_MAIN_DECL (type));
9707
9708           /* FIXME remangle member functions; member functions of a
9709              type with external linkage have external linkage.  */
9710         }
9711
9712       if (signed_p
9713           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9714         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9715
9716       bad_specifiers (decl, BSP_TYPE, virtualp,
9717                       memfn_quals != TYPE_UNQUALIFIED,
9718                       inlinep, friendp, raises != NULL_TREE);
9719
9720       return decl;
9721     }
9722
9723   /* Detect the case of an array type of unspecified size
9724      which came, as such, direct from a typedef name.
9725      We must copy the type, so that the array's domain can be
9726      individually set by the object's initializer.  */
9727
9728   if (type && typedef_type
9729       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9730       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9731     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9732
9733   /* Detect where we're using a typedef of function type to declare a
9734      function. PARMS will not be set, so we must create it now.  */
9735
9736   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9737     {
9738       tree decls = NULL_TREE;
9739       tree args;
9740
9741       for (args = TYPE_ARG_TYPES (type);
9742            args && args != void_list_node;
9743            args = TREE_CHAIN (args))
9744         {
9745           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9746
9747           DECL_CHAIN (decl) = decls;
9748           decls = decl;
9749         }
9750
9751       parms = nreverse (decls);
9752
9753       if (decl_context != TYPENAME)
9754         {
9755           /* A cv-qualifier-seq shall only be part of the function type
9756              for a non-static member function. [8.3.5/4 dcl.fct] */
9757           if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9758               && (current_class_type == NULL_TREE || staticp) )
9759             {
9760               error (staticp
9761                      ? G_("qualified function types cannot be used to "
9762                           "declare static member functions")
9763                      : G_("qualified function types cannot be used to "
9764                           "declare free functions"));
9765               type = TYPE_MAIN_VARIANT (type);
9766             }
9767
9768           /* The qualifiers on the function type become the qualifiers on
9769              the non-static member function. */
9770           memfn_quals |= type_memfn_quals (type);
9771           type_quals = TYPE_UNQUALIFIED;
9772         }
9773     }
9774
9775   /* If this is a type name (such as, in a cast or sizeof),
9776      compute the type and return it now.  */
9777
9778   if (decl_context == TYPENAME)
9779     {
9780       /* Note that the grammar rejects storage classes
9781          in typenames, fields or parameters.  */
9782       if (type_quals != TYPE_UNQUALIFIED)
9783         type_quals = TYPE_UNQUALIFIED;
9784
9785       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9786       if (friendp)
9787         {
9788           if (type_quals != TYPE_UNQUALIFIED)
9789             {
9790               error ("type qualifiers specified for friend class declaration");
9791               type_quals = TYPE_UNQUALIFIED;
9792             }
9793           if (inlinep)
9794             {
9795               error ("%<inline%> specified for friend class declaration");
9796               inlinep = 0;
9797             }
9798
9799           if (!current_aggr)
9800             {
9801               /* Don't allow friend declaration without a class-key.  */
9802               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9803                 permerror (input_location, "template parameters cannot be friends");
9804               else if (TREE_CODE (type) == TYPENAME_TYPE)
9805                 permerror (input_location, "friend declaration requires class-key, "
9806                            "i.e. %<friend class %T::%D%>",
9807                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9808               else
9809                 permerror (input_location, "friend declaration requires class-key, "
9810                            "i.e. %<friend %#T%>",
9811                            type);
9812             }
9813
9814           /* Only try to do this stuff if we didn't already give up.  */
9815           if (type != integer_type_node)
9816             {
9817               /* A friendly class?  */
9818               if (current_class_type)
9819                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9820                                    /*complain=*/true);
9821               else
9822                 error ("trying to make class %qT a friend of global scope",
9823                        type);
9824
9825               type = void_type_node;
9826             }
9827         }
9828       else if (memfn_quals)
9829         {
9830           if (ctype == NULL_TREE
9831               && TREE_CODE (type) == METHOD_TYPE)
9832             ctype = TYPE_METHOD_BASETYPE (type);
9833
9834           if (ctype)
9835             type = build_memfn_type (type, ctype, memfn_quals);
9836           /* Core issue #547: need to allow this in template type args.  */
9837           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9838             type = apply_memfn_quals (type, memfn_quals);
9839           else
9840             error ("invalid qualifiers on non-member function type");
9841         }
9842
9843       return type;
9844     }
9845   else if (unqualified_id == NULL_TREE && decl_context != PARM
9846            && decl_context != CATCHPARM
9847            && TREE_CODE (type) != UNION_TYPE
9848            && ! bitfield)
9849     {
9850       error ("abstract declarator %qT used as declaration", type);
9851       return error_mark_node;
9852     }
9853
9854   /* Only functions may be declared using an operator-function-id.  */
9855   if (unqualified_id
9856       && IDENTIFIER_OPNAME_P (unqualified_id)
9857       && TREE_CODE (type) != FUNCTION_TYPE
9858       && TREE_CODE (type) != METHOD_TYPE)
9859     {
9860       error ("declaration of %qD as non-function", unqualified_id);
9861       return error_mark_node;
9862     }
9863
9864   /* We don't check parameter types here because we can emit a better
9865      error message later.  */
9866   if (decl_context != PARM)
9867     {
9868       type = check_var_type (unqualified_id, type);
9869       if (type == error_mark_node)
9870         return error_mark_node;
9871     }
9872
9873   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9874      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9875
9876   if (decl_context == PARM || decl_context == CATCHPARM)
9877     {
9878       if (ctype || in_namespace)
9879         error ("cannot use %<::%> in parameter declaration");
9880
9881       if (type_uses_auto (type))
9882         {
9883           error ("parameter declared %<auto%>");
9884           type = error_mark_node;
9885         }
9886
9887       /* A parameter declared as an array of T is really a pointer to T.
9888          One declared as a function is really a pointer to a function.
9889          One declared as a member is really a pointer to member.  */
9890
9891       if (TREE_CODE (type) == ARRAY_TYPE)
9892         {
9893           /* Transfer const-ness of array into that of type pointed to.  */
9894           type = build_pointer_type (TREE_TYPE (type));
9895           type_quals = TYPE_UNQUALIFIED;
9896         }
9897       else if (TREE_CODE (type) == FUNCTION_TYPE)
9898         type = build_pointer_type (type);
9899     }
9900
9901   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9902       && !NEW_DELETE_OPNAME_P (unqualified_id))
9903     {
9904       cp_cv_quals real_quals = memfn_quals;
9905       if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
9906         real_quals |= TYPE_QUAL_CONST;
9907       type = build_memfn_type (type, ctype, real_quals);
9908     }
9909
9910   {
9911     tree decl;
9912
9913     if (decl_context == PARM)
9914       {
9915         decl = cp_build_parm_decl (unqualified_id, type);
9916
9917         bad_specifiers (decl, BSP_PARM, virtualp,
9918                         memfn_quals != TYPE_UNQUALIFIED,
9919                         inlinep, friendp, raises != NULL_TREE);
9920       }
9921     else if (decl_context == FIELD)
9922       {
9923         /* The C99 flexible array extension.  */
9924         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9925             && TYPE_DOMAIN (type) == NULL_TREE)
9926           {
9927             tree itype = compute_array_index_type (dname, integer_zero_node,
9928                                                    tf_warning_or_error);
9929             type = build_cplus_array_type (TREE_TYPE (type), itype);
9930           }
9931
9932         if (type == error_mark_node)
9933           {
9934             /* Happens when declaring arrays of sizes which
9935                are error_mark_node, for example.  */
9936             decl = NULL_TREE;
9937           }
9938         else if (in_namespace && !friendp)
9939           {
9940             /* Something like struct S { int N::j; };  */
9941             error ("invalid use of %<::%>");
9942             return error_mark_node;
9943           }
9944         else if (TREE_CODE (type) == FUNCTION_TYPE
9945                  || TREE_CODE (type) == METHOD_TYPE)
9946           {
9947             int publicp = 0;
9948             tree function_context;
9949
9950             if (friendp == 0)
9951               {
9952                 /* This should never happen in pure C++ (the check
9953                    could be an assert).  It could happen in
9954                    Objective-C++ if someone writes invalid code that
9955                    uses a function declaration for an instance
9956                    variable or property (instance variables and
9957                    properties are parsed as FIELD_DECLs, but they are
9958                    part of an Objective-C class, not a C++ class).
9959                    That code is invalid and is caught by this
9960                    check.  */
9961                 if (!ctype)
9962                   {
9963                     error ("declaration of function %qD in invalid context",
9964                            unqualified_id);
9965                     return error_mark_node;
9966                   }
9967
9968                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9969                    ARM 9.5 */
9970                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9971                   {
9972                     error ("function %qD declared virtual inside a union",
9973                            unqualified_id);
9974                     return error_mark_node;
9975                   }
9976
9977                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9978                   {
9979                     if (virtualp)
9980                       {
9981                         error ("%qD cannot be declared virtual, since it "
9982                                "is always static",
9983                                unqualified_id);
9984                         virtualp = 0;
9985                       }
9986                   }
9987               }
9988
9989             /* Check that the name used for a destructor makes sense.  */
9990             if (sfk == sfk_destructor)
9991               {
9992                 tree uqname = id_declarator->u.id.unqualified_name;
9993
9994                 if (!ctype)
9995                   {
9996                     gcc_assert (friendp);
9997                     error ("expected qualified name in friend declaration "
9998                            "for destructor %qD", uqname);
9999                     return error_mark_node;
10000                   }
10001
10002                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10003                   {
10004                     error ("declaration of %qD as member of %qT",
10005                            uqname, ctype);
10006                     return error_mark_node;
10007                   }
10008                 if (constexpr_p)
10009                   {
10010                     error ("a destructor cannot be %<constexpr%>");
10011                     return error_mark_node;
10012                   }
10013               }
10014             else if (sfk == sfk_constructor && friendp && !ctype)
10015               {
10016                 error ("expected qualified name in friend declaration "
10017                        "for constructor %qD",
10018                        id_declarator->u.id.unqualified_name);
10019                 return error_mark_node;
10020               }
10021
10022             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10023             function_context = (ctype != NULL_TREE) ?
10024               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10025             publicp = (! friendp || ! staticp)
10026               && function_context == NULL_TREE;
10027             decl = grokfndecl (ctype, type,
10028                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10029                                ? unqualified_id : dname,
10030                                parms,
10031                                unqualified_id,
10032                                virtualp, flags, memfn_quals, raises,
10033                                friendp ? -1 : 0, friendp, publicp,
10034                                inlinep | (2 * constexpr_p),
10035                                sfk,
10036                                funcdef_flag, template_count, in_namespace,
10037                                attrlist, declarator->id_loc);
10038             decl = set_virt_specifiers (decl, virt_specifiers);
10039             if (decl == NULL_TREE)
10040               return error_mark_node;
10041 #if 0
10042             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10043             /* The decl and setting of decl_attr is also turned off.  */
10044             decl = build_decl_attribute_variant (decl, decl_attr);
10045 #endif
10046
10047             /* [class.conv.ctor]
10048
10049                A constructor declared without the function-specifier
10050                explicit that can be called with a single parameter
10051                specifies a conversion from the type of its first
10052                parameter to the type of its class.  Such a constructor
10053                is called a converting constructor.  */
10054             if (explicitp == 2)
10055               DECL_NONCONVERTING_P (decl) = 1;
10056           }
10057         else if (!staticp && !dependent_type_p (type)
10058                  && !COMPLETE_TYPE_P (complete_type (type))
10059                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10060           {
10061             if (unqualified_id)
10062               error ("field %qD has incomplete type", unqualified_id);
10063             else
10064               error ("name %qT has incomplete type", type);
10065
10066             /* If we're instantiating a template, tell them which
10067                instantiation made the field's type be incomplete.  */
10068             if (current_class_type
10069                 && TYPE_NAME (current_class_type)
10070                 && IDENTIFIER_TEMPLATE (current_class_name)
10071                 && declspecs->type
10072                 && declspecs->type == type)
10073               error ("  in instantiation of template %qT",
10074                      current_class_type);
10075
10076             return error_mark_node;
10077           }
10078         else
10079           {
10080             if (friendp)
10081               {
10082                 error ("%qE is neither function nor member function; "
10083                        "cannot be declared friend", unqualified_id);
10084                 friendp = 0;
10085               }
10086             decl = NULL_TREE;
10087           }
10088
10089         if (friendp)
10090           {
10091             /* Friends are treated specially.  */
10092             if (ctype == current_class_type)
10093               ;  /* We already issued a permerror.  */
10094             else if (decl && DECL_NAME (decl))
10095               {
10096                 if (template_class_depth (current_class_type) == 0)
10097                   {
10098                     decl = check_explicit_specialization
10099                       (unqualified_id, decl, template_count,
10100                        2 * funcdef_flag + 4);
10101                     if (decl == error_mark_node)
10102                       return error_mark_node;
10103                   }
10104
10105                 decl = do_friend (ctype, unqualified_id, decl,
10106                                   *attrlist, flags,
10107                                   funcdef_flag);
10108                 return decl;
10109               }
10110             else
10111               return error_mark_node;
10112           }
10113
10114         /* Structure field.  It may not be a function, except for C++.  */
10115
10116         if (decl == NULL_TREE)
10117           {
10118             if (staticp)
10119               {
10120                 /* C++ allows static class members.  All other work
10121                    for this is done by grokfield.  */
10122                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10123                 set_linkage_for_static_data_member (decl);
10124                 /* Even if there is an in-class initialization, DECL
10125                    is considered undefined until an out-of-class
10126                    definition is provided.  */
10127                 DECL_EXTERNAL (decl) = 1;
10128
10129                 if (thread_p)
10130                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10131
10132                 if (constexpr_p && !initialized)
10133                   {
10134                     error ("constexpr static data member %qD must have an "
10135                            "initializer", decl);
10136                     constexpr_p = false;
10137                   }
10138               }
10139             else
10140               {
10141                 if (constexpr_p)
10142                   {
10143                     error ("non-static data member %qE declared %<constexpr%>",
10144                            unqualified_id);
10145                     constexpr_p = false;
10146                   }
10147                 decl = build_decl (input_location,
10148                                    FIELD_DECL, unqualified_id, type);
10149                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10150                 if (bitfield && !unqualified_id)
10151                   TREE_NO_WARNING (decl) = 1;
10152
10153                 if (storage_class == sc_mutable)
10154                   {
10155                     DECL_MUTABLE_P (decl) = 1;
10156                     storage_class = sc_none;
10157                   }
10158
10159                 if (initialized)
10160                   /* An attempt is being made to initialize a non-static
10161                      member.  This is new in C++11.  */
10162                   maybe_warn_cpp0x (CPP0X_NSDMI);
10163               }
10164
10165             bad_specifiers (decl, BSP_FIELD, virtualp,
10166                             memfn_quals != TYPE_UNQUALIFIED,
10167                             inlinep, friendp, raises != NULL_TREE);
10168           }
10169       }
10170     else if (TREE_CODE (type) == FUNCTION_TYPE
10171              || TREE_CODE (type) == METHOD_TYPE)
10172       {
10173         tree original_name;
10174         int publicp = 0;
10175
10176         if (!unqualified_id)
10177           return error_mark_node;
10178
10179         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10180           original_name = dname;
10181         else
10182           original_name = unqualified_id;
10183
10184         if (storage_class == sc_auto)
10185           error ("storage class %<auto%> invalid for function %qs", name);
10186         else if (storage_class == sc_register)
10187           error ("storage class %<register%> invalid for function %qs", name);
10188         else if (thread_p)
10189           error ("storage class %<__thread%> invalid for function %qs", name);
10190
10191         if (virt_specifiers)
10192           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10193         /* Function declaration not at top level.
10194            Storage classes other than `extern' are not allowed
10195            and `extern' makes no difference.  */
10196         if (! toplevel_bindings_p ()
10197             && (storage_class == sc_static
10198                 || declspecs->specs[(int)ds_inline])
10199             && pedantic)
10200           {
10201             if (storage_class == sc_static)
10202               pedwarn (input_location, OPT_pedantic, 
10203                        "%<static%> specified invalid for function %qs "
10204                        "declared out of global scope", name);
10205             else
10206               pedwarn (input_location, OPT_pedantic, 
10207                        "%<inline%> specifier invalid for function %qs "
10208                        "declared out of global scope", name);
10209           }
10210
10211         if (ctype == NULL_TREE)
10212           {
10213             if (virtualp)
10214               {
10215                 error ("virtual non-class function %qs", name);
10216                 virtualp = 0;
10217               }
10218             else if (sfk == sfk_constructor
10219                      || sfk == sfk_destructor)
10220               {
10221                 error (funcdef_flag
10222                        ? "%qs defined in a non-class scope"
10223                        : "%qs declared in a non-class scope", name);
10224                 sfk = sfk_none;
10225               }
10226           }
10227
10228         /* Record presence of `static'.  */
10229         publicp = (ctype != NULL_TREE
10230                    || storage_class == sc_extern
10231                    || storage_class != sc_static);
10232
10233         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10234                            virtualp, flags, memfn_quals, raises,
10235                            1, friendp,
10236                            publicp, inlinep | (2 * constexpr_p), sfk,
10237                            funcdef_flag,
10238                            template_count, in_namespace, attrlist,
10239                            declarator->id_loc);
10240         if (decl == NULL_TREE)
10241           return error_mark_node;
10242
10243         if (staticp == 1)
10244           {
10245             int invalid_static = 0;
10246
10247             /* Don't allow a static member function in a class, and forbid
10248                declaring main to be static.  */
10249             if (TREE_CODE (type) == METHOD_TYPE)
10250               {
10251                 permerror (input_location, "cannot declare member function %qD to have "
10252                            "static linkage", decl);
10253                 invalid_static = 1;
10254               }
10255             else if (current_function_decl)
10256               {
10257                 /* FIXME need arm citation */
10258                 error ("cannot declare static function inside another function");
10259                 invalid_static = 1;
10260               }
10261
10262             if (invalid_static)
10263               {
10264                 staticp = 0;
10265                 storage_class = sc_none;
10266               }
10267           }
10268       }
10269     else
10270       {
10271         /* It's a variable.  */
10272
10273         /* An uninitialized decl with `extern' is a reference.  */
10274         decl = grokvardecl (type, unqualified_id,
10275                             declspecs,
10276                             initialized,
10277                             (type_quals & TYPE_QUAL_CONST) != 0,
10278                             ctype ? ctype : in_namespace);
10279         bad_specifiers (decl, BSP_VAR, virtualp,
10280                         memfn_quals != TYPE_UNQUALIFIED,
10281                         inlinep, friendp, raises != NULL_TREE);
10282
10283         if (ctype)
10284           {
10285             DECL_CONTEXT (decl) = ctype;
10286             if (staticp == 1)
10287               {
10288                 permerror (input_location, "%<static%> may not be used when defining "
10289                            "(as opposed to declaring) a static data member");
10290                 staticp = 0;
10291                 storage_class = sc_none;
10292               }
10293             if (storage_class == sc_register && TREE_STATIC (decl))
10294               {
10295                 error ("static member %qD declared %<register%>", decl);
10296                 storage_class = sc_none;
10297               }
10298             if (storage_class == sc_extern && pedantic)
10299               {
10300                 pedwarn (input_location, OPT_pedantic, 
10301                          "cannot explicitly declare member %q#D to have "
10302                          "extern linkage", decl);
10303                 storage_class = sc_none;
10304               }
10305           }
10306         else if (constexpr_p && DECL_EXTERNAL (decl))
10307           {
10308             error ("declaration of constexpr variable %qD is not a definition",
10309                    decl);
10310             constexpr_p = false;
10311           }
10312       }
10313
10314     if (storage_class == sc_extern && initialized && !funcdef_flag)
10315       {
10316         if (toplevel_bindings_p ())
10317           {
10318             /* It's common practice (and completely valid) to have a const
10319                be initialized and declared extern.  */
10320             if (!(type_quals & TYPE_QUAL_CONST))
10321               warning (0, "%qs initialized and declared %<extern%>", name);
10322           }
10323         else
10324           {
10325             error ("%qs has both %<extern%> and initializer", name);
10326             return error_mark_node;
10327           }
10328       }
10329
10330     /* Record `register' declaration for warnings on &
10331        and in case doing stupid register allocation.  */
10332
10333     if (storage_class == sc_register)
10334       DECL_REGISTER (decl) = 1;
10335     else if (storage_class == sc_extern)
10336       DECL_THIS_EXTERN (decl) = 1;
10337     else if (storage_class == sc_static)
10338       DECL_THIS_STATIC (decl) = 1;
10339
10340     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10341     if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10342       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10343
10344     /* Record constancy and volatility on the DECL itself .  There's
10345        no need to do this when processing a template; we'll do this
10346        for the instantiated declaration based on the type of DECL.  */
10347     if (!processing_template_decl)
10348       cp_apply_type_quals_to_decl (type_quals, decl);
10349
10350     return decl;
10351   }
10352 }
10353 \f
10354 /* Subroutine of start_function.  Ensure that each of the parameter
10355    types (as listed in PARMS) is complete, as is required for a
10356    function definition.  */
10357
10358 static void
10359 require_complete_types_for_parms (tree parms)
10360 {
10361   for (; parms; parms = DECL_CHAIN (parms))
10362     {
10363       if (dependent_type_p (TREE_TYPE (parms)))
10364         continue;
10365       if (!VOID_TYPE_P (TREE_TYPE (parms))
10366           && complete_type_or_else (TREE_TYPE (parms), parms))
10367         {
10368           relayout_decl (parms);
10369           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10370         }
10371       else
10372         /* grokparms or complete_type_or_else will have already issued
10373            an error.  */
10374         TREE_TYPE (parms) = error_mark_node;
10375     }
10376 }
10377
10378 /* Returns nonzero if T is a local variable.  */
10379
10380 int
10381 local_variable_p (const_tree t)
10382 {
10383   if ((TREE_CODE (t) == VAR_DECL
10384        /* A VAR_DECL with a context that is a _TYPE is a static data
10385           member.  */
10386        && !TYPE_P (CP_DECL_CONTEXT (t))
10387        /* Any other non-local variable must be at namespace scope.  */
10388        && !DECL_NAMESPACE_SCOPE_P (t))
10389       || (TREE_CODE (t) == PARM_DECL))
10390     return 1;
10391
10392   return 0;
10393 }
10394
10395 /* Like local_variable_p, but suitable for use as a tree-walking
10396    function.  */
10397
10398 static tree
10399 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10400                          void *data ATTRIBUTE_UNUSED)
10401 {
10402   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
10403     return *tp;
10404   else if (TYPE_P (*tp))
10405     *walk_subtrees = 0;
10406
10407   return NULL_TREE;
10408 }
10409
10410
10411 /* Check that ARG, which is a default-argument expression for a
10412    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10413    something goes wrong.  DECL may also be a _TYPE node, rather than a
10414    DECL, if there is no DECL available.  */
10415
10416 tree
10417 check_default_argument (tree decl, tree arg)
10418 {
10419   tree var;
10420   tree decl_type;
10421
10422   if (TREE_CODE (arg) == DEFAULT_ARG)
10423     /* We get a DEFAULT_ARG when looking at an in-class declaration
10424        with a default argument.  Ignore the argument for now; we'll
10425        deal with it after the class is complete.  */
10426     return arg;
10427
10428   if (TYPE_P (decl))
10429     {
10430       decl_type = decl;
10431       decl = NULL_TREE;
10432     }
10433   else
10434     decl_type = TREE_TYPE (decl);
10435
10436   if (arg == error_mark_node
10437       || decl == error_mark_node
10438       || TREE_TYPE (arg) == error_mark_node
10439       || decl_type == error_mark_node)
10440     /* Something already went wrong.  There's no need to check
10441        further.  */
10442     return error_mark_node;
10443
10444   /* [dcl.fct.default]
10445
10446      A default argument expression is implicitly converted to the
10447      parameter type.  */
10448   if (!TREE_TYPE (arg)
10449       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10450     {
10451       if (decl)
10452         error ("default argument for %q#D has type %qT",
10453                decl, TREE_TYPE (arg));
10454       else
10455         error ("default argument for parameter of type %qT has type %qT",
10456                decl_type, TREE_TYPE (arg));
10457
10458       return error_mark_node;
10459     }
10460
10461   /* [dcl.fct.default]
10462
10463      Local variables shall not be used in default argument
10464      expressions.
10465
10466      The keyword `this' shall not be used in a default argument of a
10467      member function.  */
10468   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10469   if (var)
10470     {
10471       error ("default argument %qE uses local variable %qD", arg, var);
10472       return error_mark_node;
10473     }
10474
10475   /* All is well.  */
10476   return arg;
10477 }
10478
10479 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10480
10481 static tree
10482 type_is_deprecated (tree type)
10483 {
10484   enum tree_code code;
10485   if (TREE_DEPRECATED (type))
10486     return type;
10487   if (TYPE_NAME (type)
10488       && TREE_DEPRECATED (TYPE_NAME (type)))
10489     return type;
10490
10491   /* Do warn about using typedefs to a deprecated class.  */
10492   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10493     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10494
10495   code = TREE_CODE (type);
10496
10497   if (code == POINTER_TYPE || code == REFERENCE_TYPE
10498       || code == OFFSET_TYPE || code == FUNCTION_TYPE
10499       || code == METHOD_TYPE || code == ARRAY_TYPE)
10500     return type_is_deprecated (TREE_TYPE (type));
10501
10502   if (TYPE_PTRMEMFUNC_P (type))
10503     return type_is_deprecated
10504       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10505
10506   return NULL_TREE;
10507 }
10508
10509 /* Decode the list of parameter types for a function type.
10510    Given the list of things declared inside the parens,
10511    return a list of types.
10512
10513    If this parameter does not end with an ellipsis, we append
10514    void_list_node.
10515
10516    *PARMS is set to the chain of PARM_DECLs created.  */
10517
10518 static tree
10519 grokparms (tree parmlist, tree *parms)
10520 {
10521   tree result = NULL_TREE;
10522   tree decls = NULL_TREE;
10523   tree parm;
10524   int any_error = 0;
10525
10526   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10527     {
10528       tree type = NULL_TREE;
10529       tree init = TREE_PURPOSE (parm);
10530       tree decl = TREE_VALUE (parm);
10531       const char *errmsg;
10532
10533       if (parm == void_list_node)
10534         break;
10535
10536       if (! decl || TREE_TYPE (decl) == error_mark_node)
10537         continue;
10538
10539       type = TREE_TYPE (decl);
10540       if (VOID_TYPE_P (type))
10541         {
10542           if (same_type_p (type, void_type_node)
10543               && DECL_SELF_REFERENCE_P (type)
10544               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10545             /* this is a parmlist of `(void)', which is ok.  */
10546             break;
10547           cxx_incomplete_type_error (decl, type);
10548           /* It's not a good idea to actually create parameters of
10549              type `void'; other parts of the compiler assume that a
10550              void type terminates the parameter list.  */
10551           type = error_mark_node;
10552           TREE_TYPE (decl) = error_mark_node;
10553         }
10554
10555       if (type != error_mark_node
10556           && TYPE_FOR_JAVA (type)
10557           && MAYBE_CLASS_TYPE_P (type))
10558         {
10559           error ("parameter %qD has Java class type", decl);
10560           type = error_mark_node;
10561           TREE_TYPE (decl) = error_mark_node;
10562           init = NULL_TREE;
10563         }
10564
10565       if (type != error_mark_node
10566           && (errmsg = targetm.invalid_parameter_type (type)))
10567         {
10568           error (errmsg);
10569           type = error_mark_node;
10570           TREE_TYPE (decl) = error_mark_node;
10571         }
10572
10573       if (type != error_mark_node)
10574         {
10575           if (deprecated_state != DEPRECATED_SUPPRESS)
10576             {
10577               tree deptype = type_is_deprecated (type);
10578               if (deptype)
10579                 warn_deprecated_use (deptype, NULL_TREE);
10580             }
10581
10582           /* Top-level qualifiers on the parameters are
10583              ignored for function types.  */
10584           type = cp_build_qualified_type (type, 0);
10585           if (TREE_CODE (type) == METHOD_TYPE)
10586             {
10587               error ("parameter %qD invalidly declared method type", decl);
10588               type = build_pointer_type (type);
10589               TREE_TYPE (decl) = type;
10590             }
10591           else if (abstract_virtuals_error (decl, type))
10592             any_error = 1;  /* Seems like a good idea.  */
10593           else if (POINTER_TYPE_P (type))
10594             {
10595               /* [dcl.fct]/6, parameter types cannot contain pointers
10596                  (references) to arrays of unknown bound.  */
10597               tree t = TREE_TYPE (type);
10598               int ptr = TYPE_PTR_P (type);
10599
10600               while (1)
10601                 {
10602                   if (TYPE_PTR_P (t))
10603                     ptr = 1;
10604                   else if (TREE_CODE (t) != ARRAY_TYPE)
10605                     break;
10606                   else if (!TYPE_DOMAIN (t))
10607                     break;
10608                   t = TREE_TYPE (t);
10609                 }
10610               if (TREE_CODE (t) == ARRAY_TYPE)
10611                 error (ptr
10612                        ? G_("parameter %qD includes pointer to array of "
10613                             "unknown bound %qT")
10614                        : G_("parameter %qD includes reference to array of "
10615                             "unknown bound %qT"),
10616                        decl, t);
10617             }
10618
10619           if (any_error)
10620             init = NULL_TREE;
10621           else if (init && !processing_template_decl)
10622             init = check_default_argument (decl, init);
10623         }
10624
10625       DECL_CHAIN (decl) = decls;
10626       decls = decl;
10627       result = tree_cons (init, type, result);
10628     }
10629   decls = nreverse (decls);
10630   result = nreverse (result);
10631   if (parm)
10632     result = chainon (result, void_list_node);
10633   *parms = decls;
10634
10635   return result;
10636 }
10637
10638 \f
10639 /* D is a constructor or overloaded `operator='.
10640
10641    Let T be the class in which D is declared. Then, this function
10642    returns:
10643
10644    -1 if D's is an ill-formed constructor or copy assignment operator
10645       whose first parameter is of type `T'.
10646    0  if D is not a copy constructor or copy assignment
10647       operator.
10648    1  if D is a copy constructor or copy assignment operator whose
10649       first parameter is a reference to non-const qualified T.
10650    2  if D is a copy constructor or copy assignment operator whose
10651       first parameter is a reference to const qualified T.
10652
10653    This function can be used as a predicate. Positive values indicate
10654    a copy constructor and nonzero values indicate a copy assignment
10655    operator.  */
10656
10657 int
10658 copy_fn_p (const_tree d)
10659 {
10660   tree args;
10661   tree arg_type;
10662   int result = 1;
10663
10664   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10665
10666   if (TREE_CODE (d) == TEMPLATE_DECL
10667       || (DECL_TEMPLATE_INFO (d)
10668           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10669     /* Instantiations of template member functions are never copy
10670        functions.  Note that member functions of templated classes are
10671        represented as template functions internally, and we must
10672        accept those as copy functions.  */
10673     return 0;
10674
10675   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10676   if (!args)
10677     return 0;
10678
10679   arg_type = TREE_VALUE (args);
10680   if (arg_type == error_mark_node)
10681     return 0;
10682
10683   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10684     {
10685       /* Pass by value copy assignment operator.  */
10686       result = -1;
10687     }
10688   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10689            && !TYPE_REF_IS_RVALUE (arg_type)
10690            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10691     {
10692       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10693         result = 2;
10694     }
10695   else
10696     return 0;
10697
10698   args = TREE_CHAIN (args);
10699
10700   if (args && args != void_list_node && !TREE_PURPOSE (args))
10701     /* There are more non-optional args.  */
10702     return 0;
10703
10704   return result;
10705 }
10706
10707 /* D is a constructor or overloaded `operator='.
10708
10709    Let T be the class in which D is declared. Then, this function
10710    returns true when D is a move constructor or move assignment
10711    operator, false otherwise.  */
10712
10713 bool
10714 move_fn_p (const_tree d)
10715 {
10716   tree args;
10717   tree arg_type;
10718   bool result = false;
10719
10720   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10721
10722   if (cxx_dialect == cxx98)
10723     /* There are no move constructors if we are in C++98 mode.  */
10724     return false;
10725
10726   if (TREE_CODE (d) == TEMPLATE_DECL
10727       || (DECL_TEMPLATE_INFO (d)
10728          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10729     /* Instantiations of template member functions are never copy
10730        functions.  Note that member functions of templated classes are
10731        represented as template functions internally, and we must
10732        accept those as copy functions.  */
10733     return 0;
10734
10735   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10736   if (!args)
10737     return 0;
10738
10739   arg_type = TREE_VALUE (args);
10740   if (arg_type == error_mark_node)
10741     return 0;
10742
10743   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10744       && TYPE_REF_IS_RVALUE (arg_type)
10745       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10746                       DECL_CONTEXT (d)))
10747     result = true;
10748
10749   args = TREE_CHAIN (args);
10750
10751   if (args && args != void_list_node && !TREE_PURPOSE (args))
10752     /* There are more non-optional args.  */
10753     return false;
10754
10755   return result;
10756 }
10757
10758 /* Remember any special properties of member function DECL.  */
10759
10760 void
10761 grok_special_member_properties (tree decl)
10762 {
10763   tree class_type;
10764
10765   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10766     return;
10767
10768   class_type = DECL_CONTEXT (decl);
10769   if (DECL_CONSTRUCTOR_P (decl))
10770     {
10771       int ctor = copy_fn_p (decl);
10772
10773       if (!DECL_ARTIFICIAL (decl))
10774         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10775
10776       if (ctor > 0)
10777         {
10778           /* [class.copy]
10779
10780              A non-template constructor for class X is a copy
10781              constructor if its first parameter is of type X&, const
10782              X&, volatile X& or const volatile X&, and either there
10783              are no other parameters or else all other parameters have
10784              default arguments.  */
10785           TYPE_HAS_COPY_CTOR (class_type) = 1;
10786           if (user_provided_p (decl))
10787             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10788           if (ctor > 1)
10789             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10790         }
10791       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10792         {
10793           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10794           if (user_provided_p (decl))
10795             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10796         }
10797       else if (move_fn_p (decl) && user_provided_p (decl))
10798         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10799       else if (is_list_ctor (decl))
10800         TYPE_HAS_LIST_CTOR (class_type) = 1;
10801
10802       if (DECL_DECLARED_CONSTEXPR_P (decl)
10803           && !copy_fn_p (decl) && !move_fn_p (decl))
10804         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10805     }
10806   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10807     {
10808       /* [class.copy]
10809
10810          A non-template assignment operator for class X is a copy
10811          assignment operator if its parameter is of type X, X&, const
10812          X&, volatile X& or const volatile X&.  */
10813
10814       int assop = copy_fn_p (decl);
10815
10816       if (assop)
10817         {
10818           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10819           if (user_provided_p (decl))
10820             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10821           if (assop != 1)
10822             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10823         }
10824       else if (move_fn_p (decl) && user_provided_p (decl))
10825         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10826     }
10827   /* Destructors are handled in check_methods.  */
10828 }
10829
10830 /* Check a constructor DECL has the correct form.  Complains
10831    if the class has a constructor of the form X(X).  */
10832
10833 int
10834 grok_ctor_properties (const_tree ctype, const_tree decl)
10835 {
10836   int ctor_parm = copy_fn_p (decl);
10837
10838   if (ctor_parm < 0)
10839     {
10840       /* [class.copy]
10841
10842          A declaration of a constructor for a class X is ill-formed if
10843          its first parameter is of type (optionally cv-qualified) X
10844          and either there are no other parameters or else all other
10845          parameters have default arguments.
10846
10847          We *don't* complain about member template instantiations that
10848          have this form, though; they can occur as we try to decide
10849          what constructor to use during overload resolution.  Since
10850          overload resolution will never prefer such a constructor to
10851          the non-template copy constructor (which is either explicitly
10852          or implicitly defined), there's no need to worry about their
10853          existence.  Theoretically, they should never even be
10854          instantiated, but that's hard to forestall.  */
10855       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10856                 ctype, ctype);
10857       return 0;
10858     }
10859
10860   return 1;
10861 }
10862
10863 /* An operator with this code is unary, but can also be binary.  */
10864
10865 static int
10866 ambi_op_p (enum tree_code code)
10867 {
10868   return (code == INDIRECT_REF
10869           || code == ADDR_EXPR
10870           || code == UNARY_PLUS_EXPR
10871           || code == NEGATE_EXPR
10872           || code == PREINCREMENT_EXPR
10873           || code == PREDECREMENT_EXPR);
10874 }
10875
10876 /* An operator with this name can only be unary.  */
10877
10878 static int
10879 unary_op_p (enum tree_code code)
10880 {
10881   return (code == TRUTH_NOT_EXPR
10882           || code == BIT_NOT_EXPR
10883           || code == COMPONENT_REF
10884           || code == TYPE_EXPR);
10885 }
10886
10887 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10888    errors are issued for invalid declarations.  */
10889
10890 bool
10891 grok_op_properties (tree decl, bool complain)
10892 {
10893   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10894   tree argtype;
10895   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10896   tree name = DECL_NAME (decl);
10897   enum tree_code operator_code;
10898   int arity;
10899   bool ellipsis_p;
10900   tree class_type;
10901
10902   /* Count the number of arguments and check for ellipsis.  */
10903   for (argtype = argtypes, arity = 0;
10904        argtype && argtype != void_list_node;
10905        argtype = TREE_CHAIN (argtype))
10906     ++arity;
10907   ellipsis_p = !argtype;
10908
10909   class_type = DECL_CONTEXT (decl);
10910   if (class_type && !CLASS_TYPE_P (class_type))
10911     class_type = NULL_TREE;
10912
10913   if (DECL_CONV_FN_P (decl))
10914     operator_code = TYPE_EXPR;
10915   else
10916     do
10917       {
10918 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10919         if (ansi_opname (CODE) == name)                         \
10920           {                                                     \
10921             operator_code = (CODE);                             \
10922             break;                                              \
10923           }                                                     \
10924         else if (ansi_assopname (CODE) == name)                 \
10925           {                                                     \
10926             operator_code = (CODE);                             \
10927             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10928             break;                                              \
10929           }
10930
10931 #include "operators.def"
10932 #undef DEF_OPERATOR
10933
10934         gcc_unreachable ();
10935       }
10936     while (0);
10937   gcc_assert (operator_code != MAX_TREE_CODES);
10938   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10939
10940   if (class_type)
10941     switch (operator_code)
10942       {
10943       case NEW_EXPR:
10944         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10945         break;
10946
10947       case DELETE_EXPR:
10948         TYPE_GETS_DELETE (class_type) |= 1;
10949         break;
10950
10951       case VEC_NEW_EXPR:
10952         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10953         break;
10954
10955       case VEC_DELETE_EXPR:
10956         TYPE_GETS_DELETE (class_type) |= 2;
10957         break;
10958
10959       default:
10960         break;
10961       }
10962
10963     /* [basic.std.dynamic.allocation]/1:
10964
10965        A program is ill-formed if an allocation function is declared
10966        in a namespace scope other than global scope or declared static
10967        in global scope.
10968
10969        The same also holds true for deallocation functions.  */
10970   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10971       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10972     {
10973       if (DECL_NAMESPACE_SCOPE_P (decl))
10974         {
10975           if (CP_DECL_CONTEXT (decl) != global_namespace)
10976             {
10977               error ("%qD may not be declared within a namespace", decl);
10978               return false;
10979             }
10980           else if (!TREE_PUBLIC (decl))
10981             {
10982               error ("%qD may not be declared as static", decl);
10983               return false;
10984             }
10985         }
10986     }
10987
10988   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10989     {
10990       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10991       DECL_IS_OPERATOR_NEW (decl) = 1;
10992     }
10993   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10994     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10995   else
10996     {
10997       /* An operator function must either be a non-static member function
10998          or have at least one parameter of a class, a reference to a class,
10999          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11000       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11001         {
11002           if (operator_code == TYPE_EXPR
11003               || operator_code == CALL_EXPR
11004               || operator_code == COMPONENT_REF
11005               || operator_code == ARRAY_REF
11006               || operator_code == NOP_EXPR)
11007             {
11008               error ("%qD must be a nonstatic member function", decl);
11009               return false;
11010             }
11011           else
11012             {
11013               tree p;
11014
11015               if (DECL_STATIC_FUNCTION_P (decl))
11016                 {
11017                   error ("%qD must be either a non-static member "
11018                          "function or a non-member function", decl);
11019                   return false;
11020                 }
11021
11022               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11023                 {
11024                   tree arg = non_reference (TREE_VALUE (p));
11025                   if (arg == error_mark_node)
11026                     return false;
11027
11028                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11029                      because these checks are performed even on
11030                      template functions.  */
11031                   if (MAYBE_CLASS_TYPE_P (arg)
11032                       || TREE_CODE (arg) == ENUMERAL_TYPE)
11033                     break;
11034                 }
11035
11036               if (!p || p == void_list_node)
11037                 {
11038                   if (complain)
11039                     error ("%qD must have an argument of class or "
11040                            "enumerated type", decl);
11041                   return false;
11042                 }
11043             }
11044         }
11045
11046       /* There are no restrictions on the arguments to an overloaded
11047          "operator ()".  */
11048       if (operator_code == CALL_EXPR)
11049         return true;
11050
11051       /* Warn about conversion operators that will never be used.  */
11052       if (IDENTIFIER_TYPENAME_P (name)
11053           && ! DECL_TEMPLATE_INFO (decl)
11054           && warn_conversion
11055           /* Warn only declaring the function; there is no need to
11056              warn again about out-of-class definitions.  */
11057           && class_type == current_class_type)
11058         {
11059           tree t = TREE_TYPE (name);
11060           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11061
11062           if (ref)
11063             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11064
11065           if (TREE_CODE (t) == VOID_TYPE)
11066             warning (OPT_Wconversion,
11067                      ref
11068                      ? G_("conversion to a reference to void "
11069                           "will never use a type conversion operator")
11070                      : G_("conversion to void "
11071                           "will never use a type conversion operator"));
11072           else if (class_type)
11073             {
11074               if (t == class_type)
11075                 warning (OPT_Wconversion,
11076                      ref
11077                      ? G_("conversion to a reference to the same type "
11078                           "will never use a type conversion operator")
11079                      : G_("conversion to the same type "
11080                           "will never use a type conversion operator"));                
11081               /* Don't force t to be complete here.  */
11082               else if (MAYBE_CLASS_TYPE_P (t)
11083                        && COMPLETE_TYPE_P (t)
11084                        && DERIVED_FROM_P (t, class_type))
11085                  warning (OPT_Wconversion,
11086                           ref
11087                           ? G_("conversion to a reference to a base class "
11088                                "will never use a type conversion operator")
11089                           : G_("conversion to a base class "
11090                                "will never use a type conversion operator"));           
11091             }
11092
11093         }
11094
11095       if (operator_code == COND_EXPR)
11096         {
11097           /* 13.4.0.3 */
11098           error ("ISO C++ prohibits overloading operator ?:");
11099           return false;
11100         }
11101       else if (ellipsis_p)
11102         {
11103           error ("%qD must not have variable number of arguments", decl);
11104           return false;
11105         }
11106       else if (ambi_op_p (operator_code))
11107         {
11108           if (arity == 1)
11109             /* We pick the one-argument operator codes by default, so
11110                we don't have to change anything.  */
11111             ;
11112           else if (arity == 2)
11113             {
11114               /* If we thought this was a unary operator, we now know
11115                  it to be a binary operator.  */
11116               switch (operator_code)
11117                 {
11118                 case INDIRECT_REF:
11119                   operator_code = MULT_EXPR;
11120                   break;
11121
11122                 case ADDR_EXPR:
11123                   operator_code = BIT_AND_EXPR;
11124                   break;
11125
11126                 case UNARY_PLUS_EXPR:
11127                   operator_code = PLUS_EXPR;
11128                   break;
11129
11130                 case NEGATE_EXPR:
11131                   operator_code = MINUS_EXPR;
11132                   break;
11133
11134                 case PREINCREMENT_EXPR:
11135                   operator_code = POSTINCREMENT_EXPR;
11136                   break;
11137
11138                 case PREDECREMENT_EXPR:
11139                   operator_code = POSTDECREMENT_EXPR;
11140                   break;
11141
11142                 default:
11143                   gcc_unreachable ();
11144                 }
11145
11146               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11147
11148               if ((operator_code == POSTINCREMENT_EXPR
11149                    || operator_code == POSTDECREMENT_EXPR)
11150                   && ! processing_template_decl
11151                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11152                 {
11153                   if (methodp)
11154                     error ("postfix %qD must take %<int%> as its argument",
11155                            decl);
11156                   else
11157                     error ("postfix %qD must take %<int%> as its second "
11158                            "argument", decl);
11159                   return false;
11160                 }
11161             }
11162           else
11163             {
11164               if (methodp)
11165                 error ("%qD must take either zero or one argument", decl);
11166               else
11167                 error ("%qD must take either one or two arguments", decl);
11168               return false;
11169             }
11170
11171           /* More Effective C++ rule 6.  */
11172           if (warn_ecpp
11173               && (operator_code == POSTINCREMENT_EXPR
11174                   || operator_code == POSTDECREMENT_EXPR
11175                   || operator_code == PREINCREMENT_EXPR
11176                   || operator_code == PREDECREMENT_EXPR))
11177             {
11178               tree arg = TREE_VALUE (argtypes);
11179               tree ret = TREE_TYPE (TREE_TYPE (decl));
11180               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11181                 arg = TREE_TYPE (arg);
11182               arg = TYPE_MAIN_VARIANT (arg);
11183               if (operator_code == PREINCREMENT_EXPR
11184                   || operator_code == PREDECREMENT_EXPR)
11185                 {
11186                   if (TREE_CODE (ret) != REFERENCE_TYPE
11187                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11188                                        arg))
11189                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11190                              build_reference_type (arg));
11191                 }
11192               else
11193                 {
11194                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11195                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11196                 }
11197             }
11198         }
11199       else if (unary_op_p (operator_code))
11200         {
11201           if (arity != 1)
11202             {
11203               if (methodp)
11204                 error ("%qD must take %<void%>", decl);
11205               else
11206                 error ("%qD must take exactly one argument", decl);
11207               return false;
11208             }
11209         }
11210       else /* if (binary_op_p (operator_code)) */
11211         {
11212           if (arity != 2)
11213             {
11214               if (methodp)
11215                 error ("%qD must take exactly one argument", decl);
11216               else
11217                 error ("%qD must take exactly two arguments", decl);
11218               return false;
11219             }
11220
11221           /* More Effective C++ rule 7.  */
11222           if (warn_ecpp
11223               && (operator_code == TRUTH_ANDIF_EXPR
11224                   || operator_code == TRUTH_ORIF_EXPR
11225                   || operator_code == COMPOUND_EXPR))
11226             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11227                      decl);
11228         }
11229
11230       /* Effective C++ rule 23.  */
11231       if (warn_ecpp
11232           && arity == 2
11233           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11234           && (operator_code == PLUS_EXPR
11235               || operator_code == MINUS_EXPR
11236               || operator_code == TRUNC_DIV_EXPR
11237               || operator_code == MULT_EXPR
11238               || operator_code == TRUNC_MOD_EXPR)
11239           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11240         warning (OPT_Weffc__, "%qD should return by value", decl);
11241
11242       /* [over.oper]/8 */
11243       for (; argtypes && argtypes != void_list_node;
11244           argtypes = TREE_CHAIN (argtypes))
11245         if (TREE_PURPOSE (argtypes))
11246           {
11247             TREE_PURPOSE (argtypes) = NULL_TREE;
11248             if (operator_code == POSTINCREMENT_EXPR
11249                 || operator_code == POSTDECREMENT_EXPR)
11250               {
11251                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
11252                          decl);
11253               }
11254             else
11255               {
11256                 error ("%qD cannot have default arguments", decl);
11257                 return false;
11258               }
11259           }
11260     }
11261   return true;
11262 }
11263 \f
11264 /* Return a string giving the keyword associate with CODE.  */
11265
11266 static const char *
11267 tag_name (enum tag_types code)
11268 {
11269   switch (code)
11270     {
11271     case record_type:
11272       return "struct";
11273     case class_type:
11274       return "class";
11275     case union_type:
11276       return "union";
11277     case enum_type:
11278       return "enum";
11279     case typename_type:
11280       return "typename";
11281     default:
11282       gcc_unreachable ();
11283     }
11284 }
11285
11286 /* Name lookup in an elaborated-type-specifier (after the keyword
11287    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11288    elaborated-type-specifier is invalid, issue a diagnostic and return
11289    error_mark_node; otherwise, return the *_TYPE to which it referred.
11290    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11291
11292 tree
11293 check_elaborated_type_specifier (enum tag_types tag_code,
11294                                  tree decl,
11295                                  bool allow_template_p)
11296 {
11297   tree type;
11298
11299   /* In the case of:
11300
11301        struct S { struct S *p; };
11302
11303      name lookup will find the TYPE_DECL for the implicit "S::S"
11304      typedef.  Adjust for that here.  */
11305   if (DECL_SELF_REFERENCE_P (decl))
11306     decl = TYPE_NAME (TREE_TYPE (decl));
11307
11308   type = TREE_TYPE (decl);
11309
11310   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11311      is false for this case as well.  */
11312   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11313     {
11314       error ("using template type parameter %qT after %qs",
11315              type, tag_name (tag_code));
11316       return error_mark_node;
11317     }
11318   /*   [dcl.type.elab]
11319
11320        If the identifier resolves to a typedef-name or a template
11321        type-parameter, the elaborated-type-specifier is ill-formed.
11322
11323      In other words, the only legitimate declaration to use in the
11324      elaborated type specifier is the implicit typedef created when
11325      the type is declared.  */
11326   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11327            && !DECL_SELF_REFERENCE_P (decl)
11328            && tag_code != typename_type)
11329     {
11330       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11331       error ("%q+D has a previous declaration here", decl);
11332       return error_mark_node;
11333     }
11334   else if (TREE_CODE (type) != RECORD_TYPE
11335            && TREE_CODE (type) != UNION_TYPE
11336            && tag_code != enum_type
11337            && tag_code != typename_type)
11338     {
11339       error ("%qT referred to as %qs", type, tag_name (tag_code));
11340       error ("%q+T has a previous declaration here", type);
11341       return error_mark_node;
11342     }
11343   else if (TREE_CODE (type) != ENUMERAL_TYPE
11344            && tag_code == enum_type)
11345     {
11346       error ("%qT referred to as enum", type);
11347       error ("%q+T has a previous declaration here", type);
11348       return error_mark_node;
11349     }
11350   else if (!allow_template_p
11351            && TREE_CODE (type) == RECORD_TYPE
11352            && CLASSTYPE_IS_TEMPLATE (type))
11353     {
11354       /* If a class template appears as elaborated type specifier
11355          without a template header such as:
11356
11357            template <class T> class C {};
11358            void f(class C);             // No template header here
11359
11360          then the required template argument is missing.  */
11361       error ("template argument required for %<%s %T%>",
11362              tag_name (tag_code),
11363              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11364       return error_mark_node;
11365     }
11366
11367   return type;
11368 }
11369
11370 /* Lookup NAME in elaborate type specifier in scope according to
11371    SCOPE and issue diagnostics if necessary.
11372    Return *_TYPE node upon success, NULL_TREE when the NAME is not
11373    found, and ERROR_MARK_NODE for type error.  */
11374
11375 static tree
11376 lookup_and_check_tag (enum tag_types tag_code, tree name,
11377                       tag_scope scope, bool template_header_p)
11378 {
11379   tree t;
11380   tree decl;
11381   if (scope == ts_global)
11382     {
11383       /* First try ordinary name lookup, ignoring hidden class name
11384          injected via friend declaration.  */
11385       decl = lookup_name_prefer_type (name, 2);
11386       /* If that fails, the name will be placed in the smallest
11387          non-class, non-function-prototype scope according to 3.3.1/5.
11388          We may already have a hidden name declared as friend in this
11389          scope.  So lookup again but not ignoring hidden names.
11390          If we find one, that name will be made visible rather than
11391          creating a new tag.  */
11392       if (!decl)
11393         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11394     }
11395   else
11396     decl = lookup_type_scope (name, scope);
11397
11398   if (decl && DECL_CLASS_TEMPLATE_P (decl))
11399     decl = DECL_TEMPLATE_RESULT (decl);
11400
11401   if (decl && TREE_CODE (decl) == TYPE_DECL)
11402     {
11403       /* Look for invalid nested type:
11404            class C {
11405              class C {};
11406            };  */
11407       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11408         {
11409           error ("%qD has the same name as the class in which it is "
11410                  "declared",
11411                  decl);
11412           return error_mark_node;
11413         }
11414
11415       /* Two cases we need to consider when deciding if a class
11416          template is allowed as an elaborated type specifier:
11417          1. It is a self reference to its own class.
11418          2. It comes with a template header.
11419
11420          For example:
11421
11422            template <class T> class C {
11423              class C *c1;               // DECL_SELF_REFERENCE_P is true
11424              class D;
11425            };
11426            template <class U> class C; // template_header_p is true
11427            template <class T> class C<T>::D {
11428              class C *c2;               // DECL_SELF_REFERENCE_P is true
11429            };  */
11430
11431       t = check_elaborated_type_specifier (tag_code,
11432                                            decl,
11433                                            template_header_p
11434                                            | DECL_SELF_REFERENCE_P (decl));
11435       return t;
11436     }
11437   else if (decl && TREE_CODE (decl) == TREE_LIST)
11438     {
11439       error ("reference to %qD is ambiguous", name);
11440       print_candidates (decl);
11441       return error_mark_node;
11442     }
11443   else
11444     return NULL_TREE;
11445 }
11446
11447 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11448    Define the tag as a forward-reference if it is not defined.
11449
11450    If a declaration is given, process it here, and report an error if
11451    multiple declarations are not identical.
11452
11453    SCOPE is TS_CURRENT when this is also a definition.  Only look in
11454    the current frame for the name (since C++ allows new names in any
11455    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11456    declaration.  Only look beginning from the current scope outward up
11457    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11458
11459    TEMPLATE_HEADER_P is true when this declaration is preceded by
11460    a set of template parameters.  */
11461
11462 static tree
11463 xref_tag_1 (enum tag_types tag_code, tree name,
11464             tag_scope scope, bool template_header_p)
11465 {
11466   enum tree_code code;
11467   tree t;
11468   tree context = NULL_TREE;
11469
11470   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11471
11472   switch (tag_code)
11473     {
11474     case record_type:
11475     case class_type:
11476       code = RECORD_TYPE;
11477       break;
11478     case union_type:
11479       code = UNION_TYPE;
11480       break;
11481     case enum_type:
11482       code = ENUMERAL_TYPE;
11483       break;
11484     default:
11485       gcc_unreachable ();
11486     }
11487
11488   /* In case of anonymous name, xref_tag is only called to
11489      make type node and push name.  Name lookup is not required.  */
11490   if (ANON_AGGRNAME_P (name))
11491     t = NULL_TREE;
11492   else
11493     t = lookup_and_check_tag  (tag_code, name,
11494                                scope, template_header_p);
11495
11496   if (t == error_mark_node)
11497     return error_mark_node;
11498
11499   if (scope != ts_current && t && current_class_type
11500       && template_class_depth (current_class_type)
11501       && template_header_p)
11502     {
11503       /* Since SCOPE is not TS_CURRENT, we are not looking at a
11504          definition of this tag.  Since, in addition, we are currently
11505          processing a (member) template declaration of a template
11506          class, we must be very careful; consider:
11507
11508            template <class X>
11509            struct S1
11510
11511            template <class U>
11512            struct S2
11513            { template <class V>
11514            friend struct S1; };
11515
11516          Here, the S2::S1 declaration should not be confused with the
11517          outer declaration.  In particular, the inner version should
11518          have a template parameter of level 2, not level 1.  This
11519          would be particularly important if the member declaration
11520          were instead:
11521
11522            template <class V = U> friend struct S1;
11523
11524          say, when we should tsubst into `U' when instantiating
11525          S2.  On the other hand, when presented with:
11526
11527            template <class T>
11528            struct S1 {
11529              template <class U>
11530              struct S2 {};
11531              template <class U>
11532              friend struct S2;
11533            };
11534
11535          we must find the inner binding eventually.  We
11536          accomplish this by making sure that the new type we
11537          create to represent this declaration has the right
11538          TYPE_CONTEXT.  */
11539       context = TYPE_CONTEXT (t);
11540       t = NULL_TREE;
11541     }
11542
11543   if (! t)
11544     {
11545       /* If no such tag is yet defined, create a forward-reference node
11546          and record it as the "definition".
11547          When a real declaration of this type is found,
11548          the forward-reference will be altered into a real type.  */
11549       if (code == ENUMERAL_TYPE)
11550         {
11551           error ("use of enum %q#D without previous declaration", name);
11552           return error_mark_node;
11553         }
11554       else
11555         {
11556           t = make_class_type (code);
11557           TYPE_CONTEXT (t) = context;
11558           t = pushtag (name, t, scope);
11559         }
11560     }
11561   else
11562     {
11563       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11564         {
11565           if (!redeclare_class_template (t, current_template_parms))
11566             return error_mark_node;
11567         }
11568       else if (!processing_template_decl
11569                && CLASS_TYPE_P (t)
11570                && CLASSTYPE_IS_TEMPLATE (t))
11571         {
11572           error ("redeclaration of %qT as a non-template", t);
11573           error ("previous declaration %q+D", t);
11574           return error_mark_node;
11575         }
11576
11577       /* Make injected friend class visible.  */
11578       if (scope != ts_within_enclosing_non_class
11579           && hidden_name_p (TYPE_NAME (t)))
11580         {
11581           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11582           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11583
11584           if (TYPE_TEMPLATE_INFO (t))
11585             {
11586               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11587               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11588             }
11589         }
11590     }
11591
11592   return t;
11593 }
11594
11595 /* Wrapper for xref_tag_1.  */
11596
11597 tree
11598 xref_tag (enum tag_types tag_code, tree name,
11599           tag_scope scope, bool template_header_p)
11600 {
11601   tree ret;
11602   bool subtime;
11603   subtime = timevar_cond_start (TV_NAME_LOOKUP);
11604   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11605   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11606   return ret;
11607 }
11608
11609
11610 tree
11611 xref_tag_from_type (tree old, tree id, tag_scope scope)
11612 {
11613   enum tag_types tag_kind;
11614
11615   if (TREE_CODE (old) == RECORD_TYPE)
11616     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11617   else
11618     tag_kind  = union_type;
11619
11620   if (id == NULL_TREE)
11621     id = TYPE_IDENTIFIER (old);
11622
11623   return xref_tag (tag_kind, id, scope, false);
11624 }
11625
11626 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11627    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11628    access_* node, and the TREE_VALUE is the type of the base-class.
11629    Non-NULL TREE_TYPE indicates virtual inheritance.  
11630  
11631    Returns true if the binfo hierarchy was successfully created,
11632    false if an error was detected. */
11633
11634 bool
11635 xref_basetypes (tree ref, tree base_list)
11636 {
11637   tree *basep;
11638   tree binfo, base_binfo;
11639   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11640   unsigned max_bases = 0;  /* Maximum direct bases.  */
11641   int i;
11642   tree default_access;
11643   tree igo_prev; /* Track Inheritance Graph Order.  */
11644
11645   if (ref == error_mark_node)
11646     return false;
11647
11648   /* The base of a derived class is private by default, all others are
11649      public.  */
11650   default_access = (TREE_CODE (ref) == RECORD_TYPE
11651                     && CLASSTYPE_DECLARED_CLASS (ref)
11652                     ? access_private_node : access_public_node);
11653
11654   /* First, make sure that any templates in base-classes are
11655      instantiated.  This ensures that if we call ourselves recursively
11656      we do not get confused about which classes are marked and which
11657      are not.  */
11658   basep = &base_list;
11659   while (*basep)
11660     {
11661       tree basetype = TREE_VALUE (*basep);
11662
11663       if (!(processing_template_decl && uses_template_parms (basetype))
11664           && !complete_type_or_else (basetype, NULL))
11665         /* An incomplete type.  Remove it from the list.  */
11666         *basep = TREE_CHAIN (*basep);
11667       else
11668         {
11669           max_bases++;
11670           if (TREE_TYPE (*basep))
11671             max_vbases++;
11672           if (CLASS_TYPE_P (basetype))
11673             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11674           basep = &TREE_CHAIN (*basep);
11675         }
11676     }
11677
11678   TYPE_MARKED_P (ref) = 1;
11679
11680   /* The binfo slot should be empty, unless this is an (ill-formed)
11681      redefinition.  */
11682   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11683     {
11684       error ("redefinition of %q#T", ref);
11685       return false;
11686     }
11687
11688   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11689
11690   binfo = make_tree_binfo (max_bases);
11691
11692   TYPE_BINFO (ref) = binfo;
11693   BINFO_OFFSET (binfo) = size_zero_node;
11694   BINFO_TYPE (binfo) = ref;
11695
11696   /* Apply base-class info set up to the variants of this type.  */
11697   fixup_type_variants (ref);
11698
11699   if (max_bases)
11700     {
11701       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11702       /* An aggregate cannot have baseclasses.  */
11703       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11704
11705       if (TREE_CODE (ref) == UNION_TYPE)
11706         {
11707           error ("derived union %qT invalid", ref);
11708           return false;
11709         }
11710     }
11711
11712   if (max_bases > 1)
11713     {
11714       if (TYPE_FOR_JAVA (ref))
11715         {
11716           error ("Java class %qT cannot have multiple bases", ref);
11717           return false;
11718         }
11719     }
11720
11721   if (max_vbases)
11722     {
11723       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11724
11725       if (TYPE_FOR_JAVA (ref))
11726         {
11727           error ("Java class %qT cannot have virtual bases", ref);
11728           return false;
11729         }
11730     }
11731
11732   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11733     {
11734       tree access = TREE_PURPOSE (base_list);
11735       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11736       tree basetype = TREE_VALUE (base_list);
11737
11738       if (access == access_default_node)
11739         access = default_access;
11740
11741       if (PACK_EXPANSION_P (basetype))
11742         basetype = PACK_EXPANSION_PATTERN (basetype);
11743       if (TREE_CODE (basetype) == TYPE_DECL)
11744         basetype = TREE_TYPE (basetype);
11745       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11746         {
11747           error ("base type %qT fails to be a struct or class type",
11748                  basetype);
11749           return false;
11750         }
11751
11752       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11753         TYPE_FOR_JAVA (ref) = 1;
11754
11755       base_binfo = NULL_TREE;
11756       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11757         {
11758           base_binfo = TYPE_BINFO (basetype);
11759           /* The original basetype could have been a typedef'd type.  */
11760           basetype = BINFO_TYPE (base_binfo);
11761
11762           /* Inherit flags from the base.  */
11763           TYPE_HAS_NEW_OPERATOR (ref)
11764             |= TYPE_HAS_NEW_OPERATOR (basetype);
11765           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11766             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11767           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11768           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11769           CLASSTYPE_DIAMOND_SHAPED_P (ref)
11770             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11771           CLASSTYPE_REPEATED_BASE_P (ref)
11772             |= CLASSTYPE_REPEATED_BASE_P (basetype);
11773         }
11774
11775       /* We must do this test after we've seen through a typedef
11776          type.  */
11777       if (TYPE_MARKED_P (basetype))
11778         {
11779           if (basetype == ref)
11780             error ("recursive type %qT undefined", basetype);
11781           else
11782             error ("duplicate base type %qT invalid", basetype);
11783           return false;
11784         }
11785
11786       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11787         /* Regenerate the pack expansion for the bases. */
11788         basetype = make_pack_expansion (basetype);
11789
11790       TYPE_MARKED_P (basetype) = 1;
11791
11792       base_binfo = copy_binfo (base_binfo, basetype, ref,
11793                                &igo_prev, via_virtual);
11794       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11795         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11796
11797       BINFO_BASE_APPEND (binfo, base_binfo);
11798       BINFO_BASE_ACCESS_APPEND (binfo, access);
11799     }
11800
11801   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11802     /* If we have space in the vbase vector, we must have shared at
11803        least one of them, and are therefore diamond shaped.  */
11804     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11805
11806   /* Unmark all the types.  */
11807   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11808     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11809   TYPE_MARKED_P (ref) = 0;
11810
11811   /* Now see if we have a repeated base type.  */
11812   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11813     {
11814       for (base_binfo = binfo; base_binfo;
11815            base_binfo = TREE_CHAIN (base_binfo))
11816         {
11817           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11818             {
11819               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11820               break;
11821             }
11822           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11823         }
11824       for (base_binfo = binfo; base_binfo;
11825            base_binfo = TREE_CHAIN (base_binfo))
11826         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11827           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11828         else
11829           break;
11830     }
11831
11832   return true;
11833 }
11834
11835 \f
11836 /* Copies the enum-related properties from type SRC to type DST.
11837    Used with the underlying type of an enum and the enum itself.  */
11838 static void
11839 copy_type_enum (tree dst, tree src)
11840 {
11841   TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
11842   TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
11843   TYPE_SIZE (dst) = TYPE_SIZE (src);
11844   TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
11845   SET_TYPE_MODE (dst, TYPE_MODE (src));
11846   TYPE_PRECISION (dst) = TYPE_PRECISION (src);
11847   TYPE_ALIGN (dst) = TYPE_ALIGN (src);
11848   TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
11849   TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
11850 }
11851
11852 /* Begin compiling the definition of an enumeration type.
11853    NAME is its name, 
11854
11855    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
11856
11857    UNDERLYING_TYPE is the type that will be used as the storage for
11858    the enumeration type. This should be NULL_TREE if no storage type
11859    was specified.
11860
11861    SCOPED_ENUM_P is true if this is a scoped enumeration type.
11862
11863    if IS_NEW is not NULL, gets TRUE iff a new type is created.
11864
11865    Returns the type object, as yet incomplete.
11866    Also records info about it so that build_enumerator
11867    may be used to declare the individual values as they are read.  */
11868
11869 tree
11870 start_enum (tree name, tree enumtype, tree underlying_type,
11871             bool scoped_enum_p, bool *is_new)
11872 {
11873   tree prevtype = NULL_TREE;
11874   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11875
11876   if (is_new)
11877     *is_new = false;
11878   /* [C++0x dcl.enum]p5:
11879
11880     If not explicitly specified, the underlying type of a scoped
11881     enumeration type is int.  */
11882   if (!underlying_type && scoped_enum_p)
11883     underlying_type = integer_type_node;
11884
11885   if (underlying_type)
11886     underlying_type = cv_unqualified (underlying_type);
11887
11888   /* If this is the real definition for a previous forward reference,
11889      fill in the contents in the same object that used to be the
11890      forward reference.  */
11891   if (!enumtype)
11892     enumtype = lookup_and_check_tag (enum_type, name,
11893                                      /*tag_scope=*/ts_current,
11894                                      /*template_header_p=*/false);
11895
11896   /* In case of a template_decl, the only check that should be deferred
11897      to instantiation time is the comparison of underlying types.  */
11898   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11899     {
11900       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
11901         {
11902           error_at (input_location, "scoped/unscoped mismatch "
11903                     "in enum %q#T", enumtype);
11904           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11905                     "previous definition here");
11906           enumtype = error_mark_node;
11907         }
11908       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
11909         {
11910           error_at (input_location, "underlying type mismatch "
11911                     "in enum %q#T", enumtype);
11912           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11913                     "previous definition here");
11914           enumtype = error_mark_node;
11915         }
11916       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
11917                && !dependent_type_p (underlying_type)
11918                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
11919                && !same_type_p (underlying_type,
11920                                 ENUM_UNDERLYING_TYPE (enumtype)))
11921         {
11922           error_at (input_location, "different underlying type "
11923                     "in enum %q#T", enumtype);
11924           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11925                     "previous definition here");
11926           underlying_type = NULL_TREE;
11927         }
11928     }
11929
11930   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
11931       || processing_template_decl)
11932     {
11933       /* In case of error, make a dummy enum to allow parsing to
11934          continue.  */
11935       if (enumtype == error_mark_node)
11936         {
11937           name = make_anon_name ();
11938           enumtype = NULL_TREE;
11939         }
11940
11941       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
11942          of an opaque enum, or an opaque enum of an already defined
11943          enumeration (C++0x only).
11944          In any other case, it'll be NULL_TREE. */
11945       if (!enumtype)
11946         {
11947           if (is_new)
11948             *is_new = true;
11949         }
11950       prevtype = enumtype;
11951       enumtype = cxx_make_type (ENUMERAL_TYPE);
11952       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11953       if (enumtype == error_mark_node)
11954         return error_mark_node;
11955
11956       /* The enum is considered opaque until the opening '{' of the
11957          enumerator list.  */
11958       SET_OPAQUE_ENUM_P (enumtype, true);
11959       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
11960     }
11961
11962   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
11963
11964   if (underlying_type)
11965     {
11966       if (CP_INTEGRAL_TYPE_P (underlying_type))
11967         {
11968           copy_type_enum (enumtype, underlying_type);
11969           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11970         }
11971       else if (dependent_type_p (underlying_type))
11972         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11973       else
11974         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11975                underlying_type, enumtype);
11976     }
11977
11978   /* If into a template class, the returned enum is always the first
11979      declaration (opaque or not) seen. This way all the references to
11980      this type will be to the same declaration. The following ones are used
11981      only to check for definition errors.  */
11982   if (prevtype && processing_template_decl)
11983     return prevtype;
11984   else
11985     return enumtype;
11986 }
11987
11988 /* After processing and defining all the values of an enumeration type,
11989    install their decls in the enumeration type.
11990    ENUMTYPE is the type object.  */
11991
11992 void
11993 finish_enum_value_list (tree enumtype)
11994 {
11995   tree values;
11996   tree underlying_type;
11997   tree decl;
11998   tree value;
11999   tree minnode, maxnode;
12000   tree t;
12001
12002   bool fixed_underlying_type_p 
12003     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12004
12005   /* We built up the VALUES in reverse order.  */
12006   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12007
12008   /* For an enum defined in a template, just set the type of the values;
12009      all further processing is postponed until the template is
12010      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12011      works.  */
12012   if (processing_template_decl)
12013     {
12014       for (values = TYPE_VALUES (enumtype);
12015            values;
12016            values = TREE_CHAIN (values))
12017         TREE_TYPE (TREE_VALUE (values)) = enumtype;
12018       return;
12019     }
12020
12021   /* Determine the minimum and maximum values of the enumerators.  */
12022   if (TYPE_VALUES (enumtype))
12023     {
12024       minnode = maxnode = NULL_TREE;
12025
12026       for (values = TYPE_VALUES (enumtype);
12027            values;
12028            values = TREE_CHAIN (values))
12029         {
12030           decl = TREE_VALUE (values);
12031
12032           /* [dcl.enum]: Following the closing brace of an enum-specifier,
12033              each enumerator has the type of its enumeration.  Prior to the
12034              closing brace, the type of each enumerator is the type of its
12035              initializing value.  */
12036           TREE_TYPE (decl) = enumtype;
12037
12038           /* Update the minimum and maximum values, if appropriate.  */
12039           value = DECL_INITIAL (decl);
12040           if (value == error_mark_node)
12041             value = integer_zero_node;
12042           /* Figure out what the minimum and maximum values of the
12043              enumerators are.  */
12044           if (!minnode)
12045             minnode = maxnode = value;
12046           else if (tree_int_cst_lt (maxnode, value))
12047             maxnode = value;
12048           else if (tree_int_cst_lt (value, minnode))
12049             minnode = value;
12050         }
12051     }
12052   else
12053     /* [dcl.enum]
12054
12055        If the enumerator-list is empty, the underlying type is as if
12056        the enumeration had a single enumerator with value 0.  */
12057     minnode = maxnode = integer_zero_node;
12058
12059   if (!fixed_underlying_type_p)
12060     {
12061       /* Compute the number of bits require to represent all values of the
12062          enumeration.  We must do this before the type of MINNODE and
12063          MAXNODE are transformed, since tree_int_cst_min_precision relies
12064          on the TREE_TYPE of the value it is passed.  */
12065       bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12066       int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12067       int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12068       int precision = MAX (lowprec, highprec);
12069       unsigned int itk;
12070       bool use_short_enum;
12071
12072       /* Determine the underlying type of the enumeration.
12073
12074          [dcl.enum]
12075
12076          The underlying type of an enumeration is an integral type that
12077          can represent all the enumerator values defined in the
12078          enumeration.  It is implementation-defined which integral type is
12079          used as the underlying type for an enumeration except that the
12080          underlying type shall not be larger than int unless the value of
12081          an enumerator cannot fit in an int or unsigned int.
12082
12083          We use "int" or an "unsigned int" as the underlying type, even if
12084          a smaller integral type would work, unless the user has
12085          explicitly requested that we use the smallest possible type.  The
12086          user can request that for all enumerations with a command line
12087          flag, or for just one enumeration with an attribute.  */
12088
12089       use_short_enum = flag_short_enums
12090         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12091
12092       for (itk = (use_short_enum ? itk_char : itk_int);
12093            itk != itk_none;
12094            itk++)
12095         {
12096           underlying_type = integer_types[itk];
12097           if (underlying_type != NULL_TREE
12098               && TYPE_PRECISION (underlying_type) >= precision
12099               && TYPE_UNSIGNED (underlying_type) == unsignedp)
12100             break;
12101         }
12102       if (itk == itk_none)
12103         {
12104           /* DR 377
12105
12106              IF no integral type can represent all the enumerator values, the
12107              enumeration is ill-formed.  */
12108           error ("no integral type can represent all of the enumerator values "
12109                  "for %qT", enumtype);
12110           precision = TYPE_PRECISION (long_long_integer_type_node);
12111           underlying_type = integer_types[itk_unsigned_long_long];
12112         }
12113
12114       /* [dcl.enum]
12115
12116          The value of sizeof() applied to an enumeration type, an object
12117          of an enumeration type, or an enumerator, is the value of sizeof()
12118          applied to the underlying type.  */
12119       copy_type_enum (enumtype, underlying_type);
12120
12121       /* Compute the minimum and maximum values for the type.
12122
12123          [dcl.enum]
12124
12125          For an enumeration where emin is the smallest enumerator and emax
12126          is the largest, the values of the enumeration are the values of the
12127          underlying type in the range bmin to bmax, where bmin and bmax are,
12128          respectively, the smallest and largest values of the smallest bit-
12129          field that can store emin and emax.  */
12130
12131       /* The middle-end currently assumes that types with TYPE_PRECISION
12132          narrower than their underlying type are suitably zero or sign
12133          extended to fill their mode.  Similarly, it assumes that the front
12134          end assures that a value of a particular type must be within
12135          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12136
12137          We used to set these fields based on bmin and bmax, but that led
12138          to invalid assumptions like optimizing away bounds checking.  So
12139          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12140          TYPE_MAX_VALUE to the values for the mode above and only restrict
12141          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12142       ENUM_UNDERLYING_TYPE (enumtype)
12143         = build_distinct_type_copy (underlying_type);
12144       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12145       set_min_and_max_values_for_integral_type
12146         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12147
12148       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12149       if (flag_strict_enums)
12150         set_min_and_max_values_for_integral_type (enumtype, precision,
12151                                                   unsignedp);
12152     }
12153   else
12154     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12155
12156   /* Convert each of the enumerators to the type of the underlying
12157      type of the enumeration.  */
12158   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12159     {
12160       location_t saved_location;
12161
12162       decl = TREE_VALUE (values);
12163       saved_location = input_location;
12164       input_location = DECL_SOURCE_LOCATION (decl);
12165       if (fixed_underlying_type_p)
12166         /* If the enumeration type has a fixed underlying type, we
12167            already checked all of the enumerator values.  */
12168         value = DECL_INITIAL (decl);
12169       else
12170         value = perform_implicit_conversion (underlying_type,
12171                                              DECL_INITIAL (decl),
12172                                              tf_warning_or_error);
12173       input_location = saved_location;
12174
12175       /* Do not clobber shared ints.  */
12176       value = copy_node (value);
12177
12178       TREE_TYPE (value) = enumtype;
12179       DECL_INITIAL (decl) = value;
12180     }
12181
12182   /* Fix up all variant types of this enum type.  */
12183   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12184     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12185
12186   /* Finish debugging output for this type.  */
12187   rest_of_type_compilation (enumtype, namespace_bindings_p ());
12188 }
12189
12190 /* Finishes the enum type. This is called only the first time an
12191    enumeration is seen, be it opaque or odinary.
12192    ENUMTYPE is the type object.  */
12193
12194 void
12195 finish_enum (tree enumtype)
12196 {
12197   if (processing_template_decl)
12198     {
12199       if (at_function_scope_p ())
12200         add_stmt (build_min (TAG_DEFN, enumtype));
12201       return;
12202     }
12203
12204   /* Here there should not be any variants of this type.  */
12205   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12206               && !TYPE_NEXT_VARIANT (enumtype));
12207 }
12208
12209 /* Build and install a CONST_DECL for an enumeration constant of the
12210    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12211    LOC is the location of NAME.
12212    Assignment of sequential values by default is handled here.  */
12213
12214 void
12215 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12216 {
12217   tree decl;
12218   tree context;
12219   tree type;
12220
12221   /* If the VALUE was erroneous, pretend it wasn't there; that will
12222      result in the enum being assigned the next value in sequence.  */
12223   if (value == error_mark_node)
12224     value = NULL_TREE;
12225
12226   /* Remove no-op casts from the value.  */
12227   if (value)
12228     STRIP_TYPE_NOPS (value);
12229
12230   if (! processing_template_decl)
12231     {
12232       /* Validate and default VALUE.  */
12233       if (value != NULL_TREE)
12234         {
12235           value = cxx_constant_value (value);
12236
12237           if (TREE_CODE (value) == INTEGER_CST
12238               && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12239             {
12240               value = perform_integral_promotions (value);
12241             }
12242           else
12243             {
12244               error ("enumerator value for %qD is not an integer constant", name);
12245               value = NULL_TREE;
12246             }
12247         }
12248
12249       /* Default based on previous value.  */
12250       if (value == NULL_TREE)
12251         {
12252           if (TYPE_VALUES (enumtype))
12253             {
12254               HOST_WIDE_INT hi;
12255               unsigned HOST_WIDE_INT lo;
12256               tree prev_value;
12257               bool overflowed;
12258
12259               /* C++03 7.2/4: If no initializer is specified for the first
12260                  enumerator, the type is an unspecified integral
12261                  type. Otherwise the type is the same as the type of the
12262                  initializing value of the preceding enumerator unless the
12263                  incremented value is not representable in that type, in
12264                  which case the type is an unspecified integral type
12265                  sufficient to contain the incremented value.  */
12266               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12267               if (error_operand_p (prev_value))
12268                 value = error_mark_node;
12269               else
12270                 {
12271                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12272                                            TREE_INT_CST_HIGH (prev_value),
12273                                            1, 0, &lo, &hi);
12274                   if (!overflowed)
12275                     {
12276                       double_int di;
12277                       tree type = TREE_TYPE (prev_value);
12278                       bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12279                       di.low = lo; di.high = hi;
12280                       if (!double_int_fits_to_tree_p (type, di))
12281                         {
12282                           unsigned int itk;
12283                           for (itk = itk_int; itk != itk_none; itk++)
12284                             {
12285                               type = integer_types[itk];
12286                               if (type != NULL_TREE
12287                                   && (pos || !TYPE_UNSIGNED (type))
12288                                   && double_int_fits_to_tree_p (type, di))
12289                                 break;
12290                             }
12291                           if (type && cxx_dialect < cxx0x
12292                               && itk > itk_unsigned_long)
12293                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
12294 incremented enumerator value is too large for %<unsigned long%>" :  "\
12295 incremented enumerator value is too large for %<long%>");
12296                         }
12297                       if (type == NULL_TREE)
12298                         overflowed = true;
12299                       else
12300                         value = double_int_to_tree (type, di);
12301                     }
12302
12303                   if (overflowed)
12304                     {
12305                       error ("overflow in enumeration values at %qD", name);
12306                       value = error_mark_node;
12307                     }
12308                 }
12309             }
12310           else
12311             value = integer_zero_node;
12312         }
12313
12314       /* Remove no-op casts from the value.  */
12315       STRIP_TYPE_NOPS (value);
12316
12317       /* If the underlying type of the enum is fixed, check whether
12318          the enumerator values fits in the underlying type.  If it
12319          does not fit, the program is ill-formed [C++0x dcl.enum].  */
12320       if (ENUM_UNDERLYING_TYPE (enumtype)
12321           && value
12322           && TREE_CODE (value) == INTEGER_CST
12323           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12324         {
12325           error ("enumerator value %E is too large for underlying type %<%T%>",
12326                  value, ENUM_UNDERLYING_TYPE (enumtype));
12327
12328           /* Silently convert the value so that we can continue.  */
12329           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12330                                                value, tf_none);
12331         }
12332     }
12333
12334   /* C++ associates enums with global, function, or class declarations.  */
12335   context = current_scope ();
12336
12337   /* Build the actual enumeration constant.  Note that the enumeration
12338      constants have the underlying type of the enum (if it is fixed)
12339      or the type of their initializer (if the underlying type of the
12340      enum is not fixed):
12341
12342       [ C++0x dcl.enum ]
12343
12344         If the underlying type is fixed, the type of each enumerator
12345         prior to the closing brace is the underlying type; if the
12346         initializing value of an enumerator cannot be represented by
12347         the underlying type, the program is ill-formed. If the
12348         underlying type is not fixed, the type of each enumerator is
12349         the type of its initializing value.
12350
12351     If the underlying type is not fixed, it will be computed by
12352     finish_enum and we will reset the type of this enumerator.  Of
12353     course, if we're processing a template, there may be no value.  */
12354   type = value ? TREE_TYPE (value) : NULL_TREE;
12355
12356   if (context && context == current_class_type)
12357     /* This enum declaration is local to the class.  We need the full
12358        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12359     decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12360   else
12361     /* It's a global enum, or it's local to a function.  (Note local to
12362        a function could mean local to a class method.  */
12363     decl = build_decl (loc, CONST_DECL, name, type);
12364   
12365   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12366   TREE_CONSTANT (decl) = 1;
12367   TREE_READONLY (decl) = 1;
12368   DECL_INITIAL (decl) = value;
12369
12370   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12371     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12372        on the TYPE_FIELDS list for `S'.  (That's so that you can say
12373        things like `S::i' later.)  */
12374     finish_member_declaration (decl);
12375   else
12376     pushdecl (decl);
12377
12378   /* Add this enumeration constant to the list for this type.  */
12379   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12380 }
12381
12382 /* Look for an enumerator with the given NAME within the enumeration
12383    type ENUMTYPE.  This routine is used primarily for qualified name
12384    lookup into an enumerator in C++0x, e.g.,
12385
12386      enum class Color { Red, Green, Blue };
12387
12388      Color color = Color::Red;
12389
12390    Returns the value corresponding to the enumerator, or
12391    NULL_TREE if no such enumerator was found.  */
12392 tree
12393 lookup_enumerator (tree enumtype, tree name)
12394 {
12395   tree e;
12396   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12397
12398   e = purpose_member (name, TYPE_VALUES (enumtype));
12399   return e? TREE_VALUE (e) : NULL_TREE;
12400 }
12401
12402 \f
12403 /* We're defining DECL.  Make sure that its type is OK.  */
12404
12405 static void
12406 check_function_type (tree decl, tree current_function_parms)
12407 {
12408   tree fntype = TREE_TYPE (decl);
12409   tree return_type = complete_type (TREE_TYPE (fntype));
12410
12411   /* In a function definition, arg types must be complete.  */
12412   require_complete_types_for_parms (current_function_parms);
12413
12414   if (dependent_type_p (return_type))
12415     return;
12416   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12417       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12418     {
12419       tree args = TYPE_ARG_TYPES (fntype);
12420
12421       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12422         error ("return type %q#T is incomplete", return_type);
12423       else
12424         error ("return type has Java class type %q#T", return_type);
12425
12426       /* Make it return void instead.  */
12427       if (TREE_CODE (fntype) == METHOD_TYPE)
12428         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12429                                              void_type_node,
12430                                              TREE_CHAIN (args));
12431       else
12432         fntype = build_function_type (void_type_node, args);
12433       fntype
12434         = build_exception_variant (fntype,
12435                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12436       fntype = (cp_build_type_attribute_variant
12437                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12438       TREE_TYPE (decl) = fntype;
12439     }
12440   else
12441     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12442 }
12443
12444 /* Create the FUNCTION_DECL for a function definition.
12445    DECLSPECS and DECLARATOR are the parts of the declaration;
12446    they describe the function's name and the type it returns,
12447    but twisted together in a fashion that parallels the syntax of C.
12448
12449    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12450    DECLARATOR is really the DECL for the function we are about to
12451    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12452    indicating that the function is an inline defined in-class.
12453
12454    This function creates a binding context for the function body
12455    as well as setting up the FUNCTION_DECL in current_function_decl.
12456
12457    For C++, we must first check whether that datum makes any sense.
12458    For example, "class A local_a(1,2);" means that variable local_a
12459    is an aggregate of type A, which should have a constructor
12460    applied to it with the argument list [1, 2].
12461
12462    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12463    or may be a BLOCK if the function has been defined previously
12464    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12465    error_mark_node if the function has never been defined, or
12466    a BLOCK if the function has been defined somewhere.  */
12467
12468 void
12469 start_preparsed_function (tree decl1, tree attrs, int flags)
12470 {
12471   tree ctype = NULL_TREE;
12472   tree fntype;
12473   tree restype;
12474   int doing_friend = 0;
12475   cp_binding_level *bl;
12476   tree current_function_parms;
12477   struct c_fileinfo *finfo
12478     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12479   bool honor_interface;
12480
12481   /* Sanity check.  */
12482   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12483   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12484
12485   fntype = TREE_TYPE (decl1);
12486   if (TREE_CODE (fntype) == METHOD_TYPE)
12487     ctype = TYPE_METHOD_BASETYPE (fntype);
12488
12489   /* ISO C++ 11.4/5.  A friend function defined in a class is in
12490      the (lexical) scope of the class in which it is defined.  */
12491   if (!ctype && DECL_FRIEND_P (decl1))
12492     {
12493       ctype = DECL_FRIEND_CONTEXT (decl1);
12494
12495       /* CTYPE could be null here if we're dealing with a template;
12496          for example, `inline friend float foo()' inside a template
12497          will have no CTYPE set.  */
12498       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12499         ctype = NULL_TREE;
12500       else
12501         doing_friend = 1;
12502     }
12503
12504   if (DECL_DECLARED_INLINE_P (decl1)
12505       && lookup_attribute ("noinline", attrs))
12506     warning (0, "inline function %q+D given attribute noinline", decl1);
12507
12508   /* Handle gnu_inline attribute.  */
12509   if (GNU_INLINE_P (decl1))
12510     {
12511       DECL_EXTERNAL (decl1) = 1;
12512       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12513       DECL_INTERFACE_KNOWN (decl1) = 1;
12514       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12515     }
12516
12517   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12518     /* This is a constructor, we must ensure that any default args
12519        introduced by this definition are propagated to the clones
12520        now. The clones are used directly in overload resolution.  */
12521     adjust_clone_args (decl1);
12522
12523   /* Sometimes we don't notice that a function is a static member, and
12524      build a METHOD_TYPE for it.  Fix that up now.  */
12525   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12526                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12527
12528   /* Set up current_class_type, and enter the scope of the class, if
12529      appropriate.  */
12530   if (ctype)
12531     push_nested_class (ctype);
12532   else if (DECL_STATIC_FUNCTION_P (decl1))
12533     push_nested_class (DECL_CONTEXT (decl1));
12534
12535   /* Now that we have entered the scope of the class, we must restore
12536      the bindings for any template parameters surrounding DECL1, if it
12537      is an inline member template.  (Order is important; consider the
12538      case where a template parameter has the same name as a field of
12539      the class.)  It is not until after this point that
12540      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12541   if (flags & SF_INCLASS_INLINE)
12542     maybe_begin_member_template_processing (decl1);
12543
12544   /* Effective C++ rule 15.  */
12545   if (warn_ecpp
12546       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12547       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12548     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12549
12550   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12551      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12552   if (!DECL_INITIAL (decl1))
12553     DECL_INITIAL (decl1) = error_mark_node;
12554
12555   /* This function exists in static storage.
12556      (This does not mean `static' in the C sense!)  */
12557   TREE_STATIC (decl1) = 1;
12558
12559   /* We must call push_template_decl after current_class_type is set
12560      up.  (If we are processing inline definitions after exiting a
12561      class scope, current_class_type will be NULL_TREE until set above
12562      by push_nested_class.)  */
12563   if (processing_template_decl)
12564     {
12565       /* FIXME: Handle error_mark_node more gracefully.  */
12566       tree newdecl1 = push_template_decl (decl1);
12567       if (newdecl1 != error_mark_node)
12568         decl1 = newdecl1;
12569     }
12570
12571   /* We are now in the scope of the function being defined.  */
12572   current_function_decl = decl1;
12573
12574   /* Save the parm names or decls from this function's declarator
12575      where store_parm_decls will find them.  */
12576   current_function_parms = DECL_ARGUMENTS (decl1);
12577
12578   /* Make sure the parameter and return types are reasonable.  When
12579      you declare a function, these types can be incomplete, but they
12580      must be complete when you define the function.  */
12581   check_function_type (decl1, current_function_parms);
12582
12583   /* Build the return declaration for the function.  */
12584   restype = TREE_TYPE (fntype);
12585   if (DECL_RESULT (decl1) == NULL_TREE)
12586     {
12587       tree resdecl;
12588
12589       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12590       DECL_ARTIFICIAL (resdecl) = 1;
12591       DECL_IGNORED_P (resdecl) = 1;
12592       DECL_RESULT (decl1) = resdecl;
12593
12594       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12595     }
12596
12597   /* Let the user know we're compiling this function.  */
12598   announce_function (decl1);
12599
12600   /* Record the decl so that the function name is defined.
12601      If we already have a decl for this name, and it is a FUNCTION_DECL,
12602      use the old decl.  */
12603   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12604     {
12605       /* A specialization is not used to guide overload resolution.  */
12606       if (!DECL_FUNCTION_MEMBER_P (decl1)
12607           && !(DECL_USE_TEMPLATE (decl1) &&
12608                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12609         {
12610           tree olddecl = pushdecl (decl1);
12611
12612           if (olddecl == error_mark_node)
12613             /* If something went wrong when registering the declaration,
12614                use DECL1; we have to have a FUNCTION_DECL to use when
12615                parsing the body of the function.  */
12616             ;
12617           else
12618             {
12619               /* Otherwise, OLDDECL is either a previous declaration
12620                  of the same function or DECL1 itself.  */
12621
12622               if (warn_missing_declarations
12623                   && olddecl == decl1
12624                   && !DECL_MAIN_P (decl1)
12625                   && TREE_PUBLIC (decl1)
12626                   && !DECL_DECLARED_INLINE_P (decl1))
12627                 {
12628                   tree context;
12629
12630                   /* Check whether DECL1 is in an anonymous
12631                      namespace.  */
12632                   for (context = DECL_CONTEXT (decl1);
12633                        context;
12634                        context = DECL_CONTEXT (context))
12635                     {
12636                       if (TREE_CODE (context) == NAMESPACE_DECL
12637                           && DECL_NAME (context) == NULL_TREE)
12638                         break;
12639                     }
12640
12641                   if (context == NULL)
12642                     warning (OPT_Wmissing_declarations,
12643                              "no previous declaration for %q+D", decl1);
12644                 }
12645
12646               decl1 = olddecl;
12647             }
12648         }
12649       else
12650         {
12651           /* We need to set the DECL_CONTEXT.  */
12652           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12653             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12654         }
12655       fntype = TREE_TYPE (decl1);
12656
12657       /* If #pragma weak applies, mark the decl appropriately now.
12658          The pragma only applies to global functions.  Because
12659          determining whether or not the #pragma applies involves
12660          computing the mangled name for the declaration, we cannot
12661          apply the pragma until after we have merged this declaration
12662          with any previous declarations; if the original declaration
12663          has a linkage specification, that specification applies to
12664          the definition as well, and may affect the mangled name.  */
12665       if (DECL_FILE_SCOPE_P (decl1))
12666         maybe_apply_pragma_weak (decl1);
12667     }
12668
12669   /* Reset this in case the call to pushdecl changed it.  */
12670   current_function_decl = decl1;
12671
12672   gcc_assert (DECL_INITIAL (decl1));
12673
12674   /* This function may already have been parsed, in which case just
12675      return; our caller will skip over the body without parsing.  */
12676   if (DECL_INITIAL (decl1) != error_mark_node)
12677     return;
12678
12679   /* Initialize RTL machinery.  We cannot do this until
12680      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12681      even when processing a template; this is how we get
12682      CFUN set up, and our per-function variables initialized.
12683      FIXME factor out the non-RTL stuff.  */
12684   bl = current_binding_level;
12685   allocate_struct_function (decl1, processing_template_decl);
12686
12687   /* Initialize the language data structures.  Whenever we start
12688      a new function, we destroy temporaries in the usual way.  */
12689   cfun->language = ggc_alloc_cleared_language_function ();
12690   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12691   current_binding_level = bl;
12692
12693   /* Start the statement-tree, start the tree now.  */
12694   DECL_SAVED_TREE (decl1) = push_stmt_list ();
12695
12696   /* If we are (erroneously) defining a function that we have already
12697      defined before, wipe out what we knew before.  */
12698   if (!DECL_PENDING_INLINE_P (decl1))
12699     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12700
12701   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12702     {
12703       /* We know that this was set up by `grokclassfn'.  We do not
12704          wait until `store_parm_decls', since evil parse errors may
12705          never get us to that point.  Here we keep the consistency
12706          between `current_class_type' and `current_class_ptr'.  */
12707       tree t = DECL_ARGUMENTS (decl1);
12708
12709       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12710       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12711
12712       cp_function_chain->x_current_class_ref
12713         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12714       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
12715       cp_function_chain->x_current_class_ptr = t;
12716
12717       /* Constructors and destructors need to know whether they're "in
12718          charge" of initializing virtual base classes.  */
12719       t = DECL_CHAIN (t);
12720       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12721         {
12722           current_in_charge_parm = t;
12723           t = DECL_CHAIN (t);
12724         }
12725       if (DECL_HAS_VTT_PARM_P (decl1))
12726         {
12727           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12728           current_vtt_parm = t;
12729         }
12730     }
12731
12732   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12733                      /* Implicitly-defined methods (like the
12734                         destructor for a class in which no destructor
12735                         is explicitly declared) must not be defined
12736                         until their definition is needed.  So, we
12737                         ignore interface specifications for
12738                         compiler-generated functions.  */
12739                      && !DECL_ARTIFICIAL (decl1));
12740
12741   if (processing_template_decl)
12742     /* Don't mess with interface flags.  */;
12743   else if (DECL_INTERFACE_KNOWN (decl1))
12744     {
12745       tree ctx = decl_function_context (decl1);
12746
12747       if (DECL_NOT_REALLY_EXTERN (decl1))
12748         DECL_EXTERNAL (decl1) = 0;
12749
12750       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12751           && TREE_PUBLIC (ctx))
12752         /* This is a function in a local class in an extern inline
12753            function.  */
12754         comdat_linkage (decl1);
12755     }
12756   /* If this function belongs to an interface, it is public.
12757      If it belongs to someone else's interface, it is also external.
12758      This only affects inlines and template instantiations.  */
12759   else if (!finfo->interface_unknown && honor_interface)
12760     {
12761       if (DECL_DECLARED_INLINE_P (decl1)
12762           || DECL_TEMPLATE_INSTANTIATION (decl1))
12763         {
12764           DECL_EXTERNAL (decl1)
12765             = (finfo->interface_only
12766                || (DECL_DECLARED_INLINE_P (decl1)
12767                    && ! flag_implement_inlines
12768                    && !DECL_VINDEX (decl1)));
12769
12770           /* For WIN32 we also want to put these in linkonce sections.  */
12771           maybe_make_one_only (decl1);
12772         }
12773       else
12774         DECL_EXTERNAL (decl1) = 0;
12775       DECL_INTERFACE_KNOWN (decl1) = 1;
12776       /* If this function is in an interface implemented in this file,
12777          make sure that the back end knows to emit this function
12778          here.  */
12779       if (!DECL_EXTERNAL (decl1))
12780         mark_needed (decl1);
12781     }
12782   else if (finfo->interface_unknown && finfo->interface_only
12783            && honor_interface)
12784     {
12785       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12786          interface, we will have both finfo->interface_unknown and
12787          finfo->interface_only set.  In that case, we don't want to
12788          use the normal heuristics because someone will supply a
12789          #pragma implementation elsewhere, and deducing it here would
12790          produce a conflict.  */
12791       comdat_linkage (decl1);
12792       DECL_EXTERNAL (decl1) = 0;
12793       DECL_INTERFACE_KNOWN (decl1) = 1;
12794       DECL_DEFER_OUTPUT (decl1) = 1;
12795     }
12796   else
12797     {
12798       /* This is a definition, not a reference.
12799          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12800       if (!GNU_INLINE_P (decl1))
12801         DECL_EXTERNAL (decl1) = 0;
12802
12803       if ((DECL_DECLARED_INLINE_P (decl1)
12804            || DECL_TEMPLATE_INSTANTIATION (decl1))
12805           && ! DECL_INTERFACE_KNOWN (decl1))
12806         DECL_DEFER_OUTPUT (decl1) = 1;
12807       else
12808         DECL_INTERFACE_KNOWN (decl1) = 1;
12809     }
12810
12811   /* Determine the ELF visibility attribute for the function.  We must not
12812      do this before calling "pushdecl", as we must allow "duplicate_decls"
12813      to merge any attributes appropriately.  We also need to wait until
12814      linkage is set.  */
12815   if (!DECL_CLONED_FUNCTION_P (decl1))
12816     determine_visibility (decl1);
12817
12818   begin_scope (sk_function_parms, decl1);
12819
12820   ++function_depth;
12821
12822   if (DECL_DESTRUCTOR_P (decl1)
12823       || (DECL_CONSTRUCTOR_P (decl1)
12824           && targetm.cxx.cdtor_returns_this ()))
12825     {
12826       cdtor_label = build_decl (input_location, 
12827                                 LABEL_DECL, NULL_TREE, NULL_TREE);
12828       DECL_CONTEXT (cdtor_label) = current_function_decl;
12829     }
12830
12831   start_fname_decls ();
12832
12833   store_parm_decls (current_function_parms);
12834 }
12835
12836
12837 /* Like start_preparsed_function, except that instead of a
12838    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12839
12840    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12841    (it defines a datum instead), we return 0, which tells
12842    yyparse to report a parse error.  */
12843
12844 int
12845 start_function (cp_decl_specifier_seq *declspecs,
12846                 const cp_declarator *declarator,
12847                 tree attrs)
12848 {
12849   tree decl1;
12850
12851   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12852   if (decl1 == error_mark_node)
12853     return 0;
12854   /* If the declarator is not suitable for a function definition,
12855      cause a syntax error.  */
12856   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12857     {
12858       error ("invalid function declaration");
12859       return 0;
12860     }
12861
12862   if (DECL_MAIN_P (decl1))
12863     /* main must return int.  grokfndecl should have corrected it
12864        (and issued a diagnostic) if the user got it wrong.  */
12865     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12866                              integer_type_node));
12867
12868   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12869
12870   return 1;
12871 }
12872 \f
12873 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12874    FN.  */
12875
12876 static bool
12877 use_eh_spec_block (tree fn)
12878 {
12879   return (flag_exceptions && flag_enforce_eh_specs
12880           && !processing_template_decl
12881           && !type_throw_all_p (TREE_TYPE (fn))
12882           /* We insert the EH_SPEC_BLOCK only in the original
12883              function; then, it is copied automatically to the
12884              clones.  */
12885           && !DECL_CLONED_FUNCTION_P (fn)
12886           /* Implicitly-generated constructors and destructors have
12887              exception specifications.  However, those specifications
12888              are the union of the possible exceptions specified by the
12889              constructors/destructors for bases and members, so no
12890              unallowed exception will ever reach this function.  By
12891              not creating the EH_SPEC_BLOCK we save a little memory,
12892              and we avoid spurious warnings about unreachable
12893              code.  */
12894           && !DECL_DEFAULTED_FN (fn));
12895 }
12896
12897 /* Store the parameter declarations into the current function declaration.
12898    This is called after parsing the parameter declarations, before
12899    digesting the body of the function.
12900
12901    Also install to binding contour return value identifier, if any.  */
12902
12903 static void
12904 store_parm_decls (tree current_function_parms)
12905 {
12906   tree fndecl = current_function_decl;
12907   tree parm;
12908
12909   /* This is a chain of any other decls that came in among the parm
12910      declarations.  If a parm is declared with  enum {foo, bar} x;
12911      then CONST_DECLs for foo and bar are put here.  */
12912   tree nonparms = NULL_TREE;
12913
12914   if (current_function_parms)
12915     {
12916       /* This case is when the function was defined with an ANSI prototype.
12917          The parms already have decls, so we need not do anything here
12918          except record them as in effect
12919          and complain if any redundant old-style parm decls were written.  */
12920
12921       tree specparms = current_function_parms;
12922       tree next;
12923
12924       /* Must clear this because it might contain TYPE_DECLs declared
12925              at class level.  */
12926       current_binding_level->names = NULL;
12927
12928       /* If we're doing semantic analysis, then we'll call pushdecl
12929              for each of these.  We must do them in reverse order so that
12930              they end in the correct forward order.  */
12931       specparms = nreverse (specparms);
12932
12933       for (parm = specparms; parm; parm = next)
12934         {
12935           next = DECL_CHAIN (parm);
12936           if (TREE_CODE (parm) == PARM_DECL)
12937             {
12938               if (DECL_NAME (parm) == NULL_TREE
12939                   || TREE_CODE (parm) != VOID_TYPE)
12940                 pushdecl (parm);
12941               else
12942                 error ("parameter %qD declared void", parm);
12943             }
12944           else
12945             {
12946               /* If we find an enum constant or a type tag,
12947                  put it aside for the moment.  */
12948               TREE_CHAIN (parm) = NULL_TREE;
12949               nonparms = chainon (nonparms, parm);
12950             }
12951         }
12952
12953       /* Get the decls in their original chain order and record in the
12954          function.  This is all and only the PARM_DECLs that were
12955          pushed into scope by the loop above.  */
12956       DECL_ARGUMENTS (fndecl) = getdecls ();
12957     }
12958   else
12959     DECL_ARGUMENTS (fndecl) = NULL_TREE;
12960
12961   /* Now store the final chain of decls for the arguments
12962      as the decl-chain of the current lexical scope.
12963      Put the enumerators in as well, at the front so that
12964      DECL_ARGUMENTS is not modified.  */
12965   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12966
12967   if (use_eh_spec_block (current_function_decl))
12968     current_eh_spec_block = begin_eh_spec_block ();
12969 }
12970
12971 \f
12972 /* We have finished doing semantic analysis on DECL, but have not yet
12973    generated RTL for its body.  Save away our current state, so that
12974    when we want to generate RTL later we know what to do.  */
12975
12976 static void
12977 save_function_data (tree decl)
12978 {
12979   struct language_function *f;
12980
12981   /* Save the language-specific per-function data so that we can
12982      get it back when we really expand this function.  */
12983   gcc_assert (!DECL_PENDING_INLINE_P (decl));
12984
12985   /* Make a copy.  */
12986   f = ggc_alloc_language_function ();
12987   memcpy (f, cp_function_chain, sizeof (struct language_function));
12988   DECL_SAVED_FUNCTION_DATA (decl) = f;
12989
12990   /* Clear out the bits we don't need.  */
12991   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
12992   f->bindings = NULL;
12993   f->x_local_names = NULL;
12994 }
12995
12996
12997 /* Set the return value of the constructor (if present).  */
12998
12999 static void
13000 finish_constructor_body (void)
13001 {
13002   tree val;
13003   tree exprstmt;
13004
13005   if (targetm.cxx.cdtor_returns_this ()
13006       && (! TYPE_FOR_JAVA (current_class_type)))
13007     {
13008       /* Any return from a constructor will end up here.  */
13009       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13010
13011       val = DECL_ARGUMENTS (current_function_decl);
13012       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13013                     DECL_RESULT (current_function_decl), val);
13014       /* Return the address of the object.  */
13015       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13016       add_stmt (exprstmt);
13017     }
13018 }
13019
13020 /* Do all the processing for the beginning of a destructor; set up the
13021    vtable pointers and cleanups for bases and members.  */
13022
13023 static void
13024 begin_destructor_body (void)
13025 {
13026   tree compound_stmt;
13027
13028   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13029      issued an error message.  We still want to try to process the
13030      body of the function, but initialize_vtbl_ptrs will crash if
13031      TYPE_BINFO is NULL.  */
13032   if (COMPLETE_TYPE_P (current_class_type))
13033     {
13034       compound_stmt = begin_compound_stmt (0);
13035       /* Make all virtual function table pointers in non-virtual base
13036          classes point to CURRENT_CLASS_TYPE's virtual function
13037          tables.  */
13038       initialize_vtbl_ptrs (current_class_ptr);
13039       finish_compound_stmt (compound_stmt);
13040
13041       /* And insert cleanups for our bases and members so that they
13042          will be properly destroyed if we throw.  */
13043       push_base_cleanups ();
13044     }
13045 }
13046
13047 /* At the end of every destructor we generate code to delete the object if
13048    necessary.  Do that now.  */
13049
13050 static void
13051 finish_destructor_body (void)
13052 {
13053   tree exprstmt;
13054
13055   /* Any return from a destructor will end up here; that way all base
13056      and member cleanups will be run when the function returns.  */
13057   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13058
13059   /* In a virtual destructor, we must call delete.  */
13060   if (DECL_VIRTUAL_P (current_function_decl))
13061     {
13062       tree if_stmt;
13063       tree virtual_size = cxx_sizeof (current_class_type);
13064
13065       /* [class.dtor]
13066
13067       At the point of definition of a virtual destructor (including
13068       an implicit definition), non-placement operator delete shall
13069       be looked up in the scope of the destructor's class and if
13070       found shall be accessible and unambiguous.  */
13071       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13072                                       virtual_size,
13073                                       /*global_p=*/false,
13074                                       /*placement=*/NULL_TREE,
13075                                       /*alloc_fn=*/NULL_TREE);
13076
13077       if_stmt = begin_if_stmt ();
13078       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13079                                    current_in_charge_parm,
13080                                    integer_one_node),
13081                            if_stmt);
13082       finish_expr_stmt (exprstmt);
13083       finish_then_clause (if_stmt);
13084       finish_if_stmt (if_stmt);
13085     }
13086
13087   if (targetm.cxx.cdtor_returns_this ())
13088     {
13089       tree val;
13090
13091       val = DECL_ARGUMENTS (current_function_decl);
13092       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13093                     DECL_RESULT (current_function_decl), val);
13094       /* Return the address of the object.  */
13095       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13096       add_stmt (exprstmt);
13097     }
13098 }
13099
13100 /* Do the necessary processing for the beginning of a function body, which
13101    in this case includes member-initializers, but not the catch clauses of
13102    a function-try-block.  Currently, this means opening a binding level
13103    for the member-initializers (in a ctor), member cleanups (in a dtor),
13104    and capture proxies (in a lambda operator()).  */
13105
13106 tree
13107 begin_function_body (void)
13108 {
13109   tree stmt;
13110
13111   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13112     return NULL_TREE;
13113
13114   if (processing_template_decl)
13115     /* Do nothing now.  */;
13116   else
13117     /* Always keep the BLOCK node associated with the outermost pair of
13118        curly braces of a function.  These are needed for correct
13119        operation of dwarfout.c.  */
13120     keep_next_level (true);
13121
13122   stmt = begin_compound_stmt (BCS_FN_BODY);
13123
13124   if (processing_template_decl)
13125     /* Do nothing now.  */;
13126   else if (DECL_DESTRUCTOR_P (current_function_decl))
13127     begin_destructor_body ();
13128
13129   return stmt;
13130 }
13131
13132 /* Do the processing for the end of a function body.  Currently, this means
13133    closing out the cleanups for fully-constructed bases and members, and in
13134    the case of the destructor, deleting the object if desired.  Again, this
13135    is only meaningful for [cd]tors, since they are the only functions where
13136    there is a significant distinction between the main body and any
13137    function catch clauses.  Handling, say, main() return semantics here
13138    would be wrong, as flowing off the end of a function catch clause for
13139    main() would also need to return 0.  */
13140
13141 void
13142 finish_function_body (tree compstmt)
13143 {
13144   if (compstmt == NULL_TREE)
13145     return;
13146
13147   /* Close the block.  */
13148   finish_compound_stmt (compstmt);
13149
13150   if (processing_template_decl)
13151     /* Do nothing now.  */;
13152   else if (DECL_CONSTRUCTOR_P (current_function_decl))
13153     finish_constructor_body ();
13154   else if (DECL_DESTRUCTOR_P (current_function_decl))
13155     finish_destructor_body ();
13156 }
13157
13158 /* Given a function, returns the BLOCK corresponding to the outermost level
13159    of curly braces, skipping the artificial block created for constructor
13160    initializers.  */
13161
13162 tree
13163 outer_curly_brace_block (tree fndecl)
13164 {
13165   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13166   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13167     /* Skip the artificial function body block.  */
13168     block = BLOCK_SUBBLOCKS (block);
13169   return block;
13170 }
13171
13172 /* If FNDECL is a class's key method, add the class to the list of
13173    keyed classes that should be emitted.  */
13174
13175 static void
13176 record_key_method_defined (tree fndecl)
13177 {
13178   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13179       && DECL_VIRTUAL_P (fndecl)
13180       && !processing_template_decl)
13181     {
13182       tree fnclass = DECL_CONTEXT (fndecl);
13183       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13184         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13185     }
13186 }
13187
13188 /* Subroutine of finish_function.
13189    Save the body of constexpr functions for possible
13190    future compile time evaluation.  */
13191
13192 static void
13193 maybe_save_function_definition (tree fun)
13194 {
13195   if (!processing_template_decl
13196       && DECL_DECLARED_CONSTEXPR_P (fun)
13197       && !DECL_CLONED_FUNCTION_P (fun))
13198     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13199 }
13200
13201 /* Finish up a function declaration and compile that function
13202    all the way to assembler language output.  The free the storage
13203    for the function definition.
13204
13205    FLAGS is a bitwise or of the following values:
13206      2 - INCLASS_INLINE
13207        We just finished processing the body of an in-class inline
13208        function definition.  (This processing will have taken place
13209        after the class definition is complete.)  */
13210
13211 tree
13212 finish_function (int flags)
13213 {
13214   tree fndecl = current_function_decl;
13215   tree fntype, ctype = NULL_TREE;
13216   int inclass_inline = (flags & 2) != 0;
13217
13218   /* When we get some parse errors, we can end up without a
13219      current_function_decl, so cope.  */
13220   if (fndecl == NULL_TREE)
13221     return error_mark_node;
13222
13223   if (c_dialect_objc ())
13224     objc_finish_function ();
13225
13226   gcc_assert (!defer_mark_used_calls);
13227   defer_mark_used_calls = true;
13228
13229   record_key_method_defined (fndecl);
13230
13231   fntype = TREE_TYPE (fndecl);
13232
13233   /*  TREE_READONLY (fndecl) = 1;
13234       This caused &foo to be of type ptr-to-const-function
13235       which then got a warning when stored in a ptr-to-function variable.  */
13236
13237   gcc_assert (building_stmt_list_p ());
13238   /* The current function is being defined, so its DECL_INITIAL should
13239      be set, and unless there's a multiple definition, it should be
13240      error_mark_node.  */
13241   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13242
13243   /* For a cloned function, we've already got all the code we need;
13244      there's no need to add any extra bits.  */
13245   if (!DECL_CLONED_FUNCTION_P (fndecl))
13246     {
13247       if (DECL_MAIN_P (current_function_decl))
13248         {
13249           /* Make it so that `main' always returns 0 by default (or
13250              1 for VMS).  */
13251 #if VMS_TARGET
13252           finish_return_stmt (integer_one_node);
13253 #else
13254           finish_return_stmt (integer_zero_node);
13255 #endif
13256         }
13257
13258       if (use_eh_spec_block (current_function_decl))
13259         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13260                               (TREE_TYPE (current_function_decl)),
13261                               current_eh_spec_block);
13262     }
13263
13264   /* If we're saving up tree structure, tie off the function now.  */
13265   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13266
13267   finish_fname_decls ();
13268
13269   /* If this function can't throw any exceptions, remember that.  */
13270   if (!processing_template_decl
13271       && !cp_function_chain->can_throw
13272       && !flag_non_call_exceptions
13273       && !decl_replaceable_p (fndecl))
13274     TREE_NOTHROW (fndecl) = 1;
13275
13276   /* This must come after expand_function_end because cleanups might
13277      have declarations (from inline functions) that need to go into
13278      this function's blocks.  */
13279
13280   /* If the current binding level isn't the outermost binding level
13281      for this function, either there is a bug, or we have experienced
13282      syntax errors and the statement tree is malformed.  */
13283   if (current_binding_level->kind != sk_function_parms)
13284     {
13285       /* Make sure we have already experienced errors.  */
13286       gcc_assert (errorcount);
13287
13288       /* Throw away the broken statement tree and extra binding
13289          levels.  */
13290       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13291
13292       while (current_binding_level->kind != sk_function_parms)
13293         {
13294           if (current_binding_level->kind == sk_class)
13295             pop_nested_class ();
13296           else
13297             poplevel (0, 0, 0);
13298         }
13299     }
13300   poplevel (1, 0, 1);
13301
13302   /* Statements should always be full-expressions at the outermost set
13303      of curly braces for a function.  */
13304   gcc_assert (stmts_are_full_exprs_p ());
13305
13306   /* Save constexpr function body before it gets munged by
13307      the NRV transformation.   */
13308   maybe_save_function_definition (fndecl);
13309
13310   /* Set up the named return value optimization, if we can.  Candidate
13311      variables are selected in check_return_expr.  */
13312   if (current_function_return_value)
13313     {
13314       tree r = current_function_return_value;
13315       tree outer;
13316
13317       if (r != error_mark_node
13318           /* This is only worth doing for fns that return in memory--and
13319              simpler, since we don't have to worry about promoted modes.  */
13320           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13321           /* Only allow this for variables declared in the outer scope of
13322              the function so we know that their lifetime always ends with a
13323              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13324              we were to do this optimization in tree-ssa.  */
13325           && (outer = outer_curly_brace_block (fndecl))
13326           && chain_member (r, BLOCK_VARS (outer)))
13327         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13328
13329       current_function_return_value = NULL_TREE;
13330     }
13331
13332   /* Remember that we were in class scope.  */
13333   if (current_class_name)
13334     ctype = current_class_type;
13335
13336   /* Must mark the RESULT_DECL as being in this function.  */
13337   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13338
13339   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13340      to the FUNCTION_DECL node itself.  */
13341   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13342
13343   /* Save away current state, if appropriate.  */
13344   if (!processing_template_decl)
13345     save_function_data (fndecl);
13346
13347   /* Complain if there's just no return statement.  */
13348   if (warn_return_type
13349       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13350       && !dependent_type_p (TREE_TYPE (fntype))
13351       && !current_function_returns_value && !current_function_returns_null
13352       /* Don't complain if we abort or throw.  */
13353       && !current_function_returns_abnormally
13354       /* Don't complain if we are declared noreturn.  */
13355       && !TREE_THIS_VOLATILE (fndecl)
13356       && !DECL_NAME (DECL_RESULT (fndecl))
13357       && !TREE_NO_WARNING (fndecl)
13358       /* Structor return values (if any) are set by the compiler.  */
13359       && !DECL_CONSTRUCTOR_P (fndecl)
13360       && !DECL_DESTRUCTOR_P (fndecl))
13361     {
13362       warning (OPT_Wreturn_type,
13363                "no return statement in function returning non-void");
13364       TREE_NO_WARNING (fndecl) = 1;
13365     }
13366
13367   /* Store the end of the function, so that we get good line number
13368      info for the epilogue.  */
13369   cfun->function_end_locus = input_location;
13370
13371   /* Complain about parameters that are only set, but never otherwise used.  */
13372   if (warn_unused_but_set_parameter
13373       && !processing_template_decl
13374       && errorcount == unused_but_set_errorcount
13375       && !DECL_CLONED_FUNCTION_P (fndecl))
13376     {
13377       tree decl;
13378
13379       for (decl = DECL_ARGUMENTS (fndecl);
13380            decl;
13381            decl = DECL_CHAIN (decl))
13382         if (TREE_USED (decl)
13383             && TREE_CODE (decl) == PARM_DECL
13384             && !DECL_READ_P (decl)
13385             && DECL_NAME (decl)
13386             && !DECL_ARTIFICIAL (decl)
13387             && !TREE_NO_WARNING (decl)
13388             && !DECL_IN_SYSTEM_HEADER (decl)
13389             && TREE_TYPE (decl) != error_mark_node
13390             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13391             && (!CLASS_TYPE_P (TREE_TYPE (decl))
13392                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13393           warning (OPT_Wunused_but_set_parameter,
13394                    "parameter %q+D set but not used", decl);
13395       unused_but_set_errorcount = errorcount;
13396     }
13397
13398   /* Complain about locally defined typedefs that are not used in this
13399      function.  */
13400   maybe_warn_unused_local_typedefs ();
13401
13402   /* Genericize before inlining.  */
13403   if (!processing_template_decl)
13404     {
13405       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13406       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13407       cp_genericize (fndecl);
13408       /* Clear out the bits we don't need.  */
13409       f->x_current_class_ptr = NULL;
13410       f->x_current_class_ref = NULL;
13411       f->x_eh_spec_block = NULL;
13412       f->x_in_charge_parm = NULL;
13413       f->x_vtt_parm = NULL;
13414       f->x_return_value = NULL;
13415       f->bindings = NULL;
13416       f->extern_decl_map = NULL;
13417     }
13418   /* Clear out the bits we don't need.  */
13419   local_names = NULL;
13420
13421   /* We're leaving the context of this function, so zap cfun.  It's still in
13422      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13423   set_cfun (NULL);
13424   current_function_decl = NULL;
13425
13426   /* If this is an in-class inline definition, we may have to pop the
13427      bindings for the template parameters that we added in
13428      maybe_begin_member_template_processing when start_function was
13429      called.  */
13430   if (inclass_inline)
13431     maybe_end_member_template_processing ();
13432
13433   /* Leave the scope of the class.  */
13434   if (ctype)
13435     pop_nested_class ();
13436
13437   --function_depth;
13438
13439   /* Clean up.  */
13440   current_function_decl = NULL_TREE;
13441
13442   defer_mark_used_calls = false;
13443   if (deferred_mark_used_calls)
13444     {
13445       unsigned int i;
13446       tree decl;
13447
13448       FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13449         mark_used (decl);
13450       VEC_free (tree, gc, deferred_mark_used_calls);
13451     }
13452
13453   return fndecl;
13454 }
13455 \f
13456 /* Create the FUNCTION_DECL for a function definition.
13457    DECLSPECS and DECLARATOR are the parts of the declaration;
13458    they describe the return type and the name of the function,
13459    but twisted together in a fashion that parallels the syntax of C.
13460
13461    This function creates a binding context for the function body
13462    as well as setting up the FUNCTION_DECL in current_function_decl.
13463
13464    Returns a FUNCTION_DECL on success.
13465
13466    If the DECLARATOR is not suitable for a function (it defines a datum
13467    instead), we return 0, which tells yyparse to report a parse error.
13468
13469    May return void_type_node indicating that this method is actually
13470    a friend.  See grokfield for more details.
13471
13472    Came here with a `.pushlevel' .
13473
13474    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13475    CHANGES TO CODE IN `grokfield'.  */
13476
13477 tree
13478 grokmethod (cp_decl_specifier_seq *declspecs,
13479             const cp_declarator *declarator, tree attrlist)
13480 {
13481   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13482                                 &attrlist);
13483
13484   if (fndecl == error_mark_node)
13485     return error_mark_node;
13486
13487   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13488     {
13489       error ("invalid member function declaration");
13490       return error_mark_node;
13491     }
13492
13493   if (attrlist)
13494     cplus_decl_attributes (&fndecl, attrlist, 0);
13495
13496   /* Pass friends other than inline friend functions back.  */
13497   if (fndecl == void_type_node)
13498     return fndecl;
13499
13500   if (DECL_IN_AGGR_P (fndecl))
13501     {
13502       if (DECL_CLASS_SCOPE_P (fndecl))
13503         error ("%qD is already defined in class %qT", fndecl,
13504                DECL_CONTEXT (fndecl));
13505       return error_mark_node;
13506     }
13507
13508   check_template_shadow (fndecl);
13509
13510   DECL_DECLARED_INLINE_P (fndecl) = 1;
13511   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13512
13513   /* We process method specializations in finish_struct_1.  */
13514   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13515     {
13516       fndecl = push_template_decl (fndecl);
13517       if (fndecl == error_mark_node)
13518         return fndecl;
13519     }
13520
13521   if (! DECL_FRIEND_P (fndecl))
13522     {
13523       if (DECL_CHAIN (fndecl))
13524         {
13525           fndecl = copy_node (fndecl);
13526           TREE_CHAIN (fndecl) = NULL_TREE;
13527         }
13528     }
13529
13530   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13531
13532   DECL_IN_AGGR_P (fndecl) = 1;
13533   return fndecl;
13534 }
13535 \f
13536
13537 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13538    we can lay it out later, when and if its type becomes complete.  */
13539
13540 void
13541 maybe_register_incomplete_var (tree var)
13542 {
13543   gcc_assert (TREE_CODE (var) == VAR_DECL);
13544
13545   /* Keep track of variables with incomplete types.  */
13546   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13547       && DECL_EXTERNAL (var))
13548     {
13549       tree inner_type = TREE_TYPE (var);
13550
13551       while (TREE_CODE (inner_type) == ARRAY_TYPE)
13552         inner_type = TREE_TYPE (inner_type);
13553       inner_type = TYPE_MAIN_VARIANT (inner_type);
13554
13555       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13556           /* RTTI TD entries are created while defining the type_info.  */
13557           || (TYPE_LANG_SPECIFIC (inner_type)
13558               && TYPE_BEING_DEFINED (inner_type)))
13559         {
13560           incomplete_var *iv
13561             = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13562           iv->decl = var;
13563           iv->incomplete_type = inner_type;
13564         }
13565     }
13566 }
13567
13568 /* Called when a class type (given by TYPE) is defined.  If there are
13569    any existing VAR_DECLs whose type has been completed by this
13570    declaration, update them now.  */
13571
13572 void
13573 complete_vars (tree type)
13574 {
13575   unsigned ix;
13576   incomplete_var *iv;
13577
13578   for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13579     {
13580       if (same_type_p (type, iv->incomplete_type))
13581         {
13582           tree var = iv->decl;
13583           tree type = TREE_TYPE (var);
13584           /* Complete the type of the variable.  The VAR_DECL itself
13585              will be laid out in expand_expr.  */
13586           complete_type (type);
13587           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13588           /* Remove this entry from the list.  */
13589           VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13590         }
13591       else
13592         ix++;
13593     }
13594
13595   /* Check for pending declarations which may have abstract type.  */
13596   complete_type_check_abstract (type);
13597 }
13598
13599 /* If DECL is of a type which needs a cleanup, build and return an
13600    expression to perform that cleanup here.  Return NULL_TREE if no
13601    cleanup need be done.  */
13602
13603 tree
13604 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13605 {
13606   tree type;
13607   tree attr;
13608   tree cleanup;
13609
13610   /* Assume no cleanup is required.  */
13611   cleanup = NULL_TREE;
13612
13613   if (error_operand_p (decl))
13614     return cleanup;
13615
13616   /* Handle "__attribute__((cleanup))".  We run the cleanup function
13617      before the destructor since the destructor is what actually
13618      terminates the lifetime of the object.  */
13619   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13620   if (attr)
13621     {
13622       tree id;
13623       tree fn;
13624       tree arg;
13625
13626       /* Get the name specified by the user for the cleanup function.  */
13627       id = TREE_VALUE (TREE_VALUE (attr));
13628       /* Look up the name to find the cleanup function to call.  It is
13629          important to use lookup_name here because that is what is
13630          used in c-common.c:handle_cleanup_attribute when performing
13631          initial checks on the attribute.  Note that those checks
13632          include ensuring that the function found is not an overloaded
13633          function, or an object with an overloaded call operator,
13634          etc.; we can rely on the fact that the function found is an
13635          ordinary FUNCTION_DECL.  */
13636       fn = lookup_name (id);
13637       arg = build_address (decl);
13638       mark_used (decl);
13639       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13640       if (cleanup == error_mark_node)
13641         return error_mark_node;
13642     }
13643   /* Handle ordinary C++ destructors.  */
13644   type = TREE_TYPE (decl);
13645   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13646     {
13647       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13648       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13649                          && CLASSTYPE_VBASECLASSES (type));
13650       tree addr;
13651       tree call;
13652
13653       if (TREE_CODE (type) == ARRAY_TYPE)
13654         addr = decl;
13655       else
13656         addr = build_address (decl);
13657
13658       /* Optimize for space over speed here.  */
13659       if (!has_vbases || flag_expensive_optimizations)
13660         flags |= LOOKUP_NONVIRTUAL;
13661
13662       call = build_delete (TREE_TYPE (addr), addr,
13663                            sfk_complete_destructor, flags, 0, complain);
13664       if (call == error_mark_node)
13665         cleanup = error_mark_node;
13666       else if (cleanup)
13667         cleanup = cp_build_compound_expr (cleanup, call, complain);
13668       else
13669         cleanup = call;
13670     }
13671
13672   return cleanup;
13673 }
13674 \f
13675 /* When a stmt has been parsed, this function is called.  */
13676
13677 void
13678 finish_stmt (void)
13679 {
13680 }
13681
13682 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13683    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13684    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13685
13686 tree
13687 static_fn_type (tree memfntype)
13688 {
13689   tree fntype;
13690   tree args;
13691
13692   if (TYPE_PTRMEMFUNC_P (memfntype))
13693     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13694   if (POINTER_TYPE_P (memfntype)
13695       || TREE_CODE (memfntype) == FUNCTION_DECL)
13696     memfntype = TREE_TYPE (memfntype);
13697   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13698     return memfntype;
13699   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13700   args = TYPE_ARG_TYPES (memfntype);
13701   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13702   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13703   fntype = (cp_build_type_attribute_variant
13704             (fntype, TYPE_ATTRIBUTES (memfntype)));
13705   fntype = (build_exception_variant
13706             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13707   return fntype;
13708 }
13709
13710 /* DECL was originally constructed as a non-static member function,
13711    but turned out to be static.  Update it accordingly.  */
13712
13713 void
13714 revert_static_member_fn (tree decl)
13715 {
13716   tree stype = static_fn_type (decl);
13717   cp_cv_quals quals = type_memfn_quals (stype);
13718
13719   if (quals != TYPE_UNQUALIFIED)
13720     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13721
13722   TREE_TYPE (decl) = stype;
13723
13724   if (DECL_ARGUMENTS (decl))
13725     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13726   DECL_STATIC_FUNCTION_P (decl) = 1;
13727 }
13728
13729 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13730    one of the language-independent trees.  */
13731
13732 enum cp_tree_node_structure_enum
13733 cp_tree_node_structure (union lang_tree_node * t)
13734 {
13735   switch (TREE_CODE (&t->generic))
13736     {
13737     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
13738     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
13739     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
13740     case OVERLOAD:              return TS_CP_OVERLOAD;
13741     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
13742     case PTRMEM_CST:            return TS_CP_PTRMEM;
13743     case BASELINK:              return TS_CP_BASELINK;
13744     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
13745     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13746     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
13747     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
13748     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
13749     default:                    return TS_CP_GENERIC;
13750     }
13751 }
13752
13753 /* Build the void_list_node (void_type_node having been created).  */
13754 tree
13755 build_void_list_node (void)
13756 {
13757   tree t = build_tree_list (NULL_TREE, void_type_node);
13758   return t;
13759 }
13760
13761 bool
13762 cp_missing_noreturn_ok_p (tree decl)
13763 {
13764   /* A missing noreturn is ok for the `main' function.  */
13765   return DECL_MAIN_P (decl);
13766 }
13767
13768 /* Return the COMDAT group into which DECL should be placed.  */
13769
13770 tree
13771 cxx_comdat_group (tree decl)
13772 {
13773   tree name;
13774
13775   /* Virtual tables, construction virtual tables, and virtual table
13776      tables all go in a single COMDAT group, named after the primary
13777      virtual table.  */
13778   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13779     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13780   /* For all other DECLs, the COMDAT group is the mangled name of the
13781      declaration itself.  */
13782   else
13783     {
13784       while (DECL_THUNK_P (decl))
13785         {
13786           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13787              into the same section as the target function.  In that case
13788              we must return target's name.  */
13789           tree target = THUNK_TARGET (decl);
13790           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13791               && DECL_SECTION_NAME (target) != NULL
13792               && DECL_ONE_ONLY (target))
13793             decl = target;
13794           else
13795             break;
13796         }
13797       name = DECL_ASSEMBLER_NAME (decl);
13798     }
13799
13800   return name;
13801 }
13802
13803 #include "gt-cp-decl.h"