OSDN Git Service

PR c++/54652
[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, 2012
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, 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, VEC(tree,gc) **);
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_DISCRIMINATOR_SET_P (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   gcc_assert (DECL_P (newdecl));
956
957   if (TREE_CODE (newdecl) == FUNCTION_DECL)
958     {
959       tree f1 = TREE_TYPE (newdecl);
960       tree f2 = TREE_TYPE (olddecl);
961       tree p1 = TYPE_ARG_TYPES (f1);
962       tree p2 = TYPE_ARG_TYPES (f2);
963
964       /* Specializations of different templates are different functions
965          even if they have the same type.  */
966       tree t1 = (DECL_USE_TEMPLATE (newdecl)
967                  ? DECL_TI_TEMPLATE (newdecl)
968                  : NULL_TREE);
969       tree t2 = (DECL_USE_TEMPLATE (olddecl)
970                  ? DECL_TI_TEMPLATE (olddecl)
971                  : NULL_TREE);
972       if (t1 != t2)
973         return 0;
974
975       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
976           && ! (DECL_EXTERN_C_P (newdecl)
977                 && DECL_EXTERN_C_P (olddecl)))
978         return 0;
979
980 #ifdef NO_IMPLICIT_EXTERN_C
981       /* A new declaration doesn't match a built-in one unless it
982          is also extern "C".  */
983       if (DECL_IS_BUILTIN (olddecl)
984           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
985         return 0;
986 #endif
987
988       if (TREE_CODE (f1) != TREE_CODE (f2))
989         return 0;
990
991       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
992         {
993           if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
994               && (DECL_BUILT_IN (olddecl)
995 #ifndef NO_IMPLICIT_EXTERN_C
996                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
997                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
998 #endif
999               ))
1000             {
1001               types_match = self_promoting_args_p (p1);
1002               if (p1 == void_list_node)
1003                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1004             }
1005 #ifndef NO_IMPLICIT_EXTERN_C
1006           else if (!prototype_p (f1)
1007                    && (DECL_EXTERN_C_P (olddecl)
1008                        && DECL_IN_SYSTEM_HEADER (olddecl)
1009                        && !DECL_CLASS_SCOPE_P (olddecl))
1010                    && (DECL_EXTERN_C_P (newdecl)
1011                        && DECL_IN_SYSTEM_HEADER (newdecl)
1012                        && !DECL_CLASS_SCOPE_P (newdecl)))
1013             {
1014               types_match = self_promoting_args_p (p2);
1015               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1016             }
1017 #endif
1018           else
1019             types_match =
1020               compparms (p1, p2)
1021               && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1022                   || comp_type_attributes (TREE_TYPE (newdecl),
1023                                            TREE_TYPE (olddecl)) != 0);
1024         }
1025       else
1026         types_match = 0;
1027     }
1028   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1029     {
1030       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1031           != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1032         return 0;
1033
1034       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1035                                 DECL_TEMPLATE_PARMS (olddecl)))
1036         return 0;
1037
1038       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1039         types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1040                                    TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1041       else
1042         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1043                                    DECL_TEMPLATE_RESULT (newdecl));
1044     }
1045   else
1046     {
1047       /* Need to check scope for variable declaration (VAR_DECL).
1048          For typedef (TYPE_DECL), scope is ignored.  */
1049       if (TREE_CODE (newdecl) == VAR_DECL
1050           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1051           /* [dcl.link]
1052              Two declarations for an object with C language linkage
1053              with the same name (ignoring the namespace that qualify
1054              it) that appear in different namespace scopes refer to
1055              the same object.  */
1056           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1057         return 0;
1058
1059       if (TREE_TYPE (newdecl) == error_mark_node)
1060         types_match = TREE_TYPE (olddecl) == error_mark_node;
1061       else if (TREE_TYPE (olddecl) == NULL_TREE)
1062         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1063       else if (TREE_TYPE (newdecl) == NULL_TREE)
1064         types_match = 0;
1065       else
1066         types_match = comptypes (TREE_TYPE (newdecl),
1067                                  TREE_TYPE (olddecl),
1068                                  COMPARE_REDECLARATION);
1069     }
1070
1071   return types_match;
1072 }
1073
1074 /* If NEWDECL is `static' and an `extern' was seen previously,
1075    warn about it.  OLDDECL is the previous declaration.
1076
1077    Note that this does not apply to the C++ case of declaring
1078    a variable `extern const' and then later `const'.
1079
1080    Don't complain about built-in functions, since they are beyond
1081    the user's control.  */
1082
1083 void
1084 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1085 {
1086   if (TREE_CODE (newdecl) == TYPE_DECL
1087       || TREE_CODE (newdecl) == TEMPLATE_DECL
1088       || TREE_CODE (newdecl) == CONST_DECL
1089       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1090     return;
1091
1092   /* Don't get confused by static member functions; that's a different
1093      use of `static'.  */
1094   if (TREE_CODE (newdecl) == FUNCTION_DECL
1095       && DECL_STATIC_FUNCTION_P (newdecl))
1096     return;
1097
1098   /* If the old declaration was `static', or the new one isn't, then
1099      everything is OK.  */
1100   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1101     return;
1102
1103   /* It's OK to declare a builtin function as `static'.  */
1104   if (TREE_CODE (olddecl) == FUNCTION_DECL
1105       && DECL_ARTIFICIAL (olddecl))
1106     return;
1107
1108   permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1109   permerror (input_location, "previous declaration of %q+D", olddecl);
1110 }
1111
1112 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1113    function templates.  If their exception specifications do not
1114    match, issue a diagnostic.  */
1115
1116 static void
1117 check_redeclaration_exception_specification (tree new_decl,
1118                                              tree old_decl)
1119 {
1120   tree new_type;
1121   tree old_type;
1122   tree new_exceptions;
1123   tree old_exceptions;
1124
1125   new_type = TREE_TYPE (new_decl);
1126   new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1127   old_type = TREE_TYPE (old_decl);
1128   old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1129
1130   /* [except.spec]
1131
1132      If any declaration of a function has an exception-specification,
1133      all declarations, including the definition and an explicit
1134      specialization, of that function shall have an
1135      exception-specification with the same set of type-ids.  */
1136   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1137       && ! DECL_IS_BUILTIN (old_decl)
1138       && flag_exceptions
1139       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1140     {
1141       error ("declaration of %qF has a different exception specifier",
1142              new_decl);
1143       error ("from previous declaration %q+F", old_decl);
1144     }
1145 }
1146
1147 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1148    Otherwise issue diagnostics.  */
1149
1150 static bool
1151 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1152 {
1153   old_decl = STRIP_TEMPLATE (old_decl);
1154   new_decl = STRIP_TEMPLATE (new_decl);
1155   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1156       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1157     return true;
1158   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1159       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1160     return true;
1161   if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1162     {
1163       /* Hide a built-in declaration.  */
1164       DECL_DECLARED_CONSTEXPR_P (old_decl)
1165         = DECL_DECLARED_CONSTEXPR_P (new_decl);
1166       return true;
1167     }
1168   error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1169   error ("from previous declaration %q+D", old_decl);
1170   return false;
1171 }
1172
1173 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1174                           && lookup_attribute ("gnu_inline",            \
1175                                                DECL_ATTRIBUTES (fn)))
1176
1177 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1178    If the redeclaration is invalid, a diagnostic is issued, and the
1179    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1180
1181    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1182    returned.
1183
1184    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1185
1186 tree
1187 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1188 {
1189   unsigned olddecl_uid = DECL_UID (olddecl);
1190   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1191   int new_defines_function = 0;
1192   tree new_template_info;
1193
1194   if (newdecl == olddecl)
1195     return olddecl;
1196
1197   types_match = decls_match (newdecl, olddecl);
1198
1199   /* If either the type of the new decl or the type of the old decl is an
1200      error_mark_node, then that implies that we have already issued an
1201      error (earlier) for some bogus type specification, and in that case,
1202      it is rather pointless to harass the user with yet more error message
1203      about the same declaration, so just pretend the types match here.  */
1204   if (TREE_TYPE (newdecl) == error_mark_node
1205       || TREE_TYPE (olddecl) == error_mark_node)
1206     return error_mark_node;
1207
1208   if (UDLIT_OPER_P (DECL_NAME (newdecl))
1209       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1210     {
1211       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1212           && TREE_CODE (olddecl) != TEMPLATE_DECL
1213           && check_raw_literal_operator (olddecl))
1214         error ("literal operator template %q+D conflicts with"
1215                " raw literal operator %qD", newdecl, olddecl);
1216       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1217                && TREE_CODE (olddecl) == TEMPLATE_DECL
1218                && check_raw_literal_operator (newdecl))
1219         error ("raw literal operator %q+D conflicts with"
1220                " literal operator template %qD", newdecl, olddecl);
1221     }
1222
1223   if (DECL_P (olddecl)
1224       && TREE_CODE (newdecl) == FUNCTION_DECL
1225       && TREE_CODE (olddecl) == FUNCTION_DECL
1226       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1227     {
1228       if (DECL_DECLARED_INLINE_P (newdecl)
1229           && DECL_UNINLINABLE (newdecl)
1230           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1231         /* Already warned elsewhere.  */;
1232       else if (DECL_DECLARED_INLINE_P (olddecl)
1233                && DECL_UNINLINABLE (olddecl)
1234                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1235         /* Already warned.  */;
1236       else if (DECL_DECLARED_INLINE_P (newdecl)
1237                && DECL_UNINLINABLE (olddecl)
1238                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1239         {
1240           warning (OPT_Wattributes, "function %q+D redeclared as inline",
1241                    newdecl);
1242           warning (OPT_Wattributes, "previous declaration of %q+D "
1243                    "with attribute noinline", olddecl);
1244         }
1245       else if (DECL_DECLARED_INLINE_P (olddecl)
1246                && DECL_UNINLINABLE (newdecl)
1247                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1248         {
1249           warning (OPT_Wattributes, "function %q+D redeclared with "
1250                    "attribute noinline", newdecl);
1251           warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1252                    olddecl);
1253         }
1254     }
1255
1256   /* Check for redeclaration and other discrepancies.  */
1257   if (TREE_CODE (olddecl) == FUNCTION_DECL
1258       && DECL_ARTIFICIAL (olddecl))
1259     {
1260       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1261       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1262         {
1263           /* Avoid warnings redeclaring built-ins which have not been
1264              explicitly declared.  */
1265           if (DECL_ANTICIPATED (olddecl))
1266             return NULL_TREE;
1267
1268           /* If you declare a built-in or predefined function name as static,
1269              the old definition is overridden, but optionally warn this was a
1270              bad choice of name.  */
1271           if (! TREE_PUBLIC (newdecl))
1272             {
1273               warning (OPT_Wshadow, 
1274                        DECL_BUILT_IN (olddecl)
1275                        ? G_("shadowing built-in function %q#D")
1276                        : G_("shadowing library function %q#D"), olddecl);
1277               /* Discard the old built-in function.  */
1278               return NULL_TREE;
1279             }
1280           /* If the built-in is not ansi, then programs can override
1281              it even globally without an error.  */
1282           else if (! DECL_BUILT_IN (olddecl))
1283             warning (0, "library function %q#D redeclared as non-function %q#D",
1284                      olddecl, newdecl);
1285           else
1286             {
1287               error ("declaration of %q#D", newdecl);
1288               error ("conflicts with built-in declaration %q#D",
1289                      olddecl);
1290             }
1291           return NULL_TREE;
1292         }
1293       else if (!types_match)
1294         {
1295           /* Avoid warnings redeclaring built-ins which have not been
1296              explicitly declared.  */
1297           if (DECL_ANTICIPATED (olddecl))
1298             {
1299               /* Deal with fileptr_type_node.  FILE type is not known
1300                  at the time we create the builtins.  */
1301               tree t1, t2;
1302
1303               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1304                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1305                    t1 || t2;
1306                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1307                 if (!t1 || !t2)
1308                   break;
1309                 else if (TREE_VALUE (t2) == fileptr_type_node)
1310                   {
1311                     tree t = TREE_VALUE (t1);
1312
1313                     if (TREE_CODE (t) == POINTER_TYPE
1314                         && TYPE_NAME (TREE_TYPE (t))
1315                         && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1316                            == get_identifier ("FILE")
1317                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1318                       {
1319                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1320
1321                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1322                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1323                         types_match = decls_match (newdecl, olddecl);
1324                         if (types_match)
1325                           return duplicate_decls (newdecl, olddecl,
1326                                                   newdecl_is_friend);
1327                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1328                       }
1329                   }
1330                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1331                   break;
1332             }
1333           else if ((DECL_EXTERN_C_P (newdecl)
1334                     && DECL_EXTERN_C_P (olddecl))
1335                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1336                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1337             {
1338               /* A near match; override the builtin.  */
1339
1340               if (TREE_PUBLIC (newdecl))
1341                 {
1342                   warning (0, "new declaration %q#D", newdecl);
1343                   warning (0, "ambiguates built-in declaration %q#D",
1344                            olddecl);
1345                 }
1346               else
1347                 warning (OPT_Wshadow, 
1348                          DECL_BUILT_IN (olddecl)
1349                          ? G_("shadowing built-in function %q#D")
1350                          : G_("shadowing library function %q#D"), olddecl);
1351             }
1352           else
1353             /* Discard the old built-in function.  */
1354             return NULL_TREE;
1355
1356           /* Replace the old RTL to avoid problems with inlining.  */
1357           COPY_DECL_RTL (newdecl, olddecl);
1358         }
1359       /* Even if the types match, prefer the new declarations type for
1360          built-ins which have not been explicitly declared, for
1361          exception lists, etc...  */
1362       else if (DECL_IS_BUILTIN (olddecl))
1363         {
1364           tree type = TREE_TYPE (newdecl);
1365           tree attribs = (*targetm.merge_type_attributes)
1366             (TREE_TYPE (olddecl), type);
1367
1368           type = cp_build_type_attribute_variant (type, attribs);
1369           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1370         }
1371
1372       /* If a function is explicitly declared "throw ()", propagate that to
1373          the corresponding builtin.  */
1374       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1375           && DECL_ANTICIPATED (olddecl)
1376           && TREE_NOTHROW (newdecl)
1377           && !TREE_NOTHROW (olddecl))
1378         {
1379           enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1380           tree tmpdecl = builtin_decl_explicit (fncode);
1381           if (tmpdecl && tmpdecl != olddecl && types_match)
1382             TREE_NOTHROW (tmpdecl)  = 1;
1383         }
1384
1385       /* Whether or not the builtin can throw exceptions has no
1386          bearing on this declarator.  */
1387       TREE_NOTHROW (olddecl) = 0;
1388
1389       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1390         {
1391           /* If a builtin function is redeclared as `static', merge
1392              the declarations, but make the original one static.  */
1393           DECL_THIS_STATIC (olddecl) = 1;
1394           TREE_PUBLIC (olddecl) = 0;
1395
1396           /* Make the old declaration consistent with the new one so
1397              that all remnants of the builtin-ness of this function
1398              will be banished.  */
1399           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1400           COPY_DECL_RTL (newdecl, olddecl);
1401         }
1402     }
1403   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1404     {
1405       /* C++ Standard, 3.3, clause 4:
1406          "[Note: a namespace name or a class template name must be unique
1407          in its declarative region (7.3.2, clause 14). ]"  */
1408       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1409           && TREE_CODE (newdecl) != NAMESPACE_DECL
1410           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1411               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1412           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1413               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1414         {
1415           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1416                && TREE_CODE (newdecl) != TYPE_DECL)
1417               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1418                   && TREE_CODE (olddecl) != TYPE_DECL))
1419             {
1420               /* We do nothing special here, because C++ does such nasty
1421                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1422                  get shadowed, and know that if we need to find a TYPE_DECL
1423                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1424                  slot of the identifier.  */
1425               return NULL_TREE;
1426             }
1427             
1428             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1429                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1430                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1431                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1432               return NULL_TREE;
1433         }
1434
1435       error ("%q#D redeclared as different kind of symbol", newdecl);
1436       if (TREE_CODE (olddecl) == TREE_LIST)
1437         olddecl = TREE_VALUE (olddecl);
1438       error ("previous declaration of %q+#D", olddecl);
1439
1440       return error_mark_node;
1441     }
1442   else if (!types_match)
1443     {
1444       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1445         /* These are certainly not duplicate declarations; they're
1446            from different scopes.  */
1447         return NULL_TREE;
1448
1449       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1450         {
1451           /* The name of a class template may not be declared to refer to
1452              any other template, class, function, object, namespace, value,
1453              or type in the same scope.  */
1454           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1455               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1456             {
1457               error ("declaration of template %q#D", newdecl);
1458               error ("conflicts with previous declaration %q+#D", olddecl);
1459             }
1460           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1461                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1462                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1463                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1464                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1465                                            DECL_TEMPLATE_PARMS (olddecl))
1466                    /* Template functions can be disambiguated by
1467                       return type.  */
1468                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1469                                    TREE_TYPE (TREE_TYPE (olddecl))))
1470             {
1471               error ("new declaration %q#D", newdecl);
1472               error ("ambiguates old declaration %q+#D", olddecl);
1473             }
1474           return NULL_TREE;
1475         }
1476       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1477         {
1478           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1479             {
1480               error ("declaration of C function %q#D conflicts with",
1481                      newdecl);
1482               error ("previous declaration %q+#D here", olddecl);
1483               return NULL_TREE;
1484             }
1485           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1486                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1487             {
1488               error ("new declaration %q#D", newdecl);
1489               error ("ambiguates old declaration %q+#D", olddecl);
1490               return error_mark_node;
1491             }
1492           else
1493             return NULL_TREE;
1494         }
1495       else
1496         {
1497           error ("conflicting declaration %q#D", newdecl);
1498           error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1499           return error_mark_node;
1500         }
1501     }
1502   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1503             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1504                  && (!DECL_TEMPLATE_INFO (newdecl)
1505                      || (DECL_TI_TEMPLATE (newdecl)
1506                          != DECL_TI_TEMPLATE (olddecl))))
1507                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1508                     && (!DECL_TEMPLATE_INFO (olddecl)
1509                         || (DECL_TI_TEMPLATE (olddecl)
1510                             != DECL_TI_TEMPLATE (newdecl))))))
1511     /* It's OK to have a template specialization and a non-template
1512        with the same type, or to have specializations of two
1513        different templates with the same type.  Note that if one is a
1514        specialization, and the other is an instantiation of the same
1515        template, that we do not exit at this point.  That situation
1516        can occur if we instantiate a template class, and then
1517        specialize one of its methods.  This situation is valid, but
1518        the declarations must be merged in the usual way.  */
1519     return NULL_TREE;
1520   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1521            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1522                 && !DECL_USE_TEMPLATE (newdecl))
1523                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1524                    && !DECL_USE_TEMPLATE (olddecl))))
1525     /* One of the declarations is a template instantiation, and the
1526        other is not a template at all.  That's OK.  */
1527     return NULL_TREE;
1528   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1529     {
1530       /* In [namespace.alias] we have:
1531
1532            In a declarative region, a namespace-alias-definition can be
1533            used to redefine a namespace-alias declared in that declarative
1534            region to refer only to the namespace to which it already
1535            refers.
1536
1537          Therefore, if we encounter a second alias directive for the same
1538          alias, we can just ignore the second directive.  */
1539       if (DECL_NAMESPACE_ALIAS (newdecl)
1540           && (DECL_NAMESPACE_ALIAS (newdecl)
1541               == DECL_NAMESPACE_ALIAS (olddecl)))
1542         return olddecl;
1543       /* [namespace.alias]
1544
1545          A namespace-name or namespace-alias shall not be declared as
1546          the name of any other entity in the same declarative region.
1547          A namespace-name defined at global scope shall not be
1548          declared as the name of any other entity in any global scope
1549          of the program.  */
1550       error ("declaration of namespace %qD conflicts with", newdecl);
1551       error ("previous declaration of namespace %q+D here", olddecl);
1552       return error_mark_node;
1553     }
1554   else
1555     {
1556       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1557       if (errmsg)
1558         {
1559           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1560           if (DECL_NAME (olddecl) != NULL_TREE)
1561             error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1562                    ? G_("%q+#D previously defined here")
1563                    : G_("%q+#D previously declared here"), olddecl);
1564           return error_mark_node;
1565         }
1566       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1567                && DECL_INITIAL (olddecl) != NULL_TREE
1568                && !prototype_p (TREE_TYPE (olddecl))
1569                && prototype_p (TREE_TYPE (newdecl)))
1570         {
1571           /* Prototype decl follows defn w/o prototype.  */
1572           warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1573           warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1574                       "follows non-prototype definition here");
1575         }
1576       else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1577                 || TREE_CODE (olddecl) == VAR_DECL)
1578                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1579         {
1580           /* [dcl.link]
1581              If two declarations of the same function or object
1582              specify different linkage-specifications ..., the program
1583              is ill-formed.... Except for functions with C++ linkage,
1584              a function declaration without a linkage specification
1585              shall not precede the first linkage specification for
1586              that function.  A function can be declared without a
1587              linkage specification after an explicit linkage
1588              specification has been seen; the linkage explicitly
1589              specified in the earlier declaration is not affected by
1590              such a function declaration.
1591
1592              DR 563 raises the question why the restrictions on
1593              functions should not also apply to objects.  Older
1594              versions of G++ silently ignore the linkage-specification
1595              for this example:
1596
1597                namespace N { 
1598                  extern int i;
1599                  extern "C" int i;
1600                }
1601
1602              which is clearly wrong.  Therefore, we now treat objects
1603              like functions.  */
1604           if (current_lang_depth () == 0)
1605             {
1606               /* There is no explicit linkage-specification, so we use
1607                  the linkage from the previous declaration.  */
1608               if (!DECL_LANG_SPECIFIC (newdecl))
1609                 retrofit_lang_decl (newdecl);
1610               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1611             }
1612           else
1613             {
1614               error ("previous declaration of %q+#D with %qL linkage",
1615                      olddecl, DECL_LANGUAGE (olddecl));
1616               error ("conflicts with new declaration with %qL linkage",
1617                      DECL_LANGUAGE (newdecl));
1618             }
1619         }
1620
1621       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1622         ;
1623       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1624         {
1625           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1626           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1627           int i = 1;
1628
1629           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1630             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1631
1632           for (; t1 && t1 != void_list_node;
1633                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1634             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1635               {
1636                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1637                                            TREE_PURPOSE (t2)))
1638                   {
1639                     permerror (input_location, "default argument given for parameter %d of %q#D",
1640                                i, newdecl);
1641                     permerror (input_location, "after previous specification in %q+#D", olddecl);
1642                   }
1643                 else
1644                   {
1645                     error ("default argument given for parameter %d of %q#D",
1646                            i, newdecl);
1647                     error ("after previous specification in %q+#D",
1648                                  olddecl);
1649                   }
1650               }
1651         }
1652     }
1653
1654   /* Do not merge an implicit typedef with an explicit one.  In:
1655
1656        class A;
1657        ...
1658        typedef class A A __attribute__ ((foo));
1659
1660      the attribute should apply only to the typedef.  */
1661   if (TREE_CODE (olddecl) == TYPE_DECL
1662       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1663           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1664     return NULL_TREE;
1665
1666   /* If new decl is `static' and an `extern' was seen previously,
1667      warn about it.  */
1668   warn_extern_redeclared_static (newdecl, olddecl);
1669
1670   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1671     return error_mark_node;
1672
1673   /* We have committed to returning 1 at this point.  */
1674   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1675     {
1676       /* Now that functions must hold information normally held
1677          by field decls, there is extra work to do so that
1678          declaration information does not get destroyed during
1679          definition.  */
1680       if (DECL_VINDEX (olddecl))
1681         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1682       if (DECL_CONTEXT (olddecl))
1683         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1684       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1685       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1686       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1687       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1688       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1689       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1690       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1691         SET_OVERLOADED_OPERATOR_CODE
1692           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1693       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1694
1695       /* Optionally warn about more than one declaration for the same
1696          name, but don't warn about a function declaration followed by a
1697          definition.  */
1698       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1699           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1700           /* Don't warn about extern decl followed by definition.  */
1701           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1702           /* Don't warn about friends, let add_friend take care of it.  */
1703           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1704           /* Don't warn about declaration followed by specialization.  */
1705           && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1706               || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1707         {
1708           warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1709           warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1710         }
1711
1712       if (DECL_DELETED_FN (newdecl))
1713         {
1714           error ("deleted definition of %qD", newdecl);
1715           error ("after previous declaration %q+D", olddecl);
1716         }
1717       DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1718     }
1719
1720   /* Deal with C++: must preserve virtual function table size.  */
1721   if (TREE_CODE (olddecl) == TYPE_DECL)
1722     {
1723       tree newtype = TREE_TYPE (newdecl);
1724       tree oldtype = TREE_TYPE (olddecl);
1725
1726       if (newtype != error_mark_node && oldtype != error_mark_node
1727           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1728         CLASSTYPE_FRIEND_CLASSES (newtype)
1729           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1730
1731       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1732     }
1733
1734   /* Copy all the DECL_... slots specified in the new decl
1735      except for any that we copy here from the old type.  */
1736   DECL_ATTRIBUTES (newdecl)
1737     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1738
1739   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1740     {
1741       tree old_result;
1742       tree new_result;
1743       old_result = DECL_TEMPLATE_RESULT (olddecl);
1744       new_result = DECL_TEMPLATE_RESULT (newdecl);
1745       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1746       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1747         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1748                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1749
1750       DECL_ATTRIBUTES (old_result)
1751         = (*targetm.merge_decl_attributes) (old_result, new_result);
1752
1753       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1754         {
1755           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1756               && DECL_INITIAL (new_result))
1757             {
1758               if (DECL_INITIAL (old_result))
1759                 DECL_UNINLINABLE (old_result) = 1;
1760               else
1761                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1762               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1763               DECL_NOT_REALLY_EXTERN (old_result)
1764                 = DECL_NOT_REALLY_EXTERN (new_result);
1765               DECL_INTERFACE_KNOWN (old_result)
1766                 = DECL_INTERFACE_KNOWN (new_result);
1767               DECL_DECLARED_INLINE_P (old_result)
1768                 = DECL_DECLARED_INLINE_P (new_result);
1769               DECL_DISREGARD_INLINE_LIMITS (old_result)
1770                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1771
1772             }
1773           else
1774             {
1775               DECL_DECLARED_INLINE_P (old_result)
1776                 |= DECL_DECLARED_INLINE_P (new_result);
1777               DECL_DISREGARD_INLINE_LIMITS (old_result)
1778                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1779               check_redeclaration_exception_specification (newdecl, olddecl);
1780             }
1781         }
1782
1783       /* If the new declaration is a definition, update the file and
1784          line information on the declaration, and also make
1785          the old declaration the same definition.  */
1786       if (DECL_INITIAL (new_result) != NULL_TREE)
1787         {
1788           DECL_SOURCE_LOCATION (olddecl)
1789             = DECL_SOURCE_LOCATION (old_result)
1790             = DECL_SOURCE_LOCATION (newdecl);
1791           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1792           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1793             {
1794               tree parm;
1795               DECL_ARGUMENTS (old_result)
1796                 = DECL_ARGUMENTS (new_result);
1797               for (parm = DECL_ARGUMENTS (old_result); parm;
1798                    parm = DECL_CHAIN (parm))
1799                 DECL_CONTEXT (parm) = old_result;
1800             }
1801         }
1802
1803       return olddecl;
1804     }
1805
1806   if (types_match)
1807     {
1808       /* Automatically handles default parameters.  */
1809       tree oldtype = TREE_TYPE (olddecl);
1810       tree newtype;
1811
1812       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1813         maybe_instantiate_noexcept (olddecl);
1814
1815       /* Merge the data types specified in the two decls.  */
1816       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1817
1818       /* For typedefs use the old type, as the new type's DECL_NAME points
1819          at newdecl, which will be ggc_freed.  */
1820       if (TREE_CODE (newdecl) == TYPE_DECL)
1821         newtype = oldtype;
1822
1823       if (TREE_CODE (newdecl) == VAR_DECL)
1824         {
1825           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1826           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1827           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1828             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1829           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1830             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1831
1832           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1833           if (DECL_LANG_SPECIFIC (olddecl)
1834               && CP_DECL_THREADPRIVATE_P (olddecl))
1835             {
1836               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1837               if (!DECL_LANG_SPECIFIC (newdecl))
1838                 retrofit_lang_decl (newdecl);
1839
1840               DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1841               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1842             }
1843         }
1844
1845       /* Do this after calling `merge_types' so that default
1846          parameters don't confuse us.  */
1847       else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1848         check_redeclaration_exception_specification (newdecl, olddecl);
1849       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1850
1851       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1852         check_default_args (newdecl);
1853
1854       /* Lay the type out, unless already done.  */
1855       if (! same_type_p (newtype, oldtype)
1856           && TREE_TYPE (newdecl) != error_mark_node
1857           && !(processing_template_decl && uses_template_parms (newdecl)))
1858         layout_type (TREE_TYPE (newdecl));
1859
1860       if ((TREE_CODE (newdecl) == VAR_DECL
1861            || TREE_CODE (newdecl) == PARM_DECL
1862            || TREE_CODE (newdecl) == RESULT_DECL
1863            || TREE_CODE (newdecl) == FIELD_DECL
1864            || TREE_CODE (newdecl) == TYPE_DECL)
1865           && !(processing_template_decl && uses_template_parms (newdecl)))
1866         layout_decl (newdecl, 0);
1867
1868       /* Merge the type qualifiers.  */
1869       if (TREE_READONLY (newdecl))
1870         TREE_READONLY (olddecl) = 1;
1871       if (TREE_THIS_VOLATILE (newdecl))
1872         TREE_THIS_VOLATILE (olddecl) = 1;
1873       if (TREE_NOTHROW (newdecl))
1874         TREE_NOTHROW (olddecl) = 1;
1875
1876       /* Merge deprecatedness.  */
1877       if (TREE_DEPRECATED (newdecl))
1878         TREE_DEPRECATED (olddecl) = 1;
1879
1880       /* Preserve function specific target and optimization options */
1881       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1882         {
1883           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1884               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1885             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1886               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1887
1888           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1889               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1890             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1891               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1892         }
1893
1894       /* Merge the initialization information.  */
1895       if (DECL_INITIAL (newdecl) == NULL_TREE
1896           && DECL_INITIAL (olddecl) != NULL_TREE)
1897         {
1898           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1899           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1900           if (TREE_CODE (newdecl) == FUNCTION_DECL)
1901             {
1902               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1903               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1904             }
1905         }
1906
1907       /* Merge the section attribute.
1908          We want to issue an error if the sections conflict but that must be
1909          done later in decl_attributes since we are called before attributes
1910          are assigned.  */
1911       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1912         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1913
1914       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1915         {
1916           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1917             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1918           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1919           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1920           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1921           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1922           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1923           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1924           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1925           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
1926             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1927           /* Keep the old RTL.  */
1928           COPY_DECL_RTL (olddecl, newdecl);
1929         }
1930       else if (TREE_CODE (newdecl) == VAR_DECL
1931                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1932         {
1933           /* Keep the old RTL.  We cannot keep the old RTL if the old
1934              declaration was for an incomplete object and the new
1935              declaration is not since many attributes of the RTL will
1936              change.  */
1937           COPY_DECL_RTL (olddecl, newdecl);
1938         }
1939     }
1940   /* If cannot merge, then use the new type and qualifiers,
1941      and don't preserve the old rtl.  */
1942   else
1943     {
1944       /* Clean out any memory we had of the old declaration.  */
1945       tree oldstatic = value_member (olddecl, static_aggregates);
1946       if (oldstatic)
1947         TREE_VALUE (oldstatic) = error_mark_node;
1948
1949       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1950       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1951       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1952       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1953     }
1954
1955   /* Merge the storage class information.  */
1956   merge_weak (newdecl, olddecl);
1957
1958   if (DECL_ONE_ONLY (olddecl))
1959     DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1960
1961   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1962   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1963   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1964   if (! DECL_EXTERNAL (olddecl))
1965     DECL_EXTERNAL (newdecl) = 0;
1966
1967   new_template_info = NULL_TREE;
1968   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1969     {
1970       bool new_redefines_gnu_inline = false;
1971
1972       if (new_defines_function
1973           && ((DECL_INTERFACE_KNOWN (olddecl)
1974                && TREE_CODE (olddecl) == FUNCTION_DECL)
1975               || (TREE_CODE (olddecl) == TEMPLATE_DECL
1976                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1977                       == FUNCTION_DECL))))
1978         {
1979           tree fn = olddecl;
1980
1981           if (TREE_CODE (fn) == TEMPLATE_DECL)
1982             fn = DECL_TEMPLATE_RESULT (olddecl);
1983
1984           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1985         }
1986
1987       if (!new_redefines_gnu_inline)
1988         {
1989           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1990           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1991           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1992         }
1993       DECL_TEMPLATE_INSTANTIATED (newdecl)
1994         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1995       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1996
1997       /* If the OLDDECL is an instantiation and/or specialization,
1998          then the NEWDECL must be too.  But, it may not yet be marked
1999          as such if the caller has created NEWDECL, but has not yet
2000          figured out that it is a redeclaration.  */
2001       if (!DECL_USE_TEMPLATE (newdecl))
2002         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2003
2004       /* Don't really know how much of the language-specific
2005          values we should copy from old to new.  */
2006       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2007       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2008       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2009         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2010
2011       if (LANG_DECL_HAS_MIN (newdecl))
2012         {
2013           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2014             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2015           if (DECL_TEMPLATE_INFO (newdecl))
2016             new_template_info = DECL_TEMPLATE_INFO (newdecl);
2017           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2018         }
2019       /* Only functions have these fields.  */
2020       if (TREE_CODE (newdecl) == FUNCTION_DECL
2021           || DECL_FUNCTION_TEMPLATE_P (newdecl))
2022         {
2023           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2024           olddecl_friend = DECL_FRIEND_P (olddecl);
2025           hidden_friend = (DECL_ANTICIPATED (olddecl)
2026                            && DECL_HIDDEN_FRIEND_P (olddecl)
2027                            && newdecl_is_friend);
2028           DECL_BEFRIENDING_CLASSES (newdecl)
2029             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2030                        DECL_BEFRIENDING_CLASSES (olddecl));
2031           /* DECL_THUNKS is only valid for virtual functions,
2032              otherwise it is a DECL_FRIEND_CONTEXT.  */
2033           if (DECL_VIRTUAL_P (newdecl))
2034             DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2035         }
2036       /* Only variables have this field.  */
2037       else if (TREE_CODE (newdecl) == VAR_DECL
2038                && VAR_HAD_UNKNOWN_BOUND (olddecl))
2039         SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2040     }
2041
2042   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2043     {
2044       tree parm;
2045
2046       /* Merge parameter attributes. */
2047       tree oldarg, newarg;
2048       for (oldarg = DECL_ARGUMENTS(olddecl), 
2049                newarg = DECL_ARGUMENTS(newdecl);
2050            oldarg && newarg;
2051            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2052           DECL_ATTRIBUTES (newarg)
2053               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2054           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2055       }
2056       
2057       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2058           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2059         {
2060           /* If newdecl is not a specialization, then it is not a
2061              template-related function at all.  And that means that we
2062              should have exited above, returning 0.  */
2063           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2064
2065           if (DECL_ODR_USED (olddecl))
2066             /* From [temp.expl.spec]:
2067
2068                If a template, a member template or the member of a class
2069                template is explicitly specialized then that
2070                specialization shall be declared before the first use of
2071                that specialization that would cause an implicit
2072                instantiation to take place, in every translation unit in
2073                which such a use occurs.  */
2074             error ("explicit specialization of %qD after first use",
2075                       olddecl);
2076
2077           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2078
2079           /* Don't propagate visibility from the template to the
2080              specialization here.  We'll do that in determine_visibility if
2081              appropriate.  */
2082           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2083
2084           /* [temp.expl.spec/14] We don't inline explicit specialization
2085              just because the primary template says so.  */
2086
2087           /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2088              the always_inline attribute.  */
2089           if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2090               && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2091             {
2092               if (DECL_DECLARED_INLINE_P (newdecl))
2093                 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2094               else
2095                 DECL_ATTRIBUTES (newdecl)
2096                   = remove_attribute ("always_inline",
2097                                       DECL_ATTRIBUTES (newdecl));
2098             }
2099         }
2100       else if (new_defines_function && DECL_INITIAL (olddecl))
2101         {
2102           /* Never inline re-defined extern inline functions.
2103              FIXME: this could be better handled by keeping both
2104              function as separate declarations.  */
2105           DECL_UNINLINABLE (newdecl) = 1;
2106         }
2107       else
2108         {
2109           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2110             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2111
2112           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2113
2114           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2115             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2116
2117           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2118             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2119             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2120                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2121         }
2122
2123       /* Preserve abstractness on cloned [cd]tors.  */
2124       DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2125
2126       /* Update newdecl's parms to point at olddecl.  */
2127       for (parm = DECL_ARGUMENTS (newdecl); parm;
2128            parm = DECL_CHAIN (parm))
2129         DECL_CONTEXT (parm) = olddecl;
2130
2131       if (! types_match)
2132         {
2133           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2134           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2135           COPY_DECL_RTL (newdecl, olddecl);
2136         }
2137       if (! types_match || new_defines_function)
2138         {
2139           /* These need to be copied so that the names are available.
2140              Note that if the types do match, we'll preserve inline
2141              info and other bits, but if not, we won't.  */
2142           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2143           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2144         }
2145       if (new_defines_function)
2146         /* If defining a function declared with other language
2147            linkage, use the previously declared language linkage.  */
2148         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2149       else if (types_match)
2150         {
2151           /* If redeclaring a builtin function, and not a definition,
2152              it stays built in.  */
2153           if (DECL_BUILT_IN (olddecl))
2154             {
2155               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2156               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2157               /* If we're keeping the built-in definition, keep the rtl,
2158                  regardless of declaration matches.  */
2159               COPY_DECL_RTL (olddecl, newdecl);
2160               if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2161                 {
2162                   enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2163                   switch (fncode)
2164                     {
2165                       /* If a compatible prototype of these builtin functions
2166                          is seen, assume the runtime implements it with the
2167                          expected semantics.  */
2168                     case BUILT_IN_STPCPY:
2169                       if (builtin_decl_explicit_p (fncode))
2170                         set_builtin_decl_implicit_p (fncode, true);
2171                       break;
2172                     default:
2173                       break;
2174                     }
2175                 }
2176             }
2177
2178           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2179           /* Don't clear out the arguments if we're just redeclaring a
2180              function.  */
2181           if (DECL_ARGUMENTS (olddecl))
2182             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2183         }
2184     }
2185   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2186     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2187
2188   /* Now preserve various other info from the definition.  */
2189   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2190   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2191   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2192   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2193
2194   /* Warn about conflicting visibility specifications.  */
2195   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2196       && DECL_VISIBILITY_SPECIFIED (newdecl)
2197       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2198     {
2199       warning_at (input_location, OPT_Wattributes,
2200                   "%q+D: visibility attribute ignored because it", newdecl);
2201       warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2202                   "conflicts with previous declaration here");
2203     }
2204   /* Choose the declaration which specified visibility.  */
2205   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2206     {
2207       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2208       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2209     }
2210   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2211      so keep this behavior.  */
2212   if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2213     {
2214       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2215       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2216     }
2217   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2218   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2219     {
2220       DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
2221       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2222     }
2223   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2224   if (TREE_CODE (newdecl) == FIELD_DECL)
2225     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2226
2227   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2228      with that from NEWDECL below.  */
2229   if (DECL_LANG_SPECIFIC (olddecl))
2230     {
2231       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2232                   != DECL_LANG_SPECIFIC (newdecl));
2233       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2234     }
2235
2236   /* Merge the USED information.  */
2237   if (TREE_USED (olddecl))
2238     TREE_USED (newdecl) = 1;
2239   else if (TREE_USED (newdecl))
2240     TREE_USED (olddecl) = 1;
2241   if (TREE_CODE (newdecl) == VAR_DECL)
2242     {
2243       if (DECL_READ_P (olddecl))
2244         DECL_READ_P (newdecl) = 1;
2245       else if (DECL_READ_P (newdecl))
2246         DECL_READ_P (olddecl) = 1;
2247     }
2248   if (DECL_PRESERVE_P (olddecl))
2249     DECL_PRESERVE_P (newdecl) = 1;
2250   else if (DECL_PRESERVE_P (newdecl))
2251     DECL_PRESERVE_P (olddecl) = 1;
2252
2253   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2254     {
2255       int function_size;
2256
2257       function_size = sizeof (struct tree_decl_common);
2258
2259       memcpy ((char *) olddecl + sizeof (struct tree_common),
2260               (char *) newdecl + sizeof (struct tree_common),
2261               function_size - sizeof (struct tree_common));
2262
2263       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2264               (char *) newdecl + sizeof (struct tree_decl_common),
2265               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2266       if (new_template_info)
2267         /* If newdecl is a template instantiation, it is possible that
2268            the following sequence of events has occurred:
2269
2270            o A friend function was declared in a class template.  The
2271            class template was instantiated.
2272
2273            o The instantiation of the friend declaration was
2274            recorded on the instantiation list, and is newdecl.
2275
2276            o Later, however, instantiate_class_template called pushdecl
2277            on the newdecl to perform name injection.  But, pushdecl in
2278            turn called duplicate_decls when it discovered that another
2279            declaration of a global function with the same name already
2280            existed.
2281
2282            o Here, in duplicate_decls, we decided to clobber newdecl.
2283
2284            If we're going to do that, we'd better make sure that
2285            olddecl, and not newdecl, is on the list of
2286            instantiations so that if we try to do the instantiation
2287            again we won't get the clobbered declaration.  */
2288         reregister_specialization (newdecl,
2289                                    new_template_info,
2290                                    olddecl);
2291     }
2292   else
2293     {
2294       size_t size = tree_code_size (TREE_CODE (olddecl));
2295       memcpy ((char *) olddecl + sizeof (struct tree_common),
2296               (char *) newdecl + sizeof (struct tree_common),
2297               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2298       switch (TREE_CODE (olddecl))
2299         {
2300         case LABEL_DECL:
2301         case VAR_DECL:
2302         case RESULT_DECL:
2303         case PARM_DECL:
2304         case FIELD_DECL:
2305         case TYPE_DECL:
2306         case CONST_DECL:
2307           {
2308             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2309                     (char *) newdecl + sizeof (struct tree_decl_common),
2310                     size - sizeof (struct tree_decl_common)
2311                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2312           }
2313           break;
2314         default:
2315           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2316                   (char *) newdecl + sizeof (struct tree_decl_common),
2317                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2318                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2319           break;
2320         }
2321     }
2322   DECL_UID (olddecl) = olddecl_uid;
2323   if (olddecl_friend)
2324     DECL_FRIEND_P (olddecl) = 1;
2325   if (hidden_friend)
2326     {
2327       DECL_ANTICIPATED (olddecl) = 1;
2328       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2329     }
2330
2331   /* NEWDECL contains the merged attribute lists.
2332      Update OLDDECL to be the same.  */
2333   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2334
2335   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2336     so that encode_section_info has a chance to look at the new decl
2337     flags and attributes.  */
2338   if (DECL_RTL_SET_P (olddecl)
2339       && (TREE_CODE (olddecl) == FUNCTION_DECL
2340           || (TREE_CODE (olddecl) == VAR_DECL
2341               && TREE_STATIC (olddecl))))
2342     make_decl_rtl (olddecl);
2343
2344   /* The NEWDECL will no longer be needed.  Because every out-of-class
2345      declaration of a member results in a call to duplicate_decls,
2346      freeing these nodes represents in a significant savings.  */
2347   ggc_free (newdecl);
2348
2349   return olddecl;
2350 }
2351 \f
2352 /* Return zero if the declaration NEWDECL is valid
2353    when the declaration OLDDECL (assumed to be for the same name)
2354    has already been seen.
2355    Otherwise return an error message format string with a %s
2356    where the identifier should go.  */
2357
2358 static const char *
2359 redeclaration_error_message (tree newdecl, tree olddecl)
2360 {
2361   if (TREE_CODE (newdecl) == TYPE_DECL)
2362     {
2363       /* Because C++ can put things into name space for free,
2364          constructs like "typedef struct foo { ... } foo"
2365          would look like an erroneous redeclaration.  */
2366       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2367         return NULL;
2368       else
2369         return G_("redefinition of %q#D");
2370     }
2371   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2372     {
2373       /* If this is a pure function, its olddecl will actually be
2374          the original initialization to `0' (which we force to call
2375          abort()).  Don't complain about redefinition in this case.  */
2376       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2377           && DECL_INITIAL (olddecl) == NULL_TREE)
2378         return NULL;
2379
2380       /* If both functions come from different namespaces, this is not
2381          a redeclaration - this is a conflict with a used function.  */
2382       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2383           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2384           && ! decls_match (olddecl, newdecl))
2385         return G_("%qD conflicts with used function");
2386
2387       /* We'll complain about linkage mismatches in
2388          warn_extern_redeclared_static.  */
2389
2390       /* Defining the same name twice is no good.  */
2391       if (DECL_INITIAL (olddecl) != NULL_TREE
2392           && DECL_INITIAL (newdecl) != NULL_TREE)
2393         {
2394           if (DECL_NAME (olddecl) == NULL_TREE)
2395             return G_("%q#D not declared in class");
2396           else if (!GNU_INLINE_P (olddecl)
2397                    || GNU_INLINE_P (newdecl))
2398             return G_("redefinition of %q#D");
2399         }
2400
2401       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2402         {
2403           bool olda = GNU_INLINE_P (olddecl);
2404           bool newa = GNU_INLINE_P (newdecl);
2405
2406           if (olda != newa)
2407             {
2408               if (newa)
2409                 return G_("%q+D redeclared inline with "
2410                           "%<gnu_inline%> attribute");
2411               else
2412                 return G_("%q+D redeclared inline without "
2413                           "%<gnu_inline%> attribute");
2414             }
2415         }
2416
2417       return NULL;
2418     }
2419   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2420     {
2421       tree nt, ot;
2422
2423       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2424         {
2425           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2426               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2427             return G_("redefinition of %q#D");
2428           return NULL;
2429         }
2430
2431       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2432           || (DECL_TEMPLATE_RESULT (newdecl)
2433               == DECL_TEMPLATE_RESULT (olddecl)))
2434         return NULL;
2435
2436       nt = DECL_TEMPLATE_RESULT (newdecl);
2437       if (DECL_TEMPLATE_INFO (nt))
2438         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2439       ot = DECL_TEMPLATE_RESULT (olddecl);
2440       if (DECL_TEMPLATE_INFO (ot))
2441         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2442       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2443           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2444         return G_("redefinition of %q#D");
2445
2446       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2447         {
2448           bool olda = GNU_INLINE_P (ot);
2449           bool newa = GNU_INLINE_P (nt);
2450
2451           if (olda != newa)
2452             {
2453               if (newa)
2454                 return G_("%q+D redeclared inline with "
2455                           "%<gnu_inline%> attribute");
2456               else
2457                 return G_("%q+D redeclared inline without "
2458                           "%<gnu_inline%> attribute");
2459             }
2460         }
2461
2462       /* Core issue #226 (C++0x): 
2463            
2464            If a friend function template declaration specifies a
2465            default template-argument, that declaration shall be a
2466            definition and shall be the only declaration of the
2467            function template in the translation unit.  */
2468       if ((cxx_dialect != cxx98) 
2469           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2470           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2471                                        /*is_primary=*/1, /*is_partial=*/0,
2472                                        /*is_friend_decl=*/2))
2473         return G_("redeclaration of friend %q#D "
2474                   "may not have default template arguments");
2475
2476       return NULL;
2477     }
2478   else if (TREE_CODE (newdecl) == VAR_DECL
2479            && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2480            && (! DECL_LANG_SPECIFIC (olddecl)
2481                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2482                || DECL_THREAD_LOCAL_P (newdecl)))
2483     {
2484       /* Only variables can be thread-local, and all declarations must
2485          agree on this property.  */
2486       if (DECL_THREAD_LOCAL_P (newdecl))
2487         return G_("thread-local declaration of %q#D follows "
2488                   "non-thread-local declaration");
2489       else
2490         return G_("non-thread-local declaration of %q#D follows "
2491                   "thread-local declaration");
2492     }
2493   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2494     {
2495       /* The objects have been declared at namespace scope.  If either
2496          is a member of an anonymous union, then this is an invalid
2497          redeclaration.  For example:
2498
2499            int i;
2500            union { int i; };
2501
2502            is invalid.  */
2503       if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2504           || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2505         return G_("redeclaration of %q#D");
2506       /* If at least one declaration is a reference, there is no
2507          conflict.  For example:
2508
2509            int i = 3;
2510            extern int i;
2511
2512          is valid.  */
2513       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2514         return NULL;
2515       /* Reject two definitions.  */
2516       return G_("redefinition of %q#D");
2517     }
2518   else
2519     {
2520       /* Objects declared with block scope:  */
2521       /* Reject two definitions, and reject a definition
2522          together with an external reference.  */
2523       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2524         return G_("redeclaration of %q#D");
2525       return NULL;
2526     }
2527 }
2528 \f
2529 /* Hash and equality functions for the named_label table.  */
2530
2531 static hashval_t
2532 named_label_entry_hash (const void *data)
2533 {
2534   const struct named_label_entry *ent = (const struct named_label_entry *) data;
2535   return DECL_UID (ent->label_decl);
2536 }
2537
2538 static int
2539 named_label_entry_eq (const void *a, const void *b)
2540 {
2541   const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2542   const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2543   return ent_a->label_decl == ent_b->label_decl;
2544 }
2545
2546 /* Create a new label, named ID.  */
2547
2548 static tree
2549 make_label_decl (tree id, int local_p)
2550 {
2551   struct named_label_entry *ent;
2552   void **slot;
2553   tree decl;
2554
2555   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2556
2557   DECL_CONTEXT (decl) = current_function_decl;
2558   DECL_MODE (decl) = VOIDmode;
2559   C_DECLARED_LABEL_FLAG (decl) = local_p;
2560
2561   /* Say where one reference is to the label, for the sake of the
2562      error if it is not defined.  */
2563   DECL_SOURCE_LOCATION (decl) = input_location;
2564
2565   /* Record the fact that this identifier is bound to this label.  */
2566   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2567
2568   /* Create the label htab for the function on demand.  */
2569   if (!named_labels)
2570     named_labels = htab_create_ggc (13, named_label_entry_hash,
2571                                     named_label_entry_eq, NULL);
2572
2573   /* Record this label on the list of labels used in this function.
2574      We do this before calling make_label_decl so that we get the
2575      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2576   ent = ggc_alloc_cleared_named_label_entry ();
2577   ent->label_decl = decl;
2578
2579   slot = htab_find_slot (named_labels, ent, INSERT);
2580   gcc_assert (*slot == NULL);
2581   *slot = ent;
2582
2583   return decl;
2584 }
2585
2586 /* Look for a label named ID in the current function.  If one cannot
2587    be found, create one.  (We keep track of used, but undefined,
2588    labels, and complain about them at the end of a function.)  */
2589
2590 static tree
2591 lookup_label_1 (tree id)
2592 {
2593   tree decl;
2594
2595   /* You can't use labels at global scope.  */
2596   if (current_function_decl == NULL_TREE)
2597     {
2598       error ("label %qE referenced outside of any function", id);
2599       return NULL_TREE;
2600     }
2601
2602   /* See if we've already got this label.  */
2603   decl = IDENTIFIER_LABEL_VALUE (id);
2604   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2605     return decl;
2606
2607   decl = make_label_decl (id, /*local_p=*/0);
2608   return decl;
2609 }
2610
2611 /* Wrapper for lookup_label_1.  */
2612
2613 tree
2614 lookup_label (tree id)
2615 {
2616   tree ret;
2617   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2618   ret = lookup_label_1 (id);
2619   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2620   return ret;
2621 }
2622
2623 /* Declare a local label named ID.  */
2624
2625 tree
2626 declare_local_label (tree id)
2627 {
2628   tree decl;
2629   cp_label_binding *bind;
2630
2631   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2632      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2633   bind = VEC_safe_push (cp_label_binding, gc,
2634                         current_binding_level->shadowed_labels, NULL);
2635   bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2636
2637   decl = make_label_decl (id, /*local_p=*/1);
2638   bind->label = decl;
2639
2640   return decl;
2641 }
2642
2643 /* Returns nonzero if it is ill-formed to jump past the declaration of
2644    DECL.  Returns 2 if it's also a real problem.  */
2645
2646 static int
2647 decl_jump_unsafe (tree decl)
2648 {
2649   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2650      with automatic storage duration is not in scope to a point where it is
2651      in scope is ill-formed unless the variable has scalar type, class type
2652      with a trivial default constructor and a trivial destructor, a
2653      cv-qualified version of one of these types, or an array of one of the
2654      preceding types and is declared without an initializer (8.5).  */
2655   tree type = TREE_TYPE (decl);
2656
2657   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2658       || type == error_mark_node)
2659     return 0;
2660
2661   type = strip_array_types (type);
2662
2663   if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2664       || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2665     return 2;
2666
2667   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2668     return 1;
2669
2670   return 0;
2671 }
2672
2673 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2674
2675 static void
2676 identify_goto (tree decl, const location_t *locus)
2677 {
2678   if (decl)
2679     permerror (input_location, "jump to label %qD", decl);
2680   else
2681     permerror (input_location, "jump to case label");
2682   if (locus)
2683     permerror (*locus, "  from here");
2684 }
2685
2686 /* Check that a single previously seen jump to a newly defined label
2687    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2688    the jump context; NAMES are the names in scope in LEVEL at the jump
2689    context; LOCUS is the source position of the jump or 0.  Returns
2690    true if all is well.  */
2691
2692 static bool
2693 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
2694                        bool exited_omp, const location_t *locus)
2695 {
2696   cp_binding_level *b;
2697   bool identified = false, saw_eh = false, saw_omp = false;
2698
2699   if (exited_omp)
2700     {
2701       identify_goto (decl, locus);
2702       error ("  exits OpenMP structured block");
2703       identified = saw_omp = true;
2704     }
2705
2706   for (b = current_binding_level; b ; b = b->level_chain)
2707     {
2708       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2709
2710       for (new_decls = b->names; new_decls != old_decls;
2711            new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
2712                         : TREE_CHAIN (new_decls)))
2713         {
2714           int problem = decl_jump_unsafe (new_decls);
2715           if (! problem)
2716             continue;
2717
2718           if (!identified)
2719             {
2720               identify_goto (decl, locus);
2721               identified = true;
2722             }
2723           if (problem > 1)
2724             error ("  crosses initialization of %q+#D", new_decls);
2725           else
2726             permerror (input_location, "  enters scope of %q+#D which has "
2727                        "non-trivial destructor", new_decls);
2728         }
2729
2730       if (b == level)
2731         break;
2732       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2733         {
2734           if (!identified)
2735             {
2736               identify_goto (decl, locus);
2737               identified = true;
2738             }
2739           if (b->kind == sk_try)
2740             error ("  enters try block");
2741           else
2742             error ("  enters catch block");
2743           saw_eh = true;
2744         }
2745       if (b->kind == sk_omp && !saw_omp)
2746         {
2747           if (!identified)
2748             {
2749               identify_goto (decl, locus);
2750               identified = true;
2751             }
2752           error ("  enters OpenMP structured block");
2753           saw_omp = true;
2754         }
2755     }
2756
2757   return !identified;
2758 }
2759
2760 static void
2761 check_previous_goto (tree decl, struct named_label_use_entry *use)
2762 {
2763   check_previous_goto_1 (decl, use->binding_level,
2764                          use->names_in_scope, use->in_omp_scope,
2765                          &use->o_goto_locus);
2766 }
2767
2768 static bool
2769 check_switch_goto (cp_binding_level* level)
2770 {
2771   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2772 }
2773
2774 /* Check that a new jump to a label DECL is OK.  Called by
2775    finish_goto_stmt.  */
2776
2777 void
2778 check_goto (tree decl)
2779 {
2780   struct named_label_entry *ent, dummy;
2781   bool saw_catch = false, identified = false;
2782   tree bad;
2783   unsigned ix;
2784
2785   /* We can't know where a computed goto is jumping.
2786      So we assume that it's OK.  */
2787   if (TREE_CODE (decl) != LABEL_DECL)
2788     return;
2789
2790   /* We didn't record any information about this label when we created it,
2791      and there's not much point since it's trivial to analyze as a return.  */
2792   if (decl == cdtor_label)
2793     return;
2794
2795   dummy.label_decl = decl;
2796   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2797   gcc_assert (ent != NULL);
2798
2799   /* If the label hasn't been defined yet, defer checking.  */
2800   if (! DECL_INITIAL (decl))
2801     {
2802       struct named_label_use_entry *new_use;
2803
2804       /* Don't bother creating another use if the last goto had the
2805          same data, and will therefore create the same set of errors.  */
2806       if (ent->uses
2807           && ent->uses->names_in_scope == current_binding_level->names)
2808         return;
2809
2810       new_use = ggc_alloc_named_label_use_entry ();
2811       new_use->binding_level = current_binding_level;
2812       new_use->names_in_scope = current_binding_level->names;
2813       new_use->o_goto_locus = input_location;
2814       new_use->in_omp_scope = false;
2815
2816       new_use->next = ent->uses;
2817       ent->uses = new_use;
2818       return;
2819     }
2820
2821   if (ent->in_try_scope || ent->in_catch_scope
2822       || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2823     {
2824       permerror (input_location, "jump to label %q+D", decl);
2825       permerror (input_location, "  from here");
2826       identified = true;
2827     }
2828
2829   FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2830     {
2831       int u = decl_jump_unsafe (bad);
2832
2833       if (u > 1 && DECL_ARTIFICIAL (bad))
2834         {
2835           /* Can't skip init of __exception_info.  */
2836           error_at (DECL_SOURCE_LOCATION (bad), "  enters catch block");
2837           saw_catch = true;
2838         }
2839       else if (u > 1)
2840         error ("  skips initialization of %q+#D", bad);
2841       else
2842         permerror (input_location, "  enters scope of %q+#D which has "
2843                    "non-trivial destructor", bad);
2844     }
2845
2846   if (ent->in_try_scope)
2847     error ("  enters try block");
2848   else if (ent->in_catch_scope && !saw_catch)
2849     error ("  enters catch block");
2850
2851   if (ent->in_omp_scope)
2852     error ("  enters OpenMP structured block");
2853   else if (flag_openmp)
2854     {
2855       cp_binding_level *b;
2856       for (b = current_binding_level; b ; b = b->level_chain)
2857         {
2858           if (b == ent->binding_level)
2859             break;
2860           if (b->kind == sk_omp)
2861             {
2862               if (!identified)
2863                 {
2864                   permerror (input_location, "jump to label %q+D", decl);
2865                   permerror (input_location, "  from here");
2866                   identified = true;
2867                 }
2868               error ("  exits OpenMP structured block");
2869               break;
2870             }
2871         }
2872     }
2873 }
2874
2875 /* Check that a return is ok wrt OpenMP structured blocks.
2876    Called by finish_return_stmt.  Returns true if all is well.  */
2877
2878 bool
2879 check_omp_return (void)
2880 {
2881   cp_binding_level *b;
2882   for (b = current_binding_level; b ; b = b->level_chain)
2883     if (b->kind == sk_omp)
2884       {
2885         error ("invalid exit from OpenMP structured block");
2886         return false;
2887       }
2888     else if (b->kind == sk_function_parms)
2889       break;
2890   return true;
2891 }
2892
2893 /* Define a label, specifying the location in the source file.
2894    Return the LABEL_DECL node for the label.  */
2895
2896 static tree
2897 define_label_1 (location_t location, tree name)
2898 {
2899   struct named_label_entry *ent, dummy;
2900   cp_binding_level *p;
2901   tree decl;
2902
2903   decl = lookup_label (name);
2904
2905   dummy.label_decl = decl;
2906   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2907   gcc_assert (ent != NULL);
2908
2909   /* After labels, make any new cleanups in the function go into their
2910      own new (temporary) binding contour.  */
2911   for (p = current_binding_level;
2912        p->kind != sk_function_parms;
2913        p = p->level_chain)
2914     p->more_cleanups_ok = 0;
2915
2916   if (name == get_identifier ("wchar_t"))
2917     permerror (input_location, "label named wchar_t");
2918
2919   if (DECL_INITIAL (decl) != NULL_TREE)
2920     {
2921       error ("duplicate label %qD", decl);
2922       return error_mark_node;
2923     }
2924   else
2925     {
2926       struct named_label_use_entry *use;
2927
2928       /* Mark label as having been defined.  */
2929       DECL_INITIAL (decl) = error_mark_node;
2930       /* Say where in the source.  */
2931       DECL_SOURCE_LOCATION (decl) = location;
2932
2933       ent->binding_level = current_binding_level;
2934       ent->names_in_scope = current_binding_level->names;
2935
2936       for (use = ent->uses; use ; use = use->next)
2937         check_previous_goto (decl, use);
2938       ent->uses = NULL;
2939     }
2940
2941   return decl;
2942 }
2943
2944 /* Wrapper for define_label_1.  */
2945
2946 tree
2947 define_label (location_t location, tree name)
2948 {
2949   tree ret;
2950   bool running = timevar_cond_start (TV_NAME_LOOKUP);
2951   ret = define_label_1 (location, name);
2952   timevar_cond_stop (TV_NAME_LOOKUP, running);
2953   return ret;
2954 }
2955
2956
2957 struct cp_switch
2958 {
2959   cp_binding_level *level;
2960   struct cp_switch *next;
2961   /* The SWITCH_STMT being built.  */
2962   tree switch_stmt;
2963   /* A splay-tree mapping the low element of a case range to the high
2964      element, or NULL_TREE if there is no high element.  Used to
2965      determine whether or not a new case label duplicates an old case
2966      label.  We need a tree, rather than simply a hash table, because
2967      of the GNU case range extension.  */
2968   splay_tree cases;
2969 };
2970
2971 /* A stack of the currently active switch statements.  The innermost
2972    switch statement is on the top of the stack.  There is no need to
2973    mark the stack for garbage collection because it is only active
2974    during the processing of the body of a function, and we never
2975    collect at that point.  */
2976
2977 static struct cp_switch *switch_stack;
2978
2979 /* Called right after a switch-statement condition is parsed.
2980    SWITCH_STMT is the switch statement being parsed.  */
2981
2982 void
2983 push_switch (tree switch_stmt)
2984 {
2985   struct cp_switch *p = XNEW (struct cp_switch);
2986   p->level = current_binding_level;
2987   p->next = switch_stack;
2988   p->switch_stmt = switch_stmt;
2989   p->cases = splay_tree_new (case_compare, NULL, NULL);
2990   switch_stack = p;
2991 }
2992
2993 void
2994 pop_switch (void)
2995 {
2996   struct cp_switch *cs = switch_stack;
2997   location_t switch_location;
2998
2999   /* Emit warnings as needed.  */
3000   switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
3001   if (!processing_template_decl)
3002     c_do_switch_warnings (cs->cases, switch_location,
3003                           SWITCH_STMT_TYPE (cs->switch_stmt),
3004                           SWITCH_STMT_COND (cs->switch_stmt));
3005
3006   splay_tree_delete (cs->cases);
3007   switch_stack = switch_stack->next;
3008   free (cs);
3009 }
3010
3011 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3012    condition.  Note that if TYPE and VALUE are already integral we don't
3013    really do the conversion because the language-independent
3014    warning/optimization code will work better that way.  */
3015
3016 static tree
3017 case_conversion (tree type, tree value)
3018 {
3019   if (value == NULL_TREE)
3020     return value;
3021
3022   if (cxx_dialect >= cxx0x
3023       && (SCOPED_ENUM_P (type)
3024           || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3025     {
3026       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3027         type = type_promotes_to (type);
3028       value = perform_implicit_conversion (type, value, tf_warning_or_error);
3029     }
3030   return cxx_constant_value (value);
3031 }
3032
3033 /* Note that we've seen a definition of a case label, and complain if this
3034    is a bad place for one.  */
3035
3036 tree
3037 finish_case_label (location_t loc, tree low_value, tree high_value)
3038 {
3039   tree cond, r;
3040   cp_binding_level *p;
3041   tree type;
3042
3043   if (processing_template_decl)
3044     {
3045       tree label;
3046
3047       /* For templates, just add the case label; we'll do semantic
3048          analysis at instantiation-time.  */
3049       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3050       return add_stmt (build_case_label (low_value, high_value, label));
3051     }
3052
3053   /* Find the condition on which this switch statement depends.  */
3054   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3055   if (cond && TREE_CODE (cond) == TREE_LIST)
3056     cond = TREE_VALUE (cond);
3057
3058   if (!check_switch_goto (switch_stack->level))
3059     return error_mark_node;
3060
3061   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3062
3063   low_value = case_conversion (type, low_value);
3064   high_value = case_conversion (type, high_value);
3065
3066   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3067                         low_value, high_value);
3068
3069   /* After labels, make any new cleanups in the function go into their
3070      own new (temporary) binding contour.  */
3071   for (p = current_binding_level;
3072        p->kind != sk_function_parms;
3073        p = p->level_chain)
3074     p->more_cleanups_ok = 0;
3075
3076   return r;
3077 }
3078 \f
3079 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
3080
3081 static hashval_t
3082 typename_hash (const void* k)
3083 {
3084   hashval_t hash;
3085   const_tree const t = (const_tree) k;
3086
3087   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3088           ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3089
3090   return hash;
3091 }
3092
3093 typedef struct typename_info {
3094   tree scope;
3095   tree name;
3096   tree template_id;
3097   bool enum_p;
3098   bool class_p;
3099 } typename_info;
3100
3101 /* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
3102    really of type `typename_info*'  */
3103
3104 static int
3105 typename_compare (const void * k1, const void * k2)
3106 {
3107   const_tree const t1 = (const_tree) k1;
3108   const typename_info *const t2 = (const typename_info *) k2;
3109
3110   return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3111           && TYPE_CONTEXT (t1) == t2->scope
3112           && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3113           && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3114           && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3115 }
3116
3117 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3118    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3119
3120    Returns the new TYPENAME_TYPE.  */
3121
3122 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3123
3124 static tree
3125 build_typename_type (tree context, tree name, tree fullname,
3126                      enum tag_types tag_type)
3127 {
3128   tree t;
3129   tree d;
3130   typename_info ti;
3131   void **e;
3132   hashval_t hash;
3133
3134   if (typename_htab == NULL)
3135     typename_htab = htab_create_ggc (61, &typename_hash,
3136                                      &typename_compare, NULL);
3137
3138   ti.scope = FROB_CONTEXT (context);
3139   ti.name = name;
3140   ti.template_id = fullname;
3141   ti.enum_p = tag_type == enum_type;
3142   ti.class_p = (tag_type == class_type
3143                 || tag_type == record_type
3144                 || tag_type == union_type);
3145   hash =  (htab_hash_pointer (ti.scope)
3146            ^ htab_hash_pointer (ti.name));
3147
3148   /* See if we already have this type.  */
3149   e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3150   if (*e)
3151     t = (tree) *e;
3152   else
3153     {
3154       /* Build the TYPENAME_TYPE.  */
3155       t = cxx_make_type (TYPENAME_TYPE);
3156       TYPE_CONTEXT (t) = ti.scope;
3157       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3158       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3159       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3160
3161       /* Build the corresponding TYPE_DECL.  */
3162       d = build_decl (input_location, TYPE_DECL, name, t);
3163       TYPE_NAME (TREE_TYPE (d)) = d;
3164       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3165       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3166       DECL_ARTIFICIAL (d) = 1;
3167
3168       /* Store it in the hash table.  */
3169       *e = t;
3170
3171       /* TYPENAME_TYPEs must always be compared structurally, because
3172          they may or may not resolve down to another type depending on
3173          the currently open classes. */
3174       SET_TYPE_STRUCTURAL_EQUALITY (t);
3175     }
3176
3177   return t;
3178 }
3179
3180 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3181    provided to name the type.  Returns an appropriate type, unless an
3182    error occurs, in which case error_mark_node is returned.  If we
3183    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3184    return that, rather than the _TYPE it corresponds to, in other
3185    cases we look through the type decl.  If TF_ERROR is set, complain
3186    about errors, otherwise be quiet.  */
3187
3188 tree
3189 make_typename_type (tree context, tree name, enum tag_types tag_type,
3190                     tsubst_flags_t complain)
3191 {
3192   tree fullname;
3193   tree t;
3194   bool want_template;
3195
3196   if (name == error_mark_node
3197       || context == NULL_TREE
3198       || context == error_mark_node)
3199     return error_mark_node;
3200
3201   if (TYPE_P (name))
3202     {
3203       if (!(TYPE_LANG_SPECIFIC (name)
3204             && (CLASSTYPE_IS_TEMPLATE (name)
3205                 || CLASSTYPE_USE_TEMPLATE (name))))
3206         name = TYPE_IDENTIFIER (name);
3207       else
3208         /* Create a TEMPLATE_ID_EXPR for the type.  */
3209         name = build_nt (TEMPLATE_ID_EXPR,
3210                          CLASSTYPE_TI_TEMPLATE (name),
3211                          CLASSTYPE_TI_ARGS (name));
3212     }
3213   else if (TREE_CODE (name) == TYPE_DECL)
3214     name = DECL_NAME (name);
3215
3216   fullname = name;
3217
3218   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3219     {
3220       name = TREE_OPERAND (name, 0);
3221       if (TREE_CODE (name) == TEMPLATE_DECL)
3222         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3223       else if (TREE_CODE (name) == OVERLOAD)
3224         {
3225           error ("%qD is not a type", name);
3226           return error_mark_node;
3227         }
3228     }
3229   if (TREE_CODE (name) == TEMPLATE_DECL)
3230     {
3231       error ("%qD used without template parameters", name);
3232       return error_mark_node;
3233     }
3234   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3235   gcc_assert (TYPE_P (context));
3236
3237   if (!MAYBE_CLASS_TYPE_P (context))
3238     {
3239       if (complain & tf_error)
3240         error ("%q#T is not a class", context);
3241       return error_mark_node;
3242     }
3243   
3244   /* When the CONTEXT is a dependent type,  NAME could refer to a
3245      dependent base class of CONTEXT.  But look inside it anyway
3246      if CONTEXT is a currently open scope, in case it refers to a
3247      member of the current instantiation or a non-dependent base;
3248      lookup will stop when we hit a dependent base.  */
3249   if (!dependent_scope_p (context))
3250     /* We should only set WANT_TYPE when we're a nested typename type.
3251        Then we can give better diagnostics if we find a non-type.  */
3252     t = lookup_field (context, name, 2, /*want_type=*/true);
3253   else
3254     t = NULL_TREE;
3255
3256   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3257     return build_typename_type (context, name, fullname, tag_type);
3258
3259   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3260   
3261   if (!t)
3262     {
3263       if (complain & tf_error)
3264         error (want_template ? G_("no class template named %q#T in %q#T")
3265                : G_("no type named %q#T in %q#T"), name, context);
3266       return error_mark_node;
3267     }
3268   
3269   /* Pull out the template from an injected-class-name (or multiple).  */
3270   if (want_template)
3271     t = maybe_get_template_decl_from_type_decl (t);
3272
3273   if (TREE_CODE (t) == TREE_LIST)
3274     {
3275       if (complain & tf_error)
3276         {
3277           error ("lookup of %qT in %qT is ambiguous", name, context);
3278           print_candidates (t);
3279         }
3280       return error_mark_node;
3281     }
3282
3283   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3284     {
3285       if (complain & tf_error)
3286         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3287                context, name, t);
3288       return error_mark_node;
3289     }
3290   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3291     {
3292       if (complain & tf_error)
3293         error ("%<typename %T::%D%> names %q#T, which is not a type",
3294                context, name, t);
3295       return error_mark_node;
3296     }
3297   
3298   if (complain & tf_error)
3299     perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3300
3301   /* If we are currently parsing a template and if T is a typedef accessed
3302      through CONTEXT then we need to remember and check access of T at
3303      template instantiation time.  */
3304   add_typedef_to_current_template_for_access_check (t, context, input_location);
3305
3306   if (want_template)
3307     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3308                                   NULL_TREE, context,
3309                                   /*entering_scope=*/0,
3310                                   tf_warning_or_error | tf_user);
3311   
3312   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3313     t = TREE_TYPE (t);
3314   
3315   return t;
3316 }
3317
3318 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3319    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3320    in which case error_mark_node is returned.
3321
3322    If PARM_LIST is non-NULL, also make sure that the template parameter
3323    list of TEMPLATE_DECL matches.
3324
3325    If COMPLAIN zero, don't complain about any errors that occur.  */
3326
3327 tree
3328 make_unbound_class_template (tree context, tree name, tree parm_list,
3329                              tsubst_flags_t complain)
3330 {
3331   tree t;
3332   tree d;
3333
3334   if (TYPE_P (name))
3335     name = TYPE_IDENTIFIER (name);
3336   else if (DECL_P (name))
3337     name = DECL_NAME (name);
3338   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3339
3340   if (!dependent_type_p (context)
3341       || currently_open_class (context))
3342     {
3343       tree tmpl = NULL_TREE;
3344
3345       if (MAYBE_CLASS_TYPE_P (context))
3346         tmpl = lookup_field (context, name, 0, false);
3347
3348       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3349         tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3350
3351       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3352         {
3353           if (complain & tf_error)
3354             error ("no class template named %q#T in %q#T", name, context);
3355           return error_mark_node;
3356         }
3357
3358       if (parm_list
3359           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3360         {
3361           if (complain & tf_error)
3362             {
3363               error ("template parameters do not match template");
3364               error ("%q+D declared here", tmpl);
3365             }
3366           return error_mark_node;
3367         }
3368
3369       if (complain & tf_error)
3370         perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3371
3372       return tmpl;
3373     }
3374
3375   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3376   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3377   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3378   TREE_TYPE (t) = NULL_TREE;
3379   SET_TYPE_STRUCTURAL_EQUALITY (t);
3380
3381   /* Build the corresponding TEMPLATE_DECL.  */
3382   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3383   TYPE_NAME (TREE_TYPE (d)) = d;
3384   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3385   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3386   DECL_ARTIFICIAL (d) = 1;
3387   DECL_TEMPLATE_PARMS (d) = parm_list;
3388
3389   return t;
3390 }
3391
3392 \f
3393
3394 /* Push the declarations of builtin types into the namespace.
3395    RID_INDEX is the index of the builtin type in the array
3396    RID_POINTERS.  NAME is the name used when looking up the builtin
3397    type.  TYPE is the _TYPE node for the builtin type.  */
3398
3399 void
3400 record_builtin_type (enum rid rid_index,
3401                      const char* name,
3402                      tree type)
3403 {
3404   tree rname = NULL_TREE, tname = NULL_TREE;
3405   tree tdecl = NULL_TREE;
3406
3407   if ((int) rid_index < (int) RID_MAX)
3408     rname = ridpointers[(int) rid_index];
3409   if (name)
3410     tname = get_identifier (name);
3411
3412   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3413      eliminated.  Built-in types should not be looked up name; their
3414      names are keywords that the parser can recognize.  However, there
3415      is code in c-common.c that uses identifier_global_value to look
3416      up built-in types by name.  */
3417   if (tname)
3418     {
3419       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3420       DECL_ARTIFICIAL (tdecl) = 1;
3421       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3422     }
3423   if (rname)
3424     {
3425       if (!tdecl)
3426         {
3427           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3428           DECL_ARTIFICIAL (tdecl) = 1;
3429         }
3430       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3431     }
3432
3433   if (!TYPE_NAME (type))
3434     TYPE_NAME (type) = tdecl;
3435
3436   if (tdecl)
3437     debug_hooks->type_decl (tdecl, 0);
3438 }
3439
3440 /* Record one of the standard Java types.
3441  * Declare it as having the given NAME.
3442  * If SIZE > 0, it is the size of one of the integral types;
3443  * otherwise it is the negative of the size of one of the other types.  */
3444
3445 static tree
3446 record_builtin_java_type (const char* name, int size)
3447 {
3448   tree type, decl;
3449   if (size > 0)
3450     {
3451       type = build_nonstandard_integer_type (size, 0);
3452       type = build_distinct_type_copy (type);
3453     }
3454   else if (size > -32)
3455     {
3456       tree stype;
3457       /* "__java_char" or ""__java_boolean".  */
3458       type = build_nonstandard_integer_type (-size, 1);
3459       type = build_distinct_type_copy (type);
3460       /* Get the signed type cached and attached to the unsigned type,
3461          so it doesn't get garbage-collected at "random" times,
3462          causing potential codegen differences out of different UIDs
3463          and different alias set numbers.  */
3464       stype = build_nonstandard_integer_type (-size, 0);
3465       stype = build_distinct_type_copy (stype);
3466       TREE_CHAIN (type) = stype;
3467       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3468     }
3469   else
3470     { /* "__java_float" or ""__java_double".  */
3471       type = make_node (REAL_TYPE);
3472       TYPE_PRECISION (type) = - size;
3473       layout_type (type);
3474     }
3475   record_builtin_type (RID_MAX, name, type);
3476   decl = TYPE_NAME (type);
3477
3478   /* Suppress generate debug symbol entries for these types,
3479      since for normal C++ they are just clutter.
3480      However, push_lang_context undoes this if extern "Java" is seen.  */
3481   DECL_IGNORED_P (decl) = 1;
3482
3483   TYPE_FOR_JAVA (type) = 1;
3484   return type;
3485 }
3486
3487 /* Push a type into the namespace so that the back ends ignore it.  */
3488
3489 static void
3490 record_unknown_type (tree type, const char* name)
3491 {
3492   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3493                                     TYPE_DECL, get_identifier (name), type));
3494   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3495   DECL_IGNORED_P (decl) = 1;
3496   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3497   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3498   TYPE_ALIGN (type) = 1;
3499   TYPE_USER_ALIGN (type) = 0;
3500   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3501 }
3502
3503 /* A string for which we should create an IDENTIFIER_NODE at
3504    startup.  */
3505
3506 typedef struct predefined_identifier
3507 {
3508   /* The name of the identifier.  */
3509   const char *const name;
3510   /* The place where the IDENTIFIER_NODE should be stored.  */
3511   tree *const node;
3512   /* Nonzero if this is the name of a constructor or destructor.  */
3513   const int ctor_or_dtor_p;
3514 } predefined_identifier;
3515
3516 /* Create all the predefined identifiers.  */
3517
3518 static void
3519 initialize_predefined_identifiers (void)
3520 {
3521   const predefined_identifier *pid;
3522
3523   /* A table of identifiers to create at startup.  */
3524   static const predefined_identifier predefined_identifiers[] = {
3525     { "C++", &lang_name_cplusplus, 0 },
3526     { "C", &lang_name_c, 0 },
3527     { "Java", &lang_name_java, 0 },
3528     /* Some of these names have a trailing space so that it is
3529        impossible for them to conflict with names written by users.  */
3530     { "__ct ", &ctor_identifier, 1 },
3531     { "__base_ctor ", &base_ctor_identifier, 1 },
3532     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3533     { "__dt ", &dtor_identifier, 1 },
3534     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3535     { "__base_dtor ", &base_dtor_identifier, 1 },
3536     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3537     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3538     { "nelts", &nelts_identifier, 0 },
3539     { THIS_NAME, &this_identifier, 0 },
3540     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3541     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3542     { "_vptr", &vptr_identifier, 0 },
3543     { "__vtt_parm", &vtt_parm_identifier, 0 },
3544     { "::", &global_scope_name, 0 },
3545     { "std", &std_identifier, 0 },
3546     { NULL, NULL, 0 }
3547   };
3548
3549   for (pid = predefined_identifiers; pid->name; ++pid)
3550     {
3551       *pid->node = get_identifier (pid->name);
3552       if (pid->ctor_or_dtor_p)
3553         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3554     }
3555 }
3556
3557 /* Create the predefined scalar types of C,
3558    and some nodes representing standard constants (0, 1, (void *)0).
3559    Initialize the global binding level.
3560    Make definitions for built-in primitive functions.  */
3561
3562 void
3563 cxx_init_decl_processing (void)
3564 {
3565   tree void_ftype;
3566   tree void_ftype_ptr;
3567
3568   /* Create all the identifiers we need.  */
3569   initialize_predefined_identifiers ();
3570
3571   /* Create the global variables.  */
3572   push_to_top_level ();
3573
3574   current_function_decl = NULL_TREE;
3575   current_binding_level = NULL;
3576   /* Enter the global namespace.  */
3577   gcc_assert (global_namespace == NULL_TREE);
3578   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3579                                       void_type_node);
3580   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3581   TREE_PUBLIC (global_namespace) = 1;
3582   begin_scope (sk_namespace, global_namespace);
3583
3584   if (flag_visibility_ms_compat)
3585     default_visibility = VISIBILITY_HIDDEN;
3586
3587   /* Initially, C.  */
3588   current_lang_name = lang_name_c;
3589
3590   /* Create the `std' namespace.  */
3591   push_namespace (std_identifier);
3592   std_node = current_namespace;
3593   pop_namespace ();
3594
3595   c_common_nodes_and_builtins ();
3596
3597   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3598   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3599   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3600   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3601   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3602   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3603   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3604   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3605
3606   integer_two_node = build_int_cst (NULL_TREE, 2);
3607
3608   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3609   truthvalue_type_node = boolean_type_node;
3610   truthvalue_false_node = boolean_false_node;
3611   truthvalue_true_node = boolean_true_node;
3612
3613   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3614   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3615   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3616
3617 #if 0
3618   record_builtin_type (RID_MAX, NULL, string_type_node);
3619 #endif
3620
3621   delta_type_node = ptrdiff_type_node;
3622   vtable_index_type = ptrdiff_type_node;
3623
3624   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3625   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3626   void_ftype_ptr = build_function_type_list (void_type_node,
3627                                              ptr_type_node, NULL_TREE);
3628   void_ftype_ptr
3629     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3630
3631   /* C++ extensions */
3632
3633   unknown_type_node = make_node (LANG_TYPE);
3634   record_unknown_type (unknown_type_node, "unknown type");
3635
3636   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3637   TREE_TYPE (unknown_type_node) = unknown_type_node;
3638
3639   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3640      result.  */
3641   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3642   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3643
3644   init_list_type_node = make_node (LANG_TYPE);
3645   record_unknown_type (init_list_type_node, "init list");
3646
3647   dependent_lambda_return_type_node = make_node (LANG_TYPE);
3648   record_unknown_type (dependent_lambda_return_type_node,
3649                        "undeduced lambda return type");
3650
3651   {
3652     /* Make sure we get a unique function type, so we can give
3653        its pointer type a name.  (This wins for gdb.) */
3654     tree vfunc_type = make_node (FUNCTION_TYPE);
3655     TREE_TYPE (vfunc_type) = integer_type_node;
3656     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3657     layout_type (vfunc_type);
3658
3659     vtable_entry_type = build_pointer_type (vfunc_type);
3660   }
3661   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3662
3663   vtbl_type_node
3664     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3665   layout_type (vtbl_type_node);
3666   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3667   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3668   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3669   layout_type (vtbl_ptr_type_node);
3670   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3671
3672   push_namespace (get_identifier ("__cxxabiv1"));
3673   abi_node = current_namespace;
3674   pop_namespace ();
3675
3676   global_type_node = make_node (LANG_TYPE);
3677   record_unknown_type (global_type_node, "global type");
3678
3679   /* Now, C++.  */
3680   current_lang_name = lang_name_cplusplus;
3681
3682   {
3683     tree newattrs, extvisattr;
3684     tree newtype, deltype;
3685     tree ptr_ftype_sizetype;
3686     tree new_eh_spec;
3687
3688     ptr_ftype_sizetype
3689       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3690     if (cxx_dialect == cxx98)
3691       {
3692         tree bad_alloc_id;
3693         tree bad_alloc_type_node;
3694         tree bad_alloc_decl;
3695
3696         push_namespace (std_identifier);
3697         bad_alloc_id = get_identifier ("bad_alloc");
3698         bad_alloc_type_node = make_class_type (RECORD_TYPE);
3699         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3700         bad_alloc_decl
3701           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3702         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3703         pop_namespace ();
3704
3705         new_eh_spec
3706           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3707       }
3708     else
3709       new_eh_spec = noexcept_false_spec;
3710
3711     /* Ensure attribs.c is initialized.  */
3712     init_attributes ();
3713     extvisattr = build_tree_list (get_identifier ("externally_visible"),
3714                                   NULL_TREE);
3715     newattrs = tree_cons (get_identifier ("alloc_size"),
3716                           build_tree_list (NULL_TREE, integer_one_node),
3717                           extvisattr);
3718     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
3719     newtype = build_exception_variant (newtype, new_eh_spec);
3720     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
3721     deltype = build_exception_variant (deltype, empty_except_spec);
3722     push_cp_library_fn (NEW_EXPR, newtype);
3723     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3724     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3725     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3726
3727     nullptr_type_node = make_node (NULLPTR_TYPE);
3728     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3729     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3730     TYPE_UNSIGNED (nullptr_type_node) = 1;
3731     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3732     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3733     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3734     nullptr_node = build_int_cst (nullptr_type_node, 0);
3735   }
3736
3737   abort_fndecl
3738     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3739
3740   /* Perform other language dependent initializations.  */
3741   init_class_processing ();
3742   init_rtti_processing ();
3743   init_template_processing ();
3744
3745   if (flag_exceptions)
3746     init_exception_processing ();
3747
3748   if (! supports_one_only ())
3749     flag_weak = 0;
3750
3751   make_fname_decl = cp_make_fname_decl;
3752   start_fname_decls ();
3753
3754   /* Show we use EH for cleanups.  */
3755   if (flag_exceptions)
3756     using_eh_for_cleanups ();
3757 }
3758
3759 /* Generate an initializer for a function naming variable from
3760    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3761    filled in with the type of the init.  */
3762
3763 tree
3764 cp_fname_init (const char* name, tree *type_p)
3765 {
3766   tree domain = NULL_TREE;
3767   tree type;
3768   tree init = NULL_TREE;
3769   size_t length = 0;
3770
3771   if (name)
3772     {
3773       length = strlen (name);
3774       domain = build_index_type (size_int (length));
3775       init = build_string (length + 1, name);
3776     }
3777
3778   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3779   type = build_cplus_array_type (type, domain);
3780
3781   *type_p = type;
3782
3783   if (init)
3784     TREE_TYPE (init) = type;
3785   else
3786     init = error_mark_node;
3787
3788   return init;
3789 }
3790
3791 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3792    the decl, LOC is the location to give the decl, NAME is the
3793    initialization string and TYPE_DEP indicates whether NAME depended
3794    on the type of the function. We make use of that to detect
3795    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3796    at the point of first use, so we mustn't push the decl now.  */
3797
3798 static tree
3799 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3800 {
3801   const char *const name = (type_dep && processing_template_decl
3802                             ? NULL : fname_as_string (type_dep));
3803   tree type;
3804   tree init = cp_fname_init (name, &type);
3805   tree decl = build_decl (loc, VAR_DECL, id, type);
3806
3807   if (name)
3808     free (CONST_CAST (char *, name));
3809
3810   /* As we're using pushdecl_with_scope, we must set the context.  */
3811   DECL_CONTEXT (decl) = current_function_decl;
3812   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3813
3814   TREE_STATIC (decl) = 1;
3815   TREE_READONLY (decl) = 1;
3816   DECL_ARTIFICIAL (decl) = 1;
3817
3818   TREE_USED (decl) = 1;
3819
3820   if (current_function_decl)
3821     {
3822       cp_binding_level *b = current_binding_level;
3823       if (b->kind == sk_function_parms)
3824         return error_mark_node;
3825       while (b->level_chain->kind != sk_function_parms)
3826         b = b->level_chain;
3827       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3828       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3829                       LOOKUP_ONLYCONVERTING);
3830     }
3831   else
3832     {
3833       DECL_THIS_STATIC (decl) = true;
3834       pushdecl_top_level_and_finish (decl, init);
3835     }
3836
3837   return decl;
3838 }
3839
3840 static tree
3841 builtin_function_1 (tree decl, tree context, bool is_global)
3842 {
3843   tree          id = DECL_NAME (decl);
3844   const char *name = IDENTIFIER_POINTER (id);
3845
3846   retrofit_lang_decl (decl);
3847
3848   DECL_ARTIFICIAL (decl) = 1;
3849   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3850   SET_DECL_LANGUAGE (decl, lang_c);
3851   /* Runtime library routines are, by definition, available in an
3852      external shared object.  */
3853   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3854   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3855
3856   DECL_CONTEXT (decl) = context;
3857
3858   if (is_global)
3859     pushdecl_top_level (decl);
3860   else
3861     pushdecl (decl);
3862
3863   /* A function in the user's namespace should have an explicit
3864      declaration before it is used.  Mark the built-in function as
3865      anticipated but not actually declared.  */
3866   if (name[0] != '_' || name[1] != '_')
3867     DECL_ANTICIPATED (decl) = 1;
3868   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3869     {
3870       size_t len = strlen (name);
3871
3872       /* Treat __*_chk fortification functions as anticipated as well,
3873          unless they are __builtin_*.  */
3874       if (len > strlen ("___chk")
3875           && memcmp (name + len - strlen ("_chk"),
3876                      "_chk", strlen ("_chk") + 1) == 0)
3877         DECL_ANTICIPATED (decl) = 1;
3878     }
3879
3880   return decl;
3881 }
3882
3883 tree
3884 cxx_builtin_function (tree decl)
3885 {
3886   tree          id = DECL_NAME (decl);
3887   const char *name = IDENTIFIER_POINTER (id);
3888   /* All builtins that don't begin with an '_' should additionally
3889      go in the 'std' namespace.  */
3890   if (name[0] != '_')
3891     {
3892       tree decl2 = copy_node(decl);
3893       push_namespace (std_identifier);
3894       builtin_function_1 (decl2, std_node, false);
3895       pop_namespace ();
3896     }
3897
3898   return builtin_function_1 (decl, NULL_TREE, false);
3899 }
3900
3901 /* Like cxx_builtin_function, but guarantee the function is added to the global
3902    scope.  This is to allow function specific options to add new machine
3903    dependent builtins when the target ISA changes via attribute((target(...)))
3904    which saves space on program startup if the program does not use non-generic
3905    ISAs.  */
3906
3907 tree
3908 cxx_builtin_function_ext_scope (tree decl)
3909 {
3910
3911   tree          id = DECL_NAME (decl);
3912   const char *name = IDENTIFIER_POINTER (id);
3913   /* All builtins that don't begin with an '_' should additionally
3914      go in the 'std' namespace.  */
3915   if (name[0] != '_')
3916     {
3917       tree decl2 = copy_node(decl);
3918       push_namespace (std_identifier);
3919       builtin_function_1 (decl2, std_node, true);
3920       pop_namespace ();
3921     }
3922
3923   return builtin_function_1 (decl, NULL_TREE, true);
3924 }
3925
3926 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3927    function.  Not called directly.  */
3928
3929 static tree
3930 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3931 {
3932   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3933   DECL_EXTERNAL (fn) = 1;
3934   TREE_PUBLIC (fn) = 1;
3935   DECL_ARTIFICIAL (fn) = 1;
3936   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3937   SET_DECL_LANGUAGE (fn, lang_c);
3938   /* Runtime library routines are, by definition, available in an
3939      external shared object.  */
3940   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3941   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3942   return fn;
3943 }
3944
3945 /* Returns the _DECL for a library function with C linkage.
3946    We assume that such functions never throw; if this is incorrect,
3947    callers should unset TREE_NOTHROW.  */
3948
3949 static tree
3950 build_library_fn (tree name, tree type)
3951 {
3952   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3953   TREE_NOTHROW (fn) = 1;
3954   return fn;
3955 }
3956
3957 /* Returns the _DECL for a library function with C++ linkage.  */
3958
3959 static tree
3960 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3961 {
3962   tree fn = build_library_fn_1 (name, operator_code, type);
3963   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3964   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3965   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3966   return fn;
3967 }
3968
3969 /* Like build_library_fn, but takes a C string instead of an
3970    IDENTIFIER_NODE.  */
3971
3972 tree
3973 build_library_fn_ptr (const char* name, tree type)
3974 {
3975   return build_library_fn (get_identifier (name), type);
3976 }
3977
3978 /* Like build_cp_library_fn, but takes a C string instead of an
3979    IDENTIFIER_NODE.  */
3980
3981 tree
3982 build_cp_library_fn_ptr (const char* name, tree type)
3983 {
3984   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3985 }
3986
3987 /* Like build_library_fn, but also pushes the function so that we will
3988    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3989    may throw exceptions listed in RAISES.  */
3990
3991 tree
3992 push_library_fn (tree name, tree type, tree raises)
3993 {
3994   tree fn;
3995
3996   if (raises)
3997     type = build_exception_variant (type, raises);
3998
3999   fn = build_library_fn (name, type);
4000   pushdecl_top_level (fn);
4001   return fn;
4002 }
4003
4004 /* Like build_cp_library_fn, but also pushes the function so that it
4005    will be found by normal lookup.  */
4006
4007 static tree
4008 push_cp_library_fn (enum tree_code operator_code, tree type)
4009 {
4010   tree fn = build_cp_library_fn (ansi_opname (operator_code),
4011                                  operator_code,
4012                                  type);
4013   pushdecl (fn);
4014   if (flag_tm)
4015     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4016   return fn;
4017 }
4018
4019 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4020    a FUNCTION_TYPE.  */
4021
4022 tree
4023 push_void_library_fn (tree name, tree parmtypes)
4024 {
4025   tree type = build_function_type (void_type_node, parmtypes);
4026   return push_library_fn (name, type, NULL_TREE);
4027 }
4028
4029 /* Like push_library_fn, but also note that this function throws
4030    and does not return.  Used for __throw_foo and the like.  */
4031
4032 tree
4033 push_throw_library_fn (tree name, tree type)
4034 {
4035   tree fn = push_library_fn (name, type, NULL_TREE);
4036   TREE_THIS_VOLATILE (fn) = 1;
4037   TREE_NOTHROW (fn) = 0;
4038   return fn;
4039 }
4040 \f
4041 /* When we call finish_struct for an anonymous union, we create
4042    default copy constructors and such.  But, an anonymous union
4043    shouldn't have such things; this function undoes the damage to the
4044    anonymous union type T.
4045
4046    (The reason that we create the synthesized methods is that we don't
4047    distinguish `union { int i; }' from `typedef union { int i; } U'.
4048    The first is an anonymous union; the second is just an ordinary
4049    union type.)  */
4050
4051 void
4052 fixup_anonymous_aggr (tree t)
4053 {
4054   tree *q;
4055
4056   /* Wipe out memory of synthesized methods.  */
4057   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4058   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4059   TYPE_HAS_COPY_CTOR (t) = 0;
4060   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4061   TYPE_HAS_COPY_ASSIGN (t) = 0;
4062   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4063
4064   /* Splice the implicitly generated functions out of the TYPE_METHODS
4065      list.  */
4066   q = &TYPE_METHODS (t);
4067   while (*q)
4068     {
4069       if (DECL_ARTIFICIAL (*q))
4070         *q = TREE_CHAIN (*q);
4071       else
4072         q = &DECL_CHAIN (*q);
4073     }
4074
4075   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4076   if (TYPE_METHODS (t))
4077     {
4078       tree decl = TYPE_MAIN_DECL (t);
4079
4080       if (TREE_CODE (t) != UNION_TYPE)
4081         error_at (DECL_SOURCE_LOCATION (decl), 
4082                   "an anonymous struct cannot have function members");
4083       else
4084         error_at (DECL_SOURCE_LOCATION (decl),
4085                   "an anonymous union cannot have function members");
4086     }
4087
4088   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4089      assignment operators (because they cannot have these methods themselves).
4090      For anonymous unions this is already checked because they are not allowed
4091      in any union, otherwise we have to check it.  */
4092   if (TREE_CODE (t) != UNION_TYPE)
4093     {
4094       tree field, type;
4095
4096       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4097         if (TREE_CODE (field) == FIELD_DECL)
4098           {
4099             type = TREE_TYPE (field);
4100             if (CLASS_TYPE_P (type))
4101               {
4102                 if (TYPE_NEEDS_CONSTRUCTING (type))
4103                   error ("member %q+#D with constructor not allowed "
4104                          "in anonymous aggregate", field);
4105                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4106                   error ("member %q+#D with destructor not allowed "
4107                          "in anonymous aggregate", field);
4108                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4109                   error ("member %q+#D with copy assignment operator "
4110                          "not allowed in anonymous aggregate", field);
4111               }
4112           }
4113     }
4114 }
4115
4116 /* Make sure that a declaration with no declarator is well-formed, i.e.
4117    just declares a tagged type or anonymous union.
4118
4119    Returns the type declared; or NULL_TREE if none.  */
4120
4121 tree
4122 check_tag_decl (cp_decl_specifier_seq *declspecs)
4123 {
4124   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4125   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4126   /* If a class, struct, or enum type is declared by the DECLSPECS
4127      (i.e, if a class-specifier, enum-specifier, or non-typename
4128      elaborated-type-specifier appears in the DECLSPECS),
4129      DECLARED_TYPE is set to the corresponding type.  */
4130   tree declared_type = NULL_TREE;
4131   bool error_p = false;
4132
4133   if (declspecs->multiple_types_p)
4134     error ("multiple types in one declaration");
4135   else if (declspecs->redefined_builtin_type)
4136     {
4137       if (!in_system_header)
4138         permerror (input_location, "redeclaration of C++ built-in type %qT",
4139                    declspecs->redefined_builtin_type);
4140       return NULL_TREE;
4141     }
4142
4143   if (declspecs->type
4144       && TYPE_P (declspecs->type)
4145       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4146            && MAYBE_CLASS_TYPE_P (declspecs->type))
4147           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4148     declared_type = declspecs->type;
4149   else if (declspecs->type == error_mark_node)
4150     error_p = true;
4151   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4152     permerror (input_location, "declaration does not declare anything");
4153   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4154     {
4155       error ("%<auto%> can only be specified for variables "
4156              "or function declarations");
4157       return error_mark_node;
4158     }
4159   /* Check for an anonymous union.  */
4160   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4161            && TYPE_ANONYMOUS_P (declared_type))
4162     {
4163       /* 7/3 In a simple-declaration, the optional init-declarator-list
4164          can be omitted only when declaring a class (clause 9) or
4165          enumeration (7.2), that is, when the decl-specifier-seq contains
4166          either a class-specifier, an elaborated-type-specifier with
4167          a class-key (9.1), or an enum-specifier.  In these cases and
4168          whenever a class-specifier or enum-specifier is present in the
4169          decl-specifier-seq, the identifiers in these specifiers are among
4170          the names being declared by the declaration (as class-name,
4171          enum-names, or enumerators, depending on the syntax).  In such
4172          cases, and except for the declaration of an unnamed bit-field (9.6),
4173          the decl-specifier-seq shall introduce one or more names into the
4174          program, or shall redeclare a name introduced by a previous
4175          declaration.  [Example:
4176              enum { };                  // ill-formed
4177              typedef class { };         // ill-formed
4178          --end example]  */
4179       if (saw_typedef)
4180         {
4181           error ("missing type-name in typedef-declaration");
4182           return NULL_TREE;
4183         }
4184       /* Anonymous unions are objects, so they can have specifiers.  */;
4185       SET_ANON_AGGR_TYPE_P (declared_type);
4186
4187       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4188         pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4189     }
4190
4191   else
4192     {
4193       if (declspecs->specs[(int)ds_inline]
4194           || declspecs->specs[(int)ds_virtual])
4195         error ("%qs can only be specified for functions",
4196                declspecs->specs[(int)ds_inline]
4197                ? "inline" : "virtual");
4198       else if (saw_friend
4199                && (!current_class_type
4200                    || current_scope () != current_class_type))
4201         error ("%<friend%> can only be specified inside a class");
4202       else if (declspecs->specs[(int)ds_explicit])
4203         error ("%<explicit%> can only be specified for constructors");
4204       else if (declspecs->storage_class)
4205         error ("a storage class can only be specified for objects "
4206                "and functions");
4207       else if (declspecs->specs[(int)ds_const]
4208                || declspecs->specs[(int)ds_volatile]
4209                || declspecs->specs[(int)ds_restrict]
4210                || declspecs->specs[(int)ds_thread])
4211         error ("qualifiers can only be specified for objects "
4212                "and functions");
4213       else if (saw_typedef)
4214         warning (0, "%<typedef%> was ignored in this declaration");
4215       else if (declspecs->specs[(int) ds_constexpr])
4216         error ("%<constexpr%> cannot be used for type declarations");
4217     }
4218
4219   if (declspecs->attributes && declared_type)
4220     {
4221       location_t loc = input_location;
4222       if (!CLASS_TYPE_P (declared_type)
4223           || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4224         /* For a non-template class, use the name location; for a template
4225            class (an explicit instantiation), use the current location.  */
4226         input_location = location_of (declared_type);
4227       warning (0, "attribute ignored in declaration of %q#T", declared_type);
4228       warning (0, "attribute for %q#T must follow the %qs keyword",
4229                declared_type, class_key_or_enum_as_string (declared_type));
4230       input_location = loc;
4231     }
4232
4233   return declared_type;
4234 }
4235
4236 /* Called when a declaration is seen that contains no names to declare.
4237    If its type is a reference to a structure, union or enum inherited
4238    from a containing scope, shadow that tag name for the current scope
4239    with a forward reference.
4240    If its type defines a new named structure or union
4241    or defines an enum, it is valid but we need not do anything here.
4242    Otherwise, it is an error.
4243
4244    C++: may have to grok the declspecs to learn about static,
4245    complain for anonymous unions.
4246
4247    Returns the TYPE declared -- or NULL_TREE if none.  */
4248
4249 tree
4250 shadow_tag (cp_decl_specifier_seq *declspecs)
4251 {
4252   tree t = check_tag_decl (declspecs);
4253
4254   if (!t)
4255     return NULL_TREE;
4256
4257   if (maybe_process_partial_specialization (t) == error_mark_node)
4258     return NULL_TREE;
4259
4260   /* This is where the variables in an anonymous union are
4261      declared.  An anonymous union declaration looks like:
4262      union { ... } ;
4263      because there is no declarator after the union, the parser
4264      sends that declaration here.  */
4265   if (ANON_AGGR_TYPE_P (t))
4266     {
4267       fixup_anonymous_aggr (t);
4268
4269       if (TYPE_FIELDS (t))
4270         {
4271           tree decl = grokdeclarator (/*declarator=*/NULL,
4272                                       declspecs, NORMAL, 0, NULL);
4273           finish_anon_union (decl);
4274         }
4275     }
4276
4277   return t;
4278 }
4279 \f
4280 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4281
4282 tree
4283 groktypename (cp_decl_specifier_seq *type_specifiers,
4284               const cp_declarator *declarator,
4285               bool is_template_arg)
4286 {
4287   tree attrs;
4288   tree type;
4289   enum decl_context context
4290     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4291   attrs = type_specifiers->attributes;
4292   type_specifiers->attributes = NULL_TREE;
4293   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4294   if (attrs && type != error_mark_node)
4295     {
4296       if (CLASS_TYPE_P (type))
4297         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4298                  "outside of definition", type);
4299       else if (MAYBE_CLASS_TYPE_P (type))
4300         /* A template type parameter or other dependent type.  */
4301         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4302                  "type %qT without an associated declaration", type);
4303       else
4304         cplus_decl_attributes (&type, attrs, 0);
4305     }
4306   return type;
4307 }
4308
4309 /* Process a DECLARATOR for a function-scope variable declaration,
4310    namespace-scope variable declaration, or function declaration.
4311    (Function definitions go through start_function; class member
4312    declarations appearing in the body of the class go through
4313    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4314    If an error occurs, the error_mark_node is returned instead.
4315    
4316    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4317    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4318    for an explicitly defaulted function, or SD_DELETED for an explicitly
4319    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4320    implicitly initialized via a default constructor.  ATTRIBUTES and
4321    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4322
4323    The scope represented by the context of the returned DECL is pushed
4324    (if it is not the global namespace) and is assigned to
4325    *PUSHED_SCOPE_P.  The caller is then responsible for calling
4326    pop_scope on *PUSHED_SCOPE_P if it is set.  */
4327
4328 tree
4329 start_decl (const cp_declarator *declarator,
4330             cp_decl_specifier_seq *declspecs,
4331             int initialized,
4332             tree attributes,
4333             tree prefix_attributes,
4334             tree *pushed_scope_p)
4335 {
4336   tree decl;
4337   tree context;
4338   bool was_public;
4339   int flags;
4340   bool alias;
4341
4342   *pushed_scope_p = NULL_TREE;
4343
4344   /* An object declared as __attribute__((deprecated)) suppresses
4345      warnings of uses of other deprecated items.  */
4346   if (lookup_attribute ("deprecated", attributes))
4347     deprecated_state = DEPRECATED_SUPPRESS;
4348
4349   attributes = chainon (attributes, prefix_attributes);
4350
4351   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4352                          &attributes);
4353
4354   deprecated_state = DEPRECATED_NORMAL;
4355
4356   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4357       || decl == error_mark_node)
4358     return error_mark_node;
4359
4360   context = CP_DECL_CONTEXT (decl);
4361   if (context != global_namespace)
4362     *pushed_scope_p = push_scope (context);
4363
4364   if (initialized)
4365     /* Is it valid for this decl to have an initializer at all?
4366        If not, set INITIALIZED to zero, which will indirectly
4367        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4368     switch (TREE_CODE (decl))
4369       {
4370       case TYPE_DECL:
4371         error ("typedef %qD is initialized (use decltype instead)", decl);
4372         return error_mark_node;
4373
4374       case FUNCTION_DECL:
4375         if (initialized == SD_DELETED)
4376           /* We'll handle the rest of the semantics later, but we need to
4377              set this now so it's visible to duplicate_decls.  */
4378           DECL_DELETED_FN (decl) = 1;
4379         break;
4380
4381       default:
4382         break;
4383       }
4384
4385   if (initialized)
4386     {
4387       if (! toplevel_bindings_p ()
4388           && DECL_EXTERNAL (decl))
4389         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4390                  decl);
4391       DECL_EXTERNAL (decl) = 0;
4392       if (toplevel_bindings_p ())
4393         TREE_STATIC (decl) = 1;
4394     }
4395   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4396   
4397   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4398     record_key_method_defined (decl);
4399
4400   /* If this is a typedef that names the class for linkage purposes
4401      (7.1.3p8), apply any attributes directly to the type.  */
4402   if (TREE_CODE (decl) == TYPE_DECL
4403       && TAGGED_TYPE_P (TREE_TYPE (decl))
4404       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4405     flags = ATTR_FLAG_TYPE_IN_PLACE;
4406   else
4407     flags = 0;
4408
4409   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4410   cplus_decl_attributes (&decl, attributes, flags);
4411
4412   /* Dllimported symbols cannot be defined.  Static data members (which
4413      can be initialized in-class and dllimported) go through grokfield,
4414      not here, so we don't need to exclude those decls when checking for
4415      a definition.  */
4416   if (initialized && DECL_DLLIMPORT_P (decl))
4417     {
4418       error ("definition of %q#D is marked %<dllimport%>", decl);
4419       DECL_DLLIMPORT_P (decl) = 0;
4420     }
4421
4422   /* If #pragma weak was used, mark the decl weak now.  */
4423   if (!processing_template_decl)
4424     maybe_apply_pragma_weak (decl);
4425
4426   if (TREE_CODE (decl) == FUNCTION_DECL
4427       && DECL_DECLARED_INLINE_P (decl)
4428       && DECL_UNINLINABLE (decl)
4429       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4430     warning (0, "inline function %q+D given attribute noinline", decl);
4431
4432   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4433     {
4434       if (TREE_CODE (decl) == VAR_DECL)
4435         {
4436           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4437           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4438             error ("%q#D is not a static member of %q#T", decl, context);
4439           else
4440             {
4441               if (DECL_CONTEXT (field) != context)
4442                 {
4443                   if (!same_type_p (DECL_CONTEXT (field), context))
4444                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4445                                "to be defined as %<%T::%D%>",
4446                                DECL_CONTEXT (field), DECL_NAME (decl),
4447                                context, DECL_NAME (decl));
4448                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4449                 }
4450               if (processing_specialization
4451                   && template_class_depth (context) == 0
4452                   && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4453                 error ("template header not allowed in member definition "
4454                        "of explicitly specialized class");
4455               /* Static data member are tricky; an in-class initialization
4456                  still doesn't provide a definition, so the in-class
4457                  declaration will have DECL_EXTERNAL set, but will have an
4458                  initialization.  Thus, duplicate_decls won't warn
4459                  about this situation, and so we check here.  */
4460               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4461                 error ("duplicate initialization of %qD", decl);
4462               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4463                 decl = field;
4464               if (declspecs->specs[(int) ds_constexpr]
4465                   && !DECL_DECLARED_CONSTEXPR_P (field))
4466                 error ("%qD declared %<constexpr%> outside its class", field);
4467             }
4468         }
4469       else
4470         {
4471           tree field = check_classfn (context, decl,
4472                                       (processing_template_decl
4473                                        > template_class_depth (context))
4474                                       ? current_template_parms
4475                                       : NULL_TREE);
4476           if (field && field != error_mark_node
4477               && duplicate_decls (decl, field,
4478                                  /*newdecl_is_friend=*/false))
4479             decl = field;
4480         }
4481
4482       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4483       DECL_IN_AGGR_P (decl) = 0;
4484       /* Do not mark DECL as an explicit specialization if it was not
4485          already marked as an instantiation; a declaration should
4486          never be marked as a specialization unless we know what
4487          template is being specialized.  */
4488       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4489         {
4490           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4491
4492           /* [temp.expl.spec] An explicit specialization of a static data
4493              member of a template is a definition if the declaration
4494              includes an initializer; otherwise, it is a declaration.
4495
4496              We check for processing_specialization so this only applies
4497              to the new specialization syntax.  */
4498           if (!initialized && processing_specialization)
4499             DECL_EXTERNAL (decl) = 1;
4500         }
4501
4502       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4503           /* Aliases are definitions. */
4504           && !alias)
4505         permerror (input_location, "declaration of %q#D outside of class is not definition",
4506                    decl);
4507     }
4508
4509   was_public = TREE_PUBLIC (decl);
4510
4511   /* Enter this declaration into the symbol table.  */
4512   decl = maybe_push_decl (decl);
4513
4514   if (processing_template_decl)
4515     decl = push_template_decl (decl);
4516   if (decl == error_mark_node)
4517     return error_mark_node;
4518
4519   /* Tell the back end to use or not use .common as appropriate.  If we say
4520      -fconserve-space, we want this to save .data space, at the expense of
4521      wrong semantics.  If we say -fno-conserve-space, we want this to
4522      produce errors about redefs; to do this we force variables into the
4523      data segment.  */
4524   if (flag_conserve_space
4525       && TREE_CODE (decl) == VAR_DECL
4526       && TREE_PUBLIC (decl)
4527       && !DECL_THREAD_LOCAL_P (decl)
4528       && !have_global_bss_p ())
4529     DECL_COMMON (decl) = 1;
4530
4531   if (TREE_CODE (decl) == VAR_DECL
4532       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4533       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4534     {
4535       /* This is a const variable with implicit 'static'.  Set
4536          DECL_THIS_STATIC so we can tell it from variables that are
4537          !TREE_PUBLIC because of the anonymous namespace.  */
4538       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4539       DECL_THIS_STATIC (decl) = 1;
4540     }
4541
4542   if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4543     start_decl_1 (decl, initialized);
4544
4545   return decl;
4546 }
4547
4548 /* Process the declaration of a variable DECL.  INITIALIZED is true
4549    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4550    variable is initialized via an implicitly-called constructor.)
4551    This function must be called for ordinary variables (including, for
4552    example, implicit instantiations of templates), but must not be
4553    called for template declarations.  */
4554
4555 void
4556 start_decl_1 (tree decl, bool initialized)
4557 {
4558   tree type;
4559   bool complete_p;
4560   bool aggregate_definition_p;
4561
4562   gcc_assert (!processing_template_decl);
4563
4564   if (error_operand_p (decl))
4565     return;
4566
4567   gcc_assert (TREE_CODE (decl) == VAR_DECL);
4568
4569   type = TREE_TYPE (decl);
4570   complete_p = COMPLETE_TYPE_P (type);
4571   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4572
4573   /* If an explicit initializer is present, or if this is a definition
4574      of an aggregate, then we need a complete type at this point.
4575      (Scalars are always complete types, so there is nothing to
4576      check.)  This code just sets COMPLETE_P; errors (if necessary)
4577      are issued below.  */
4578   if ((initialized || aggregate_definition_p) 
4579       && !complete_p
4580       && COMPLETE_TYPE_P (complete_type (type)))
4581     {
4582       complete_p = true;
4583       /* We will not yet have set TREE_READONLY on DECL if the type
4584          was "const", but incomplete, before this point.  But, now, we
4585          have a complete type, so we can try again.  */
4586       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4587     }
4588
4589   if (initialized)
4590     /* Is it valid for this decl to have an initializer at all?  */
4591     {
4592       /* Don't allow initializations for incomplete types except for
4593          arrays which might be completed by the initialization.  */
4594       if (complete_p)
4595         ;                       /* A complete type is ok.  */
4596       else if (type_uses_auto (type))
4597         ;                       /* An auto type is ok.  */
4598       else if (TREE_CODE (type) != ARRAY_TYPE)
4599         {
4600           error ("variable %q#D has initializer but incomplete type", decl);
4601           type = TREE_TYPE (decl) = error_mark_node;
4602         }
4603       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4604         {
4605           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4606             error ("elements of array %q#D have incomplete type", decl);
4607           /* else we already gave an error in start_decl.  */
4608         }
4609     }
4610   else if (aggregate_definition_p && !complete_p)
4611     {
4612       if (type_uses_auto (type))
4613         error ("declaration of %q#D has no initializer", decl);
4614       else
4615         error ("aggregate %q#D has incomplete type and cannot be defined",
4616                decl);
4617       /* Change the type so that assemble_variable will give
4618          DECL an rtl we can live with: (mem (const_int 0)).  */
4619       type = TREE_TYPE (decl) = error_mark_node;
4620     }
4621
4622   /* Create a new scope to hold this declaration if necessary.
4623      Whether or not a new scope is necessary cannot be determined
4624      until after the type has been completed; if the type is a
4625      specialization of a class template it is not until after
4626      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4627      will be set correctly.  */
4628   maybe_push_cleanup_level (type);
4629 }
4630
4631 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4632    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4633    but will be set to a new CLEANUP_STMT if a temporary is created
4634    that must be destroyed subsequently.
4635
4636    Returns an initializer expression to use to initialize DECL, or
4637    NULL if the initialization can be performed statically.
4638
4639    Quotes on semantics can be found in ARM 8.4.3.  */
4640
4641 static tree
4642 grok_reference_init (tree decl, tree type, tree init, int flags)
4643 {
4644   if (init == NULL_TREE)
4645     {
4646       if ((DECL_LANG_SPECIFIC (decl) == 0
4647            || DECL_IN_AGGR_P (decl) == 0)
4648           && ! DECL_THIS_EXTERN (decl))
4649         error ("%qD declared as reference but not initialized", decl);
4650       return NULL_TREE;
4651     }
4652
4653   if (TREE_CODE (init) == TREE_LIST)
4654     init = build_x_compound_expr_from_list (init, ELK_INIT,
4655                                             tf_warning_or_error);
4656
4657   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4658       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4659     /* Note: default conversion is only called in very special cases.  */
4660     init = decay_conversion (init);
4661
4662   /* Convert INIT to the reference type TYPE.  This may involve the
4663      creation of a temporary, whose lifetime must be the same as that
4664      of the reference.  If so, a DECL_EXPR for the temporary will be
4665      added just after the DECL_EXPR for DECL.  That's why we don't set
4666      DECL_INITIAL for local references (instead assigning to them
4667      explicitly); we need to allow the temporary to be initialized
4668      first.  */
4669   return initialize_reference (type, init, flags,
4670                                tf_warning_or_error);
4671 }
4672
4673 /* Designated initializers in arrays are not supported in GNU C++.
4674    The parser cannot detect this error since it does not know whether
4675    a given brace-enclosed initializer is for a class type or for an
4676    array.  This function checks that CE does not use a designated
4677    initializer.  If it does, an error is issued.  Returns true if CE
4678    is valid, i.e., does not have a designated initializer.  */
4679
4680 static bool
4681 check_array_designated_initializer (const constructor_elt *ce,
4682                                     unsigned HOST_WIDE_INT index)
4683 {
4684   /* Designated initializers for array elements are not supported.  */
4685   if (ce->index)
4686     {
4687       /* The parser only allows identifiers as designated
4688          initializers.  */
4689       if (ce->index == error_mark_node)
4690         error ("name used in a GNU-style designated "
4691                "initializer for an array");
4692       else if (TREE_CODE (ce->index) == INTEGER_CST)
4693         {
4694           /* A C99 designator is OK if it matches the current index.  */
4695           if (TREE_INT_CST_LOW (ce->index) == index)
4696             return true;
4697           else
4698             sorry ("non-trivial designated initializers not supported");
4699         }
4700       else
4701         {
4702           gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4703           error ("name %qD used in a GNU-style designated "
4704                  "initializer for an array", ce->index);
4705         }
4706       return false;
4707     }
4708
4709   return true;
4710 }
4711
4712 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4713    array until we finish parsing the initializer.  If that's the
4714    situation we're in, update DECL accordingly.  */
4715
4716 static void
4717 maybe_deduce_size_from_array_init (tree decl, tree init)
4718 {
4719   tree type = TREE_TYPE (decl);
4720
4721   if (TREE_CODE (type) == ARRAY_TYPE
4722       && TYPE_DOMAIN (type) == NULL_TREE
4723       && TREE_CODE (decl) != TYPE_DECL)
4724     {
4725       /* do_default is really a C-ism to deal with tentative definitions.
4726          But let's leave it here to ease the eventual merge.  */
4727       int do_default = !DECL_EXTERNAL (decl);
4728       tree initializer = init ? init : DECL_INITIAL (decl);
4729       int failure = 0;
4730
4731       /* Check that there are no designated initializers in INIT, as
4732          those are not supported in GNU C++, and as the middle-end
4733          will crash if presented with a non-numeric designated
4734          initializer.  */
4735       if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4736         {
4737           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4738           constructor_elt *ce;
4739           HOST_WIDE_INT i;
4740           FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4741             if (!check_array_designated_initializer (ce, i))
4742               failure = 1;
4743         }
4744
4745       if (!failure)
4746         {
4747           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4748                                             do_default);
4749           if (failure == 1)
4750             {
4751               error ("initializer fails to determine size of %qD", decl);
4752               TREE_TYPE (decl) = error_mark_node;
4753             }
4754           else if (failure == 2)
4755             {
4756               if (do_default)
4757                 {
4758                   error ("array size missing in %qD", decl);
4759                   TREE_TYPE (decl) = error_mark_node;
4760                 }
4761               /* If a `static' var's size isn't known, make it extern as
4762                  well as static, so it does not get allocated.  If it's not
4763                  `static', then don't mark it extern; finish_incomplete_decl
4764                  will give it a default size and it will get allocated.  */
4765               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4766                 DECL_EXTERNAL (decl) = 1;
4767             }
4768           else if (failure == 3)
4769             {
4770               error ("zero-size array %qD", decl);
4771               TREE_TYPE (decl) = error_mark_node;
4772             }
4773         }
4774
4775       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4776
4777       relayout_decl (decl);
4778     }
4779 }
4780
4781 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4782    any appropriate error messages regarding the layout.  */
4783
4784 static void
4785 layout_var_decl (tree decl)
4786 {
4787   tree type;
4788
4789   type = TREE_TYPE (decl);
4790   if (type == error_mark_node)
4791     return;
4792
4793   /* If we haven't already layed out this declaration, do so now.
4794      Note that we must not call complete type for an external object
4795      because it's type might involve templates that we are not
4796      supposed to instantiate yet.  (And it's perfectly valid to say
4797      `extern X x' for some incomplete type `X'.)  */
4798   if (!DECL_EXTERNAL (decl))
4799     complete_type (type);
4800   if (!DECL_SIZE (decl)
4801       && TREE_TYPE (decl) != error_mark_node
4802       && (COMPLETE_TYPE_P (type)
4803           || (TREE_CODE (type) == ARRAY_TYPE
4804               && !TYPE_DOMAIN (type)
4805               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4806     layout_decl (decl, 0);
4807
4808   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4809     {
4810       /* An automatic variable with an incomplete type: that is an error.
4811          Don't talk about array types here, since we took care of that
4812          message in grokdeclarator.  */
4813       error ("storage size of %qD isn%'t known", decl);
4814       TREE_TYPE (decl) = error_mark_node;
4815     }
4816 #if 0
4817   /* Keep this code around in case we later want to control debug info
4818      based on whether a type is "used".  (jason 1999-11-11) */
4819
4820   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4821     /* Let debugger know it should output info for this type.  */
4822     note_debug_info_needed (ttype);
4823
4824   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4825     note_debug_info_needed (DECL_CONTEXT (decl));
4826 #endif
4827
4828   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4829       && DECL_SIZE (decl) != NULL_TREE
4830       && ! TREE_CONSTANT (DECL_SIZE (decl)))
4831     {
4832       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4833         constant_expression_warning (DECL_SIZE (decl));
4834       else
4835         {
4836           error ("storage size of %qD isn%'t constant", decl);
4837           TREE_TYPE (decl) = error_mark_node;
4838         }
4839     }
4840 }
4841
4842 /* If a local static variable is declared in an inline function, or if
4843    we have a weak definition, we must endeavor to create only one
4844    instance of the variable at link-time.  */
4845
4846 void
4847 maybe_commonize_var (tree decl)
4848 {
4849   /* Static data in a function with comdat linkage also has comdat
4850      linkage.  */
4851   if (TREE_STATIC (decl)
4852       /* Don't mess with __FUNCTION__.  */
4853       && ! DECL_ARTIFICIAL (decl)
4854       && DECL_FUNCTION_SCOPE_P (decl)
4855       && vague_linkage_p (DECL_CONTEXT (decl)))
4856     {
4857       if (flag_weak)
4858         {
4859           /* With weak symbols, we simply make the variable COMDAT;
4860              that will cause copies in multiple translations units to
4861              be merged.  */
4862           comdat_linkage (decl);
4863         }
4864       else
4865         {
4866           if (DECL_INITIAL (decl) == NULL_TREE
4867               || DECL_INITIAL (decl) == error_mark_node)
4868             {
4869               /* Without weak symbols, we can use COMMON to merge
4870                  uninitialized variables.  */
4871               TREE_PUBLIC (decl) = 1;
4872               DECL_COMMON (decl) = 1;
4873             }
4874           else
4875             {
4876               /* While for initialized variables, we must use internal
4877                  linkage -- which means that multiple copies will not
4878                  be merged.  */
4879               TREE_PUBLIC (decl) = 0;
4880               DECL_COMMON (decl) = 0;
4881               warning_at (input_location, 0,
4882                           "sorry: semantics of inline function static "
4883                           "data %q+#D are wrong (you%'ll wind up "
4884                           "with multiple copies)", decl);
4885               warning_at (DECL_SOURCE_LOCATION (decl), 0, 
4886                           "  you can work around this by removing "
4887                           "the initializer");
4888             }
4889         }
4890     }
4891   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4892     /* Set it up again; we might have set DECL_INITIAL since the last
4893        time.  */
4894     comdat_linkage (decl);
4895 }
4896
4897 /* Issue an error message if DECL is an uninitialized const variable.  */
4898
4899 static void
4900 check_for_uninitialized_const_var (tree decl)
4901 {
4902   tree type = strip_array_types (TREE_TYPE (decl));
4903
4904   /* ``Unless explicitly declared extern, a const object does not have
4905      external linkage and must be initialized. ($8.4; $12.1)'' ARM
4906      7.1.6 */
4907   if (TREE_CODE (decl) == VAR_DECL
4908       && TREE_CODE (type) != REFERENCE_TYPE
4909       && CP_TYPE_CONST_P (type)
4910       && !DECL_INITIAL (decl))
4911     {
4912       tree field = default_init_uninitialized_part (type);
4913       if (!field)
4914         return;
4915
4916       permerror (DECL_SOURCE_LOCATION (decl),
4917                  "uninitialized const %qD", decl);
4918
4919       if (CLASS_TYPE_P (type))
4920         {
4921           tree defaulted_ctor;
4922
4923           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4924                   "%q#T has no user-provided default constructor", type);
4925           defaulted_ctor = in_class_defaulted_default_constructor (type);
4926           if (defaulted_ctor)
4927             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4928                     "constructor is not user-provided because it is "
4929                     "explicitly defaulted in the class body");
4930           inform (0, "and the implicitly-defined constructor does not "
4931                   "initialize %q+#D", field);
4932         }
4933     }
4934 }
4935 \f
4936 /* Structure holding the current initializer being processed by reshape_init.
4937    CUR is a pointer to the current element being processed, END is a pointer
4938    after the last element present in the initializer.  */
4939 typedef struct reshape_iterator_t
4940 {
4941   constructor_elt *cur;
4942   constructor_elt *end;
4943 } reshape_iter;
4944
4945 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4946
4947 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4948    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4949    initialized.  If there are no more such fields, the return value
4950    will be NULL.  */
4951
4952 tree
4953 next_initializable_field (tree field)
4954 {
4955   while (field
4956          && (TREE_CODE (field) != FIELD_DECL
4957              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4958              || DECL_ARTIFICIAL (field)))
4959     field = DECL_CHAIN (field);
4960
4961   return field;
4962 }
4963
4964 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4965    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4966    INTEGER_CST representing the size of the array minus one (the maximum index),
4967    or NULL_TREE if the array was declared without specifying the size. D is
4968    the iterator within the constructor.  */
4969
4970 static tree
4971 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4972                       tsubst_flags_t complain)
4973 {
4974   tree new_init;
4975   bool sized_array_p = (max_index != NULL_TREE);
4976   unsigned HOST_WIDE_INT max_index_cst = 0;
4977   unsigned HOST_WIDE_INT index;
4978
4979   /* The initializer for an array is always a CONSTRUCTOR.  */
4980   new_init = build_constructor (init_list_type_node, NULL);
4981
4982   if (sized_array_p)
4983     {
4984       /* Minus 1 is used for zero sized arrays.  */
4985       if (integer_all_onesp (max_index))
4986         return new_init;
4987
4988       if (host_integerp (max_index, 1))
4989         max_index_cst = tree_low_cst (max_index, 1);
4990       /* sizetype is sign extended, not zero extended.  */
4991       else
4992         max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4993                                       1);
4994     }
4995
4996   /* Loop until there are no more initializers.  */
4997   for (index = 0;
4998        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4999        ++index)
5000     {
5001       tree elt_init;
5002
5003       check_array_designated_initializer (d->cur, index);
5004       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5005                                  complain);
5006       if (elt_init == error_mark_node)
5007         return error_mark_node;
5008       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5009                               size_int (index), elt_init);
5010       if (!TREE_CONSTANT (elt_init))
5011         TREE_CONSTANT (new_init) = false;
5012     }
5013
5014   return new_init;
5015 }
5016
5017 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5018    Parameters are the same of reshape_init_r.  */
5019
5020 static tree
5021 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5022 {
5023   tree max_index = NULL_TREE;
5024
5025   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5026
5027   if (TYPE_DOMAIN (type))
5028     max_index = array_type_nelts (type);
5029
5030   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5031 }
5032
5033 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5034    Parameters are the same of reshape_init_r.  */
5035
5036 static tree
5037 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5038 {
5039   tree max_index = NULL_TREE;
5040
5041   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5042
5043   if (COMPOUND_LITERAL_P (d->cur->value))
5044     {
5045       tree value = d->cur->value;
5046       if (!same_type_p (TREE_TYPE (value), type))
5047         {
5048           if (complain & tf_error)
5049             error ("invalid type %qT as initializer for a vector of type %qT",
5050                    TREE_TYPE (d->cur->value), type);
5051           value = error_mark_node;
5052         }
5053       ++d->cur;
5054       return value;
5055     }
5056
5057   /* For a vector, we initialize it as an array of the appropriate size.  */
5058   if (TREE_CODE (type) == VECTOR_TYPE)
5059     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5060
5061   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5062 }
5063
5064 /* Subroutine of reshape_init_r, processes the initializers for classes
5065    or union. Parameters are the same of reshape_init_r.  */
5066
5067 static tree
5068 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5069                     tsubst_flags_t complain)
5070 {
5071   tree field;
5072   tree new_init;
5073
5074   gcc_assert (CLASS_TYPE_P (type));
5075
5076   /* The initializer for a class is always a CONSTRUCTOR.  */
5077   new_init = build_constructor (init_list_type_node, NULL);
5078   field = next_initializable_field (TYPE_FIELDS (type));
5079
5080   if (!field)
5081     {
5082       /* [dcl.init.aggr]
5083
5084         An initializer for an aggregate member that is an
5085         empty class shall have the form of an empty
5086         initializer-list {}.  */
5087       if (!first_initializer_p)
5088         {
5089           if (complain & tf_error)
5090             error ("initializer for %qT must be brace-enclosed", type);
5091           return error_mark_node;
5092         }
5093       return new_init;
5094     }
5095
5096   /* Loop through the initializable fields, gathering initializers.  */
5097   while (d->cur != d->end)
5098     {
5099       tree field_init;
5100
5101       /* Handle designated initializers, as an extension.  */
5102       if (d->cur->index)
5103         {
5104           if (TREE_CODE (d->cur->index) == INTEGER_CST)
5105             {
5106               if (complain & tf_error)
5107                 error ("%<[%E] =%> used in a GNU-style designated initializer"
5108                        " for class %qT", d->cur->index, type);
5109               return error_mark_node;
5110             }
5111
5112           field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5113
5114           if (!field || TREE_CODE (field) != FIELD_DECL)
5115             {
5116               if (complain & tf_error)
5117                 error ("%qT has no non-static data member named %qD", type,
5118                        d->cur->index);
5119               return error_mark_node;
5120             }
5121         }
5122
5123       /* If we processed all the member of the class, we are done.  */
5124       if (!field)
5125         break;
5126
5127       field_init = reshape_init_r (TREE_TYPE (field), d,
5128                                    /*first_initializer_p=*/false, complain);
5129       if (field_init == error_mark_node)
5130         return error_mark_node;
5131
5132       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5133
5134       /* [dcl.init.aggr]
5135
5136         When a union  is  initialized with a brace-enclosed
5137         initializer, the braces shall only contain an
5138         initializer for the first member of the union.  */
5139       if (TREE_CODE (type) == UNION_TYPE)
5140         break;
5141
5142       field = next_initializable_field (DECL_CHAIN (field));
5143     }
5144
5145   return new_init;
5146 }
5147
5148 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5149    designators are not valid; either complain or return true to indicate
5150    that reshape_init_r should return error_mark_node.  */
5151
5152 static bool
5153 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5154 {
5155   if (d->cur->index)
5156     {
5157       if (complain & tf_error)
5158         error ("C99 designator %qE outside aggregate initializer",
5159                d->cur->index);
5160       else
5161         return true;
5162     }
5163   return false;
5164 }
5165
5166 /* Subroutine of reshape_init, which processes a single initializer (part of
5167    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5168    iterator within the CONSTRUCTOR which points to the initializer to process.
5169    FIRST_INITIALIZER_P is true if this is the first initializer of the
5170    outermost CONSTRUCTOR node.  */
5171
5172 static tree
5173 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5174                 tsubst_flags_t complain)
5175 {
5176   tree init = d->cur->value;
5177
5178   if (error_operand_p (init))
5179     return error_mark_node;
5180
5181   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5182       && has_designator_problem (d, complain))
5183     return error_mark_node;
5184
5185   if (TREE_CODE (type) == COMPLEX_TYPE)
5186     {
5187       /* A complex type can be initialized from one or two initializers,
5188          but braces are not elided.  */
5189       d->cur++;
5190       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5191         {
5192           if (CONSTRUCTOR_NELTS (init) > 2)
5193             {
5194               if (complain & tf_error)
5195                 error ("too many initializers for %qT", type);
5196               else
5197                 return error_mark_node;
5198             }
5199         }
5200       else if (first_initializer_p && d->cur != d->end)
5201         {
5202           VEC(constructor_elt, gc) *v = 0;
5203           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5204           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5205           if (has_designator_problem (d, complain))
5206             return error_mark_node;
5207           d->cur++;
5208           init = build_constructor (init_list_type_node, v);
5209         }
5210       return init;
5211     }
5212
5213   /* A non-aggregate type is always initialized with a single
5214      initializer.  */
5215   if (!CP_AGGREGATE_TYPE_P (type))
5216     {
5217       /* It is invalid to initialize a non-aggregate type with a
5218          brace-enclosed initializer before C++0x.
5219          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5220          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5221          a CONSTRUCTOR (with a record type).  */
5222       if (TREE_CODE (init) == CONSTRUCTOR
5223           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5224         {
5225           if (SCALAR_TYPE_P (type))
5226             {
5227               if (complain & tf_error)
5228                 error ("braces around scalar initializer for type %qT", type);
5229               init = error_mark_node;
5230             }
5231           else
5232             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5233         }
5234
5235       d->cur++;
5236       return init;
5237     }
5238
5239   /* [dcl.init.aggr]
5240
5241      All implicit type conversions (clause _conv_) are considered when
5242      initializing the aggregate member with an initializer from an
5243      initializer-list.  If the initializer can initialize a member,
5244      the member is initialized.  Otherwise, if the member is itself a
5245      non-empty subaggregate, brace elision is assumed and the
5246      initializer is considered for the initialization of the first
5247      member of the subaggregate.  */
5248   if (TREE_CODE (init) != CONSTRUCTOR
5249       /* But don't try this for the first initializer, since that would be
5250          looking through the outermost braces; A a2 = { a1 }; is not a
5251          valid aggregate initialization.  */
5252       && !first_initializer_p
5253       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5254           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5255     {
5256       d->cur++;
5257       return init;
5258     }
5259
5260   /* [dcl.init.string]
5261
5262       A char array (whether plain char, signed char, or unsigned char)
5263       can be initialized by a string-literal (optionally enclosed in
5264       braces); a wchar_t array can be initialized by a wide
5265       string-literal (optionally enclosed in braces).  */
5266   if (TREE_CODE (type) == ARRAY_TYPE
5267       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5268     {
5269       tree str_init = init;
5270
5271       /* Strip one level of braces if and only if they enclose a single
5272          element (as allowed by [dcl.init.string]).  */
5273       if (!first_initializer_p
5274           && TREE_CODE (str_init) == CONSTRUCTOR
5275           && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5276         {
5277           str_init = VEC_index (constructor_elt,
5278                                 CONSTRUCTOR_ELTS (str_init), 0)->value;
5279         }
5280
5281       /* If it's a string literal, then it's the initializer for the array
5282          as a whole. Otherwise, continue with normal initialization for
5283          array types (one value per array element).  */
5284       if (TREE_CODE (str_init) == STRING_CST)
5285         {
5286           if (has_designator_problem (d, complain))
5287             return error_mark_node;
5288           d->cur++;
5289           return str_init;
5290         }
5291     }
5292
5293   /* The following cases are about aggregates. If we are not within a full
5294      initializer already, and there is not a CONSTRUCTOR, it means that there
5295      is a missing set of braces (that is, we are processing the case for
5296      which reshape_init exists).  */
5297   if (!first_initializer_p)
5298     {
5299       if (TREE_CODE (init) == CONSTRUCTOR)
5300         {
5301           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5302             /* There is no need to reshape pointer-to-member function
5303                initializers, as they are always constructed correctly
5304                by the front end.  */
5305            ;
5306           else if (COMPOUND_LITERAL_P (init))
5307           /* For a nested compound literal, there is no need to reshape since
5308              brace elision is not allowed. Even if we decided to allow it,
5309              we should add a call to reshape_init in finish_compound_literal,
5310              before calling digest_init, so changing this code would still
5311              not be necessary.  */
5312             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5313           else
5314             {
5315               ++d->cur;
5316               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5317               return reshape_init (type, init, complain);
5318             }
5319         }
5320
5321       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5322                type);
5323     }
5324
5325   /* Dispatch to specialized routines.  */
5326   if (CLASS_TYPE_P (type))
5327     return reshape_init_class (type, d, first_initializer_p, complain);
5328   else if (TREE_CODE (type) == ARRAY_TYPE)
5329     return reshape_init_array (type, d, complain);
5330   else if (TREE_CODE (type) == VECTOR_TYPE)
5331     return reshape_init_vector (type, d, complain);
5332   else
5333     gcc_unreachable();
5334 }
5335
5336 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5337    brace-enclosed aggregate initializer.
5338
5339    INIT is the CONSTRUCTOR containing the list of initializers describing
5340    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5341    It may not presently match the shape of the TYPE; for example:
5342
5343      struct S { int a; int b; };
5344      struct S a[] = { 1, 2, 3, 4 };
5345
5346    Here INIT will hold a VEC of four elements, rather than a
5347    VEC of two elements, each itself a VEC of two elements.  This
5348    routine transforms INIT from the former form into the latter.  The
5349    revised CONSTRUCTOR node is returned.  */
5350
5351 tree
5352 reshape_init (tree type, tree init, tsubst_flags_t complain)
5353 {
5354   VEC(constructor_elt, gc) *v;
5355   reshape_iter d;
5356   tree new_init;
5357
5358   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5359
5360   v = CONSTRUCTOR_ELTS (init);
5361
5362   /* An empty constructor does not need reshaping, and it is always a valid
5363      initializer.  */
5364   if (VEC_empty (constructor_elt, v))
5365     return init;
5366
5367   /* Recurse on this CONSTRUCTOR.  */
5368   d.cur = VEC_index (constructor_elt, v, 0);
5369   d.end = d.cur + VEC_length (constructor_elt, v);
5370
5371   new_init = reshape_init_r (type, &d, true, complain);
5372   if (new_init == error_mark_node)
5373     return error_mark_node;
5374
5375   /* Make sure all the element of the constructor were used. Otherwise,
5376      issue an error about exceeding initializers.  */
5377   if (d.cur != d.end)
5378     {
5379       if (complain & tf_error)
5380         error ("too many initializers for %qT", type);
5381       else
5382         return error_mark_node;
5383     }
5384
5385   return new_init;
5386 }
5387
5388 /* Verify array initializer.  Returns true if errors have been reported.  */
5389
5390 bool
5391 check_array_initializer (tree decl, tree type, tree init)
5392 {
5393   tree element_type = TREE_TYPE (type);
5394
5395   /* The array type itself need not be complete, because the
5396      initializer may tell us how many elements are in the array.
5397      But, the elements of the array must be complete.  */
5398   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5399     {
5400       if (decl)
5401         error ("elements of array %q#D have incomplete type", decl);
5402       else
5403         error ("elements of array %q#T have incomplete type", type);
5404       return true;
5405     }
5406   /* It is not valid to initialize a VLA.  */
5407   if (init
5408       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5409           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5410     {
5411       if (decl)
5412         error ("variable-sized object %qD may not be initialized", decl);
5413       else
5414         error ("variable-sized compound literal");
5415       return true;
5416     }
5417   return false;
5418 }
5419
5420 /* Subroutine of check_initializer; args are passed down from that function.
5421    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5422
5423 static tree
5424 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5425      
5426 {
5427   gcc_assert (stmts_are_full_exprs_p ());
5428   return build_aggr_init (decl, init, flags, tf_warning_or_error);
5429 }
5430
5431 /* Verify INIT (the initializer for DECL), and record the
5432    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5433    grok_reference_init.
5434
5435    If the return value is non-NULL, it is an expression that must be
5436    evaluated dynamically to initialize DECL.  */
5437
5438 static tree
5439 check_initializer (tree decl, tree init, int flags, VEC(tree,gc) **cleanups)
5440 {
5441   tree type = TREE_TYPE (decl);
5442   tree init_code = NULL;
5443   tree extra_init = NULL_TREE;
5444   tree core_type;
5445
5446   /* Things that are going to be initialized need to have complete
5447      type.  */
5448   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5449
5450   if (DECL_HAS_VALUE_EXPR_P (decl))
5451     {
5452       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5453          it doesn't have storage to be initialized.  */
5454       gcc_assert (init == NULL_TREE);
5455       return NULL_TREE;
5456     }
5457
5458   if (type == error_mark_node)
5459     /* We will have already complained.  */
5460     return NULL_TREE;
5461
5462   if (TREE_CODE (type) == ARRAY_TYPE)
5463     {
5464       if (check_array_initializer (decl, type, init))
5465         return NULL_TREE;
5466     }
5467   else if (!COMPLETE_TYPE_P (type))
5468     {
5469       error ("%q#D has incomplete type", decl);
5470       TREE_TYPE (decl) = error_mark_node;
5471       return NULL_TREE;
5472     }
5473   else
5474     /* There is no way to make a variable-sized class type in GNU C++.  */
5475     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5476
5477   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5478     {
5479       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5480       if (SCALAR_TYPE_P (type))
5481         {
5482           if (init_len == 0)
5483             {
5484               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5485               init = build_zero_init (type, NULL_TREE, false);
5486             }
5487           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5488             {
5489               error ("scalar object %qD requires one element in initializer",
5490                      decl);
5491               TREE_TYPE (decl) = error_mark_node;
5492               return NULL_TREE;
5493             }
5494         }
5495     }
5496
5497   if (TREE_CODE (decl) == CONST_DECL)
5498     {
5499       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5500
5501       DECL_INITIAL (decl) = init;
5502
5503       gcc_assert (init != NULL_TREE);
5504       init = NULL_TREE;
5505     }
5506   else if (!init && DECL_REALLY_EXTERN (decl))
5507     ;
5508   else if (init || type_build_ctor_call (type)
5509            || TREE_CODE (type) == REFERENCE_TYPE)
5510     {
5511       if (TREE_CODE (type) == REFERENCE_TYPE)
5512         {
5513           init = grok_reference_init (decl, type, init, flags);
5514           flags |= LOOKUP_ALREADY_DIGESTED;
5515         }
5516       else if (!init)
5517         check_for_uninitialized_const_var (decl);
5518       /* Do not reshape constructors of vectors (they don't need to be
5519          reshaped.  */
5520       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5521         {
5522           if (is_std_init_list (type))
5523             {
5524               init = perform_implicit_conversion (type, init,
5525                                                   tf_warning_or_error);
5526               flags |= LOOKUP_ALREADY_DIGESTED;
5527             }
5528           else if (TYPE_NON_AGGREGATE_CLASS (type))
5529             {
5530               /* Don't reshape if the class has constructors.  */
5531               if (cxx_dialect == cxx98)
5532                 error ("in C++98 %qD must be initialized by constructor, "
5533                        "not by %<{...}%>",
5534                        decl);
5535             }
5536           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5537             {
5538               error ("opaque vector types cannot be initialized");
5539               init = error_mark_node;
5540             }
5541           else
5542             {
5543               init = reshape_init (type, init, tf_warning_or_error);
5544               if (SCALAR_TYPE_P (type))
5545                 check_narrowing (type, init);
5546             }
5547         }
5548
5549       /* If DECL has an array type without a specific bound, deduce the
5550          array size from the initializer.  */
5551       maybe_deduce_size_from_array_init (decl, init);
5552       type = TREE_TYPE (decl);
5553       if (type == error_mark_node)
5554         return NULL_TREE;
5555
5556       if ((type_build_ctor_call (type) || CLASS_TYPE_P (type))
5557           && !(flags & LOOKUP_ALREADY_DIGESTED)
5558           && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
5559                && CP_AGGREGATE_TYPE_P (type)
5560                && (CLASS_TYPE_P (type)
5561                    || type_has_extended_temps (type))))
5562         {
5563           init_code = build_aggr_init_full_exprs (decl, init, flags);
5564
5565           /* If this is a constexpr initializer, expand_default_init will
5566              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5567              case, pull the initializer back out and pass it down into
5568              store_init_value.  */
5569           while (TREE_CODE (init_code) == EXPR_STMT
5570                  || TREE_CODE (init_code) == CONVERT_EXPR)
5571             init_code = TREE_OPERAND (init_code, 0);
5572           if (TREE_CODE (init_code) == INIT_EXPR)
5573             {
5574               init = TREE_OPERAND (init_code, 1);
5575               init_code = NULL_TREE;
5576               /* Don't call digest_init; it's unnecessary and will complain
5577                  about aggregate initialization of non-aggregate classes.  */
5578               flags |= LOOKUP_ALREADY_DIGESTED;
5579             }
5580           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5581             {
5582               /* Declared constexpr, but no suitable initializer; massage
5583                  init appropriately so we can pass it into store_init_value
5584                  for the error.  */
5585               if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5586                 init = finish_compound_literal (type, init,
5587                                                 tf_warning_or_error);
5588               else if (CLASS_TYPE_P (type)
5589                        && (!init || TREE_CODE (init) == TREE_LIST))
5590                 {
5591                   init = build_functional_cast (type, init, tf_none);
5592                   if (init != error_mark_node)
5593                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5594                 }
5595               init_code = NULL_TREE;
5596             }
5597           else
5598             init = NULL_TREE;
5599         }
5600
5601       if (init && TREE_CODE (init) != TREE_VEC)
5602         {
5603           /* In aggregate initialization of a variable, each element
5604              initialization is a full-expression because there is no
5605              enclosing expression.  */
5606           gcc_assert (stmts_are_full_exprs_p ());
5607
5608           init_code = store_init_value (decl, init, cleanups, flags);
5609
5610           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5611               && DECL_INITIAL (decl)
5612               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5613               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5614             warning (0, "array %qD initialized by parenthesized string literal %qE",
5615                      decl, DECL_INITIAL (decl));
5616           init = NULL;
5617         }
5618     }
5619   else
5620     {
5621       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5622           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5623               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5624         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5625                                                   /*complain=*/true);
5626
5627       check_for_uninitialized_const_var (decl);
5628     }
5629
5630   if (init && init != error_mark_node)
5631     init_code = build2 (INIT_EXPR, type, decl, init);
5632
5633   if (extra_init)
5634     init_code = add_stmt_to_compound (extra_init, init_code);
5635
5636   if (init_code && DECL_IN_AGGR_P (decl))
5637     {
5638       static int explained = 0;
5639
5640       if (cxx_dialect < cxx0x)
5641         error ("initializer invalid for static member with constructor");
5642       else
5643         error ("non-constant in-class initialization invalid for static "
5644                "member %qD", decl);
5645       if (!explained)
5646         {
5647           error ("(an out of class initialization is required)");
5648           explained = 1;
5649         }
5650     }
5651
5652   return init_code;
5653 }
5654
5655 /* If DECL is not a local variable, give it RTL.  */
5656
5657 static void
5658 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5659 {
5660   int toplev = toplevel_bindings_p ();
5661   int defer_p;
5662   const char *filename;
5663
5664   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5665   if (asmspec)
5666     {
5667       /* The `register' keyword, when used together with an
5668          asm-specification, indicates that the variable should be
5669          placed in a particular register.  */
5670       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5671         {
5672           set_user_assembler_name (decl, asmspec);
5673           DECL_HARD_REGISTER (decl) = 1;
5674         }
5675       else
5676         {
5677           if (TREE_CODE (decl) == FUNCTION_DECL
5678               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5679             set_builtin_user_assembler_name (decl, asmspec);
5680           set_user_assembler_name (decl, asmspec);
5681         }
5682     }
5683
5684   /* Handle non-variables up front.  */
5685   if (TREE_CODE (decl) != VAR_DECL)
5686     {
5687       rest_of_decl_compilation (decl, toplev, at_eof);
5688       return;
5689     }
5690
5691   /* If we see a class member here, it should be a static data
5692      member.  */
5693   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5694     {
5695       gcc_assert (TREE_STATIC (decl));
5696       /* An in-class declaration of a static data member should be
5697          external; it is only a declaration, and not a definition.  */
5698       if (init == NULL_TREE)
5699         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5700     }
5701
5702   /* We don't create any RTL for local variables.  */
5703   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5704     return;
5705
5706   /* We defer emission of local statics until the corresponding
5707      DECL_EXPR is expanded.  */
5708   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5709
5710   /* We try to defer namespace-scope static constants so that they are
5711      not emitted into the object file unnecessarily.  */
5712   filename = input_filename;
5713   if (!DECL_VIRTUAL_P (decl)
5714       && TREE_READONLY (decl)
5715       && DECL_INITIAL (decl) != NULL_TREE
5716       && DECL_INITIAL (decl) != error_mark_node
5717       && filename != NULL
5718       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5719       && toplev
5720       && !TREE_PUBLIC (decl))
5721     {
5722       /* Fool with the linkage of static consts according to #pragma
5723          interface.  */
5724       struct c_fileinfo *finfo = get_fileinfo (filename);
5725       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5726         {
5727           TREE_PUBLIC (decl) = 1;
5728           DECL_EXTERNAL (decl) = finfo->interface_only;
5729         }
5730
5731       defer_p = 1;
5732     }
5733   /* Likewise for template instantiations.  */
5734   else if (DECL_LANG_SPECIFIC (decl)
5735            && DECL_IMPLICIT_INSTANTIATION (decl))
5736     defer_p = 1;
5737
5738   /* If we're not deferring, go ahead and assemble the variable.  */
5739   if (!defer_p)
5740     rest_of_decl_compilation (decl, toplev, at_eof);
5741 }
5742
5743 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5744
5745 static tree
5746 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5747 {
5748   /* Stop at types or full-expression boundaries.  */
5749   if (TYPE_P (*stmt_p)
5750       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5751     {
5752       *walk_subtrees = 0;
5753       return NULL_TREE;
5754     }
5755
5756   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5757     {
5758       tree guard = (tree)data;
5759       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5760
5761       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5762       /* Tell honor_protect_cleanup_actions to handle this as a separate
5763          cleanup.  */
5764       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5765  
5766       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5767     }
5768
5769   return NULL_TREE;
5770 }
5771
5772 /* We're initializing a local variable which has a cleanup GUARD.  If there
5773    are any temporaries used in the initializer INIT of this variable, we
5774    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5775    variable will be cleaned up properly if one of them throws.
5776
5777    Unfortunately, there's no way to express this properly in terms of
5778    nesting, as the regions for the temporaries overlap the region for the
5779    variable itself; if there are two temporaries, the variable needs to be
5780    the first thing destroyed if either of them throws.  However, we only
5781    want to run the variable's cleanup if it actually got constructed.  So
5782    we need to guard the temporary cleanups with the variable's cleanup if
5783    they are run on the normal path, but not if they are run on the
5784    exceptional path.  We implement this by telling
5785    honor_protect_cleanup_actions to strip the variable cleanup from the
5786    exceptional path.  */
5787
5788 static void
5789 wrap_temporary_cleanups (tree init, tree guard)
5790 {
5791   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5792 }
5793
5794 /* Generate code to initialize DECL (a local variable).  */
5795
5796 static void
5797 initialize_local_var (tree decl, tree init)
5798 {
5799   tree type = TREE_TYPE (decl);
5800   tree cleanup;
5801   int already_used;
5802
5803   gcc_assert (TREE_CODE (decl) == VAR_DECL
5804               || TREE_CODE (decl) == RESULT_DECL);
5805   gcc_assert (!TREE_STATIC (decl));
5806
5807   if (DECL_SIZE (decl) == NULL_TREE)
5808     {
5809       /* If we used it already as memory, it must stay in memory.  */
5810       DECL_INITIAL (decl) = NULL_TREE;
5811       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5812       return;
5813     }
5814
5815   if (type == error_mark_node)
5816     return;
5817
5818   /* Compute and store the initial value.  */
5819   already_used = TREE_USED (decl) || TREE_USED (type);
5820   if (TREE_USED (type))
5821     DECL_READ_P (decl) = 1;
5822
5823   /* Generate a cleanup, if necessary.  */
5824   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5825
5826   /* Perform the initialization.  */
5827   if (init)
5828     {
5829       if (TREE_CODE (init) == INIT_EXPR
5830           && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5831         {
5832           /* Stick simple initializers in DECL_INITIAL so that
5833              -Wno-init-self works (c++/34772).  */
5834           gcc_assert (TREE_OPERAND (init, 0) == decl);
5835           DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5836         }
5837       else
5838         {
5839           int saved_stmts_are_full_exprs_p;
5840
5841           /* If we're only initializing a single object, guard the
5842              destructors of any temporaries used in its initializer with
5843              its destructor.  This isn't right for arrays because each
5844              element initialization is a full-expression.  */
5845           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5846             wrap_temporary_cleanups (init, cleanup);
5847
5848           gcc_assert (building_stmt_list_p ());
5849           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5850           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5851           finish_expr_stmt (init);
5852           current_stmt_tree ()->stmts_are_full_exprs_p =
5853             saved_stmts_are_full_exprs_p;
5854         }
5855     }
5856
5857   /* Set this to 0 so we can tell whether an aggregate which was
5858      initialized was ever used.  Don't do this if it has a
5859      destructor, so we don't complain about the 'resource
5860      allocation is initialization' idiom.  Now set
5861      attribute((unused)) on types so decls of that type will be
5862      marked used. (see TREE_USED, above.)  */
5863   if (TYPE_NEEDS_CONSTRUCTING (type)
5864       && ! already_used
5865       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5866       && DECL_NAME (decl))
5867     TREE_USED (decl) = 0;
5868   else if (already_used)
5869     TREE_USED (decl) = 1;
5870
5871   if (cleanup)
5872     finish_decl_cleanup (decl, cleanup);
5873 }
5874
5875 /* DECL is a VAR_DECL for a compiler-generated variable with static
5876    storage duration (like a virtual table) whose initializer is a
5877    compile-time constant.  Initialize the variable and provide it to the
5878    back end.  */
5879
5880 void
5881 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5882 {
5883   tree init;
5884   gcc_assert (DECL_ARTIFICIAL (decl));
5885   init = build_constructor (TREE_TYPE (decl), v);
5886   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5887   DECL_INITIAL (decl) = init;
5888   DECL_INITIALIZED_P (decl) = 1;
5889   determine_visibility (decl);
5890   layout_var_decl (decl);
5891   maybe_commonize_var (decl);
5892   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5893 }
5894
5895 /* INIT is the initializer for a variable, as represented by the
5896    parser.  Returns true iff INIT is type-dependent.  */
5897
5898 static bool
5899 type_dependent_init_p (tree init)
5900 {
5901   if (TREE_CODE (init) == TREE_LIST)
5902     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5903     return any_type_dependent_elements_p (init);
5904   else if (TREE_CODE (init) == CONSTRUCTOR)
5905   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5906     {
5907       VEC(constructor_elt, gc) *elts;
5908       size_t nelts;
5909       size_t i;
5910
5911       elts = CONSTRUCTOR_ELTS (init);
5912       nelts = VEC_length (constructor_elt, elts);
5913       for (i = 0; i < nelts; ++i)
5914         if (type_dependent_init_p (VEC_index (constructor_elt,
5915                                               elts, i)->value))
5916           return true;
5917     }
5918   else
5919     /* It must be a simple expression, e.g., int i = 3;  */
5920     return type_dependent_expression_p (init);
5921
5922   return false;
5923 }
5924
5925 /* INIT is the initializer for a variable, as represented by the
5926    parser.  Returns true iff INIT is value-dependent.  */
5927
5928 static bool
5929 value_dependent_init_p (tree init)
5930 {
5931   if (TREE_CODE (init) == TREE_LIST)
5932     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5933     return any_value_dependent_elements_p (init);
5934   else if (TREE_CODE (init) == CONSTRUCTOR)
5935   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5936     {
5937       VEC(constructor_elt, gc) *elts;
5938       size_t nelts;
5939       size_t i;
5940
5941       elts = CONSTRUCTOR_ELTS (init);
5942       nelts = VEC_length (constructor_elt, elts);
5943       for (i = 0; i < nelts; ++i)
5944         if (value_dependent_init_p (VEC_index (constructor_elt,
5945                                                elts, i)->value))
5946           return true;
5947     }
5948   else
5949     /* It must be a simple expression, e.g., int i = 3;  */
5950     return value_dependent_expression_p (init);
5951   
5952   return false;
5953 }
5954
5955 /* Finish processing of a declaration;
5956    install its line number and initial value.
5957    If the length of an array type is not known before,
5958    it must be determined now, from the initial value, or it is an error.
5959
5960    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5961    true, then INIT is an integral constant expression.
5962
5963    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5964    if the (init) syntax was used.  */
5965
5966 void
5967 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5968                 tree asmspec_tree, int flags)
5969 {
5970   tree type;
5971   VEC(tree,gc) *cleanups = NULL;
5972   const char *asmspec = NULL;
5973   int was_readonly = 0;
5974   bool var_definition_p = false;
5975   tree auto_node;
5976
5977   if (decl == error_mark_node)
5978     return;
5979   else if (! decl)
5980     {
5981       if (init)
5982         error ("assignment (not initialization) in declaration");
5983       return;
5984     }
5985
5986   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5987   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5988   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5989
5990   type = TREE_TYPE (decl);
5991   if (type == error_mark_node)
5992     return;
5993
5994   /* If a name was specified, get the string.  */
5995   if (at_namespace_scope_p ())
5996     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5997   if (asmspec_tree && asmspec_tree != error_mark_node)
5998     asmspec = TREE_STRING_POINTER (asmspec_tree);
5999
6000   if (current_class_type
6001       && CP_DECL_CONTEXT (decl) == current_class_type
6002       && TYPE_BEING_DEFINED (current_class_type)
6003       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6004       && (DECL_INITIAL (decl) || init))
6005     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6006
6007   auto_node = type_uses_auto (type);
6008   if (auto_node)
6009     {
6010       tree d_init;
6011       if (init == NULL_TREE)
6012         {
6013           error ("declaration of %q#D has no initializer", decl);
6014           TREE_TYPE (decl) = error_mark_node;
6015           return;
6016         }
6017       d_init = init;
6018       if (TREE_CODE (d_init) == TREE_LIST)
6019         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6020                                                   tf_warning_or_error);
6021       d_init = resolve_nondeduced_context (d_init);
6022       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6023                                                    auto_node);
6024       if (type == error_mark_node)
6025         return;
6026     }
6027
6028   if (!ensure_literal_type_for_constexpr_object (decl))
6029     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6030
6031   if (TREE_CODE (decl) == VAR_DECL
6032       && DECL_CLASS_SCOPE_P (decl)
6033       && DECL_INITIALIZED_IN_CLASS_P (decl))
6034     check_static_variable_definition (decl, type);
6035
6036   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6037     {
6038       tree clone;
6039       if (init == ridpointers[(int)RID_DELETE])
6040         {
6041           /* FIXME check this is 1st decl.  */
6042           DECL_DELETED_FN (decl) = 1;
6043           DECL_DECLARED_INLINE_P (decl) = 1;
6044           DECL_INITIAL (decl) = error_mark_node;
6045           FOR_EACH_CLONE (clone, decl)
6046             {
6047               DECL_DELETED_FN (clone) = 1;
6048               DECL_DECLARED_INLINE_P (clone) = 1;
6049               DECL_INITIAL (clone) = error_mark_node;
6050             }
6051           init = NULL_TREE;
6052         }
6053       else if (init == ridpointers[(int)RID_DEFAULT])
6054         {
6055           if (defaultable_fn_check (decl))
6056             DECL_DEFAULTED_FN (decl) = 1;
6057           else
6058             DECL_INITIAL (decl) = NULL_TREE;
6059         }
6060     }
6061
6062   if (init && TREE_CODE (decl) == VAR_DECL)
6063     {
6064       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6065       /* If DECL is a reference, then we want to know whether init is a
6066          reference constant; init_const_expr_p as passed tells us whether
6067          it's an rvalue constant.  */
6068       if (TREE_CODE (type) == REFERENCE_TYPE)
6069         init_const_expr_p = potential_constant_expression (init);
6070       if (init_const_expr_p)
6071         {
6072           /* Set these flags now for templates.  We'll update the flags in
6073              store_init_value for instantiations.  */
6074           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6075           if (decl_maybe_constant_var_p (decl))
6076             TREE_CONSTANT (decl) = 1;
6077         }
6078     }
6079
6080   if (processing_template_decl)
6081     {
6082       bool type_dependent_p;
6083
6084       /* Add this declaration to the statement-tree.  */
6085       if (at_function_scope_p ())
6086         add_decl_expr (decl);
6087
6088       type_dependent_p = dependent_type_p (type);
6089
6090       if (check_for_bare_parameter_packs (init))
6091         {
6092           init = NULL_TREE;
6093           DECL_INITIAL (decl) = NULL_TREE;
6094         }
6095
6096       /* Generally, initializers in templates are expanded when the
6097          template is instantiated.  But, if DECL is a variable constant
6098          then it can be used in future constant expressions, so its value
6099          must be available. */
6100
6101       if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6102         /* We can't do anything if the decl has dependent type.  */;
6103       else if (init
6104                && init_const_expr_p
6105                && !type_dependent_p
6106                && decl_maybe_constant_var_p (decl)
6107                && !type_dependent_init_p (init)
6108                && !value_dependent_init_p (init))
6109         {
6110           /* This variable seems to be a non-dependent constant, so process
6111              its initializer.  If check_initializer returns non-null the
6112              initialization wasn't constant after all.  */
6113           tree init_code;
6114           cleanups = make_tree_vector ();
6115           init_code = check_initializer (decl, init, flags, &cleanups);
6116           if (init_code == NULL_TREE)
6117             init = NULL_TREE;
6118           release_tree_vector (cleanups);
6119         }
6120       else if (!DECL_PRETTY_FUNCTION_P (decl))
6121         /* Deduce array size even if the initializer is dependent.  */
6122         maybe_deduce_size_from_array_init (decl, init);
6123
6124       if (init)
6125         DECL_INITIAL (decl) = init;
6126       return;
6127     }
6128
6129   /* Just store non-static data member initializers for later.  */
6130   if (init && TREE_CODE (decl) == FIELD_DECL)
6131     DECL_INITIAL (decl) = init;
6132
6133   /* Take care of TYPE_DECLs up front.  */
6134   if (TREE_CODE (decl) == TYPE_DECL)
6135     {
6136       if (type != error_mark_node
6137           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6138         {
6139           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6140             warning (0, "shadowing previous type declaration of %q#D", decl);
6141           set_identifier_type_value (DECL_NAME (decl), decl);
6142         }
6143
6144       /* If we have installed this as the canonical typedef for this
6145          type, and that type has not been defined yet, delay emitting
6146          the debug information for it, as we will emit it later.  */
6147       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6148           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6149         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6150
6151       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6152                                 at_eof);
6153       return;
6154     }
6155
6156   /* A reference will be modified here, as it is initialized.  */
6157   if (! DECL_EXTERNAL (decl)
6158       && TREE_READONLY (decl)
6159       && TREE_CODE (type) == REFERENCE_TYPE)
6160     {
6161       was_readonly = 1;
6162       TREE_READONLY (decl) = 0;
6163     }
6164
6165   if (TREE_CODE (decl) == VAR_DECL)
6166     {
6167       /* Only variables with trivial initialization and destruction can
6168          have thread-local storage.  */
6169       if (DECL_THREAD_LOCAL_P (decl)
6170           && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6171               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6172         error ("%qD cannot be thread-local because it has non-trivial "
6173                "type %qT", decl, TREE_TYPE (decl));
6174       /* If this is a local variable that will need a mangled name,
6175          register it now.  We must do this before processing the
6176          initializer for the variable, since the initialization might
6177          require a guard variable, and since the mangled name of the
6178          guard variable will depend on the mangled name of this
6179          variable.  */
6180       if (DECL_FUNCTION_SCOPE_P (decl)
6181           && TREE_STATIC (decl)
6182           && !DECL_ARTIFICIAL (decl))
6183         {
6184           push_local_name (decl);
6185           if (DECL_CONSTRUCTOR_P (current_function_decl)
6186               || DECL_DESTRUCTOR_P (current_function_decl))
6187             /* Normally local_decls is populated during GIMPLE lowering,
6188                but [cd]tors are never actually compiled directly.  We need
6189                to put statics on the list so we can deal with the label
6190                address extension.  */
6191             add_local_decl (cfun, decl);
6192         }
6193
6194       /* Convert the initializer to the type of DECL, if we have not
6195          already initialized DECL.  */
6196       if (!DECL_INITIALIZED_P (decl)
6197           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6198              case of a static data member initialized inside the
6199              class-specifier, there can be an initializer even if DECL
6200              is *not* defined.  */
6201           && (!DECL_EXTERNAL (decl) || init))
6202         {
6203           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6204             {
6205               tree jclass
6206                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6207               /* Allow libjava/prims.cc define primitive classes.  */
6208               if (init != NULL_TREE
6209                   || jclass == NULL_TREE
6210                   || TREE_CODE (jclass) != TYPE_DECL
6211                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6212                   || !same_type_ignoring_top_level_qualifiers_p
6213                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6214                 error ("Java object %qD not allocated with %<new%>", decl);
6215               init = NULL_TREE;
6216             }
6217           cleanups = make_tree_vector ();
6218           init = check_initializer (decl, init, flags, &cleanups);
6219           /* Thread-local storage cannot be dynamically initialized.  */
6220           if (DECL_THREAD_LOCAL_P (decl) && init)
6221             {
6222               error ("%qD is thread-local and so cannot be dynamically "
6223                      "initialized", decl);
6224               init = NULL_TREE;
6225             }
6226
6227           /* Check that the initializer for a static data member was a
6228              constant.  Although we check in the parser that the
6229              initializer is an integral constant expression, we do not
6230              simplify division-by-zero at the point at which it
6231              occurs.  Therefore, in:
6232
6233                struct S { static const int i = 7 / 0; };
6234
6235              we issue an error at this point.  It would
6236              probably be better to forbid division by zero in
6237              integral constant expressions.  */
6238           if (DECL_EXTERNAL (decl) && init)
6239             {
6240               error ("%qD cannot be initialized by a non-constant expression"
6241                      " when being declared", decl);
6242               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6243               init = NULL_TREE;
6244             }
6245
6246           /* Handle:
6247
6248              [dcl.init]
6249
6250              The memory occupied by any object of static storage
6251              duration is zero-initialized at program startup before
6252              any other initialization takes place.
6253
6254              We cannot create an appropriate initializer until after
6255              the type of DECL is finalized.  If DECL_INITIAL is set,
6256              then the DECL is statically initialized, and any
6257              necessary zero-initialization has already been performed.  */
6258           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6259             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6260                                                    /*nelts=*/NULL_TREE,
6261                                                    /*static_storage_p=*/true);
6262           /* Remember that the initialization for this variable has
6263              taken place.  */
6264           DECL_INITIALIZED_P (decl) = 1;
6265           /* This declaration is the definition of this variable,
6266              unless we are initializing a static data member within
6267              the class specifier.  */
6268           if (!DECL_EXTERNAL (decl))
6269             var_definition_p = true;
6270         }
6271       /* If the variable has an array type, lay out the type, even if
6272          there is no initializer.  It is valid to index through the
6273          array, and we must get TYPE_ALIGN set correctly on the array
6274          type.  */
6275       else if (TREE_CODE (type) == ARRAY_TYPE)
6276         layout_type (type);
6277
6278       if (TREE_STATIC (decl)
6279           && !at_function_scope_p ()
6280           && current_function_decl == NULL)
6281         /* So decl is a global variable or a static member of a
6282            non local class. Record the types it uses
6283            so that we can decide later to emit debug info for them.  */
6284         record_types_used_by_current_var_decl (decl);
6285     }
6286   else if (TREE_CODE (decl) == FIELD_DECL
6287            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6288     error ("non-static data member %qD has Java class type", decl);
6289
6290   /* Add this declaration to the statement-tree.  This needs to happen
6291      after the call to check_initializer so that the DECL_EXPR for a
6292      reference temp is added before the DECL_EXPR for the reference itself.  */
6293   if (DECL_FUNCTION_SCOPE_P (decl))
6294     add_decl_expr (decl);
6295
6296   /* Let the middle end know about variables and functions -- but not
6297      static data members in uninstantiated class templates.  */
6298   if (TREE_CODE (decl) == VAR_DECL
6299       || TREE_CODE (decl) == FUNCTION_DECL)
6300     {
6301       if (TREE_CODE (decl) == VAR_DECL)
6302         {
6303           layout_var_decl (decl);
6304           maybe_commonize_var (decl);
6305         }
6306
6307       /* This needs to happen after the linkage is set. */
6308       determine_visibility (decl);
6309
6310       if (var_definition_p && TREE_STATIC (decl))
6311         {
6312           /* If a TREE_READONLY variable needs initialization
6313              at runtime, it is no longer readonly and we need to
6314              avoid MEM_READONLY_P being set on RTL created for it.  */
6315           if (init)
6316             {
6317               if (TREE_READONLY (decl))
6318                 TREE_READONLY (decl) = 0;
6319               was_readonly = 0;
6320             }
6321           else if (was_readonly)
6322             TREE_READONLY (decl) = 1;
6323
6324           /* Likewise if it needs destruction.  */
6325           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
6326             TREE_READONLY (decl) = 0;
6327         }
6328
6329       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6330
6331       /* Check for abstractness of the type. Notice that there is no
6332          need to strip array types here since the check for those types
6333          is already done within create_array_type_for_decl.  */
6334       if (TREE_CODE (type) == FUNCTION_TYPE
6335           || TREE_CODE (type) == METHOD_TYPE)
6336         abstract_virtuals_error (decl, TREE_TYPE (type));
6337       else
6338         abstract_virtuals_error (decl, type);
6339
6340       if (TREE_TYPE (decl) == error_mark_node)
6341         /* No initialization required.  */
6342         ;
6343       else if (TREE_CODE (decl) == FUNCTION_DECL)
6344         {
6345           if (init)
6346             {
6347               if (init == ridpointers[(int)RID_DEFAULT])
6348                 {
6349                   /* An out-of-class default definition is defined at
6350                      the point where it is explicitly defaulted.  */
6351                   if (DECL_DELETED_FN (decl))
6352                     maybe_explain_implicit_delete (decl);
6353                   else if (DECL_INITIAL (decl) == error_mark_node)
6354                     synthesize_method (decl);
6355                 }
6356               else
6357                 error ("function %q#D is initialized like a variable", decl);
6358             }
6359           /* else no initialization required.  */
6360         }
6361       else if (DECL_EXTERNAL (decl)
6362                && ! (DECL_LANG_SPECIFIC (decl)
6363                      && DECL_NOT_REALLY_EXTERN (decl)))
6364         {
6365           if (init)
6366             DECL_INITIAL (decl) = init;
6367         }
6368       /* A variable definition.  */
6369       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6370         /* Initialize the local variable.  */
6371         initialize_local_var (decl, init);
6372
6373       /* If a variable is defined, and then a subsequent
6374          definition with external linkage is encountered, we will
6375          get here twice for the same variable.  We want to avoid
6376          calling expand_static_init more than once.  For variables
6377          that are not static data members, we can call
6378          expand_static_init only when we actually process the
6379          initializer.  It is not legal to redeclare a static data
6380          member, so this issue does not arise in that case.  */
6381       else if (var_definition_p && TREE_STATIC (decl))
6382         expand_static_init (decl, init);
6383     }
6384
6385   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6386      reference, insert it in the statement-tree now.  */
6387   if (cleanups)
6388     {
6389       unsigned i; tree t;
6390       FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6391         push_cleanup (decl, t, false);
6392       release_tree_vector (cleanups);
6393     }
6394
6395   if (was_readonly)
6396     TREE_READONLY (decl) = 1;
6397
6398   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6399 }
6400
6401 /* Returns a declaration for a VAR_DECL as if:
6402
6403      extern "C" TYPE NAME;
6404
6405    had been seen.  Used to create compiler-generated global
6406    variables.  */
6407
6408 static tree
6409 declare_global_var (tree name, tree type)
6410 {
6411   tree decl;
6412
6413   push_to_top_level ();
6414   decl = build_decl (input_location, VAR_DECL, name, type);
6415   TREE_PUBLIC (decl) = 1;
6416   DECL_EXTERNAL (decl) = 1;
6417   DECL_ARTIFICIAL (decl) = 1;
6418   /* If the user has explicitly declared this variable (perhaps
6419      because the code we are compiling is part of a low-level runtime
6420      library), then it is possible that our declaration will be merged
6421      with theirs by pushdecl.  */
6422   decl = pushdecl (decl);
6423   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6424   pop_from_top_level ();
6425
6426   return decl;
6427 }
6428
6429 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6430    if "__cxa_atexit" is not being used) corresponding to the function
6431    to be called when the program exits.  */
6432
6433 static tree
6434 get_atexit_fn_ptr_type (void)
6435 {
6436   tree fn_type;
6437
6438   if (!atexit_fn_ptr_type_node)
6439     {
6440       tree arg_type;
6441       if (flag_use_cxa_atexit 
6442           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6443         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6444         arg_type = ptr_type_node;
6445       else
6446         /* The parameter to "atexit" is "void (*)(void)".  */
6447         arg_type = NULL_TREE;
6448       
6449       fn_type = build_function_type_list (void_type_node,
6450                                           arg_type, NULL_TREE);
6451       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6452     }
6453
6454   return atexit_fn_ptr_type_node;
6455 }
6456
6457 /* Returns a pointer to the `atexit' function.  Note that if
6458    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6459    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6460
6461 static tree
6462 get_atexit_node (void)
6463 {
6464   tree atexit_fndecl;
6465   tree fn_type;
6466   tree fn_ptr_type;
6467   const char *name;
6468   bool use_aeabi_atexit;
6469
6470   if (atexit_node)
6471     return atexit_node;
6472
6473   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6474     {
6475       /* The declaration for `__cxa_atexit' is:
6476
6477            int __cxa_atexit (void (*)(void *), void *, void *)
6478
6479          We build up the argument types and then the function type
6480          itself.  */
6481       tree argtype0, argtype1, argtype2;
6482
6483       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6484       /* First, build the pointer-to-function type for the first
6485          argument.  */
6486       fn_ptr_type = get_atexit_fn_ptr_type ();
6487       /* Then, build the rest of the argument types.  */
6488       argtype2 = ptr_type_node;
6489       if (use_aeabi_atexit)
6490         {
6491           argtype1 = fn_ptr_type;
6492           argtype0 = ptr_type_node;
6493         }
6494       else
6495         {
6496           argtype1 = ptr_type_node;
6497           argtype0 = fn_ptr_type;
6498         }
6499       /* And the final __cxa_atexit type.  */
6500       fn_type = build_function_type_list (integer_type_node,
6501                                           argtype0, argtype1, argtype2,
6502                                           NULL_TREE);
6503       fn_ptr_type = build_pointer_type (fn_type);
6504       if (use_aeabi_atexit)
6505         name = "__aeabi_atexit";
6506       else
6507         name = "__cxa_atexit";
6508     }
6509   else
6510     {
6511       /* The declaration for `atexit' is:
6512
6513            int atexit (void (*)());
6514
6515          We build up the argument types and then the function type
6516          itself.  */
6517       fn_ptr_type = get_atexit_fn_ptr_type ();
6518       /* Build the final atexit type.  */
6519       fn_type = build_function_type_list (integer_type_node,
6520                                           fn_ptr_type, NULL_TREE);
6521       name = "atexit";
6522     }
6523
6524   /* Now, build the function declaration.  */
6525   push_lang_context (lang_name_c);
6526   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6527   mark_used (atexit_fndecl);
6528   pop_lang_context ();
6529   atexit_node = decay_conversion (atexit_fndecl);
6530
6531   return atexit_node;
6532 }
6533
6534 /* Returns the __dso_handle VAR_DECL.  */
6535
6536 static tree
6537 get_dso_handle_node (void)
6538 {
6539   if (dso_handle_node)
6540     return dso_handle_node;
6541
6542   /* Declare the variable.  */
6543   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6544                                         ptr_type_node);
6545
6546 #ifdef HAVE_GAS_HIDDEN
6547   DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6548   DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6549 #endif
6550
6551   return dso_handle_node;
6552 }
6553
6554 /* Begin a new function with internal linkage whose job will be simply
6555    to destroy some particular variable.  */
6556
6557 static GTY(()) int start_cleanup_cnt;
6558
6559 static tree
6560 start_cleanup_fn (void)
6561 {
6562   char name[32];
6563   tree fntype;
6564   tree fndecl;
6565   bool use_cxa_atexit = flag_use_cxa_atexit
6566                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6567
6568   push_to_top_level ();
6569
6570   /* No need to mangle this.  */
6571   push_lang_context (lang_name_c);
6572
6573   /* Build the name of the function.  */
6574   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6575   /* Build the function declaration.  */
6576   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6577   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6578   /* It's a function with internal linkage, generated by the
6579      compiler.  */
6580   TREE_PUBLIC (fndecl) = 0;
6581   DECL_ARTIFICIAL (fndecl) = 1;
6582   /* Make the function `inline' so that it is only emitted if it is
6583      actually needed.  It is unlikely that it will be inlined, since
6584      it is only called via a function pointer, but we avoid unnecessary
6585      emissions this way.  */
6586   DECL_DECLARED_INLINE_P (fndecl) = 1;
6587   DECL_INTERFACE_KNOWN (fndecl) = 1;
6588   /* Build the parameter.  */
6589   if (use_cxa_atexit)
6590     {
6591       tree parmdecl;
6592
6593       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6594       DECL_CONTEXT (parmdecl) = fndecl;
6595       TREE_USED (parmdecl) = 1;
6596       DECL_READ_P (parmdecl) = 1;
6597       DECL_ARGUMENTS (fndecl) = parmdecl;
6598     }
6599
6600   pushdecl (fndecl);
6601   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6602
6603   pop_lang_context ();
6604
6605   return current_function_decl;
6606 }
6607
6608 /* Finish the cleanup function begun by start_cleanup_fn.  */
6609
6610 static void
6611 end_cleanup_fn (void)
6612 {
6613   expand_or_defer_fn (finish_function (0));
6614
6615   pop_from_top_level ();
6616 }
6617
6618 /* Generate code to handle the destruction of DECL, an object with
6619    static storage duration.  */
6620
6621 tree
6622 register_dtor_fn (tree decl)
6623 {
6624   tree cleanup;
6625   tree compound_stmt;
6626   tree fcall;
6627   tree type;
6628   bool use_dtor;
6629   tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6630
6631   type = TREE_TYPE (decl);
6632   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6633     return void_zero_node;
6634
6635   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6636      a class object, we can just pass the destructor to
6637      "__cxa_atexit"; we don't have to build a temporary function to do
6638      the cleanup.  */
6639   use_dtor = (flag_use_cxa_atexit 
6640               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6641               && CLASS_TYPE_P (type));
6642   if (use_dtor)
6643     {
6644       int idx;
6645
6646       /* Find the destructor.  */
6647       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6648       gcc_assert (idx >= 0);
6649       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6650       /* Make sure it is accessible.  */
6651       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6652     }
6653   else
6654     {
6655       /* Call build_cleanup before we enter the anonymous function so
6656          that any access checks will be done relative to the current
6657          scope, rather than the scope of the anonymous function.  */
6658       build_cleanup (decl);
6659   
6660       /* Now start the function.  */
6661       cleanup = start_cleanup_fn ();
6662       
6663       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6664          to the original function, rather than the anonymous one.  That
6665          will make the back end think that nested functions are in use,
6666          which causes confusion.  */
6667       push_deferring_access_checks (dk_no_check);
6668       fcall = build_cleanup (decl);
6669       pop_deferring_access_checks ();
6670       
6671       /* Create the body of the anonymous function.  */
6672       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6673       finish_expr_stmt (fcall);
6674       finish_compound_stmt (compound_stmt);
6675       end_cleanup_fn ();
6676     }
6677
6678   /* Call atexit with the cleanup function.  */
6679   mark_used (cleanup);
6680   cleanup = build_address (cleanup);
6681   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6682     {
6683       tree addr;
6684
6685       if (use_dtor)
6686         {
6687           /* We must convert CLEANUP to the type that "__cxa_atexit"
6688              expects.  */
6689           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6690           /* "__cxa_atexit" will pass the address of DECL to the
6691              cleanup function.  */
6692           mark_used (decl);
6693           addr = build_address (decl);
6694           /* The declared type of the parameter to "__cxa_atexit" is
6695              "void *".  For plain "T*", we could just let the
6696              machinery in cp_build_function_call convert it -- but if the
6697              type is "cv-qualified T *", then we need to convert it
6698              before passing it in, to avoid spurious errors.  */
6699           addr = build_nop (ptr_type_node, addr);
6700         }
6701       else
6702         /* Since the cleanup functions we build ignore the address
6703            they're given, there's no reason to pass the actual address
6704            in, and, in general, it's cheaper to pass NULL than any
6705            other value.  */
6706         addr = null_pointer_node;
6707       arg2 = cp_build_addr_expr (get_dso_handle_node (),
6708                                  tf_warning_or_error);
6709       if (targetm.cxx.use_aeabi_atexit ())
6710         {
6711           arg1 = cleanup;
6712           arg0 = addr;
6713         }
6714       else
6715         {
6716           arg1 = addr;
6717           arg0 = cleanup;
6718         }
6719     }
6720   else
6721     arg0 = cleanup;
6722   return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6723                                       arg0, arg1, arg2, NULL_TREE);
6724 }
6725
6726 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6727    is its initializer.  Generate code to handle the construction
6728    and destruction of DECL.  */
6729
6730 static void
6731 expand_static_init (tree decl, tree init)
6732 {
6733   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6734   gcc_assert (TREE_STATIC (decl));
6735
6736   /* Some variables require no dynamic initialization.  */
6737   if (!init
6738       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6739     return;
6740
6741   if (DECL_FUNCTION_SCOPE_P (decl))
6742     {
6743       /* Emit code to perform this initialization but once.  */
6744       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6745       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6746       tree guard, guard_addr;
6747       tree flag, begin;
6748
6749       /* Emit code to perform this initialization but once.  This code
6750          looks like:
6751
6752            static <type> guard;
6753            if (!guard.first_byte) {
6754              if (__cxa_guard_acquire (&guard)) {
6755                bool flag = false;
6756                try {
6757                  // Do initialization.
6758                  flag = true; __cxa_guard_release (&guard);
6759                  // Register variable for destruction at end of program.
6760                } catch {
6761                  if (!flag) __cxa_guard_abort (&guard);
6762                }
6763            }
6764
6765          Note that the `flag' variable is only set to 1 *after* the
6766          initialization is complete.  This ensures that an exception,
6767          thrown during the construction, will cause the variable to
6768          reinitialized when we pass through this code again, as per:
6769
6770            [stmt.dcl]
6771
6772            If the initialization exits by throwing an exception, the
6773            initialization is not complete, so it will be tried again
6774            the next time control enters the declaration.
6775
6776          This process should be thread-safe, too; multiple threads
6777          should not be able to initialize the variable more than
6778          once.  */
6779
6780       /* Create the guard variable.  */
6781       guard = get_guard (decl);
6782
6783       /* This optimization isn't safe on targets with relaxed memory
6784          consistency.  On such targets we force synchronization in
6785          __cxa_guard_acquire.  */
6786       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6787         {
6788           /* Begin the conditional initialization.  */
6789           if_stmt = begin_if_stmt ();
6790           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6791           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6792         }
6793
6794       if (flag_threadsafe_statics)
6795         {
6796           tree vfntype = NULL_TREE;
6797           tree acquire_name, release_name, abort_name;
6798           tree acquire_fn, release_fn, abort_fn;
6799           guard_addr = build_address (guard);
6800
6801           acquire_name = get_identifier ("__cxa_guard_acquire");
6802           release_name = get_identifier ("__cxa_guard_release");
6803           abort_name = get_identifier ("__cxa_guard_abort");
6804           acquire_fn = identifier_global_value (acquire_name);
6805           release_fn = identifier_global_value (release_name);
6806           abort_fn = identifier_global_value (abort_name);
6807           if (!acquire_fn)
6808             acquire_fn = push_library_fn
6809               (acquire_name, build_function_type_list (integer_type_node,
6810                                                        TREE_TYPE (guard_addr),
6811                                                        NULL_TREE),
6812                NULL_TREE);
6813           if (!release_fn || !abort_fn)
6814             vfntype = build_function_type_list (void_type_node,
6815                                                 TREE_TYPE (guard_addr),
6816                                                 NULL_TREE);
6817           if (!release_fn)
6818             release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6819           if (!abort_fn)
6820             abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6821
6822           inner_if_stmt = begin_if_stmt ();
6823           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6824                                inner_if_stmt);
6825
6826           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6827           begin = get_target_expr (boolean_false_node);
6828           flag = TARGET_EXPR_SLOT (begin);
6829
6830           TARGET_EXPR_CLEANUP (begin)
6831             = build3 (COND_EXPR, void_type_node, flag,
6832                       void_zero_node,
6833                       build_call_n (abort_fn, 1, guard_addr));
6834           CLEANUP_EH_ONLY (begin) = 1;
6835
6836           /* Do the initialization itself.  */
6837           init = add_stmt_to_compound (begin, init);
6838           init = add_stmt_to_compound
6839             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6840           init = add_stmt_to_compound
6841             (init, build_call_n (release_fn, 1, guard_addr));
6842         }
6843       else
6844         init = add_stmt_to_compound (init, set_guard (guard));
6845
6846       /* Use atexit to register a function for destroying this static
6847          variable.  */
6848       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6849
6850       finish_expr_stmt (init);
6851
6852       if (flag_threadsafe_statics)
6853         {
6854           finish_compound_stmt (inner_then_clause);
6855           finish_then_clause (inner_if_stmt);
6856           finish_if_stmt (inner_if_stmt);
6857         }
6858
6859       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6860         {
6861           finish_compound_stmt (then_clause);
6862           finish_then_clause (if_stmt);
6863           finish_if_stmt (if_stmt);
6864         }
6865     }
6866   else
6867     static_aggregates = tree_cons (init, decl, static_aggregates);
6868 }
6869
6870 \f
6871 /* Make TYPE a complete type based on INITIAL_VALUE.
6872    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6873    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6874    3 if the initializer list is empty (in pedantic mode). */
6875
6876 int
6877 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6878 {
6879   int failure;
6880   tree type, elt_type;
6881
6882   if (initial_value)
6883     {
6884       unsigned HOST_WIDE_INT i;
6885       tree value;
6886
6887       /* An array of character type can be initialized from a
6888          brace-enclosed string constant.
6889
6890          FIXME: this code is duplicated from reshape_init. Probably
6891          we should just call reshape_init here?  */
6892       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6893           && TREE_CODE (initial_value) == CONSTRUCTOR
6894           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6895         {
6896           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6897           tree value = VEC_index (constructor_elt, v, 0)->value;
6898
6899           if (TREE_CODE (value) == STRING_CST
6900               && VEC_length (constructor_elt, v) == 1)
6901             initial_value = value;
6902         }
6903
6904       /* If any of the elements are parameter packs, we can't actually
6905          complete this type now because the array size is dependent.  */
6906       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6907         {
6908           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6909                                       i, value)
6910             {
6911               if (PACK_EXPANSION_P (value))
6912                 return 0;
6913             }
6914         }
6915     }
6916
6917   failure = complete_array_type (ptype, initial_value, do_default);
6918
6919   /* We can create the array before the element type is complete, which
6920      means that we didn't have these two bits set in the original type
6921      either.  In completing the type, we are expected to propagate these
6922      bits.  See also complete_type which does the same thing for arrays
6923      of fixed size.  */
6924   type = *ptype;
6925   if (TYPE_DOMAIN (type))
6926     {
6927       elt_type = TREE_TYPE (type);
6928       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6929       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6930         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6931     }
6932
6933   return failure;
6934 }
6935
6936 /* As above, but either give an error or reject zero-size arrays, depending
6937    on COMPLAIN.  */
6938
6939 int
6940 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6941                                  bool do_default, tsubst_flags_t complain)
6942 {
6943   int failure;
6944   bool sfinae = !(complain & tf_error);
6945   /* In SFINAE context we can't be lenient about zero-size arrays.  */
6946   if (sfinae)
6947     ++pedantic;
6948   failure = cp_complete_array_type (ptype, initial_value, do_default);
6949   if (sfinae)
6950     --pedantic;
6951   if (failure)
6952     {
6953       if (sfinae)
6954         /* Not an error.  */;
6955       else if (failure == 1)
6956         error ("initializer fails to determine size of %qT", *ptype);
6957       else if (failure == 2)
6958         {
6959           if (do_default)
6960             error ("array size missing in %qT", *ptype);
6961         }
6962       else if (failure == 3)
6963         error ("zero-size array %qT", *ptype);
6964       *ptype = error_mark_node;
6965     }
6966   return failure;
6967 }
6968 \f
6969 /* Return zero if something is declared to be a member of type
6970    CTYPE when in the context of CUR_TYPE.  STRING is the error
6971    message to print in that case.  Otherwise, quietly return 1.  */
6972
6973 static int
6974 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6975 {
6976   if (ctype && ctype != cur_type)
6977     {
6978       if (flags == DTOR_FLAG)
6979         error ("destructor for alien class %qT cannot be a member", ctype);
6980       else
6981         error ("constructor for alien class %qT cannot be a member", ctype);
6982       return 0;
6983     }
6984   return 1;
6985 }
6986 \f
6987 /* Subroutine of `grokdeclarator'.  */
6988
6989 /* Generate errors possibly applicable for a given set of specifiers.
6990    This is for ARM $7.1.2.  */
6991
6992 static void
6993 bad_specifiers (tree object,
6994                 enum bad_spec_place type,
6995                 int virtualp,
6996                 int quals,
6997                 int inlinep,
6998                 int friendp,
6999                 int raises)
7000 {
7001   switch (type)
7002     {
7003       case BSP_VAR:
7004         if (virtualp)
7005           error ("%qD declared as a %<virtual%> variable", object);
7006         if (inlinep)
7007           error ("%qD declared as an %<inline%> variable", object);
7008         if (quals)
7009           error ("%<const%> and %<volatile%> function specifiers on "
7010                  "%qD invalid in variable declaration", object);
7011         break;
7012       case BSP_PARM:
7013         if (virtualp)
7014           error ("%qD declared as a %<virtual%> parameter", object);
7015         if (inlinep)
7016           error ("%qD declared as an %<inline%> parameter", object);
7017         if (quals)
7018           error ("%<const%> and %<volatile%> function specifiers on "
7019                  "%qD invalid in parameter declaration", object);
7020         break;
7021       case BSP_TYPE:
7022         if (virtualp)
7023           error ("%qD declared as a %<virtual%> type", object);
7024         if (inlinep)
7025           error ("%qD declared as an %<inline%> type", object);
7026         if (quals)
7027           error ("%<const%> and %<volatile%> function specifiers on "
7028                  "%qD invalid in type declaration", object);
7029         break;
7030       case BSP_FIELD:
7031         if (virtualp)
7032           error ("%qD declared as a %<virtual%> field", object);
7033         if (inlinep)
7034           error ("%qD declared as an %<inline%> field", object);
7035         if (quals)
7036           error ("%<const%> and %<volatile%> function specifiers on "
7037                  "%qD invalid in field declaration", object);
7038         break;
7039       default:
7040         gcc_unreachable();
7041     }
7042   if (friendp)
7043     error ("%q+D declared as a friend", object);
7044   if (raises
7045       && (TREE_CODE (object) == TYPE_DECL
7046           || (!TYPE_PTRFN_P (TREE_TYPE (object))
7047               && !TYPE_REFFN_P (TREE_TYPE (object))
7048               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7049     error ("%q+D declared with an exception specification", object);
7050 }
7051
7052 /* DECL is a member function or static data member and is presently
7053    being defined.  Check that the definition is taking place in a
7054    valid namespace.  */
7055
7056 static void
7057 check_class_member_definition_namespace (tree decl)
7058 {
7059   /* These checks only apply to member functions and static data
7060      members.  */
7061   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7062               || TREE_CODE (decl) == VAR_DECL);
7063   /* We check for problems with specializations in pt.c in
7064      check_specialization_namespace, where we can issue better
7065      diagnostics.  */
7066   if (processing_specialization)
7067     return;
7068   /* There are no restrictions on the placement of
7069      explicit instantiations.  */
7070   if (processing_explicit_instantiation)
7071     return;
7072   /* [class.mfct]
7073
7074      A member function definition that appears outside of the
7075      class definition shall appear in a namespace scope enclosing
7076      the class definition.
7077
7078      [class.static.data]
7079
7080      The definition for a static data member shall appear in a
7081      namespace scope enclosing the member's class definition.  */
7082   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7083     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7084                decl, DECL_CONTEXT (decl));
7085 }
7086
7087 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7088    METHOD_TYPE for a non-static member function; QUALS are the
7089    cv-qualifiers that apply to the function.  */
7090
7091 tree
7092 build_this_parm (tree type, cp_cv_quals quals)
7093 {
7094   tree this_type;
7095   tree qual_type;
7096   tree parm;
7097   cp_cv_quals this_quals;
7098
7099   if (CLASS_TYPE_P (type))
7100     {
7101       this_type
7102         = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7103       this_type = build_pointer_type (this_type);
7104     }
7105   else
7106     this_type = type_of_this_parm (type);
7107   /* The `this' parameter is implicitly `const'; it cannot be
7108      assigned to.  */
7109   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7110   qual_type = cp_build_qualified_type (this_type, this_quals);
7111   parm = build_artificial_parm (this_identifier, qual_type);
7112   cp_apply_type_quals_to_decl (this_quals, parm);
7113   return parm;
7114 }
7115
7116 /* DECL is a static member function.  Complain if it was declared
7117    with function-cv-quals.  */
7118
7119 static void
7120 check_static_quals (tree decl, cp_cv_quals quals)
7121 {
7122   if (quals != TYPE_UNQUALIFIED)
7123     error ("static member function %q#D declared with type qualifiers",
7124            decl);
7125 }
7126
7127 /* CTYPE is class type, or null if non-class.
7128    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7129    or METHOD_TYPE.
7130    DECLARATOR is the function's name.
7131    PARMS is a chain of PARM_DECLs for the function.
7132    VIRTUALP is truthvalue of whether the function is virtual or not.
7133    FLAGS are to be passed through to `grokclassfn'.
7134    QUALS are qualifiers indicating whether the function is `const'
7135    or `volatile'.
7136    RAISES is a list of exceptions that this function can raise.
7137    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7138    not look, and -1 if we should not call `grokclassfn' at all.
7139
7140    SFK is the kind of special function (if any) for the new function.
7141
7142    Returns `NULL_TREE' if something goes wrong, after issuing
7143    applicable error messages.  */
7144
7145 static tree
7146 grokfndecl (tree ctype,
7147             tree type,
7148             tree declarator,
7149             tree parms,
7150             tree orig_declarator,
7151             int virtualp,
7152             enum overload_flags flags,
7153             cp_cv_quals quals,
7154             tree raises,
7155             int check,
7156             int friendp,
7157             int publicp,
7158             int inlinep,
7159             special_function_kind sfk,
7160             bool funcdef_flag,
7161             int template_count,
7162             tree in_namespace,
7163             tree* attrlist,
7164             location_t location)
7165 {
7166   tree decl;
7167   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7168   tree t;
7169
7170   if (raises)
7171     type = build_exception_variant (type, raises);
7172
7173   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7174
7175   /* If we have an explicit location, use it, otherwise use whatever
7176      build_lang_decl used (probably input_location).  */
7177   if (location != UNKNOWN_LOCATION)
7178     DECL_SOURCE_LOCATION (decl) = location;
7179
7180   if (TREE_CODE (type) == METHOD_TYPE)
7181     {
7182       tree parm;
7183       parm = build_this_parm (type, quals);
7184       DECL_CHAIN (parm) = parms;
7185       parms = parm;
7186     }
7187   DECL_ARGUMENTS (decl) = parms;
7188   for (t = parms; t; t = DECL_CHAIN (t))
7189     DECL_CONTEXT (t) = decl;
7190   /* Propagate volatile out from type to decl.  */
7191   if (TYPE_VOLATILE (type))
7192     TREE_THIS_VOLATILE (decl) = 1;
7193
7194   /* Setup decl according to sfk.  */
7195   switch (sfk)
7196     {
7197     case sfk_constructor:
7198     case sfk_copy_constructor:
7199     case sfk_move_constructor:
7200       DECL_CONSTRUCTOR_P (decl) = 1;
7201       break;
7202     case sfk_destructor:
7203       DECL_DESTRUCTOR_P (decl) = 1;
7204       break;
7205     default:
7206       break;
7207     }
7208
7209   /* If pointers to member functions use the least significant bit to
7210      indicate whether a function is virtual, ensure a pointer
7211      to this function will have that bit clear.  */
7212   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7213       && TREE_CODE (type) == METHOD_TYPE
7214       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7215     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7216
7217   if (friendp
7218       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7219     {
7220       if (funcdef_flag)
7221         error
7222           ("defining explicit specialization %qD in friend declaration",
7223            orig_declarator);
7224       else
7225         {
7226           tree fns = TREE_OPERAND (orig_declarator, 0);
7227           tree args = TREE_OPERAND (orig_declarator, 1);
7228
7229           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7230             {
7231               /* Something like `template <class T> friend void f<T>()'.  */
7232               error ("invalid use of template-id %qD in declaration "
7233                      "of primary template",
7234                      orig_declarator);
7235               return NULL_TREE;
7236             }
7237
7238
7239           /* A friend declaration of the form friend void f<>().  Record
7240              the information in the TEMPLATE_ID_EXPR.  */
7241           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7242
7243           if (TREE_CODE (fns) == COMPONENT_REF)
7244             {
7245               /* Due to bison parser ickiness, we will have already looked
7246                  up an operator_name or PFUNCNAME within the current class
7247                  (see template_id in parse.y). If the current class contains
7248                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
7249
7250               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7251                           == current_class_type);
7252               fns = TREE_OPERAND (fns, 1);
7253             }
7254           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7255                       || TREE_CODE (fns) == OVERLOAD);
7256           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7257
7258           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7259             if (TREE_PURPOSE (t)
7260                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7261             {
7262               error ("default arguments are not allowed in declaration "
7263                      "of friend template specialization %qD",
7264                      decl);
7265               return NULL_TREE;
7266             }
7267
7268           if (inlinep)
7269             {
7270               error ("%<inline%> is not allowed in declaration of friend "
7271                      "template specialization %qD",
7272                      decl);
7273               return NULL_TREE;
7274             }
7275         }
7276     }
7277
7278   /* If this decl has namespace scope, set that up.  */
7279   if (in_namespace)
7280     set_decl_namespace (decl, in_namespace, friendp);
7281   else if (!ctype)
7282     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7283
7284   /* `main' and builtins have implicit 'C' linkage.  */
7285   if ((MAIN_NAME_P (declarator)
7286        || (IDENTIFIER_LENGTH (declarator) > 10
7287            && IDENTIFIER_POINTER (declarator)[0] == '_'
7288            && IDENTIFIER_POINTER (declarator)[1] == '_'
7289            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7290       && current_lang_name == lang_name_cplusplus
7291       && ctype == NULL_TREE
7292       && DECL_FILE_SCOPE_P (decl))
7293     SET_DECL_LANGUAGE (decl, lang_c);
7294
7295   /* Should probably propagate const out from type to decl I bet (mrs).  */
7296   if (staticp)
7297     {
7298       DECL_STATIC_FUNCTION_P (decl) = 1;
7299       DECL_CONTEXT (decl) = ctype;
7300     }
7301
7302   if (ctype)
7303     {
7304       DECL_CONTEXT (decl) = ctype;
7305       if (funcdef_flag)
7306         check_class_member_definition_namespace (decl);
7307     }
7308
7309   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7310     {
7311       if (processing_template_decl)
7312         error ("cannot declare %<::main%> to be a template");
7313       if (inlinep)
7314         error ("cannot declare %<::main%> to be inline");
7315       if (!publicp)
7316         error ("cannot declare %<::main%> to be static");
7317       inlinep = 0;
7318       publicp = 1;
7319     }
7320
7321   /* Members of anonymous types and local classes have no linkage; make
7322      them internal.  If a typedef is made later, this will be changed.  */
7323   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7324                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7325     publicp = 0;
7326
7327   if (publicp && cxx_dialect == cxx98)
7328     {
7329       /* [basic.link]: A name with no linkage (notably, the name of a class
7330          or enumeration declared in a local scope) shall not be used to
7331          declare an entity with linkage.
7332
7333          DR 757 relaxes this restriction for C++0x.  */
7334       t = no_linkage_check (TREE_TYPE (decl),
7335                             /*relaxed_p=*/false);
7336       if (t)
7337         {
7338           if (TYPE_ANONYMOUS_P (t))
7339             {
7340               if (DECL_EXTERN_C_P (decl))
7341                 /* Allow this; it's pretty common in C.  */;
7342               else
7343                 {
7344                   permerror (input_location, "anonymous type with no linkage "
7345                              "used to declare function %q#D with linkage",
7346                              decl);
7347                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7348                     permerror (input_location, "%q+#D does not refer to the unqualified "
7349                                "type, so it is not used for linkage",
7350                                TYPE_NAME (t));
7351                 }
7352             }
7353           else
7354             permerror (input_location, "type %qT with no linkage used to "
7355                        "declare function %q#D with linkage", t, decl);
7356         }
7357     }
7358
7359   TREE_PUBLIC (decl) = publicp;
7360   if (! publicp)
7361     {
7362       DECL_INTERFACE_KNOWN (decl) = 1;
7363       DECL_NOT_REALLY_EXTERN (decl) = 1;
7364     }
7365
7366   /* If the declaration was declared inline, mark it as such.  */
7367   if (inlinep)
7368     DECL_DECLARED_INLINE_P (decl) = 1;
7369   if (inlinep & 2)
7370     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7371
7372   DECL_EXTERNAL (decl) = 1;
7373   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7374     {
7375       error (ctype
7376              ? G_("static member function %qD cannot have cv-qualifier")
7377              : G_("non-member function %qD cannot have cv-qualifier"),
7378              decl);
7379       quals = TYPE_UNQUALIFIED;
7380     }
7381
7382   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7383       && !grok_op_properties (decl, /*complain=*/true))
7384     return NULL_TREE;
7385   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7386     {
7387       bool long_long_unsigned_p;
7388       bool long_double_p;
7389       const char *suffix = NULL;
7390       /* [over.literal]/6: Literal operators shall not have C linkage. */
7391       if (DECL_LANGUAGE (decl) == lang_c)
7392         {
7393           error ("literal operator with C linkage");
7394           return NULL_TREE;
7395         }
7396
7397       if (DECL_NAMESPACE_SCOPE_P (decl))
7398         {
7399           if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7400                                             &long_double_p))
7401             {
7402               error ("%qD has invalid argument list", decl);
7403               return NULL_TREE;
7404             }
7405
7406           suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7407           if (long_long_unsigned_p)
7408             {
7409               if (cpp_interpret_int_suffix (suffix, strlen (suffix)))
7410                 warning (0, "integer suffix %<%s%>"
7411                             " shadowed by implementation", suffix);
7412             }
7413           else if (long_double_p)
7414             {
7415               if (cpp_interpret_float_suffix (suffix, strlen (suffix)))
7416                 warning (0, "floating point suffix %<%s%>"
7417                             " shadowed by implementation", suffix);
7418             }
7419         }
7420       else
7421         {
7422           error ("%qD must be a non-member function", decl);
7423           return NULL_TREE;
7424         }
7425     }
7426
7427   if (funcdef_flag)
7428     /* Make the init_value nonzero so pushdecl knows this is not
7429        tentative.  error_mark_node is replaced later with the BLOCK.  */
7430     DECL_INITIAL (decl) = error_mark_node;
7431
7432   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7433     TREE_NOTHROW (decl) = 1;
7434
7435   /* Caller will do the rest of this.  */
7436   if (check < 0)
7437     return decl;
7438
7439   if (ctype != NULL_TREE)
7440     grokclassfn (ctype, decl, flags);
7441
7442   decl = check_explicit_specialization (orig_declarator, decl,
7443                                         template_count,
7444                                         2 * funcdef_flag +
7445                                         4 * (friendp != 0));
7446   if (decl == error_mark_node)
7447     return NULL_TREE;
7448
7449   if (DECL_STATIC_FUNCTION_P (decl))
7450     check_static_quals (decl, quals);
7451
7452   if (attrlist)
7453     {
7454       cplus_decl_attributes (&decl, *attrlist, 0);
7455       *attrlist = NULL_TREE;
7456     }
7457
7458   /* Check main's type after attributes have been applied.  */
7459   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7460     {
7461       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7462                         integer_type_node))
7463         {
7464           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7465           tree newtype;
7466           error ("%<::main%> must return %<int%>");
7467           newtype = build_function_type (integer_type_node, oldtypeargs);
7468           TREE_TYPE (decl) = newtype;
7469         }
7470       if (warn_main)
7471         check_main_parameter_types (decl);
7472     }
7473
7474   if (ctype != NULL_TREE
7475       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7476       && check)
7477     {
7478       tree old_decl = check_classfn (ctype, decl,
7479                                      (processing_template_decl
7480                                       > template_class_depth (ctype))
7481                                      ? current_template_parms
7482                                      : NULL_TREE);
7483
7484       if (old_decl == error_mark_node)
7485         return NULL_TREE;
7486
7487       if (old_decl)
7488         {
7489           tree ok;
7490           tree pushed_scope;
7491
7492           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7493             /* Because grokfndecl is always supposed to return a
7494                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7495                here.  We depend on our callers to figure out that its
7496                really a template that's being returned.  */
7497             old_decl = DECL_TEMPLATE_RESULT (old_decl);
7498
7499           if (DECL_STATIC_FUNCTION_P (old_decl)
7500               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7501             {
7502               /* Remove the `this' parm added by grokclassfn.  */
7503               revert_static_member_fn (decl);
7504               check_static_quals (decl, quals);
7505             }
7506           if (DECL_ARTIFICIAL (old_decl))
7507             {
7508               error ("definition of implicitly-declared %qD", old_decl);
7509               return NULL_TREE;
7510             }
7511           else if (DECL_DEFAULTED_FN (old_decl))
7512             {
7513               error ("definition of explicitly-defaulted %q+D", decl);
7514               error ("%q+#D explicitly defaulted here", old_decl);
7515               return NULL_TREE;
7516             }
7517
7518           /* Since we've smashed OLD_DECL to its
7519              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7520           if (TREE_CODE (decl) == TEMPLATE_DECL)
7521             decl = DECL_TEMPLATE_RESULT (decl);
7522
7523           /* Attempt to merge the declarations.  This can fail, in
7524              the case of some invalid specialization declarations.  */
7525           pushed_scope = push_scope (ctype);
7526           ok = duplicate_decls (decl, old_decl, friendp);
7527           if (pushed_scope)
7528             pop_scope (pushed_scope);
7529           if (!ok)
7530             {
7531               error ("no %q#D member function declared in class %qT",
7532                      decl, ctype);
7533               return NULL_TREE;
7534             }
7535           return old_decl;
7536         }
7537     }
7538
7539   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7540     return NULL_TREE;
7541
7542   if (ctype == NULL_TREE || check)
7543     return decl;
7544
7545   if (virtualp)
7546     DECL_VIRTUAL_P (decl) = 1;
7547
7548   return decl;
7549 }
7550
7551 /* decl is a FUNCTION_DECL.
7552    specifiers are the parsed virt-specifiers.
7553
7554    Set flags to reflect the virt-specifiers.
7555
7556    Returns decl.  */
7557
7558 static tree
7559 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7560 {
7561   if (decl == NULL_TREE)
7562     return decl;
7563   if (specifiers & VIRT_SPEC_OVERRIDE)
7564     DECL_OVERRIDE_P (decl) = 1;
7565   if (specifiers & VIRT_SPEC_FINAL)
7566     DECL_FINAL_P (decl) = 1;
7567   return decl;
7568 }
7569
7570 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7571    the linkage that DECL will receive in the object file.  */
7572
7573 static void
7574 set_linkage_for_static_data_member (tree decl)
7575 {
7576   /* A static data member always has static storage duration and
7577      external linkage.  Note that static data members are forbidden in
7578      local classes -- the only situation in which a class has
7579      non-external linkage.  */
7580   TREE_PUBLIC (decl) = 1;
7581   TREE_STATIC (decl) = 1;
7582   /* For non-template classes, static data members are always put
7583      out in exactly those files where they are defined, just as
7584      with ordinary namespace-scope variables.  */
7585   if (!processing_template_decl)
7586     DECL_INTERFACE_KNOWN (decl) = 1;
7587 }
7588
7589 /* Create a VAR_DECL named NAME with the indicated TYPE.
7590
7591    If SCOPE is non-NULL, it is the class type or namespace containing
7592    the variable.  If SCOPE is NULL, the variable should is created in
7593    the innermost enclosings scope.  */
7594
7595 static tree
7596 grokvardecl (tree type,
7597              tree name,
7598              const cp_decl_specifier_seq *declspecs,
7599              int initialized,
7600              int constp,
7601              tree scope)
7602 {
7603   tree decl;
7604   tree explicit_scope;
7605
7606   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7607
7608   /* Compute the scope in which to place the variable, but remember
7609      whether or not that scope was explicitly specified by the user.   */
7610   explicit_scope = scope;
7611   if (!scope)
7612     {
7613       /* An explicit "extern" specifier indicates a namespace-scope
7614          variable.  */
7615       if (declspecs->storage_class == sc_extern)
7616         scope = current_decl_namespace ();
7617       else if (!at_function_scope_p ())
7618         scope = current_scope ();
7619     }
7620
7621   if (scope
7622       && (/* If the variable is a namespace-scope variable declared in a
7623              template, we need DECL_LANG_SPECIFIC.  */
7624           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7625           /* Similarly for namespace-scope variables with language linkage
7626              other than C++.  */
7627           || (TREE_CODE (scope) == NAMESPACE_DECL
7628               && current_lang_name != lang_name_cplusplus)
7629           /* Similarly for static data members.  */
7630           || TYPE_P (scope)))
7631     decl = build_lang_decl (VAR_DECL, name, type);
7632   else
7633     decl = build_decl (input_location, VAR_DECL, name, type);
7634
7635   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7636     set_decl_namespace (decl, explicit_scope, 0);
7637   else
7638     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7639
7640   if (declspecs->storage_class == sc_extern)
7641     {
7642       DECL_THIS_EXTERN (decl) = 1;
7643       DECL_EXTERNAL (decl) = !initialized;
7644     }
7645
7646   if (DECL_CLASS_SCOPE_P (decl))
7647     {
7648       set_linkage_for_static_data_member (decl);
7649       /* This function is only called with out-of-class definitions.  */
7650       DECL_EXTERNAL (decl) = 0;
7651       check_class_member_definition_namespace (decl);
7652     }
7653   /* At top level, either `static' or no s.c. makes a definition
7654      (perhaps tentative), and absence of `static' makes it public.  */
7655   else if (toplevel_bindings_p ())
7656     {
7657       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7658                             && (DECL_THIS_EXTERN (decl) || ! constp));
7659       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7660     }
7661   /* Not at top level, only `static' makes a static definition.  */
7662   else
7663     {
7664       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7665       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7666     }
7667
7668   if (declspecs->specs[(int)ds_thread])
7669     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7670
7671   /* If the type of the decl has no linkage, make sure that we'll
7672      notice that in mark_used.  */
7673   if (cxx_dialect > cxx98
7674       && decl_linkage (decl) != lk_none
7675       && DECL_LANG_SPECIFIC (decl) == NULL
7676       && !DECL_EXTERN_C_P (decl)
7677       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7678     retrofit_lang_decl (decl);
7679
7680   if (TREE_PUBLIC (decl))
7681     {
7682       /* [basic.link]: A name with no linkage (notably, the name of a class
7683          or enumeration declared in a local scope) shall not be used to
7684          declare an entity with linkage.
7685
7686          DR 757 relaxes this restriction for C++0x.  */
7687       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7688                 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7689       if (t)
7690         {
7691           if (TYPE_ANONYMOUS_P (t))
7692             {
7693               if (DECL_EXTERN_C_P (decl))
7694                 /* Allow this; it's pretty common in C.  */
7695                 ;
7696               else
7697                 {
7698                   /* DRs 132, 319 and 389 seem to indicate types with
7699                      no linkage can only be used to declare extern "C"
7700                      entities.  Since it's not always an error in the
7701                      ISO C++ 90 Standard, we only issue a warning.  */
7702                   warning (0, "anonymous type with no linkage used to declare "
7703                            "variable %q#D with linkage", decl);
7704                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7705                     warning (0, "%q+#D does not refer to the unqualified "
7706                              "type, so it is not used for linkage",
7707                              TYPE_NAME (t));
7708                 }
7709             }
7710           else
7711             warning (0, "type %qT with no linkage used to declare variable "
7712                      "%q#D with linkage", t, decl);
7713         }
7714     }
7715   else
7716     DECL_INTERFACE_KNOWN (decl) = 1;
7717
7718   return decl;
7719 }
7720
7721 /* Create and return a canonical pointer to member function type, for
7722    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7723
7724 tree
7725 build_ptrmemfunc_type (tree type)
7726 {
7727   tree field, fields;
7728   tree t;
7729   tree unqualified_variant = NULL_TREE;
7730
7731   if (type == error_mark_node)
7732     return type;
7733
7734   /* If a canonical type already exists for this type, use it.  We use
7735      this method instead of type_hash_canon, because it only does a
7736      simple equality check on the list of field members.  */
7737
7738   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7739     return t;
7740
7741   /* Make sure that we always have the unqualified pointer-to-member
7742      type first.  */
7743   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7744     unqualified_variant
7745       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7746
7747   t = make_class_type (RECORD_TYPE);
7748   xref_basetypes (t, NULL_TREE);
7749
7750   /* Let the front end know this is a pointer to member function...  */
7751   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7752   /* ... and not really a class type.  */
7753   SET_CLASS_TYPE_P (t, 0);
7754
7755   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7756   fields = field;
7757
7758   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
7759                       delta_type_node);
7760   DECL_CHAIN (field) = fields;
7761   fields = field;
7762
7763   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7764
7765   /* Zap out the name so that the back end will give us the debugging
7766      information for this anonymous RECORD_TYPE.  */
7767   TYPE_NAME (t) = NULL_TREE;
7768
7769   /* If this is not the unqualified form of this pointer-to-member
7770      type, set the TYPE_MAIN_VARIANT for this type to be the
7771      unqualified type.  Since they are actually RECORD_TYPEs that are
7772      not variants of each other, we must do this manually.
7773      As we just built a new type there is no need to do yet another copy.  */
7774   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7775     {
7776       int type_quals = cp_type_quals (type);
7777       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7778       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7779       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7780       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7781       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7782       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7783       TREE_TYPE (TYPE_BINFO (t)) = t;
7784     }
7785
7786   /* Cache this pointer-to-member type so that we can find it again
7787      later.  */
7788   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7789
7790   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7791     SET_TYPE_STRUCTURAL_EQUALITY (t);
7792   else if (TYPE_CANONICAL (type) != type)
7793     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7794
7795   return t;
7796 }
7797
7798 /* Create and return a pointer to data member type.  */
7799
7800 tree
7801 build_ptrmem_type (tree class_type, tree member_type)
7802 {
7803   if (TREE_CODE (member_type) == METHOD_TYPE)
7804     {
7805       cp_cv_quals quals = type_memfn_quals (member_type);
7806       member_type = build_memfn_type (member_type, class_type, quals);
7807       return build_ptrmemfunc_type (build_pointer_type (member_type));
7808     }
7809   else
7810     {
7811       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7812       return build_offset_type (class_type, member_type);
7813     }
7814 }
7815
7816 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7817    Check to see that the definition is valid.  Issue appropriate error
7818    messages.  Return 1 if the definition is particularly bad, or 0
7819    otherwise.  */
7820
7821 static int
7822 check_static_variable_definition (tree decl, tree type)
7823 {
7824   /* Can't check yet if we don't know the type.  */
7825   if (dependent_type_p (type))
7826     return 0;
7827   /* If DECL is declared constexpr, we'll do the appropriate checks
7828      in check_initializer.  */
7829   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7830     return 0;
7831   else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7832     {
7833       if (!COMPLETE_TYPE_P (type))
7834         error ("in-class initialization of static data member %q#D of "
7835                "incomplete type", decl);
7836       else if (literal_type_p (type))
7837         permerror (input_location,
7838                    "%<constexpr%> needed for in-class initialization of "
7839                    "static data member %q#D of non-integral type", decl);
7840       else
7841         error ("in-class initialization of static data member %q#D of "
7842                "non-literal type", decl);
7843       return 1;
7844     }
7845
7846   /* Motion 10 at San Diego: If a static const integral data member is
7847      initialized with an integral constant expression, the initializer
7848      may appear either in the declaration (within the class), or in
7849      the definition, but not both.  If it appears in the class, the
7850      member is a member constant.  The file-scope definition is always
7851      required.  */
7852   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7853     {
7854       error ("invalid in-class initialization of static data member "
7855              "of non-integral type %qT",
7856              type);
7857       return 1;
7858     }
7859   else if (!CP_TYPE_CONST_P (type))
7860     error ("ISO C++ forbids in-class initialization of non-const "
7861            "static member %qD",
7862            decl);
7863   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7864     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7865              "%qD of non-integral type %qT", decl, type);
7866
7867   return 0;
7868 }
7869
7870 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7871    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7872    expressions out into temporary variables so that walk_tree doesn't
7873    step into them (c++/15764).  */
7874
7875 static tree
7876 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7877 {
7878   struct pointer_set_t *pset = (struct pointer_set_t *)data;
7879   tree expr = *expr_p;
7880   if (TREE_CODE (expr) == SAVE_EXPR)
7881     {
7882       tree op = TREE_OPERAND (expr, 0);
7883       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7884       if (TREE_SIDE_EFFECTS (op))
7885         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7886       *walk_subtrees = 0;
7887     }
7888   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7889     *walk_subtrees = 0;
7890   return NULL;
7891 }
7892
7893 /* Entry point for the above.  */
7894
7895 static void
7896 stabilize_vla_size (tree size)
7897 {
7898   struct pointer_set_t *pset = pointer_set_create ();
7899   /* Break out any function calls into temporary variables.  */
7900   cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7901 }
7902
7903 /* Given the SIZE (i.e., number of elements) in an array, compute an
7904    appropriate index type for the array.  If non-NULL, NAME is the
7905    name of the thing being declared.  */
7906
7907 tree
7908 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7909 {
7910   tree type;
7911   tree itype;
7912   tree osize = size;
7913   tree abi_1_itype = NULL_TREE;
7914
7915   if (error_operand_p (size))
7916     return error_mark_node;
7917
7918   type = TREE_TYPE (size);
7919   /* type_dependent_expression_p? */
7920   if (!dependent_type_p (type))
7921     {
7922       mark_rvalue_use (size);
7923
7924       if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7925           && TREE_SIDE_EFFECTS (size))
7926         /* In C++98, we mark a non-constant array bound with a magic
7927            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7928       else
7929         {
7930           size = fold_non_dependent_expr (size);
7931
7932           if (CLASS_TYPE_P (type)
7933               && CLASSTYPE_LITERAL_P (type))
7934             {
7935               size = build_expr_type_conversion (WANT_INT, size, true);
7936               if (!size)
7937                 {
7938                   if (!(complain & tf_error))
7939                     return error_mark_node;
7940                   if (name)
7941                     error ("size of array %qD has non-integral type %qT",
7942                            name, type);
7943                   else
7944                     error ("size of array has non-integral type %qT", type);
7945                   size = integer_one_node;
7946                 }
7947               if (size == error_mark_node)
7948                 return error_mark_node;
7949               type = TREE_TYPE (size);
7950               /* We didn't support this case in GCC 3.2, so don't bother
7951                  trying to model it now in ABI v1.  */
7952               abi_1_itype = error_mark_node;
7953             }
7954
7955           size = maybe_constant_value (size);
7956           if (!TREE_CONSTANT (size))
7957             size = osize;
7958         }
7959
7960       if (error_operand_p (size))
7961         return error_mark_node;
7962
7963       /* The array bound must be an integer type.  */
7964       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7965         {
7966           if (!(complain & tf_error))
7967             return error_mark_node;
7968           if (name)
7969             error ("size of array %qD has non-integral type %qT", name, type);
7970           else
7971             error ("size of array has non-integral type %qT", type);
7972           size = integer_one_node;
7973           type = TREE_TYPE (size);
7974         }
7975     }
7976
7977   /* A type is dependent if it is...an array type constructed from any
7978      dependent type or whose size is specified by a constant expression
7979      that is value-dependent.  */
7980   /* We can only call value_dependent_expression_p on integral constant
7981      expressions; treat non-constant expressions as dependent, too.  */
7982   if (processing_template_decl
7983       && (dependent_type_p (type)
7984           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7985     {
7986       /* We cannot do any checking for a SIZE that isn't known to be
7987          constant. Just build the index type and mark that it requires
7988          structural equality checks.  */
7989       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7990                                            size, integer_one_node));
7991       TYPE_DEPENDENT_P (itype) = 1;
7992       TYPE_DEPENDENT_P_VALID (itype) = 1;
7993       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7994       return itype;
7995     }
7996   
7997   if (!abi_version_at_least (2) && processing_template_decl
7998       && abi_1_itype == NULL_TREE)
7999     /* For abi-1, we handled all instances in templates the same way,
8000        even when they were non-dependent. This affects the manglings
8001        produced.  So, we do the normal checking for non-dependent
8002        sizes, but at the end we'll return the same type that abi-1
8003        would have, but with TYPE_CANONICAL set to the "right"
8004        value that the current ABI would provide. */
8005     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8006                                                osize, integer_one_node));
8007
8008   /* Normally, the array-bound will be a constant.  */
8009   if (TREE_CODE (size) == INTEGER_CST)
8010     {
8011       /* Check to see if the array bound overflowed.  Make that an
8012          error, no matter how generous we're being.  */
8013       constant_expression_error (size);
8014
8015       /* An array must have a positive number of elements.  */
8016       if (INT_CST_LT (size, integer_zero_node))
8017         {
8018           if (!(complain & tf_error))
8019             return error_mark_node;
8020           if (name)
8021             error ("size of array %qD is negative", name);
8022           else
8023             error ("size of array is negative");
8024           size = integer_one_node;
8025         }
8026       /* As an extension we allow zero-sized arrays.  */
8027       else if (integer_zerop (size))
8028         {
8029           if (!(complain & tf_error))
8030             /* We must fail if performing argument deduction (as
8031                indicated by the state of complain), so that
8032                another substitution can be found.  */
8033             return error_mark_node;
8034           else if (in_system_header)
8035             /* Allow them in system headers because glibc uses them.  */;
8036           else if (name)
8037             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
8038           else
8039             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
8040         }
8041     }
8042   else if (TREE_CONSTANT (size)
8043            /* We don't allow VLAs at non-function scopes, or during
8044               tentative template substitution.  */
8045            || !at_function_scope_p () || !(complain & tf_error))
8046     {
8047       if (!(complain & tf_error))
8048         return error_mark_node;
8049       /* `(int) &fn' is not a valid array bound.  */
8050       if (name)
8051         error ("size of array %qD is not an integral constant-expression",
8052                name);
8053       else
8054         error ("size of array is not an integral constant-expression");
8055       size = integer_one_node;
8056     }
8057   else if (pedantic && warn_vla != 0)
8058     {
8059       if (name)
8060         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8061       else
8062         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8063     }
8064   else if (warn_vla > 0)
8065     {
8066       if (name)
8067         warning (OPT_Wvla, 
8068                  "variable length array %qD is used", name);
8069       else
8070         warning (OPT_Wvla, 
8071                  "variable length array is used");
8072     }
8073
8074   if (processing_template_decl && !TREE_CONSTANT (size))
8075     /* A variable sized array.  */
8076     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8077   else
8078     {
8079       HOST_WIDE_INT saved_processing_template_decl;
8080
8081       /* Compute the index of the largest element in the array.  It is
8082          one less than the number of elements in the array.  We save
8083          and restore PROCESSING_TEMPLATE_DECL so that computations in
8084          cp_build_binary_op will be appropriately folded.  */
8085       saved_processing_template_decl = processing_template_decl;
8086       processing_template_decl = 0;
8087       itype = cp_build_binary_op (input_location,
8088                                   MINUS_EXPR,
8089                                   cp_convert (ssizetype, size),
8090                                   cp_convert (ssizetype, integer_one_node),
8091                                   tf_warning_or_error);
8092       itype = fold (itype);
8093       processing_template_decl = saved_processing_template_decl;
8094
8095       if (!TREE_CONSTANT (itype))
8096         /* A variable sized array.  */
8097         itype = variable_size (itype);
8098       /* Make sure that there was no overflow when creating to a signed
8099          index type.  (For example, on a 32-bit machine, an array with
8100          size 2^32 - 1 is too big.)  */
8101       else if (TREE_CODE (itype) == INTEGER_CST
8102                && TREE_OVERFLOW (itype))
8103         {
8104           if (!(complain & tf_error))
8105             return error_mark_node;
8106           error ("overflow in array dimension");
8107           TREE_OVERFLOW (itype) = 0;
8108         }
8109     }
8110
8111   /* Create and return the appropriate index type.  */
8112   if (abi_1_itype && abi_1_itype != error_mark_node)
8113     {
8114       tree t = build_index_type (itype);
8115       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8116       itype = abi_1_itype;
8117     }
8118   else
8119     itype = build_index_type (itype);
8120
8121   /* If the index type were dependent, we would have returned early, so
8122      remember that it isn't.  */
8123   TYPE_DEPENDENT_P (itype) = 0;
8124   TYPE_DEPENDENT_P_VALID (itype) = 1;
8125   return itype;
8126 }
8127
8128 /* Returns the scope (if any) in which the entity declared by
8129    DECLARATOR will be located.  If the entity was declared with an
8130    unqualified name, NULL_TREE is returned.  */
8131
8132 tree
8133 get_scope_of_declarator (const cp_declarator *declarator)
8134 {
8135   while (declarator && declarator->kind != cdk_id)
8136     declarator = declarator->declarator;
8137
8138   /* If the declarator-id is a SCOPE_REF, the scope in which the
8139      declaration occurs is the first operand.  */
8140   if (declarator
8141       && declarator->u.id.qualifying_scope)
8142     return declarator->u.id.qualifying_scope;
8143
8144   /* Otherwise, the declarator is not a qualified name; the entity will
8145      be declared in the current scope.  */
8146   return NULL_TREE;
8147 }
8148
8149 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8150    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8151    with this type.  */
8152
8153 static tree
8154 create_array_type_for_decl (tree name, tree type, tree size)
8155 {
8156   tree itype = NULL_TREE;
8157
8158   /* If things have already gone awry, bail now.  */
8159   if (type == error_mark_node || size == error_mark_node)
8160     return error_mark_node;
8161
8162   /* 8.3.4/1: If the type of the identifier of D contains the auto
8163      type-specifier, the program is ill-formed.  */
8164   if (pedantic && type_uses_auto (type))
8165     pedwarn (input_location, OPT_pedantic,
8166              "declaration of %qD as array of %<auto%>", name);
8167
8168   /* If there are some types which cannot be array elements,
8169      issue an error-message and return.  */
8170   switch (TREE_CODE (type))
8171     {
8172     case VOID_TYPE:
8173       if (name)
8174         error ("declaration of %qD as array of void", name);
8175       else
8176         error ("creating array of void");
8177       return error_mark_node;
8178
8179     case FUNCTION_TYPE:
8180       if (name)
8181         error ("declaration of %qD as array of functions", name);
8182       else
8183         error ("creating array of functions");
8184       return error_mark_node;
8185
8186     case REFERENCE_TYPE:
8187       if (name)
8188         error ("declaration of %qD as array of references", name);
8189       else
8190         error ("creating array of references");
8191       return error_mark_node;
8192
8193     case METHOD_TYPE:
8194       if (name)
8195         error ("declaration of %qD as array of function members", name);
8196       else
8197         error ("creating array of function members");
8198       return error_mark_node;
8199
8200     default:
8201       break;
8202     }
8203
8204   /* [dcl.array]
8205
8206      The constant expressions that specify the bounds of the arrays
8207      can be omitted only for the first member of the sequence.  */
8208   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8209     {
8210       if (name)
8211         error ("declaration of %qD as multidimensional array must "
8212                "have bounds for all dimensions except the first",
8213                name);
8214       else
8215         error ("multidimensional array must have bounds for all "
8216                "dimensions except the first");
8217
8218       return error_mark_node;
8219     }
8220
8221   /* Figure out the index type for the array.  */
8222   if (size)
8223     itype = compute_array_index_type (name, size, tf_warning_or_error);
8224
8225   /* [dcl.array]
8226      T is called the array element type; this type shall not be [...] an
8227      abstract class type.  */
8228   abstract_virtuals_error (name, type);
8229
8230   return build_cplus_array_type (type, itype);
8231 }
8232
8233 /* Check that it's OK to declare a function with the indicated TYPE.
8234    SFK indicates the kind of special function (if any) that this
8235    function is.  OPTYPE is the type given in a conversion operator
8236    declaration, or the class type for a constructor/destructor.
8237    Returns the actual return type of the function; that
8238    may be different than TYPE if an error occurs, or for certain
8239    special functions.  */
8240
8241 static tree
8242 check_special_function_return_type (special_function_kind sfk,
8243                                     tree type,
8244                                     tree optype)
8245 {
8246   switch (sfk)
8247     {
8248     case sfk_constructor:
8249       if (type)
8250         error ("return type specification for constructor invalid");
8251
8252       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8253         type = build_pointer_type (optype);
8254       else
8255         type = void_type_node;
8256       break;
8257
8258     case sfk_destructor:
8259       if (type)
8260         error ("return type specification for destructor invalid");
8261       /* We can't use the proper return type here because we run into
8262          problems with ambiguous bases and covariant returns.
8263          Java classes are left unchanged because (void *) isn't a valid
8264          Java type, and we don't want to change the Java ABI.  */
8265       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8266         type = build_pointer_type (void_type_node);
8267       else
8268         type = void_type_node;
8269       break;
8270
8271     case sfk_conversion:
8272       if (type)
8273         error ("return type specified for %<operator %T%>",  optype);
8274       type = optype;
8275       break;
8276
8277     default:
8278       gcc_unreachable ();
8279     }
8280
8281   return type;
8282 }
8283
8284 /* A variable or data member (whose unqualified name is IDENTIFIER)
8285    has been declared with the indicated TYPE.  If the TYPE is not
8286    acceptable, issue an error message and return a type to use for
8287    error-recovery purposes.  */
8288
8289 tree
8290 check_var_type (tree identifier, tree type)
8291 {
8292   if (VOID_TYPE_P (type))
8293     {
8294       if (!identifier)
8295         error ("unnamed variable or field declared void");
8296       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8297         {
8298           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8299           error ("variable or field %qE declared void", identifier);
8300         }
8301       else
8302         error ("variable or field declared void");
8303       type = error_mark_node;
8304     }
8305
8306   return type;
8307 }
8308
8309 /* Functions for adjusting the visibility of a tagged type and its nested
8310    types when it gets a name for linkage purposes from a typedef.  */
8311
8312 static void bt_reset_linkage (binding_entry, void *);
8313 static void
8314 reset_type_linkage (tree type)
8315 {
8316   set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
8317   if (CLASS_TYPE_P (type))
8318     binding_table_foreach (CLASSTYPE_NESTED_UTDS (type), bt_reset_linkage, NULL);
8319 }
8320 static void
8321 bt_reset_linkage (binding_entry b, void *data ATTRIBUTE_UNUSED)
8322 {
8323   reset_type_linkage (b->type);
8324 }
8325
8326 /* Given declspecs and a declarator (abstract or otherwise), determine
8327    the name and type of the object declared and construct a DECL node
8328    for it.
8329
8330    DECLSPECS points to the representation of declaration-specifier
8331    sequence that precedes declarator.
8332
8333    DECL_CONTEXT says which syntactic context this declaration is in:
8334      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8335      FUNCDEF for a function definition.  Like NORMAL but a few different
8336       error messages in each case.  Return value may be zero meaning
8337       this definition is too screwy to try to parse.
8338      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8339       handle member functions (which have FIELD context).
8340       Return value may be zero meaning this definition is too screwy to
8341       try to parse.
8342      PARM for a parameter declaration (either within a function prototype
8343       or before a function body).  Make a PARM_DECL, or return void_type_node.
8344      TPARM for a template parameter declaration.
8345      CATCHPARM for a parameter declaration before a catch clause.
8346      TYPENAME if for a typename (in a cast or sizeof).
8347       Don't make a DECL node; just return the ..._TYPE node.
8348      FIELD for a struct or union field; make a FIELD_DECL.
8349      BITFIELD for a field with specified width.
8350
8351    INITIALIZED is as for start_decl.
8352
8353    ATTRLIST is a pointer to the list of attributes, which may be NULL
8354    if there are none; *ATTRLIST may be modified if attributes from inside
8355    the declarator should be applied to the declaration.
8356
8357    When this function is called, scoping variables (such as
8358    CURRENT_CLASS_TYPE) should reflect the scope in which the
8359    declaration occurs, not the scope in which the new declaration will
8360    be placed.  For example, on:
8361
8362      void S::f() { ... }
8363
8364    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8365    should not be `S'.
8366
8367    Returns a DECL (if a declarator is present), a TYPE (if there is no
8368    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8369    error occurs. */
8370
8371 tree
8372 grokdeclarator (const cp_declarator *declarator,
8373                 const cp_decl_specifier_seq *declspecs,
8374                 enum decl_context decl_context,
8375                 int initialized,
8376                 tree* attrlist)
8377 {
8378   tree type = NULL_TREE;
8379   int longlong = 0;
8380   int explicit_int128 = 0;
8381   int virtualp, explicitp, friendp, inlinep, staticp;
8382   int explicit_int = 0;
8383   int explicit_char = 0;
8384   int defaulted_int = 0;
8385   tree dependent_name = NULL_TREE;
8386
8387   tree typedef_decl = NULL_TREE;
8388   const char *name = NULL;
8389   tree typedef_type = NULL_TREE;
8390   /* True if this declarator is a function definition.  */
8391   bool funcdef_flag = false;
8392   cp_declarator_kind innermost_code = cdk_error;
8393   int bitfield = 0;
8394 #if 0
8395   /* See the code below that used this.  */
8396   tree decl_attr = NULL_TREE;
8397 #endif
8398
8399   /* Keep track of what sort of function is being processed
8400      so that we can warn about default return values, or explicit
8401      return values which do not match prescribed defaults.  */
8402   special_function_kind sfk = sfk_none;
8403
8404   tree dname = NULL_TREE;
8405   tree ctor_return_type = NULL_TREE;
8406   enum overload_flags flags = NO_SPECIAL;
8407   /* cv-qualifiers that apply to the declarator, for a declaration of
8408      a member function.  */
8409   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8410   /* virt-specifiers that apply to the declarator, for a declaration of
8411      a member function.  */
8412   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8413   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8414   int type_quals;
8415   tree raises = NULL_TREE;
8416   int template_count = 0;
8417   tree returned_attrs = NULL_TREE;
8418   tree parms = NULL_TREE;
8419   const cp_declarator *id_declarator;
8420   /* The unqualified name of the declarator; either an
8421      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8422   tree unqualified_id;
8423   /* The class type, if any, in which this entity is located,
8424      or NULL_TREE if none.  Note that this value may be different from
8425      the current class type; for example if an attempt is made to declare
8426      "A::f" inside "B", this value will be "A".  */
8427   tree ctype = current_class_type;
8428   /* The NAMESPACE_DECL for the namespace in which this entity is
8429      located.  If an unqualified name is used to declare the entity,
8430      this value will be NULL_TREE, even if the entity is located at
8431      namespace scope.  */
8432   tree in_namespace = NULL_TREE;
8433   cp_storage_class storage_class;
8434   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8435   bool type_was_error_mark_node = false;
8436   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8437   bool template_type_arg = false;
8438   bool template_parm_flag = false;
8439   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8440   const char *errmsg;
8441
8442   signed_p = declspecs->specs[(int)ds_signed];
8443   unsigned_p = declspecs->specs[(int)ds_unsigned];
8444   short_p = declspecs->specs[(int)ds_short];
8445   long_p = declspecs->specs[(int)ds_long];
8446   longlong = declspecs->specs[(int)ds_long] >= 2;
8447   explicit_int128 = declspecs->explicit_int128_p;
8448   thread_p = declspecs->specs[(int)ds_thread];
8449
8450   if (decl_context == FUNCDEF)
8451     funcdef_flag = true, decl_context = NORMAL;
8452   else if (decl_context == MEMFUNCDEF)
8453     funcdef_flag = true, decl_context = FIELD;
8454   else if (decl_context == BITFIELD)
8455     bitfield = 1, decl_context = FIELD;
8456   else if (decl_context == TEMPLATE_TYPE_ARG)
8457     template_type_arg = true, decl_context = TYPENAME;
8458   else if (decl_context == TPARM)
8459     template_parm_flag = true, decl_context = PARM;
8460
8461   if (initialized > 1)
8462     funcdef_flag = true;
8463
8464   /* Look inside a declarator for the name being declared
8465      and get it as a string, for an error message.  */
8466   for (id_declarator = declarator;
8467        id_declarator;
8468        id_declarator = id_declarator->declarator)
8469     {
8470       if (id_declarator->kind != cdk_id)
8471         innermost_code = id_declarator->kind;
8472
8473       switch (id_declarator->kind)
8474         {
8475         case cdk_function:
8476           if (id_declarator->declarator
8477               && id_declarator->declarator->kind == cdk_id)
8478             {
8479               sfk = id_declarator->declarator->u.id.sfk;
8480               if (sfk == sfk_destructor)
8481                 flags = DTOR_FLAG;
8482             }
8483           break;
8484
8485         case cdk_id:
8486           {
8487             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8488             tree decl = id_declarator->u.id.unqualified_name;
8489             if (!decl)
8490               break;
8491             if (qualifying_scope)
8492               {
8493                 if (at_function_scope_p ())
8494                   {
8495                     /* [dcl.meaning] 
8496
8497                        A declarator-id shall not be qualified except
8498                        for ... 
8499
8500                        None of the cases are permitted in block
8501                        scope.  */
8502                     if (qualifying_scope == global_namespace)
8503                       error ("invalid use of qualified-name %<::%D%>",
8504                              decl);
8505                     else if (TYPE_P (qualifying_scope))
8506                       error ("invalid use of qualified-name %<%T::%D%>",
8507                              qualifying_scope, decl);
8508                     else 
8509                       error ("invalid use of qualified-name %<%D::%D%>",
8510                              qualifying_scope, decl);
8511                     return error_mark_node;
8512                   }
8513                 else if (TYPE_P (qualifying_scope))
8514                   {
8515                     ctype = qualifying_scope;
8516                     if (!MAYBE_CLASS_TYPE_P (ctype))
8517                       {
8518                         error ("%q#T is not a class or a namespace", ctype);
8519                         ctype = NULL_TREE;
8520                       }
8521                     else if (innermost_code != cdk_function
8522                              && current_class_type
8523                              && !UNIQUELY_DERIVED_FROM_P (ctype,
8524                                                           current_class_type))
8525                       {
8526                         error ("type %qT is not derived from type %qT",
8527                                ctype, current_class_type);
8528                         return error_mark_node;
8529                       }
8530                   }
8531                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8532                   in_namespace = qualifying_scope;
8533               }
8534             switch (TREE_CODE (decl))
8535               {
8536               case BIT_NOT_EXPR:
8537                 {
8538                   tree type;
8539
8540                   if (innermost_code != cdk_function)
8541                     {
8542                       error ("declaration of %qD as non-function", decl);
8543                       return error_mark_node;
8544                     }
8545                   else if (!qualifying_scope
8546                            && !(current_class_type && at_class_scope_p ()))
8547                     {
8548                       error ("declaration of %qD as non-member", decl);
8549                       return error_mark_node;
8550                     }
8551
8552                   type = TREE_OPERAND (decl, 0);
8553                   if (TYPE_P (type))
8554                     type = constructor_name (type);
8555                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
8556                   dname = decl;
8557                 }
8558                 break;
8559
8560               case TEMPLATE_ID_EXPR:
8561                 {
8562                   tree fns = TREE_OPERAND (decl, 0);
8563
8564                   dname = fns;
8565                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
8566                     {
8567                       gcc_assert (is_overloaded_fn (dname));
8568                       dname = DECL_NAME (get_first_fn (dname));
8569                     }
8570                 }
8571                 /* Fall through.  */
8572
8573               case IDENTIFIER_NODE:
8574                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8575                   dname = decl;
8576
8577                 if (C_IS_RESERVED_WORD (dname))
8578                   {
8579                     error ("declarator-id missing; using reserved word %qD",
8580                            dname);
8581                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8582                   }
8583                 else if (!IDENTIFIER_TYPENAME_P (dname))
8584                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8585                 else
8586                   {
8587                     gcc_assert (flags == NO_SPECIAL);
8588                     flags = TYPENAME_FLAG;
8589                     ctor_return_type = TREE_TYPE (dname);
8590                     sfk = sfk_conversion;
8591                     if (is_typename_at_global_scope (dname))
8592                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8593                     else
8594                       name = "<invalid operator>";
8595                   }
8596                 break;
8597
8598               default:
8599                 gcc_unreachable ();
8600               }
8601             break;
8602           }
8603
8604         case cdk_array:
8605         case cdk_pointer:
8606         case cdk_reference:
8607         case cdk_ptrmem:
8608           break;
8609
8610         case cdk_error:
8611           return error_mark_node;
8612
8613         default:
8614           gcc_unreachable ();
8615         }
8616       if (id_declarator->kind == cdk_id)
8617         break;
8618     }
8619
8620   /* [dcl.fct.edf]
8621
8622      The declarator in a function-definition shall have the form
8623      D1 ( parameter-declaration-clause) ...  */
8624   if (funcdef_flag && innermost_code != cdk_function)
8625     {
8626       error ("function definition does not declare parameters");
8627       return error_mark_node;
8628     }
8629
8630   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8631       && innermost_code != cdk_function
8632       && ! (ctype && !declspecs->any_specifiers_p))
8633     {
8634       error ("declaration of %qD as non-function", dname);
8635       return error_mark_node;
8636     }
8637
8638   if (dname
8639       && TREE_CODE (dname) == IDENTIFIER_NODE
8640       && UDLIT_OPER_P (dname)
8641       && innermost_code != cdk_function)
8642     {
8643       error ("declaration of %qD as non-function", dname);
8644       return error_mark_node;
8645     }
8646
8647   if (dname && IDENTIFIER_OPNAME_P (dname))
8648     {
8649       if (declspecs->specs[(int)ds_typedef])
8650         {
8651           error ("declaration of %qD as %<typedef%>", dname);
8652           return error_mark_node;
8653         }
8654       else if (decl_context == PARM || decl_context == CATCHPARM)
8655         {
8656           error ("declaration of %qD as parameter", dname);
8657           return error_mark_node;
8658         }
8659     }
8660
8661   /* Anything declared one level down from the top level
8662      must be one of the parameters of a function
8663      (because the body is at least two levels down).  */
8664
8665   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8666      by not allowing C++ class definitions to specify their parameters
8667      with xdecls (must be spec.d in the parmlist).
8668
8669      Since we now wait to push a class scope until we are sure that
8670      we are in a legitimate method context, we must set oldcname
8671      explicitly (since current_class_name is not yet alive).
8672
8673      We also want to avoid calling this a PARM if it is in a namespace.  */
8674
8675   if (decl_context == NORMAL && !toplevel_bindings_p ())
8676     {
8677       cp_binding_level *b = current_binding_level;
8678       current_binding_level = b->level_chain;
8679       if (current_binding_level != 0 && toplevel_bindings_p ())
8680         decl_context = PARM;
8681       current_binding_level = b;
8682     }
8683
8684   if (name == NULL)
8685     name = decl_context == PARM ? "parameter" : "type name";
8686
8687   if (constexpr_p && declspecs->specs[(int)ds_typedef])
8688     {
8689       error ("%<constexpr%> cannot appear in a typedef declaration");
8690       return error_mark_node;
8691     }
8692
8693   /* If there were multiple types specified in the decl-specifier-seq,
8694      issue an error message.  */
8695   if (declspecs->multiple_types_p)
8696     {
8697       error ("two or more data types in declaration of %qs", name);
8698       return error_mark_node;
8699     }
8700
8701   if (declspecs->conflicting_specifiers_p)
8702     {
8703       error ("conflicting specifiers in declaration of %qs", name);
8704       return error_mark_node;
8705     }
8706
8707   /* Extract the basic type from the decl-specifier-seq.  */
8708   type = declspecs->type;
8709   if (type == error_mark_node)
8710     {
8711       type = NULL_TREE;
8712       type_was_error_mark_node = true;
8713     }
8714   /* If the entire declaration is itself tagged as deprecated then
8715      suppress reports of deprecated items.  */
8716   if (type && TREE_DEPRECATED (type)
8717       && deprecated_state != DEPRECATED_SUPPRESS)
8718     warn_deprecated_use (type, NULL_TREE);
8719   if (type && TREE_CODE (type) == TYPE_DECL)
8720     {
8721       typedef_decl = type;
8722       type = TREE_TYPE (typedef_decl);
8723       if (TREE_DEPRECATED (type)
8724           && DECL_ARTIFICIAL (typedef_decl)
8725           && deprecated_state != DEPRECATED_SUPPRESS)
8726         warn_deprecated_use (type, NULL_TREE);
8727     }
8728   /* No type at all: default to `int', and set DEFAULTED_INT
8729      because it was not a user-defined typedef.  */
8730   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8731     {
8732       /* These imply 'int'.  */
8733       type = integer_type_node;
8734       defaulted_int = 1;
8735     }
8736   /* Gather flags.  */
8737   explicit_int = declspecs->explicit_int_p;
8738   explicit_char = declspecs->explicit_char_p;
8739
8740 #if 0
8741   /* See the code below that used this.  */
8742   if (typedef_decl)
8743     decl_attr = DECL_ATTRIBUTES (typedef_decl);
8744 #endif
8745   typedef_type = type;
8746
8747
8748   if (sfk != sfk_conversion)
8749     ctor_return_type = ctype;
8750
8751   if (sfk != sfk_none)
8752     type = check_special_function_return_type (sfk, type,
8753                                                ctor_return_type);
8754   else if (type == NULL_TREE)
8755     {
8756       int is_main;
8757
8758       explicit_int = -1;
8759
8760       /* We handle `main' specially here, because 'main () { }' is so
8761          common.  With no options, it is allowed.  With -Wreturn-type,
8762          it is a warning.  It is only an error with -pedantic-errors.  */
8763       is_main = (funcdef_flag
8764                  && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8765                  && MAIN_NAME_P (dname)
8766                  && ctype == NULL_TREE
8767                  && in_namespace == NULL_TREE
8768                  && current_namespace == global_namespace);
8769
8770       if (type_was_error_mark_node)
8771         /* We've already issued an error, don't complain more.  */;
8772       else if (in_system_header || flag_ms_extensions)
8773         /* Allow it, sigh.  */;
8774       else if (! is_main)
8775         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8776       else if (pedantic)
8777         pedwarn (input_location, OPT_pedantic,
8778                  "ISO C++ forbids declaration of %qs with no type", name);
8779       else
8780         warning (OPT_Wreturn_type,
8781                  "ISO C++ forbids declaration of %qs with no type", name);
8782
8783       type = integer_type_node;
8784     }
8785
8786   ctype = NULL_TREE;
8787
8788   if (explicit_int128)
8789     {
8790       if (int128_integer_type_node == NULL_TREE)
8791         {
8792           error ("%<__int128%> is not supported by this target");
8793           explicit_int128 = false;
8794         }
8795       else if (pedantic && ! in_system_header)
8796         pedwarn (input_location, OPT_pedantic,
8797                  "ISO C++ does not support %<__int128%> for %qs", name);
8798     }
8799
8800   /* Now process the modifiers that were specified
8801      and check for invalid combinations.  */
8802
8803   /* Long double is a special combination.  */
8804   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8805     {
8806       long_p = false;
8807       type = cp_build_qualified_type (long_double_type_node,
8808                                       cp_type_quals (type));
8809     }
8810
8811   /* Check all other uses of type modifiers.  */
8812
8813   if (unsigned_p || signed_p || long_p || short_p)
8814     {
8815       int ok = 0;
8816
8817       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8818         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8819       else if (signed_p && unsigned_p)
8820         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8821       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8822         error ("%<long long%> invalid for %qs", name);
8823       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8824         error ("%<long%> invalid for %qs", name);
8825       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8826         error ("%<short%> invalid for %qs", name);
8827       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8828         error ("%<long%> or %<short%> invalid for %qs", name);
8829       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8830         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8831       else if ((long_p || short_p) && explicit_char)
8832         error ("%<long%> or %<short%> specified with char for %qs", name);
8833       else if (long_p && short_p)
8834         error ("%<long%> and %<short%> specified together for %qs", name);
8835       else if (type == char16_type_node || type == char32_type_node)
8836         {
8837           if (signed_p || unsigned_p)
8838             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8839           else if (short_p || long_p)
8840             error ("%<short%> or %<long%> invalid for %qs", name);
8841         }
8842       else
8843         {
8844           ok = 1;
8845           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8846             {
8847               pedwarn (input_location, OPT_pedantic, 
8848                        "long, short, signed or unsigned used invalidly for %qs",
8849                        name);
8850               if (flag_pedantic_errors)
8851                 ok = 0;
8852             }
8853         }
8854
8855       /* Discard the type modifiers if they are invalid.  */
8856       if (! ok)
8857         {
8858           unsigned_p = false;
8859           signed_p = false;
8860           long_p = false;
8861           short_p = false;
8862           longlong = 0;
8863         }
8864     }
8865
8866   /* Decide whether an integer type is signed or not.
8867      Optionally treat bitfields as signed by default.  */
8868   if (unsigned_p
8869       /* [class.bit]
8870
8871          It is implementation-defined whether a plain (neither
8872          explicitly signed or unsigned) char, short, int, or long
8873          bit-field is signed or unsigned.
8874
8875          Naturally, we extend this to long long as well.  Note that
8876          this does not include wchar_t.  */
8877       || (bitfield && !flag_signed_bitfields
8878           && !signed_p
8879           /* A typedef for plain `int' without `signed' can be
8880              controlled just like plain `int', but a typedef for
8881              `signed int' cannot be so controlled.  */
8882           && !(typedef_decl
8883                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8884           && TREE_CODE (type) == INTEGER_TYPE
8885           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8886     {
8887       if (explicit_int128)
8888         type = int128_unsigned_type_node;
8889       else if (longlong)
8890         type = long_long_unsigned_type_node;
8891       else if (long_p)
8892         type = long_unsigned_type_node;
8893       else if (short_p)
8894         type = short_unsigned_type_node;
8895       else if (type == char_type_node)
8896         type = unsigned_char_type_node;
8897       else if (typedef_decl)
8898         type = unsigned_type_for (type);
8899       else
8900         type = unsigned_type_node;
8901     }
8902   else if (signed_p && type == char_type_node)
8903     type = signed_char_type_node;
8904   else if (explicit_int128)
8905     type = int128_integer_type_node;
8906   else if (longlong)
8907     type = long_long_integer_type_node;
8908   else if (long_p)
8909     type = long_integer_type_node;
8910   else if (short_p)
8911     type = short_integer_type_node;
8912
8913   if (declspecs->specs[(int)ds_complex])
8914     {
8915       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8916         error ("complex invalid for %qs", name);
8917       /* If we just have "complex", it is equivalent to
8918          "complex double", but if any modifiers at all are specified it is
8919          the complex form of TYPE.  E.g, "complex short" is
8920          "complex short int".  */
8921       else if (defaulted_int && ! longlong && ! explicit_int128
8922                && ! (long_p || short_p || signed_p || unsigned_p))
8923         type = complex_double_type_node;
8924       else if (type == integer_type_node)
8925         type = complex_integer_type_node;
8926       else if (type == float_type_node)
8927         type = complex_float_type_node;
8928       else if (type == double_type_node)
8929         type = complex_double_type_node;
8930       else if (type == long_double_type_node)
8931         type = complex_long_double_type_node;
8932       else
8933         type = build_complex_type (type);
8934     }
8935
8936   type_quals = TYPE_UNQUALIFIED;
8937   if (declspecs->specs[(int)ds_const])
8938     type_quals |= TYPE_QUAL_CONST;
8939   if (declspecs->specs[(int)ds_volatile])
8940     type_quals |= TYPE_QUAL_VOLATILE;
8941   if (declspecs->specs[(int)ds_restrict])
8942     type_quals |= TYPE_QUAL_RESTRICT;
8943   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8944     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8945            ctor_return_type);
8946
8947   type_quals |= cp_type_quals (type);
8948   type = cp_build_qualified_type_real
8949     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8950                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8951   /* We might have ignored or rejected some of the qualifiers.  */
8952   type_quals = cp_type_quals (type);
8953
8954   staticp = 0;
8955   inlinep = !! declspecs->specs[(int)ds_inline];
8956   virtualp = !! declspecs->specs[(int)ds_virtual];
8957   explicitp = !! declspecs->specs[(int)ds_explicit];
8958
8959   storage_class = declspecs->storage_class;
8960   if (storage_class == sc_static)
8961     staticp = 1 + (decl_context == FIELD);
8962
8963   if (virtualp && staticp == 2)
8964     {
8965       error ("member %qD cannot be declared both virtual and static", dname);
8966       storage_class = sc_none;
8967       staticp = 0;
8968     }
8969   friendp = !! declspecs->specs[(int)ds_friend];
8970
8971   if (dependent_name && !friendp)
8972     {
8973       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8974       return error_mark_node;
8975     }
8976
8977   /* Issue errors about use of storage classes for parameters.  */
8978   if (decl_context == PARM)
8979     {
8980       if (declspecs->specs[(int)ds_typedef])
8981         {
8982           error ("typedef declaration invalid in parameter declaration");
8983           return error_mark_node;
8984         }
8985       else if (template_parm_flag && storage_class != sc_none)
8986         {
8987           error ("storage class specified for template parameter %qs", name);
8988           return error_mark_node;
8989         }
8990       else if (storage_class == sc_static
8991                || storage_class == sc_extern
8992                || thread_p)
8993         error ("storage class specifiers invalid in parameter declarations");
8994
8995       /* Function parameters cannot be constexpr.  If we saw one, moan
8996          and pretend it wasn't there.  */
8997       if (constexpr_p)
8998         {
8999           error ("a parameter cannot be declared %<constexpr%>");
9000           constexpr_p = 0;
9001         }
9002     }
9003
9004   /* Give error if `virtual' is used outside of class declaration.  */
9005   if (virtualp
9006       && (current_class_name == NULL_TREE || decl_context != FIELD))
9007     {
9008       error ("%<virtual%> outside class declaration");
9009       virtualp = 0;
9010     }
9011
9012   /* Static anonymous unions are dealt with here.  */
9013   if (staticp && decl_context == TYPENAME
9014       && declspecs->type
9015       && ANON_AGGR_TYPE_P (declspecs->type))
9016     decl_context = FIELD;
9017
9018   /* Warn about storage classes that are invalid for certain
9019      kinds of declarations (parameters, typenames, etc.).  */
9020   if (thread_p
9021       && ((storage_class
9022            && storage_class != sc_extern
9023            && storage_class != sc_static)
9024           || declspecs->specs[(int)ds_typedef]))
9025     {
9026       error ("multiple storage classes in declaration of %qs", name);
9027       thread_p = false;
9028     }
9029   if (decl_context != NORMAL
9030       && ((storage_class != sc_none
9031            && storage_class != sc_mutable)
9032           || thread_p))
9033     {
9034       if ((decl_context == PARM || decl_context == CATCHPARM)
9035           && (storage_class == sc_register
9036               || storage_class == sc_auto))
9037         ;
9038       else if (declspecs->specs[(int)ds_typedef])
9039         ;
9040       else if (decl_context == FIELD
9041                /* C++ allows static class elements.  */
9042                && storage_class == sc_static)
9043         /* C++ also allows inlines and signed and unsigned elements,
9044            but in those cases we don't come in here.  */
9045         ;
9046       else
9047         {
9048           if (decl_context == FIELD)
9049             error ("storage class specified for %qs", name);
9050           else
9051             {
9052               if (decl_context == PARM || decl_context == CATCHPARM)
9053                 error ("storage class specified for parameter %qs", name);
9054               else
9055                 error ("storage class specified for typename");
9056             }
9057           if (storage_class == sc_register
9058               || storage_class == sc_auto
9059               || storage_class == sc_extern
9060               || thread_p)
9061             storage_class = sc_none;
9062         }
9063     }
9064   else if (storage_class == sc_extern && funcdef_flag
9065            && ! toplevel_bindings_p ())
9066     error ("nested function %qs declared %<extern%>", name);
9067   else if (toplevel_bindings_p ())
9068     {
9069       if (storage_class == sc_auto)
9070         error ("top-level declaration of %qs specifies %<auto%>", name);
9071     }
9072   else if (thread_p
9073            && storage_class != sc_extern
9074            && storage_class != sc_static)
9075     {
9076       error ("function-scope %qs implicitly auto and declared %<__thread%>",
9077              name);
9078       thread_p = false;
9079     }
9080
9081   if (storage_class && friendp)
9082     {
9083       error ("storage class specifiers invalid in friend function declarations");
9084       storage_class = sc_none;
9085       staticp = 0;
9086     }
9087
9088   if (!id_declarator)
9089     unqualified_id = NULL_TREE;
9090   else
9091     {
9092       unqualified_id = id_declarator->u.id.unqualified_name;
9093       switch (TREE_CODE (unqualified_id))
9094         {
9095         case BIT_NOT_EXPR:
9096           unqualified_id = TREE_OPERAND (unqualified_id, 0);
9097           if (TYPE_P (unqualified_id))
9098             unqualified_id = constructor_name (unqualified_id);
9099           break;
9100
9101         case IDENTIFIER_NODE:
9102         case TEMPLATE_ID_EXPR:
9103           break;
9104
9105         default:
9106           gcc_unreachable ();
9107         }
9108     }
9109
9110   /* Determine the type of the entity declared by recurring on the
9111      declarator.  */
9112   for (; declarator; declarator = declarator->declarator)
9113     {
9114       const cp_declarator *inner_declarator;
9115       tree attrs;
9116
9117       if (type == error_mark_node)
9118         return error_mark_node;
9119
9120       attrs = declarator->attributes;
9121       if (attrs)
9122         {
9123           int attr_flags;
9124
9125           attr_flags = 0;
9126           if (declarator == NULL || declarator->kind == cdk_id)
9127             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9128           if (declarator->kind == cdk_function)
9129             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9130           if (declarator->kind == cdk_array)
9131             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9132           returned_attrs = decl_attributes (&type,
9133                                             chainon (returned_attrs, attrs),
9134                                             attr_flags);
9135         }
9136
9137       if (declarator->kind == cdk_id)
9138         break;
9139
9140       inner_declarator = declarator->declarator;
9141
9142       switch (declarator->kind)
9143         {
9144         case cdk_array:
9145           type = create_array_type_for_decl (dname, type,
9146                                              declarator->u.array.bounds);
9147           break;
9148
9149         case cdk_function:
9150           {
9151             tree arg_types;
9152             int funcdecl_p;
9153
9154             /* Declaring a function type.
9155                Make sure we have a valid type for the function to return.  */
9156
9157             if (type_quals != TYPE_UNQUALIFIED)
9158               {
9159                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9160                   warning (OPT_Wignored_qualifiers,
9161                            "type qualifiers ignored on function return type");
9162                 /* We now know that the TYPE_QUALS don't apply to the
9163                    decl, but to its return type.  */
9164                 type_quals = TYPE_UNQUALIFIED;
9165               }
9166             errmsg = targetm.invalid_return_type (type);
9167             if (errmsg)
9168               {
9169                 error (errmsg);
9170                 type = integer_type_node;
9171               }
9172
9173             /* Error about some types functions can't return.  */
9174
9175             if (TREE_CODE (type) == FUNCTION_TYPE)
9176               {
9177                 error ("%qs declared as function returning a function", name);
9178                 return error_mark_node;
9179               }
9180             if (TREE_CODE (type) == ARRAY_TYPE)
9181               {
9182                 error ("%qs declared as function returning an array", name);
9183                 return error_mark_node;
9184               }
9185
9186             /* Pick up type qualifiers which should be applied to `this'.  */
9187             memfn_quals = declarator->u.function.qualifiers;
9188             /* Pick up virt-specifiers.  */
9189             virt_specifiers = declarator->u.function.virt_specifiers;
9190             /* Pick up the exception specifications.  */
9191             raises = declarator->u.function.exception_specification;
9192             /* If the exception-specification is ill-formed, let's pretend
9193                there wasn't one.  */
9194             if (raises == error_mark_node)
9195               raises = NULL_TREE;
9196
9197             /* Say it's a definition only for the CALL_EXPR
9198                closest to the identifier.  */
9199             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9200
9201             /* Handle a late-specified return type.  */
9202             if (funcdecl_p)
9203               {
9204                 if (type_uses_auto (type))
9205                   {
9206                     if (!declarator->u.function.late_return_type)
9207                       {
9208                         error ("%qs function uses %<auto%> type specifier without"
9209                                " trailing return type", name);
9210                         return error_mark_node;
9211                       }
9212                     else if (!is_auto (type))
9213                       {
9214                         error ("%qs function with trailing return type has"
9215                                " %qT as its type rather than plain %<auto%>",
9216                                name, type);
9217                         return error_mark_node;
9218                       }
9219                   }
9220                 else if (declarator->u.function.late_return_type)
9221                   {
9222                     if (cxx_dialect < cxx0x)
9223                       /* Not using maybe_warn_cpp0x because this should
9224                          always be an error.  */
9225                       error ("trailing return type only available with "
9226                              "-std=c++11 or -std=gnu++11");
9227                     else
9228                       error ("%qs function with trailing return type not "
9229                              "declared with %<auto%> type specifier", name);
9230                     return error_mark_node;
9231                   }
9232               }
9233             type = splice_late_return_type
9234               (type, declarator->u.function.late_return_type);
9235             if (type == error_mark_node)
9236               return error_mark_node;
9237
9238             if (ctype == NULL_TREE
9239                 && decl_context == FIELD
9240                 && funcdecl_p
9241                 && (friendp == 0 || dname == current_class_name))
9242               ctype = current_class_type;
9243
9244             if (ctype && (sfk == sfk_constructor
9245                           || sfk == sfk_destructor))
9246               {
9247                 /* We are within a class's scope. If our declarator name
9248                    is the same as the class name, and we are defining
9249                    a function, then it is a constructor/destructor, and
9250                    therefore returns a void type.  */
9251
9252                 /* ISO C++ 12.4/2.  A destructor may not be declared
9253                    const or volatile.  A destructor may not be
9254                    static.
9255
9256                    ISO C++ 12.1.  A constructor may not be declared
9257                    const or volatile.  A constructor may not be
9258                    virtual.  A constructor may not be static.  */
9259                 if (staticp == 2)
9260                   error ((flags == DTOR_FLAG)
9261                          ? G_("destructor cannot be static member function")
9262                          : G_("constructor cannot be static member function"));
9263                 if (memfn_quals)
9264                   {
9265                     error ((flags == DTOR_FLAG)
9266                            ? G_("destructors may not be cv-qualified")
9267                            : G_("constructors may not be cv-qualified"));
9268                     memfn_quals = TYPE_UNQUALIFIED;
9269                   }
9270
9271                 if (decl_context == FIELD
9272                     && !member_function_or_else (ctype,
9273                                                  current_class_type,
9274                                                  flags))
9275                   return error_mark_node;
9276
9277                 if (flags != DTOR_FLAG)
9278                   {
9279                     /* It's a constructor.  */
9280                     if (explicitp == 1)
9281                       explicitp = 2;
9282                     if (virtualp)
9283                       {
9284                         permerror (input_location, "constructors cannot be declared virtual");
9285                         virtualp = 0;
9286                       }
9287                     if (decl_context == FIELD
9288                         && sfk != sfk_constructor)
9289                       return error_mark_node;
9290                   }
9291                 if (decl_context == FIELD)
9292                   staticp = 0;
9293               }
9294             else if (friendp)
9295               {
9296                 if (initialized)
9297                   error ("can%'t initialize friend function %qs", name);
9298                 if (virtualp)
9299                   {
9300                     /* Cannot be both friend and virtual.  */
9301                     error ("virtual functions cannot be friends");
9302                     friendp = 0;
9303                   }
9304                 if (decl_context == NORMAL)
9305                   error ("friend declaration not in class definition");
9306                 if (current_function_decl && funcdef_flag)
9307                   error ("can%'t define friend function %qs in a local "
9308                          "class definition",
9309                          name);
9310               }
9311             else if (ctype && sfk == sfk_conversion)
9312               {
9313                 if (explicitp == 1)
9314                   {
9315                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9316                     explicitp = 2;
9317                   }
9318               }
9319
9320             arg_types = grokparms (declarator->u.function.parameters,
9321                                    &parms);
9322
9323             if (inner_declarator
9324                 && inner_declarator->kind == cdk_id
9325                 && inner_declarator->u.id.sfk == sfk_destructor
9326                 && arg_types != void_list_node)
9327               {
9328                 error ("destructors may not have parameters");
9329                 arg_types = void_list_node;
9330                 parms = NULL_TREE;
9331               }
9332
9333             type = build_function_type (type, arg_types);
9334           }
9335           break;
9336
9337         case cdk_pointer:
9338         case cdk_reference:
9339         case cdk_ptrmem:
9340           /* Filter out pointers-to-references and references-to-references.
9341              We can get these if a TYPE_DECL is used.  */
9342
9343           if (TREE_CODE (type) == REFERENCE_TYPE)
9344             {
9345               if (declarator->kind != cdk_reference)
9346                 {
9347                   error ("cannot declare pointer to %q#T", type);
9348                   type = TREE_TYPE (type);
9349                 }
9350
9351               /* In C++0x, we allow reference to reference declarations
9352                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9353                  and template type arguments [14.3.1/4 temp.arg.type]. The
9354                  check for direct reference to reference declarations, which
9355                  are still forbidden, occurs below. Reasoning behind the change
9356                  can be found in DR106, DR540, and the rvalue reference
9357                  proposals. */
9358               else if (cxx_dialect == cxx98)
9359                 {
9360                   error ("cannot declare reference to %q#T", type);
9361                   type = TREE_TYPE (type);
9362                 }
9363             }
9364           else if (VOID_TYPE_P (type))
9365             {
9366               if (declarator->kind == cdk_reference)
9367                 error ("cannot declare reference to %q#T", type);
9368               else if (declarator->kind == cdk_ptrmem)
9369                 error ("cannot declare pointer to %q#T member", type);
9370             }
9371
9372           /* We now know that the TYPE_QUALS don't apply to the decl,
9373              but to the target of the pointer.  */
9374           type_quals = TYPE_UNQUALIFIED;
9375
9376           if (declarator->kind == cdk_ptrmem
9377               && (TREE_CODE (type) == FUNCTION_TYPE
9378                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9379             {
9380               memfn_quals |= type_memfn_quals (type);
9381               type = build_memfn_type (type,
9382                                        declarator->u.pointer.class_type,
9383                                        memfn_quals);
9384               if (type == error_mark_node)
9385                 return error_mark_node;
9386               memfn_quals = TYPE_UNQUALIFIED;
9387             }
9388
9389           if (TREE_CODE (type) == FUNCTION_TYPE
9390               && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9391             error (declarator->kind == cdk_reference
9392                    ? G_("cannot declare reference to qualified function type %qT")
9393                    : G_("cannot declare pointer to qualified function type %qT"),
9394                    type);
9395
9396           /* When the pointed-to type involves components of variable size,
9397              care must be taken to ensure that the size evaluation code is
9398              emitted early enough to dominate all the possible later uses
9399              and late enough for the variables on which it depends to have
9400              been assigned.
9401
9402              This is expected to happen automatically when the pointed-to
9403              type has a name/declaration of it's own, but special attention
9404              is required if the type is anonymous.
9405
9406              We handle the NORMAL and FIELD contexts here by inserting a
9407              dummy statement that just evaluates the size at a safe point
9408              and ensures it is not deferred until e.g. within a deeper
9409              conditional context (c++/43555).
9410
9411              We expect nothing to be needed here for PARM or TYPENAME.
9412              Evaluating the size at this point for TYPENAME would
9413              actually be incorrect, as we might be in the middle of an
9414              expression with side effects on the pointed-to type size
9415              "arguments" prior to the pointer declaration point and the
9416              size evaluation could end up prior to the side effects.  */
9417
9418           if (!TYPE_NAME (type)
9419               && (decl_context == NORMAL || decl_context == FIELD)
9420               && at_function_scope_p ()
9421               && variably_modified_type_p (type, NULL_TREE))
9422             {
9423               /* First break out any side-effects.  */
9424               stabilize_vla_size (TYPE_SIZE (type));
9425               /* And then force evaluation of the SAVE_EXPR.  */
9426               finish_expr_stmt (TYPE_SIZE (type));
9427             }
9428
9429           if (declarator->kind == cdk_reference)
9430             {
9431               /* In C++0x, the type we are creating a reference to might be
9432                  a typedef which is itself a reference type. In that case,
9433                  we follow the reference collapsing rules in
9434                  [7.1.3/8 dcl.typedef] to create the final reference type:
9435
9436                  "If a typedef TD names a type that is a reference to a type
9437                  T, an attempt to create the type 'lvalue reference to cv TD'
9438                  creates the type 'lvalue reference to T,' while an attempt
9439                  to create the type "rvalue reference to cv TD' creates the
9440                  type TD."
9441               */
9442               if (VOID_TYPE_P (type))
9443                 /* We already gave an error.  */;
9444               else if (TREE_CODE (type) == REFERENCE_TYPE)
9445                 {
9446                   if (declarator->u.reference.rvalue_ref)
9447                     /* Leave type alone.  */;
9448                   else
9449                     type = cp_build_reference_type (TREE_TYPE (type), false);
9450                 }
9451               else
9452                 type = cp_build_reference_type
9453                   (type, declarator->u.reference.rvalue_ref);
9454
9455               /* In C++0x, we need this check for direct reference to
9456                  reference declarations, which are forbidden by
9457                  [8.3.2/5 dcl.ref]. Reference to reference declarations
9458                  are only allowed indirectly through typedefs and template
9459                  type arguments. Example:
9460
9461                    void foo(int & &);      // invalid ref-to-ref decl
9462
9463                    typedef int & int_ref;
9464                    void foo(int_ref &);    // valid ref-to-ref decl
9465               */
9466               if (inner_declarator && inner_declarator->kind == cdk_reference)
9467                 error ("cannot declare reference to %q#T, which is not "
9468                        "a typedef or a template type argument", type);
9469             }
9470           else if (TREE_CODE (type) == METHOD_TYPE)
9471             type = build_ptrmemfunc_type (build_pointer_type (type));
9472           else if (declarator->kind == cdk_ptrmem)
9473             {
9474               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9475                           != NAMESPACE_DECL);
9476               if (declarator->u.pointer.class_type == error_mark_node)
9477                 /* We will already have complained.  */
9478                 type = error_mark_node;
9479               else
9480                 type = build_ptrmem_type (declarator->u.pointer.class_type,
9481                                           type);
9482             }
9483           else
9484             type = build_pointer_type (type);
9485
9486           /* Process a list of type modifier keywords (such as
9487              const or volatile) that were given inside the `*' or `&'.  */
9488
9489           if (declarator->u.pointer.qualifiers)
9490             {
9491               type
9492                 = cp_build_qualified_type (type,
9493                                            declarator->u.pointer.qualifiers);
9494               type_quals = cp_type_quals (type);
9495             }
9496           ctype = NULL_TREE;
9497           break;
9498
9499         case cdk_error:
9500           break;
9501
9502         default:
9503           gcc_unreachable ();
9504         }
9505     }
9506
9507   /* We need to stabilize side-effects in VLA sizes for regular array
9508      declarations too, not just pointers to arrays.  */
9509   if (type != error_mark_node && !TYPE_NAME (type)
9510       && (decl_context == NORMAL || decl_context == FIELD)
9511       && at_function_scope_p ()
9512       && variably_modified_type_p (type, NULL_TREE))
9513     stabilize_vla_size (TYPE_SIZE (type));
9514
9515   /* A `constexpr' specifier used in an object declaration declares
9516      the object as `const'.  */
9517   if (constexpr_p && innermost_code != cdk_function)
9518     {
9519       if (type_quals & TYPE_QUAL_VOLATILE)
9520         error ("both %<volatile%> and %<constexpr%> cannot be used here");
9521       if (TREE_CODE (type) != REFERENCE_TYPE)
9522         {
9523           type_quals |= TYPE_QUAL_CONST;
9524           type = cp_build_qualified_type (type, type_quals);
9525         }
9526     }
9527
9528   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9529       && TREE_CODE (type) != FUNCTION_TYPE
9530       && TREE_CODE (type) != METHOD_TYPE)
9531     {
9532       error ("template-id %qD used as a declarator",
9533              unqualified_id);
9534       unqualified_id = dname;
9535     }
9536
9537   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9538      qualified with a class-name, turn it into a METHOD_TYPE, unless
9539      we know that the function is static.  We take advantage of this
9540      opportunity to do other processing that pertains to entities
9541      explicitly declared to be class members.  Note that if DECLARATOR
9542      is non-NULL, we know it is a cdk_id declarator; otherwise, we
9543      would not have exited the loop above.  */
9544   if (declarator
9545       && declarator->u.id.qualifying_scope
9546       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9547     {
9548       tree t;
9549
9550       ctype = declarator->u.id.qualifying_scope;
9551       ctype = TYPE_MAIN_VARIANT (ctype);
9552       t = ctype;
9553       while (t != NULL_TREE && CLASS_TYPE_P (t))
9554         {
9555           /* You're supposed to have one `template <...>' for every
9556              template class, but you don't need one for a full
9557              specialization.  For example:
9558
9559                template <class T> struct S{};
9560                template <> struct S<int> { void f(); };
9561                void S<int>::f () {}
9562
9563              is correct; there shouldn't be a `template <>' for the
9564              definition of `S<int>::f'.  */
9565           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9566               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9567             /* T is an explicit (not partial) specialization.  All
9568                containing classes must therefore also be explicitly
9569                specialized.  */
9570             break;
9571           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9572               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9573             template_count += 1;
9574
9575           t = TYPE_MAIN_DECL (t);
9576           t = DECL_CONTEXT (t);
9577         }
9578
9579       if (ctype == current_class_type)
9580         {
9581           if (friendp)
9582             {
9583               permerror (input_location, "member functions are implicitly friends of their class");
9584               friendp = 0;
9585             }
9586           else
9587             permerror (declarator->id_loc, 
9588                           "extra qualification %<%T::%> on member %qs",
9589                           ctype, name);
9590         }
9591       else if (/* If the qualifying type is already complete, then we
9592                   can skip the following checks.  */
9593                !COMPLETE_TYPE_P (ctype)
9594                && (/* If the function is being defined, then
9595                       qualifying type must certainly be complete.  */
9596                    funcdef_flag
9597                    /* A friend declaration of "T::f" is OK, even if
9598                       "T" is a template parameter.  But, if this
9599                       function is not a friend, the qualifying type
9600                       must be a class.  */
9601                    || (!friendp && !CLASS_TYPE_P (ctype))
9602                    /* For a declaration, the type need not be
9603                       complete, if either it is dependent (since there
9604                       is no meaningful definition of complete in that
9605                       case) or the qualifying class is currently being
9606                       defined.  */
9607                    || !(dependent_type_p (ctype)
9608                         || currently_open_class (ctype)))
9609                /* Check that the qualifying type is complete.  */
9610                && !complete_type_or_else (ctype, NULL_TREE))
9611         return error_mark_node;
9612       else if (TREE_CODE (type) == FUNCTION_TYPE)
9613         {
9614           if (current_class_type
9615               && (!friendp || funcdef_flag))
9616             {
9617               error (funcdef_flag
9618                      ? G_("cannot define member function %<%T::%s%> "
9619                           "within %<%T%>")
9620                      : G_("cannot declare member function %<%T::%s%> "
9621                           "within %<%T%>"),
9622                      ctype, name, current_class_type);
9623               return error_mark_node;
9624             }
9625         }
9626       else if (declspecs->specs[(int)ds_typedef]
9627                && current_class_type)
9628         {
9629           error ("cannot declare member %<%T::%s%> within %qT",
9630                  ctype, name, current_class_type);
9631           return error_mark_node;
9632         }
9633     }
9634
9635   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9636     ctype = current_class_type;
9637
9638   /* Now TYPE has the actual type.  */
9639
9640   if (returned_attrs)
9641     {
9642       if (attrlist)
9643         *attrlist = chainon (returned_attrs, *attrlist);
9644       else
9645         attrlist = &returned_attrs;
9646     }
9647
9648   /* Handle parameter packs. */
9649   if (parameter_pack_p)
9650     {
9651       if (decl_context == PARM)
9652         /* Turn the type into a pack expansion.*/
9653         type = make_pack_expansion (type);
9654       else
9655         error ("non-parameter %qs cannot be a parameter pack", name);
9656     }
9657
9658   /* Did array size calculations overflow?  */
9659
9660   if (TREE_CODE (type) == ARRAY_TYPE
9661       && COMPLETE_TYPE_P (type)
9662       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9663       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9664     {
9665       error ("size of array %qs is too large", name);
9666       /* If we proceed with the array type as it is, we'll eventually
9667          crash in tree_low_cst().  */
9668       type = error_mark_node;
9669     }
9670
9671   if ((decl_context == FIELD || decl_context == PARM)
9672       && !processing_template_decl
9673       && variably_modified_type_p (type, NULL_TREE))
9674     {
9675       if (decl_context == FIELD)
9676         error ("data member may not have variably modified type %qT", type);
9677       else
9678         error ("parameter may not have variably modified type %qT", type);
9679       type = error_mark_node;
9680     }
9681
9682   if (explicitp == 1 || (explicitp && friendp))
9683     {
9684       /* [dcl.fct.spec] The explicit specifier shall only be used in
9685          declarations of constructors within a class definition.  */
9686       error ("only declarations of constructors can be %<explicit%>");
9687       explicitp = 0;
9688     }
9689
9690   if (storage_class == sc_mutable)
9691     {
9692       if (decl_context != FIELD || friendp)
9693         {
9694           error ("non-member %qs cannot be declared %<mutable%>", name);
9695           storage_class = sc_none;
9696         }
9697       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9698         {
9699           error ("non-object member %qs cannot be declared %<mutable%>", name);
9700           storage_class = sc_none;
9701         }
9702       else if (TREE_CODE (type) == FUNCTION_TYPE
9703                || TREE_CODE (type) == METHOD_TYPE)
9704         {
9705           error ("function %qs cannot be declared %<mutable%>", name);
9706           storage_class = sc_none;
9707         }
9708       else if (staticp)
9709         {
9710           error ("static %qs cannot be declared %<mutable%>", name);
9711           storage_class = sc_none;
9712         }
9713       else if (type_quals & TYPE_QUAL_CONST)
9714         {
9715           error ("const %qs cannot be declared %<mutable%>", name);
9716           storage_class = sc_none;
9717         }
9718       else if (TREE_CODE (type) == REFERENCE_TYPE)
9719         {
9720           permerror (input_location, "reference %qs cannot be declared "
9721                      "%<mutable%>", name);
9722           storage_class = sc_none;
9723         }
9724     }
9725
9726   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9727   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9728     {
9729       tree decl;
9730
9731       /* Note that the grammar rejects storage classes
9732          in typenames, fields or parameters.  */
9733       if (current_lang_name == lang_name_java)
9734         TYPE_FOR_JAVA (type) = 1;
9735
9736       /* This declaration:
9737
9738            typedef void f(int) const;
9739
9740          declares a function type which is not a member of any
9741          particular class, but which is cv-qualified; for
9742          example "f S::*" declares a pointer to a const-qualified
9743          member function of S.  We record the cv-qualification in the
9744          function type.  */
9745       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9746         {
9747           type = apply_memfn_quals (type, memfn_quals);
9748           
9749           /* We have now dealt with these qualifiers.  */
9750           memfn_quals = TYPE_UNQUALIFIED;
9751         }
9752
9753       if (type_uses_auto (type))
9754         {
9755           error ("typedef declared %<auto%>");
9756           type = error_mark_node;
9757         }
9758
9759       if (decl_context == FIELD)
9760         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9761       else
9762         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9763       if (id_declarator && declarator->u.id.qualifying_scope) {
9764         error_at (DECL_SOURCE_LOCATION (decl), 
9765                   "typedef name may not be a nested-name-specifier");
9766         TREE_TYPE (decl) = error_mark_node;
9767       }
9768
9769       if (decl_context != FIELD)
9770         {
9771           if (!current_function_decl)
9772             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9773           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9774                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9775                        (current_function_decl)))
9776             /* The TYPE_DECL is "abstract" because there will be
9777                clones of this constructor/destructor, and there will
9778                be copies of this TYPE_DECL generated in those
9779                clones.  */
9780             DECL_ABSTRACT (decl) = 1;
9781         }
9782       else if (constructor_name_p (unqualified_id, current_class_type))
9783         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9784                    "as enclosing class",
9785                    unqualified_id);
9786
9787       /* If the user declares "typedef struct {...} foo" then the
9788          struct will have an anonymous name.  Fill that name in now.
9789          Nothing can refer to it, so nothing needs know about the name
9790          change.  */
9791       if (type != error_mark_node
9792           && unqualified_id
9793           && TYPE_NAME (type)
9794           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9795           && TYPE_ANONYMOUS_P (type)
9796           && declspecs->type_definition_p
9797           && cp_type_quals (type) == TYPE_UNQUALIFIED)
9798         {
9799           tree t;
9800
9801           /* Replace the anonymous name with the real name everywhere.  */
9802           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9803             {
9804               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9805                 /* We do not rename the debug info representing the
9806                    anonymous tagged type because the standard says in
9807                    [dcl.typedef] that the naming applies only for
9808                    linkage purposes.  */
9809                 /*debug_hooks->set_name (t, decl);*/
9810                 TYPE_NAME (t) = decl;
9811             }
9812
9813           if (TYPE_LANG_SPECIFIC (type))
9814             TYPE_WAS_ANONYMOUS (type) = 1;
9815
9816           /* If this is a typedef within a template class, the nested
9817              type is a (non-primary) template.  The name for the
9818              template needs updating as well.  */
9819           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9820             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9821               = TYPE_IDENTIFIER (type);
9822
9823           /* Adjust linkage now that we aren't anonymous anymore.  */
9824           reset_type_linkage (type);
9825
9826           /* FIXME remangle member functions; member functions of a
9827              type with external linkage have external linkage.  */
9828         }
9829
9830       if (signed_p
9831           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9832         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9833
9834       bad_specifiers (decl, BSP_TYPE, virtualp,
9835                       memfn_quals != TYPE_UNQUALIFIED,
9836                       inlinep, friendp, raises != NULL_TREE);
9837
9838       if (declspecs->specs[(int)ds_alias])
9839         /* Acknowledge that this was written:
9840              `using analias = atype;'.  */
9841         TYPE_DECL_ALIAS_P (decl) = 1;
9842
9843       return decl;
9844     }
9845
9846   /* Detect the case of an array type of unspecified size
9847      which came, as such, direct from a typedef name.
9848      We must copy the type, so that the array's domain can be
9849      individually set by the object's initializer.  */
9850
9851   if (type && typedef_type
9852       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9853       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9854     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9855
9856   /* Detect where we're using a typedef of function type to declare a
9857      function. PARMS will not be set, so we must create it now.  */
9858
9859   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9860     {
9861       tree decls = NULL_TREE;
9862       tree args;
9863
9864       for (args = TYPE_ARG_TYPES (type);
9865            args && args != void_list_node;
9866            args = TREE_CHAIN (args))
9867         {
9868           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9869
9870           DECL_CHAIN (decl) = decls;
9871           decls = decl;
9872         }
9873
9874       parms = nreverse (decls);
9875
9876       if (decl_context != TYPENAME)
9877         {
9878           /* A cv-qualifier-seq shall only be part of the function type
9879              for a non-static member function. [8.3.5/4 dcl.fct] */
9880           if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9881               && (current_class_type == NULL_TREE || staticp) )
9882             {
9883               error (staticp
9884                      ? G_("qualified function types cannot be used to "
9885                           "declare static member functions")
9886                      : G_("qualified function types cannot be used to "
9887                           "declare free functions"));
9888               type = TYPE_MAIN_VARIANT (type);
9889             }
9890
9891           /* The qualifiers on the function type become the qualifiers on
9892              the non-static member function. */
9893           memfn_quals |= type_memfn_quals (type);
9894           type_quals = TYPE_UNQUALIFIED;
9895         }
9896     }
9897
9898   /* If this is a type name (such as, in a cast or sizeof),
9899      compute the type and return it now.  */
9900
9901   if (decl_context == TYPENAME)
9902     {
9903       /* Note that the grammar rejects storage classes
9904          in typenames, fields or parameters.  */
9905       if (type_quals != TYPE_UNQUALIFIED)
9906         type_quals = TYPE_UNQUALIFIED;
9907
9908       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9909       if (friendp)
9910         {
9911           if (type_quals != TYPE_UNQUALIFIED)
9912             {
9913               error ("type qualifiers specified for friend class declaration");
9914               type_quals = TYPE_UNQUALIFIED;
9915             }
9916           if (inlinep)
9917             {
9918               error ("%<inline%> specified for friend class declaration");
9919               inlinep = 0;
9920             }
9921
9922           if (!current_aggr)
9923             {
9924               /* Don't allow friend declaration without a class-key.  */
9925               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9926                 permerror (input_location, "template parameters cannot be friends");
9927               else if (TREE_CODE (type) == TYPENAME_TYPE)
9928                 permerror (input_location, "friend declaration requires class-key, "
9929                            "i.e. %<friend class %T::%D%>",
9930                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9931               else
9932                 permerror (input_location, "friend declaration requires class-key, "
9933                            "i.e. %<friend %#T%>",
9934                            type);
9935             }
9936
9937           /* Only try to do this stuff if we didn't already give up.  */
9938           if (type != integer_type_node)
9939             {
9940               /* A friendly class?  */
9941               if (current_class_type)
9942                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9943                                    /*complain=*/true);
9944               else
9945                 error ("trying to make class %qT a friend of global scope",
9946                        type);
9947
9948               type = void_type_node;
9949             }
9950         }
9951       else if (memfn_quals)
9952         {
9953           if (ctype == NULL_TREE
9954               && TREE_CODE (type) == METHOD_TYPE)
9955             ctype = TYPE_METHOD_BASETYPE (type);
9956
9957           if (ctype)
9958             type = build_memfn_type (type, ctype, memfn_quals);
9959           /* Core issue #547: need to allow this in template type args.  */
9960           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9961             type = apply_memfn_quals (type, memfn_quals);
9962           else
9963             error ("invalid qualifiers on non-member function type");
9964         }
9965
9966       return type;
9967     }
9968   else if (unqualified_id == NULL_TREE && decl_context != PARM
9969            && decl_context != CATCHPARM
9970            && TREE_CODE (type) != UNION_TYPE
9971            && ! bitfield)
9972     {
9973       error ("abstract declarator %qT used as declaration", type);
9974       return error_mark_node;
9975     }
9976
9977   /* Only functions may be declared using an operator-function-id.  */
9978   if (unqualified_id
9979       && IDENTIFIER_OPNAME_P (unqualified_id)
9980       && TREE_CODE (type) != FUNCTION_TYPE
9981       && TREE_CODE (type) != METHOD_TYPE)
9982     {
9983       error ("declaration of %qD as non-function", unqualified_id);
9984       return error_mark_node;
9985     }
9986
9987   /* We don't check parameter types here because we can emit a better
9988      error message later.  */
9989   if (decl_context != PARM)
9990     {
9991       type = check_var_type (unqualified_id, type);
9992       if (type == error_mark_node)
9993         return error_mark_node;
9994     }
9995
9996   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9997      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9998
9999   if (decl_context == PARM || decl_context == CATCHPARM)
10000     {
10001       if (ctype || in_namespace)
10002         error ("cannot use %<::%> in parameter declaration");
10003
10004       if (type_uses_auto (type))
10005         {
10006           error ("parameter declared %<auto%>");
10007           type = error_mark_node;
10008         }
10009
10010       /* A parameter declared as an array of T is really a pointer to T.
10011          One declared as a function is really a pointer to a function.
10012          One declared as a member is really a pointer to member.  */
10013
10014       if (TREE_CODE (type) == ARRAY_TYPE)
10015         {
10016           /* Transfer const-ness of array into that of type pointed to.  */
10017           type = build_pointer_type (TREE_TYPE (type));
10018           type_quals = TYPE_UNQUALIFIED;
10019         }
10020       else if (TREE_CODE (type) == FUNCTION_TYPE)
10021         type = build_pointer_type (type);
10022     }
10023
10024   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10025       && !NEW_DELETE_OPNAME_P (unqualified_id))
10026     {
10027       cp_cv_quals real_quals = memfn_quals;
10028       if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10029         real_quals |= TYPE_QUAL_CONST;
10030       type = build_memfn_type (type, ctype, real_quals);
10031     }
10032
10033   {
10034     tree decl;
10035
10036     if (decl_context == PARM)
10037       {
10038         decl = cp_build_parm_decl (unqualified_id, type);
10039
10040         bad_specifiers (decl, BSP_PARM, virtualp,
10041                         memfn_quals != TYPE_UNQUALIFIED,
10042                         inlinep, friendp, raises != NULL_TREE);
10043       }
10044     else if (decl_context == FIELD)
10045       {
10046         if (!staticp && type_uses_auto (type))
10047           {
10048             error ("non-static data member declared %<auto%>");
10049             type = error_mark_node;
10050           }
10051
10052         /* The C99 flexible array extension.  */
10053         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10054             && TYPE_DOMAIN (type) == NULL_TREE)
10055           {
10056             tree itype = compute_array_index_type (dname, integer_zero_node,
10057                                                    tf_warning_or_error);
10058             type = build_cplus_array_type (TREE_TYPE (type), itype);
10059           }
10060
10061         if (type == error_mark_node)
10062           {
10063             /* Happens when declaring arrays of sizes which
10064                are error_mark_node, for example.  */
10065             decl = NULL_TREE;
10066           }
10067         else if (in_namespace && !friendp)
10068           {
10069             /* Something like struct S { int N::j; };  */
10070             error ("invalid use of %<::%>");
10071             return error_mark_node;
10072           }
10073         else if (TREE_CODE (type) == FUNCTION_TYPE
10074                  || TREE_CODE (type) == METHOD_TYPE)
10075           {
10076             int publicp = 0;
10077             tree function_context;
10078
10079             if (friendp == 0)
10080               {
10081                 /* This should never happen in pure C++ (the check
10082                    could be an assert).  It could happen in
10083                    Objective-C++ if someone writes invalid code that
10084                    uses a function declaration for an instance
10085                    variable or property (instance variables and
10086                    properties are parsed as FIELD_DECLs, but they are
10087                    part of an Objective-C class, not a C++ class).
10088                    That code is invalid and is caught by this
10089                    check.  */
10090                 if (!ctype)
10091                   {
10092                     error ("declaration of function %qD in invalid context",
10093                            unqualified_id);
10094                     return error_mark_node;
10095                   }
10096
10097                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10098                    ARM 9.5 */
10099                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10100                   {
10101                     error ("function %qD declared virtual inside a union",
10102                            unqualified_id);
10103                     return error_mark_node;
10104                   }
10105
10106                 if (NEW_DELETE_OPNAME_P (unqualified_id))
10107                   {
10108                     if (virtualp)
10109                       {
10110                         error ("%qD cannot be declared virtual, since it "
10111                                "is always static",
10112                                unqualified_id);
10113                         virtualp = 0;
10114                       }
10115                   }
10116               }
10117
10118             /* Check that the name used for a destructor makes sense.  */
10119             if (sfk == sfk_destructor)
10120               {
10121                 tree uqname = id_declarator->u.id.unqualified_name;
10122
10123                 if (!ctype)
10124                   {
10125                     gcc_assert (friendp);
10126                     error ("expected qualified name in friend declaration "
10127                            "for destructor %qD", uqname);
10128                     return error_mark_node;
10129                   }
10130
10131                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10132                   {
10133                     error ("declaration of %qD as member of %qT",
10134                            uqname, ctype);
10135                     return error_mark_node;
10136                   }
10137                 if (constexpr_p)
10138                   {
10139                     error ("a destructor cannot be %<constexpr%>");
10140                     return error_mark_node;
10141                   }
10142               }
10143             else if (sfk == sfk_constructor && friendp && !ctype)
10144               {
10145                 error ("expected qualified name in friend declaration "
10146                        "for constructor %qD",
10147                        id_declarator->u.id.unqualified_name);
10148                 return error_mark_node;
10149               }
10150
10151             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10152             function_context = (ctype != NULL_TREE) ?
10153               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10154             publicp = (! friendp || ! staticp)
10155               && function_context == NULL_TREE;
10156             decl = grokfndecl (ctype, type,
10157                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10158                                ? unqualified_id : dname,
10159                                parms,
10160                                unqualified_id,
10161                                virtualp, flags, memfn_quals, raises,
10162                                friendp ? -1 : 0, friendp, publicp,
10163                                inlinep | (2 * constexpr_p),
10164                                sfk,
10165                                funcdef_flag, template_count, in_namespace,
10166                                attrlist, declarator->id_loc);
10167             decl = set_virt_specifiers (decl, virt_specifiers);
10168             if (decl == NULL_TREE)
10169               return error_mark_node;
10170 #if 0
10171             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10172             /* The decl and setting of decl_attr is also turned off.  */
10173             decl = build_decl_attribute_variant (decl, decl_attr);
10174 #endif
10175
10176             /* [class.conv.ctor]
10177
10178                A constructor declared without the function-specifier
10179                explicit that can be called with a single parameter
10180                specifies a conversion from the type of its first
10181                parameter to the type of its class.  Such a constructor
10182                is called a converting constructor.  */
10183             if (explicitp == 2)
10184               DECL_NONCONVERTING_P (decl) = 1;
10185           }
10186         else if (!staticp && !dependent_type_p (type)
10187                  && !COMPLETE_TYPE_P (complete_type (type))
10188                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10189           {
10190             if (unqualified_id)
10191               error ("field %qD has incomplete type", unqualified_id);
10192             else
10193               error ("name %qT has incomplete type", type);
10194
10195             /* If we're instantiating a template, tell them which
10196                instantiation made the field's type be incomplete.  */
10197             if (current_class_type
10198                 && TYPE_NAME (current_class_type)
10199                 && IDENTIFIER_TEMPLATE (current_class_name)
10200                 && declspecs->type
10201                 && declspecs->type == type)
10202               error ("  in instantiation of template %qT",
10203                      current_class_type);
10204
10205             return error_mark_node;
10206           }
10207         else
10208           {
10209             if (friendp)
10210               {
10211                 error ("%qE is neither function nor member function; "
10212                        "cannot be declared friend", unqualified_id);
10213                 friendp = 0;
10214               }
10215             decl = NULL_TREE;
10216           }
10217
10218         if (friendp)
10219           {
10220             /* Friends are treated specially.  */
10221             if (ctype == current_class_type)
10222               ;  /* We already issued a permerror.  */
10223             else if (decl && DECL_NAME (decl))
10224               {
10225                 if (template_class_depth (current_class_type) == 0)
10226                   {
10227                     decl = check_explicit_specialization
10228                       (unqualified_id, decl, template_count,
10229                        2 * funcdef_flag + 4);
10230                     if (decl == error_mark_node)
10231                       return error_mark_node;
10232                   }
10233
10234                 decl = do_friend (ctype, unqualified_id, decl,
10235                                   *attrlist, flags,
10236                                   funcdef_flag);
10237                 return decl;
10238               }
10239             else
10240               return error_mark_node;
10241           }
10242
10243         /* Structure field.  It may not be a function, except for C++.  */
10244
10245         if (decl == NULL_TREE)
10246           {
10247             if (staticp)
10248               {
10249                 /* C++ allows static class members.  All other work
10250                    for this is done by grokfield.  */
10251                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10252                 set_linkage_for_static_data_member (decl);
10253                 /* Even if there is an in-class initialization, DECL
10254                    is considered undefined until an out-of-class
10255                    definition is provided.  */
10256                 DECL_EXTERNAL (decl) = 1;
10257
10258                 if (thread_p)
10259                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10260
10261                 if (constexpr_p && !initialized)
10262                   {
10263                     error ("constexpr static data member %qD must have an "
10264                            "initializer", decl);
10265                     constexpr_p = false;
10266                   }
10267               }
10268             else
10269               {
10270                 if (constexpr_p)
10271                   {
10272                     error ("non-static data member %qE declared %<constexpr%>",
10273                            unqualified_id);
10274                     constexpr_p = false;
10275                   }
10276                 decl = build_decl (input_location,
10277                                    FIELD_DECL, unqualified_id, type);
10278                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10279                 if (bitfield && !unqualified_id)
10280                   TREE_NO_WARNING (decl) = 1;
10281
10282                 if (storage_class == sc_mutable)
10283                   {
10284                     DECL_MUTABLE_P (decl) = 1;
10285                     storage_class = sc_none;
10286                   }
10287
10288                 if (initialized)
10289                   {
10290                     /* An attempt is being made to initialize a non-static
10291                        member.  This is new in C++11.  */
10292                     maybe_warn_cpp0x (CPP0X_NSDMI);
10293
10294                     /* If this has been parsed with static storage class, but
10295                        errors forced staticp to be cleared, ensure NSDMI is
10296                        not present.  */
10297                     if (declspecs->storage_class == sc_static)
10298                       DECL_INITIAL (decl) = error_mark_node;
10299                   }
10300               }
10301
10302             bad_specifiers (decl, BSP_FIELD, virtualp,
10303                             memfn_quals != TYPE_UNQUALIFIED,
10304                             inlinep, friendp, raises != NULL_TREE);
10305           }
10306       }
10307     else if (TREE_CODE (type) == FUNCTION_TYPE
10308              || TREE_CODE (type) == METHOD_TYPE)
10309       {
10310         tree original_name;
10311         int publicp = 0;
10312
10313         if (!unqualified_id)
10314           return error_mark_node;
10315
10316         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10317           original_name = dname;
10318         else
10319           original_name = unqualified_id;
10320
10321         if (storage_class == sc_auto)
10322           error ("storage class %<auto%> invalid for function %qs", name);
10323         else if (storage_class == sc_register)
10324           error ("storage class %<register%> invalid for function %qs", name);
10325         else if (thread_p)
10326           error ("storage class %<__thread%> invalid for function %qs", name);
10327
10328         if (virt_specifiers)
10329           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10330         /* Function declaration not at top level.
10331            Storage classes other than `extern' are not allowed
10332            and `extern' makes no difference.  */
10333         if (! toplevel_bindings_p ()
10334             && (storage_class == sc_static
10335                 || declspecs->specs[(int)ds_inline])
10336             && pedantic)
10337           {
10338             if (storage_class == sc_static)
10339               pedwarn (input_location, OPT_pedantic, 
10340                        "%<static%> specified invalid for function %qs "
10341                        "declared out of global scope", name);
10342             else
10343               pedwarn (input_location, OPT_pedantic, 
10344                        "%<inline%> specifier invalid for function %qs "
10345                        "declared out of global scope", name);
10346           }
10347
10348         if (ctype == NULL_TREE)
10349           {
10350             if (virtualp)
10351               {
10352                 error ("virtual non-class function %qs", name);
10353                 virtualp = 0;
10354               }
10355             else if (sfk == sfk_constructor
10356                      || sfk == sfk_destructor)
10357               {
10358                 error (funcdef_flag
10359                        ? G_("%qs defined in a non-class scope")
10360                        : G_("%qs declared in a non-class scope"), name);
10361                 sfk = sfk_none;
10362               }
10363           }
10364
10365         /* Record presence of `static'.  */
10366         publicp = (ctype != NULL_TREE
10367                    || storage_class == sc_extern
10368                    || storage_class != sc_static);
10369
10370         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10371                            virtualp, flags, memfn_quals, raises,
10372                            1, friendp,
10373                            publicp, inlinep | (2 * constexpr_p), sfk,
10374                            funcdef_flag,
10375                            template_count, in_namespace, attrlist,
10376                            declarator->id_loc);
10377         if (decl == NULL_TREE)
10378           return error_mark_node;
10379
10380         if (staticp == 1)
10381           {
10382             int invalid_static = 0;
10383
10384             /* Don't allow a static member function in a class, and forbid
10385                declaring main to be static.  */
10386             if (TREE_CODE (type) == METHOD_TYPE)
10387               {
10388                 permerror (input_location, "cannot declare member function %qD to have "
10389                            "static linkage", decl);
10390                 invalid_static = 1;
10391               }
10392             else if (current_function_decl)
10393               {
10394                 /* FIXME need arm citation */
10395                 error ("cannot declare static function inside another function");
10396                 invalid_static = 1;
10397               }
10398
10399             if (invalid_static)
10400               {
10401                 staticp = 0;
10402                 storage_class = sc_none;
10403               }
10404           }
10405       }
10406     else
10407       {
10408         /* It's a variable.  */
10409
10410         /* An uninitialized decl with `extern' is a reference.  */
10411         decl = grokvardecl (type, unqualified_id,
10412                             declspecs,
10413                             initialized,
10414                             (type_quals & TYPE_QUAL_CONST) != 0,
10415                             ctype ? ctype : in_namespace);
10416         bad_specifiers (decl, BSP_VAR, virtualp,
10417                         memfn_quals != TYPE_UNQUALIFIED,
10418                         inlinep, friendp, raises != NULL_TREE);
10419
10420         if (ctype)
10421           {
10422             DECL_CONTEXT (decl) = ctype;
10423             if (staticp == 1)
10424               {
10425                 permerror (input_location, "%<static%> may not be used when defining "
10426                            "(as opposed to declaring) a static data member");
10427                 staticp = 0;
10428                 storage_class = sc_none;
10429               }
10430             if (storage_class == sc_register && TREE_STATIC (decl))
10431               {
10432                 error ("static member %qD declared %<register%>", decl);
10433                 storage_class = sc_none;
10434               }
10435             if (storage_class == sc_extern && pedantic)
10436               {
10437                 pedwarn (input_location, OPT_pedantic, 
10438                          "cannot explicitly declare member %q#D to have "
10439                          "extern linkage", decl);
10440                 storage_class = sc_none;
10441               }
10442           }
10443         else if (constexpr_p && DECL_EXTERNAL (decl))
10444           {
10445             error ("declaration of constexpr variable %qD is not a definition",
10446                    decl);
10447             constexpr_p = false;
10448           }
10449       }
10450
10451     if (storage_class == sc_extern && initialized && !funcdef_flag)
10452       {
10453         if (toplevel_bindings_p ())
10454           {
10455             /* It's common practice (and completely valid) to have a const
10456                be initialized and declared extern.  */
10457             if (!(type_quals & TYPE_QUAL_CONST))
10458               warning (0, "%qs initialized and declared %<extern%>", name);
10459           }
10460         else
10461           {
10462             error ("%qs has both %<extern%> and initializer", name);
10463             return error_mark_node;
10464           }
10465       }
10466
10467     /* Record `register' declaration for warnings on &
10468        and in case doing stupid register allocation.  */
10469
10470     if (storage_class == sc_register)
10471       DECL_REGISTER (decl) = 1;
10472     else if (storage_class == sc_extern)
10473       DECL_THIS_EXTERN (decl) = 1;
10474     else if (storage_class == sc_static)
10475       DECL_THIS_STATIC (decl) = 1;
10476
10477     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10478     if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10479       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10480
10481     /* Record constancy and volatility on the DECL itself .  There's
10482        no need to do this when processing a template; we'll do this
10483        for the instantiated declaration based on the type of DECL.  */
10484     if (!processing_template_decl)
10485       cp_apply_type_quals_to_decl (type_quals, decl);
10486
10487     return decl;
10488   }
10489 }
10490 \f
10491 /* Subroutine of start_function.  Ensure that each of the parameter
10492    types (as listed in PARMS) is complete, as is required for a
10493    function definition.  */
10494
10495 static void
10496 require_complete_types_for_parms (tree parms)
10497 {
10498   for (; parms; parms = DECL_CHAIN (parms))
10499     {
10500       if (dependent_type_p (TREE_TYPE (parms)))
10501         continue;
10502       if (!VOID_TYPE_P (TREE_TYPE (parms))
10503           && complete_type_or_else (TREE_TYPE (parms), parms))
10504         {
10505           relayout_decl (parms);
10506           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10507         }
10508       else
10509         /* grokparms or complete_type_or_else will have already issued
10510            an error.  */
10511         TREE_TYPE (parms) = error_mark_node;
10512     }
10513 }
10514
10515 /* Returns nonzero if T is a local variable.  */
10516
10517 int
10518 local_variable_p (const_tree t)
10519 {
10520   if ((TREE_CODE (t) == VAR_DECL
10521        /* A VAR_DECL with a context that is a _TYPE is a static data
10522           member.  */
10523        && !TYPE_P (CP_DECL_CONTEXT (t))
10524        /* Any other non-local variable must be at namespace scope.  */
10525        && !DECL_NAMESPACE_SCOPE_P (t))
10526       || (TREE_CODE (t) == PARM_DECL))
10527     return 1;
10528
10529   return 0;
10530 }
10531
10532 /* Like local_variable_p, but suitable for use as a tree-walking
10533    function.  */
10534
10535 static tree
10536 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10537                          void *data ATTRIBUTE_UNUSED)
10538 {
10539   if (local_variable_p (*tp)
10540       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
10541     return *tp;
10542   else if (TYPE_P (*tp))
10543     *walk_subtrees = 0;
10544
10545   return NULL_TREE;
10546 }
10547
10548 /* Check that ARG, which is a default-argument expression for a
10549    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10550    something goes wrong.  DECL may also be a _TYPE node, rather than a
10551    DECL, if there is no DECL available.  */
10552
10553 tree
10554 check_default_argument (tree decl, tree arg)
10555 {
10556   tree var;
10557   tree decl_type;
10558
10559   if (TREE_CODE (arg) == DEFAULT_ARG)
10560     /* We get a DEFAULT_ARG when looking at an in-class declaration
10561        with a default argument.  Ignore the argument for now; we'll
10562        deal with it after the class is complete.  */
10563     return arg;
10564
10565   if (TYPE_P (decl))
10566     {
10567       decl_type = decl;
10568       decl = NULL_TREE;
10569     }
10570   else
10571     decl_type = TREE_TYPE (decl);
10572
10573   if (arg == error_mark_node
10574       || decl == error_mark_node
10575       || TREE_TYPE (arg) == error_mark_node
10576       || decl_type == error_mark_node)
10577     /* Something already went wrong.  There's no need to check
10578        further.  */
10579     return error_mark_node;
10580
10581   /* [dcl.fct.default]
10582
10583      A default argument expression is implicitly converted to the
10584      parameter type.  */
10585   if (!TREE_TYPE (arg)
10586       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10587     {
10588       if (decl)
10589         error ("default argument for %q#D has type %qT",
10590                decl, TREE_TYPE (arg));
10591       else
10592         error ("default argument for parameter of type %qT has type %qT",
10593                decl_type, TREE_TYPE (arg));
10594
10595       return error_mark_node;
10596     }
10597
10598   if (warn_zero_as_null_pointer_constant
10599       && c_inhibit_evaluation_warnings == 0
10600       && (TYPE_PTR_P (decl_type) || TYPE_PTR_TO_MEMBER_P (decl_type))
10601       && null_ptr_cst_p (arg)
10602       && !NULLPTR_TYPE_P (TREE_TYPE (arg)))
10603     {
10604       warning (OPT_Wzero_as_null_pointer_constant,
10605                "zero as null pointer constant");
10606       return nullptr_node;
10607     }
10608
10609   /* [dcl.fct.default]
10610
10611      Local variables shall not be used in default argument
10612      expressions.
10613
10614      The keyword `this' shall not be used in a default argument of a
10615      member function.  */
10616   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10617   if (var)
10618     {
10619       if (DECL_NAME (var) == this_identifier)
10620         permerror (input_location, "default argument %qE uses %qD", arg, var);
10621       else
10622         error ("default argument %qE uses local variable %qD", arg, var);
10623       return error_mark_node;
10624     }
10625
10626   /* All is well.  */
10627   return arg;
10628 }
10629
10630 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10631
10632 static tree
10633 type_is_deprecated (tree type)
10634 {
10635   enum tree_code code;
10636   if (TREE_DEPRECATED (type))
10637     return type;
10638   if (TYPE_NAME (type)
10639       && TREE_DEPRECATED (TYPE_NAME (type)))
10640     return type;
10641
10642   /* Do warn about using typedefs to a deprecated class.  */
10643   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10644     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10645
10646   code = TREE_CODE (type);
10647
10648   if (code == POINTER_TYPE || code == REFERENCE_TYPE
10649       || code == OFFSET_TYPE || code == FUNCTION_TYPE
10650       || code == METHOD_TYPE || code == ARRAY_TYPE)
10651     return type_is_deprecated (TREE_TYPE (type));
10652
10653   if (TYPE_PTRMEMFUNC_P (type))
10654     return type_is_deprecated
10655       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10656
10657   return NULL_TREE;
10658 }
10659
10660 /* Decode the list of parameter types for a function type.
10661    Given the list of things declared inside the parens,
10662    return a list of types.
10663
10664    If this parameter does not end with an ellipsis, we append
10665    void_list_node.
10666
10667    *PARMS is set to the chain of PARM_DECLs created.  */
10668
10669 static tree
10670 grokparms (tree parmlist, tree *parms)
10671 {
10672   tree result = NULL_TREE;
10673   tree decls = NULL_TREE;
10674   tree parm;
10675   int any_error = 0;
10676
10677   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10678     {
10679       tree type = NULL_TREE;
10680       tree init = TREE_PURPOSE (parm);
10681       tree decl = TREE_VALUE (parm);
10682       const char *errmsg;
10683
10684       if (parm == void_list_node)
10685         break;
10686
10687       if (! decl || TREE_TYPE (decl) == error_mark_node)
10688         continue;
10689
10690       type = TREE_TYPE (decl);
10691       if (VOID_TYPE_P (type))
10692         {
10693           if (same_type_p (type, void_type_node)
10694               && DECL_SELF_REFERENCE_P (type)
10695               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10696             /* this is a parmlist of `(void)', which is ok.  */
10697             break;
10698           cxx_incomplete_type_error (decl, type);
10699           /* It's not a good idea to actually create parameters of
10700              type `void'; other parts of the compiler assume that a
10701              void type terminates the parameter list.  */
10702           type = error_mark_node;
10703           TREE_TYPE (decl) = error_mark_node;
10704         }
10705
10706       if (type != error_mark_node
10707           && TYPE_FOR_JAVA (type)
10708           && MAYBE_CLASS_TYPE_P (type))
10709         {
10710           error ("parameter %qD has Java class type", decl);
10711           type = error_mark_node;
10712           TREE_TYPE (decl) = error_mark_node;
10713           init = NULL_TREE;
10714         }
10715
10716       if (type != error_mark_node
10717           && (errmsg = targetm.invalid_parameter_type (type)))
10718         {
10719           error (errmsg);
10720           type = error_mark_node;
10721           TREE_TYPE (decl) = error_mark_node;
10722         }
10723
10724       if (type != error_mark_node)
10725         {
10726           if (deprecated_state != DEPRECATED_SUPPRESS)
10727             {
10728               tree deptype = type_is_deprecated (type);
10729               if (deptype)
10730                 warn_deprecated_use (deptype, NULL_TREE);
10731             }
10732
10733           /* Top-level qualifiers on the parameters are
10734              ignored for function types.  */
10735           type = cp_build_qualified_type (type, 0);
10736           if (TREE_CODE (type) == METHOD_TYPE)
10737             {
10738               error ("parameter %qD invalidly declared method type", decl);
10739               type = build_pointer_type (type);
10740               TREE_TYPE (decl) = type;
10741             }
10742           else if (abstract_virtuals_error (decl, type))
10743             any_error = 1;  /* Seems like a good idea.  */
10744           else if (POINTER_TYPE_P (type))
10745             {
10746               /* [dcl.fct]/6, parameter types cannot contain pointers
10747                  (references) to arrays of unknown bound.  */
10748               tree t = TREE_TYPE (type);
10749               int ptr = TYPE_PTR_P (type);
10750
10751               while (1)
10752                 {
10753                   if (TYPE_PTR_P (t))
10754                     ptr = 1;
10755                   else if (TREE_CODE (t) != ARRAY_TYPE)
10756                     break;
10757                   else if (!TYPE_DOMAIN (t))
10758                     break;
10759                   t = TREE_TYPE (t);
10760                 }
10761               if (TREE_CODE (t) == ARRAY_TYPE)
10762                 error (ptr
10763                        ? G_("parameter %qD includes pointer to array of "
10764                             "unknown bound %qT")
10765                        : G_("parameter %qD includes reference to array of "
10766                             "unknown bound %qT"),
10767                        decl, t);
10768             }
10769
10770           if (any_error)
10771             init = NULL_TREE;
10772           else if (init && !processing_template_decl)
10773             init = check_default_argument (decl, init);
10774         }
10775
10776       DECL_CHAIN (decl) = decls;
10777       decls = decl;
10778       result = tree_cons (init, type, result);
10779     }
10780   decls = nreverse (decls);
10781   result = nreverse (result);
10782   if (parm)
10783     result = chainon (result, void_list_node);
10784   *parms = decls;
10785
10786   return result;
10787 }
10788
10789 \f
10790 /* D is a constructor or overloaded `operator='.
10791
10792    Let T be the class in which D is declared. Then, this function
10793    returns:
10794
10795    -1 if D's is an ill-formed constructor or copy assignment operator
10796       whose first parameter is of type `T'.
10797    0  if D is not a copy constructor or copy assignment
10798       operator.
10799    1  if D is a copy constructor or copy assignment operator whose
10800       first parameter is a reference to non-const qualified T.
10801    2  if D is a copy constructor or copy assignment operator whose
10802       first parameter is a reference to const qualified T.
10803
10804    This function can be used as a predicate. Positive values indicate
10805    a copy constructor and nonzero values indicate a copy assignment
10806    operator.  */
10807
10808 int
10809 copy_fn_p (const_tree d)
10810 {
10811   tree args;
10812   tree arg_type;
10813   int result = 1;
10814
10815   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10816
10817   if (TREE_CODE (d) == TEMPLATE_DECL
10818       || (DECL_TEMPLATE_INFO (d)
10819           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10820     /* Instantiations of template member functions are never copy
10821        functions.  Note that member functions of templated classes are
10822        represented as template functions internally, and we must
10823        accept those as copy functions.  */
10824     return 0;
10825
10826   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10827   if (!args)
10828     return 0;
10829
10830   arg_type = TREE_VALUE (args);
10831   if (arg_type == error_mark_node)
10832     return 0;
10833
10834   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10835     {
10836       /* Pass by value copy assignment operator.  */
10837       result = -1;
10838     }
10839   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10840            && !TYPE_REF_IS_RVALUE (arg_type)
10841            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10842     {
10843       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10844         result = 2;
10845     }
10846   else
10847     return 0;
10848
10849   args = TREE_CHAIN (args);
10850
10851   if (args && args != void_list_node && !TREE_PURPOSE (args))
10852     /* There are more non-optional args.  */
10853     return 0;
10854
10855   return result;
10856 }
10857
10858 /* D is a constructor or overloaded `operator='.
10859
10860    Let T be the class in which D is declared. Then, this function
10861    returns true when D is a move constructor or move assignment
10862    operator, false otherwise.  */
10863
10864 bool
10865 move_fn_p (const_tree d)
10866 {
10867   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10868
10869   if (cxx_dialect == cxx98)
10870     /* There are no move constructors if we are in C++98 mode.  */
10871     return false;
10872
10873   if (TREE_CODE (d) == TEMPLATE_DECL
10874       || (DECL_TEMPLATE_INFO (d)
10875          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10876     /* Instantiations of template member functions are never move
10877        functions.  Note that member functions of templated classes are
10878        represented as template functions internally, and we must
10879        accept those as move functions.  */
10880     return 0;
10881
10882   return move_signature_fn_p (d);
10883 }
10884
10885 /* D is a constructor or overloaded `operator='.
10886
10887    Then, this function returns true when D has the same signature as a move
10888    constructor or move assignment operator (because either it is such a
10889    ctor/op= or it is a template specialization with the same signature),
10890    false otherwise.  */
10891
10892 bool
10893 move_signature_fn_p (const_tree d)
10894 {
10895   tree args;
10896   tree arg_type;
10897   bool result = false;
10898
10899   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10900   if (!args)
10901     return 0;
10902
10903   arg_type = TREE_VALUE (args);
10904   if (arg_type == error_mark_node)
10905     return 0;
10906
10907   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10908       && TYPE_REF_IS_RVALUE (arg_type)
10909       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10910                       DECL_CONTEXT (d)))
10911     result = true;
10912
10913   args = TREE_CHAIN (args);
10914
10915   if (args && args != void_list_node && !TREE_PURPOSE (args))
10916     /* There are more non-optional args.  */
10917     return false;
10918
10919   return result;
10920 }
10921
10922 /* Remember any special properties of member function DECL.  */
10923
10924 void
10925 grok_special_member_properties (tree decl)
10926 {
10927   tree class_type;
10928
10929   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10930     return;
10931
10932   class_type = DECL_CONTEXT (decl);
10933   if (DECL_CONSTRUCTOR_P (decl))
10934     {
10935       int ctor = copy_fn_p (decl);
10936
10937       if (!DECL_ARTIFICIAL (decl))
10938         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10939
10940       if (ctor > 0)
10941         {
10942           /* [class.copy]
10943
10944              A non-template constructor for class X is a copy
10945              constructor if its first parameter is of type X&, const
10946              X&, volatile X& or const volatile X&, and either there
10947              are no other parameters or else all other parameters have
10948              default arguments.  */
10949           TYPE_HAS_COPY_CTOR (class_type) = 1;
10950           if (user_provided_p (decl))
10951             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10952           if (ctor > 1)
10953             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10954         }
10955       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10956         {
10957           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10958           if (user_provided_p (decl))
10959             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10960         }
10961       else if (move_fn_p (decl) && user_provided_p (decl))
10962         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10963       else if (is_list_ctor (decl))
10964         TYPE_HAS_LIST_CTOR (class_type) = 1;
10965
10966       if (DECL_DECLARED_CONSTEXPR_P (decl)
10967           && !copy_fn_p (decl) && !move_fn_p (decl))
10968         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10969     }
10970   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10971     {
10972       /* [class.copy]
10973
10974          A non-template assignment operator for class X is a copy
10975          assignment operator if its parameter is of type X, X&, const
10976          X&, volatile X& or const volatile X&.  */
10977
10978       int assop = copy_fn_p (decl);
10979
10980       if (assop)
10981         {
10982           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10983           if (user_provided_p (decl))
10984             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10985           if (assop != 1)
10986             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10987         }
10988       else if (move_fn_p (decl) && user_provided_p (decl))
10989         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10990     }
10991   /* Destructors are handled in check_methods.  */
10992 }
10993
10994 /* Check a constructor DECL has the correct form.  Complains
10995    if the class has a constructor of the form X(X).  */
10996
10997 int
10998 grok_ctor_properties (const_tree ctype, const_tree decl)
10999 {
11000   int ctor_parm = copy_fn_p (decl);
11001
11002   if (ctor_parm < 0)
11003     {
11004       /* [class.copy]
11005
11006          A declaration of a constructor for a class X is ill-formed if
11007          its first parameter is of type (optionally cv-qualified) X
11008          and either there are no other parameters or else all other
11009          parameters have default arguments.
11010
11011          We *don't* complain about member template instantiations that
11012          have this form, though; they can occur as we try to decide
11013          what constructor to use during overload resolution.  Since
11014          overload resolution will never prefer such a constructor to
11015          the non-template copy constructor (which is either explicitly
11016          or implicitly defined), there's no need to worry about their
11017          existence.  Theoretically, they should never even be
11018          instantiated, but that's hard to forestall.  */
11019       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
11020                 ctype, ctype);
11021       return 0;
11022     }
11023
11024   return 1;
11025 }
11026
11027 /* An operator with this code is unary, but can also be binary.  */
11028
11029 static int
11030 ambi_op_p (enum tree_code code)
11031 {
11032   return (code == INDIRECT_REF
11033           || code == ADDR_EXPR
11034           || code == UNARY_PLUS_EXPR
11035           || code == NEGATE_EXPR
11036           || code == PREINCREMENT_EXPR
11037           || code == PREDECREMENT_EXPR);
11038 }
11039
11040 /* An operator with this name can only be unary.  */
11041
11042 static int
11043 unary_op_p (enum tree_code code)
11044 {
11045   return (code == TRUTH_NOT_EXPR
11046           || code == BIT_NOT_EXPR
11047           || code == COMPONENT_REF
11048           || code == TYPE_EXPR);
11049 }
11050
11051 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11052    errors are issued for invalid declarations.  */
11053
11054 bool
11055 grok_op_properties (tree decl, bool complain)
11056 {
11057   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11058   tree argtype;
11059   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11060   tree name = DECL_NAME (decl);
11061   enum tree_code operator_code;
11062   int arity;
11063   bool ellipsis_p;
11064   tree class_type;
11065
11066   /* Count the number of arguments and check for ellipsis.  */
11067   for (argtype = argtypes, arity = 0;
11068        argtype && argtype != void_list_node;
11069        argtype = TREE_CHAIN (argtype))
11070     ++arity;
11071   ellipsis_p = !argtype;
11072
11073   class_type = DECL_CONTEXT (decl);
11074   if (class_type && !CLASS_TYPE_P (class_type))
11075     class_type = NULL_TREE;
11076
11077   if (DECL_CONV_FN_P (decl))
11078     operator_code = TYPE_EXPR;
11079   else
11080     do
11081       {
11082 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
11083         if (ansi_opname (CODE) == name)                         \
11084           {                                                     \
11085             operator_code = (CODE);                             \
11086             break;                                              \
11087           }                                                     \
11088         else if (ansi_assopname (CODE) == name)                 \
11089           {                                                     \
11090             operator_code = (CODE);                             \
11091             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
11092             break;                                              \
11093           }
11094
11095 #include "operators.def"
11096 #undef DEF_OPERATOR
11097
11098         gcc_unreachable ();
11099       }
11100     while (0);
11101   gcc_assert (operator_code != MAX_TREE_CODES);
11102   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11103
11104   if (class_type)
11105     switch (operator_code)
11106       {
11107       case NEW_EXPR:
11108         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11109         break;
11110
11111       case DELETE_EXPR:
11112         TYPE_GETS_DELETE (class_type) |= 1;
11113         break;
11114
11115       case VEC_NEW_EXPR:
11116         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11117         break;
11118
11119       case VEC_DELETE_EXPR:
11120         TYPE_GETS_DELETE (class_type) |= 2;
11121         break;
11122
11123       default:
11124         break;
11125       }
11126
11127     /* [basic.std.dynamic.allocation]/1:
11128
11129        A program is ill-formed if an allocation function is declared
11130        in a namespace scope other than global scope or declared static
11131        in global scope.
11132
11133        The same also holds true for deallocation functions.  */
11134   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11135       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11136     {
11137       if (DECL_NAMESPACE_SCOPE_P (decl))
11138         {
11139           if (CP_DECL_CONTEXT (decl) != global_namespace)
11140             {
11141               error ("%qD may not be declared within a namespace", decl);
11142               return false;
11143             }
11144           else if (!TREE_PUBLIC (decl))
11145             {
11146               error ("%qD may not be declared as static", decl);
11147               return false;
11148             }
11149         }
11150     }
11151
11152   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11153     {
11154       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11155       DECL_IS_OPERATOR_NEW (decl) = 1;
11156     }
11157   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11158     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11159   else
11160     {
11161       /* An operator function must either be a non-static member function
11162          or have at least one parameter of a class, a reference to a class,
11163          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11164       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11165         {
11166           if (operator_code == TYPE_EXPR
11167               || operator_code == CALL_EXPR
11168               || operator_code == COMPONENT_REF
11169               || operator_code == ARRAY_REF
11170               || operator_code == NOP_EXPR)
11171             {
11172               error ("%qD must be a nonstatic member function", decl);
11173               return false;
11174             }
11175           else
11176             {
11177               tree p;
11178
11179               if (DECL_STATIC_FUNCTION_P (decl))
11180                 {
11181                   error ("%qD must be either a non-static member "
11182                          "function or a non-member function", decl);
11183                   return false;
11184                 }
11185
11186               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11187                 {
11188                   tree arg = non_reference (TREE_VALUE (p));
11189                   if (arg == error_mark_node)
11190                     return false;
11191
11192                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11193                      because these checks are performed even on
11194                      template functions.  */
11195                   if (MAYBE_CLASS_TYPE_P (arg)
11196                       || TREE_CODE (arg) == ENUMERAL_TYPE)
11197                     break;
11198                 }
11199
11200               if (!p || p == void_list_node)
11201                 {
11202                   if (complain)
11203                     error ("%qD must have an argument of class or "
11204                            "enumerated type", decl);
11205                   return false;
11206                 }
11207             }
11208         }
11209
11210       /* There are no restrictions on the arguments to an overloaded
11211          "operator ()".  */
11212       if (operator_code == CALL_EXPR)
11213         return true;
11214
11215       /* Warn about conversion operators that will never be used.  */
11216       if (IDENTIFIER_TYPENAME_P (name)
11217           && ! DECL_TEMPLATE_INFO (decl)
11218           && warn_conversion
11219           /* Warn only declaring the function; there is no need to
11220              warn again about out-of-class definitions.  */
11221           && class_type == current_class_type)
11222         {
11223           tree t = TREE_TYPE (name);
11224           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11225
11226           if (ref)
11227             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11228
11229           if (TREE_CODE (t) == VOID_TYPE)
11230             warning (OPT_Wconversion,
11231                      ref
11232                      ? G_("conversion to a reference to void "
11233                           "will never use a type conversion operator")
11234                      : G_("conversion to void "
11235                           "will never use a type conversion operator"));
11236           else if (class_type)
11237             {
11238               if (t == class_type)
11239                 warning (OPT_Wconversion,
11240                      ref
11241                      ? G_("conversion to a reference to the same type "
11242                           "will never use a type conversion operator")
11243                      : G_("conversion to the same type "
11244                           "will never use a type conversion operator"));                
11245               /* Don't force t to be complete here.  */
11246               else if (MAYBE_CLASS_TYPE_P (t)
11247                        && COMPLETE_TYPE_P (t)
11248                        && DERIVED_FROM_P (t, class_type))
11249                  warning (OPT_Wconversion,
11250                           ref
11251                           ? G_("conversion to a reference to a base class "
11252                                "will never use a type conversion operator")
11253                           : G_("conversion to a base class "
11254                                "will never use a type conversion operator"));           
11255             }
11256
11257         }
11258
11259       if (operator_code == COND_EXPR)
11260         {
11261           /* 13.4.0.3 */
11262           error ("ISO C++ prohibits overloading operator ?:");
11263           return false;
11264         }
11265       else if (ellipsis_p)
11266         {
11267           error ("%qD must not have variable number of arguments", decl);
11268           return false;
11269         }
11270       else if (ambi_op_p (operator_code))
11271         {
11272           if (arity == 1)
11273             /* We pick the one-argument operator codes by default, so
11274                we don't have to change anything.  */
11275             ;
11276           else if (arity == 2)
11277             {
11278               /* If we thought this was a unary operator, we now know
11279                  it to be a binary operator.  */
11280               switch (operator_code)
11281                 {
11282                 case INDIRECT_REF:
11283                   operator_code = MULT_EXPR;
11284                   break;
11285
11286                 case ADDR_EXPR:
11287                   operator_code = BIT_AND_EXPR;
11288                   break;
11289
11290                 case UNARY_PLUS_EXPR:
11291                   operator_code = PLUS_EXPR;
11292                   break;
11293
11294                 case NEGATE_EXPR:
11295                   operator_code = MINUS_EXPR;
11296                   break;
11297
11298                 case PREINCREMENT_EXPR:
11299                   operator_code = POSTINCREMENT_EXPR;
11300                   break;
11301
11302                 case PREDECREMENT_EXPR:
11303                   operator_code = POSTDECREMENT_EXPR;
11304                   break;
11305
11306                 default:
11307                   gcc_unreachable ();
11308                 }
11309
11310               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11311
11312               if ((operator_code == POSTINCREMENT_EXPR
11313                    || operator_code == POSTDECREMENT_EXPR)
11314                   && ! processing_template_decl
11315                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11316                 {
11317                   if (methodp)
11318                     error ("postfix %qD must take %<int%> as its argument",
11319                            decl);
11320                   else
11321                     error ("postfix %qD must take %<int%> as its second "
11322                            "argument", decl);
11323                   return false;
11324                 }
11325             }
11326           else
11327             {
11328               if (methodp)
11329                 error ("%qD must take either zero or one argument", decl);
11330               else
11331                 error ("%qD must take either one or two arguments", decl);
11332               return false;
11333             }
11334
11335           /* More Effective C++ rule 6.  */
11336           if (warn_ecpp
11337               && (operator_code == POSTINCREMENT_EXPR
11338                   || operator_code == POSTDECREMENT_EXPR
11339                   || operator_code == PREINCREMENT_EXPR
11340                   || operator_code == PREDECREMENT_EXPR))
11341             {
11342               tree arg = TREE_VALUE (argtypes);
11343               tree ret = TREE_TYPE (TREE_TYPE (decl));
11344               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11345                 arg = TREE_TYPE (arg);
11346               arg = TYPE_MAIN_VARIANT (arg);
11347               if (operator_code == PREINCREMENT_EXPR
11348                   || operator_code == PREDECREMENT_EXPR)
11349                 {
11350                   if (TREE_CODE (ret) != REFERENCE_TYPE
11351                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11352                                        arg))
11353                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11354                              build_reference_type (arg));
11355                 }
11356               else
11357                 {
11358                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11359                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11360                 }
11361             }
11362         }
11363       else if (unary_op_p (operator_code))
11364         {
11365           if (arity != 1)
11366             {
11367               if (methodp)
11368                 error ("%qD must take %<void%>", decl);
11369               else
11370                 error ("%qD must take exactly one argument", decl);
11371               return false;
11372             }
11373         }
11374       else /* if (binary_op_p (operator_code)) */
11375         {
11376           if (arity != 2)
11377             {
11378               if (methodp)
11379                 error ("%qD must take exactly one argument", decl);
11380               else
11381                 error ("%qD must take exactly two arguments", decl);
11382               return false;
11383             }
11384
11385           /* More Effective C++ rule 7.  */
11386           if (warn_ecpp
11387               && (operator_code == TRUTH_ANDIF_EXPR
11388                   || operator_code == TRUTH_ORIF_EXPR
11389                   || operator_code == COMPOUND_EXPR))
11390             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11391                      decl);
11392         }
11393
11394       /* Effective C++ rule 23.  */
11395       if (warn_ecpp
11396           && arity == 2
11397           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11398           && (operator_code == PLUS_EXPR
11399               || operator_code == MINUS_EXPR
11400               || operator_code == TRUNC_DIV_EXPR
11401               || operator_code == MULT_EXPR
11402               || operator_code == TRUNC_MOD_EXPR)
11403           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11404         warning (OPT_Weffc__, "%qD should return by value", decl);
11405
11406       /* [over.oper]/8 */
11407       for (; argtypes && argtypes != void_list_node;
11408           argtypes = TREE_CHAIN (argtypes))
11409         if (TREE_PURPOSE (argtypes))
11410           {
11411             TREE_PURPOSE (argtypes) = NULL_TREE;
11412             if (operator_code == POSTINCREMENT_EXPR
11413                 || operator_code == POSTDECREMENT_EXPR)
11414               {
11415                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
11416                          decl);
11417               }
11418             else
11419               {
11420                 error ("%qD cannot have default arguments", decl);
11421                 return false;
11422               }
11423           }
11424     }
11425   return true;
11426 }
11427 \f
11428 /* Return a string giving the keyword associate with CODE.  */
11429
11430 static const char *
11431 tag_name (enum tag_types code)
11432 {
11433   switch (code)
11434     {
11435     case record_type:
11436       return "struct";
11437     case class_type:
11438       return "class";
11439     case union_type:
11440       return "union";
11441     case enum_type:
11442       return "enum";
11443     case typename_type:
11444       return "typename";
11445     default:
11446       gcc_unreachable ();
11447     }
11448 }
11449
11450 /* Name lookup in an elaborated-type-specifier (after the keyword
11451    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11452    elaborated-type-specifier is invalid, issue a diagnostic and return
11453    error_mark_node; otherwise, return the *_TYPE to which it referred.
11454    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11455
11456 tree
11457 check_elaborated_type_specifier (enum tag_types tag_code,
11458                                  tree decl,
11459                                  bool allow_template_p)
11460 {
11461   tree type;
11462
11463   /* In the case of:
11464
11465        struct S { struct S *p; };
11466
11467      name lookup will find the TYPE_DECL for the implicit "S::S"
11468      typedef.  Adjust for that here.  */
11469   if (DECL_SELF_REFERENCE_P (decl))
11470     decl = TYPE_NAME (TREE_TYPE (decl));
11471
11472   type = TREE_TYPE (decl);
11473
11474   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11475      is false for this case as well.  */
11476   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11477     {
11478       error ("using template type parameter %qT after %qs",
11479              type, tag_name (tag_code));
11480       return error_mark_node;
11481     }
11482   /* Accept bound template template parameters.  */
11483   else if (allow_template_p
11484            && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11485     ;
11486   /*   [dcl.type.elab]
11487
11488        If the identifier resolves to a typedef-name or the
11489        simple-template-id resolves to an alias template
11490        specialization, the elaborated-type-specifier is ill-formed.
11491
11492      In other words, the only legitimate declaration to use in the
11493      elaborated type specifier is the implicit typedef created when
11494      the type is declared.  */
11495   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11496            && !DECL_SELF_REFERENCE_P (decl)
11497            && tag_code != typename_type)
11498     {
11499       if (alias_template_specialization_p (type))
11500         error ("using alias template specialization %qT after %qs",
11501                type, tag_name (tag_code));
11502       else
11503         error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11504       inform (DECL_SOURCE_LOCATION (decl),
11505               "%qD has a previous declaration here", decl);
11506       return error_mark_node;
11507     }
11508   else if (TREE_CODE (type) != RECORD_TYPE
11509            && TREE_CODE (type) != UNION_TYPE
11510            && tag_code != enum_type
11511            && tag_code != typename_type)
11512     {
11513       error ("%qT referred to as %qs", type, tag_name (tag_code));
11514       error ("%q+T has a previous declaration here", type);
11515       return error_mark_node;
11516     }
11517   else if (TREE_CODE (type) != ENUMERAL_TYPE
11518            && tag_code == enum_type)
11519     {
11520       error ("%qT referred to as enum", type);
11521       error ("%q+T has a previous declaration here", type);
11522       return error_mark_node;
11523     }
11524   else if (!allow_template_p
11525            && TREE_CODE (type) == RECORD_TYPE
11526            && CLASSTYPE_IS_TEMPLATE (type))
11527     {
11528       /* If a class template appears as elaborated type specifier
11529          without a template header such as:
11530
11531            template <class T> class C {};
11532            void f(class C);             // No template header here
11533
11534          then the required template argument is missing.  */
11535       error ("template argument required for %<%s %T%>",
11536              tag_name (tag_code),
11537              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11538       return error_mark_node;
11539     }
11540
11541   return type;
11542 }
11543
11544 /* Lookup NAME in elaborate type specifier in scope according to
11545    SCOPE and issue diagnostics if necessary.
11546    Return *_TYPE node upon success, NULL_TREE when the NAME is not
11547    found, and ERROR_MARK_NODE for type error.  */
11548
11549 static tree
11550 lookup_and_check_tag (enum tag_types tag_code, tree name,
11551                       tag_scope scope, bool template_header_p)
11552 {
11553   tree t;
11554   tree decl;
11555   if (scope == ts_global)
11556     {
11557       /* First try ordinary name lookup, ignoring hidden class name
11558          injected via friend declaration.  */
11559       decl = lookup_name_prefer_type (name, 2);
11560       /* If that fails, the name will be placed in the smallest
11561          non-class, non-function-prototype scope according to 3.3.1/5.
11562          We may already have a hidden name declared as friend in this
11563          scope.  So lookup again but not ignoring hidden names.
11564          If we find one, that name will be made visible rather than
11565          creating a new tag.  */
11566       if (!decl)
11567         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11568     }
11569   else
11570     decl = lookup_type_scope (name, scope);
11571
11572   if (decl && DECL_CLASS_TEMPLATE_P (decl))
11573     decl = DECL_TEMPLATE_RESULT (decl);
11574
11575   if (decl && TREE_CODE (decl) == TYPE_DECL)
11576     {
11577       /* Look for invalid nested type:
11578            class C {
11579              class C {};
11580            };  */
11581       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11582         {
11583           error ("%qD has the same name as the class in which it is "
11584                  "declared",
11585                  decl);
11586           return error_mark_node;
11587         }
11588
11589       /* Two cases we need to consider when deciding if a class
11590          template is allowed as an elaborated type specifier:
11591          1. It is a self reference to its own class.
11592          2. It comes with a template header.
11593
11594          For example:
11595
11596            template <class T> class C {
11597              class C *c1;               // DECL_SELF_REFERENCE_P is true
11598              class D;
11599            };
11600            template <class U> class C; // template_header_p is true
11601            template <class T> class C<T>::D {
11602              class C *c2;               // DECL_SELF_REFERENCE_P is true
11603            };  */
11604
11605       t = check_elaborated_type_specifier (tag_code,
11606                                            decl,
11607                                            template_header_p
11608                                            | DECL_SELF_REFERENCE_P (decl));
11609       return t;
11610     }
11611   else if (decl && TREE_CODE (decl) == TREE_LIST)
11612     {
11613       error ("reference to %qD is ambiguous", name);
11614       print_candidates (decl);
11615       return error_mark_node;
11616     }
11617   else
11618     return NULL_TREE;
11619 }
11620
11621 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11622    Define the tag as a forward-reference if it is not defined.
11623
11624    If a declaration is given, process it here, and report an error if
11625    multiple declarations are not identical.
11626
11627    SCOPE is TS_CURRENT when this is also a definition.  Only look in
11628    the current frame for the name (since C++ allows new names in any
11629    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11630    declaration.  Only look beginning from the current scope outward up
11631    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11632
11633    TEMPLATE_HEADER_P is true when this declaration is preceded by
11634    a set of template parameters.  */
11635
11636 static tree
11637 xref_tag_1 (enum tag_types tag_code, tree name,
11638             tag_scope scope, bool template_header_p)
11639 {
11640   enum tree_code code;
11641   tree t;
11642   tree context = NULL_TREE;
11643
11644   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11645
11646   switch (tag_code)
11647     {
11648     case record_type:
11649     case class_type:
11650       code = RECORD_TYPE;
11651       break;
11652     case union_type:
11653       code = UNION_TYPE;
11654       break;
11655     case enum_type:
11656       code = ENUMERAL_TYPE;
11657       break;
11658     default:
11659       gcc_unreachable ();
11660     }
11661
11662   /* In case of anonymous name, xref_tag is only called to
11663      make type node and push name.  Name lookup is not required.  */
11664   if (ANON_AGGRNAME_P (name))
11665     t = NULL_TREE;
11666   else
11667     t = lookup_and_check_tag  (tag_code, name,
11668                                scope, template_header_p);
11669
11670   if (t == error_mark_node)
11671     return error_mark_node;
11672
11673   if (scope != ts_current && t && current_class_type
11674       && template_class_depth (current_class_type)
11675       && template_header_p)
11676     {
11677       /* Since SCOPE is not TS_CURRENT, we are not looking at a
11678          definition of this tag.  Since, in addition, we are currently
11679          processing a (member) template declaration of a template
11680          class, we must be very careful; consider:
11681
11682            template <class X>
11683            struct S1
11684
11685            template <class U>
11686            struct S2
11687            { template <class V>
11688            friend struct S1; };
11689
11690          Here, the S2::S1 declaration should not be confused with the
11691          outer declaration.  In particular, the inner version should
11692          have a template parameter of level 2, not level 1.  This
11693          would be particularly important if the member declaration
11694          were instead:
11695
11696            template <class V = U> friend struct S1;
11697
11698          say, when we should tsubst into `U' when instantiating
11699          S2.  On the other hand, when presented with:
11700
11701            template <class T>
11702            struct S1 {
11703              template <class U>
11704              struct S2 {};
11705              template <class U>
11706              friend struct S2;
11707            };
11708
11709          we must find the inner binding eventually.  We
11710          accomplish this by making sure that the new type we
11711          create to represent this declaration has the right
11712          TYPE_CONTEXT.  */
11713       context = TYPE_CONTEXT (t);
11714       t = NULL_TREE;
11715     }
11716
11717   if (! t)
11718     {
11719       /* If no such tag is yet defined, create a forward-reference node
11720          and record it as the "definition".
11721          When a real declaration of this type is found,
11722          the forward-reference will be altered into a real type.  */
11723       if (code == ENUMERAL_TYPE)
11724         {
11725           error ("use of enum %q#D without previous declaration", name);
11726           return error_mark_node;
11727         }
11728       else
11729         {
11730           t = make_class_type (code);
11731           TYPE_CONTEXT (t) = context;
11732           t = pushtag (name, t, scope);
11733         }
11734     }
11735   else
11736     {
11737       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11738         {
11739           if (!redeclare_class_template (t, current_template_parms))
11740             return error_mark_node;
11741         }
11742       else if (!processing_template_decl
11743                && CLASS_TYPE_P (t)
11744                && CLASSTYPE_IS_TEMPLATE (t))
11745         {
11746           error ("redeclaration of %qT as a non-template", t);
11747           error ("previous declaration %q+D", t);
11748           return error_mark_node;
11749         }
11750
11751       /* Make injected friend class visible.  */
11752       if (scope != ts_within_enclosing_non_class
11753           && hidden_name_p (TYPE_NAME (t)))
11754         {
11755           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11756           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11757
11758           if (TYPE_TEMPLATE_INFO (t))
11759             {
11760               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11761               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11762             }
11763         }
11764     }
11765
11766   return t;
11767 }
11768
11769 /* Wrapper for xref_tag_1.  */
11770
11771 tree
11772 xref_tag (enum tag_types tag_code, tree name,
11773           tag_scope scope, bool template_header_p)
11774 {
11775   tree ret;
11776   bool subtime;
11777   subtime = timevar_cond_start (TV_NAME_LOOKUP);
11778   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11779   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11780   return ret;
11781 }
11782
11783
11784 tree
11785 xref_tag_from_type (tree old, tree id, tag_scope scope)
11786 {
11787   enum tag_types tag_kind;
11788
11789   if (TREE_CODE (old) == RECORD_TYPE)
11790     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11791   else
11792     tag_kind  = union_type;
11793
11794   if (id == NULL_TREE)
11795     id = TYPE_IDENTIFIER (old);
11796
11797   return xref_tag (tag_kind, id, scope, false);
11798 }
11799
11800 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11801    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11802    access_* node, and the TREE_VALUE is the type of the base-class.
11803    Non-NULL TREE_TYPE indicates virtual inheritance.  
11804  
11805    Returns true if the binfo hierarchy was successfully created,
11806    false if an error was detected. */
11807
11808 bool
11809 xref_basetypes (tree ref, tree base_list)
11810 {
11811   tree *basep;
11812   tree binfo, base_binfo;
11813   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11814   unsigned max_bases = 0;  /* Maximum direct bases.  */
11815   int i;
11816   tree default_access;
11817   tree igo_prev; /* Track Inheritance Graph Order.  */
11818
11819   if (ref == error_mark_node)
11820     return false;
11821
11822   /* The base of a derived class is private by default, all others are
11823      public.  */
11824   default_access = (TREE_CODE (ref) == RECORD_TYPE
11825                     && CLASSTYPE_DECLARED_CLASS (ref)
11826                     ? access_private_node : access_public_node);
11827
11828   /* First, make sure that any templates in base-classes are
11829      instantiated.  This ensures that if we call ourselves recursively
11830      we do not get confused about which classes are marked and which
11831      are not.  */
11832   basep = &base_list;
11833   while (*basep)
11834     {
11835       tree basetype = TREE_VALUE (*basep);
11836
11837       if (!(processing_template_decl && uses_template_parms (basetype))
11838           && !complete_type_or_else (basetype, NULL))
11839         /* An incomplete type.  Remove it from the list.  */
11840         *basep = TREE_CHAIN (*basep);
11841       else
11842         {
11843           max_bases++;
11844           if (TREE_TYPE (*basep))
11845             max_vbases++;
11846           if (CLASS_TYPE_P (basetype))
11847             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11848           basep = &TREE_CHAIN (*basep);
11849         }
11850     }
11851
11852   TYPE_MARKED_P (ref) = 1;
11853
11854   /* The binfo slot should be empty, unless this is an (ill-formed)
11855      redefinition.  */
11856   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11857     {
11858       error ("redefinition of %q#T", ref);
11859       return false;
11860     }
11861
11862   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11863
11864   binfo = make_tree_binfo (max_bases);
11865
11866   TYPE_BINFO (ref) = binfo;
11867   BINFO_OFFSET (binfo) = size_zero_node;
11868   BINFO_TYPE (binfo) = ref;
11869
11870   /* Apply base-class info set up to the variants of this type.  */
11871   fixup_type_variants (ref);
11872
11873   if (max_bases)
11874     {
11875       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11876       /* An aggregate cannot have baseclasses.  */
11877       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11878
11879       if (TREE_CODE (ref) == UNION_TYPE)
11880         {
11881           error ("derived union %qT invalid", ref);
11882           return false;
11883         }
11884     }
11885
11886   if (max_bases > 1)
11887     {
11888       if (TYPE_FOR_JAVA (ref))
11889         {
11890           error ("Java class %qT cannot have multiple bases", ref);
11891           return false;
11892         }
11893     }
11894
11895   if (max_vbases)
11896     {
11897       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11898
11899       if (TYPE_FOR_JAVA (ref))
11900         {
11901           error ("Java class %qT cannot have virtual bases", ref);
11902           return false;
11903         }
11904     }
11905
11906   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11907     {
11908       tree access = TREE_PURPOSE (base_list);
11909       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11910       tree basetype = TREE_VALUE (base_list);
11911
11912       if (access == access_default_node)
11913         access = default_access;
11914
11915       if (PACK_EXPANSION_P (basetype))
11916         basetype = PACK_EXPANSION_PATTERN (basetype);
11917       if (TREE_CODE (basetype) == TYPE_DECL)
11918         basetype = TREE_TYPE (basetype);
11919       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11920         {
11921           error ("base type %qT fails to be a struct or class type",
11922                  basetype);
11923           return false;
11924         }
11925
11926       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11927         TYPE_FOR_JAVA (ref) = 1;
11928
11929       base_binfo = NULL_TREE;
11930       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
11931         {
11932           base_binfo = TYPE_BINFO (basetype);
11933           /* The original basetype could have been a typedef'd type.  */
11934           basetype = BINFO_TYPE (base_binfo);
11935
11936           /* Inherit flags from the base.  */
11937           TYPE_HAS_NEW_OPERATOR (ref)
11938             |= TYPE_HAS_NEW_OPERATOR (basetype);
11939           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11940             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11941           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11942           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11943           CLASSTYPE_DIAMOND_SHAPED_P (ref)
11944             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11945           CLASSTYPE_REPEATED_BASE_P (ref)
11946             |= CLASSTYPE_REPEATED_BASE_P (basetype);
11947         }
11948
11949       /* We must do this test after we've seen through a typedef
11950          type.  */
11951       if (TYPE_MARKED_P (basetype))
11952         {
11953           if (basetype == ref)
11954             error ("recursive type %qT undefined", basetype);
11955           else
11956             error ("duplicate base type %qT invalid", basetype);
11957           return false;
11958         }
11959
11960       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11961         /* Regenerate the pack expansion for the bases. */
11962         basetype = make_pack_expansion (basetype);
11963
11964       TYPE_MARKED_P (basetype) = 1;
11965
11966       base_binfo = copy_binfo (base_binfo, basetype, ref,
11967                                &igo_prev, via_virtual);
11968       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11969         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11970
11971       BINFO_BASE_APPEND (binfo, base_binfo);
11972       BINFO_BASE_ACCESS_APPEND (binfo, access);
11973     }
11974
11975   if (VEC_length (tree, CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
11976     /* If we didn't get max_vbases vbases, we must have shared at
11977        least one of them, and are therefore diamond shaped.  */
11978     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11979
11980   /* Unmark all the types.  */
11981   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11982     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11983   TYPE_MARKED_P (ref) = 0;
11984
11985   /* Now see if we have a repeated base type.  */
11986   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11987     {
11988       for (base_binfo = binfo; base_binfo;
11989            base_binfo = TREE_CHAIN (base_binfo))
11990         {
11991           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11992             {
11993               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11994               break;
11995             }
11996           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11997         }
11998       for (base_binfo = binfo; base_binfo;
11999            base_binfo = TREE_CHAIN (base_binfo))
12000         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
12001           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
12002         else
12003           break;
12004     }
12005
12006   return true;
12007 }
12008
12009 \f
12010 /* Copies the enum-related properties from type SRC to type DST.
12011    Used with the underlying type of an enum and the enum itself.  */
12012 static void
12013 copy_type_enum (tree dst, tree src)
12014 {
12015   tree t;
12016   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
12017     {
12018       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
12019       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
12020       TYPE_SIZE (t) = TYPE_SIZE (src);
12021       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
12022       SET_TYPE_MODE (dst, TYPE_MODE (src));
12023       TYPE_PRECISION (t) = TYPE_PRECISION (src);
12024       TYPE_ALIGN (t) = TYPE_ALIGN (src);
12025       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
12026       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
12027     }
12028 }
12029
12030 /* Begin compiling the definition of an enumeration type.
12031    NAME is its name, 
12032
12033    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12034
12035    UNDERLYING_TYPE is the type that will be used as the storage for
12036    the enumeration type. This should be NULL_TREE if no storage type
12037    was specified.
12038
12039    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12040
12041    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12042
12043    Returns the type object, as yet incomplete.
12044    Also records info about it so that build_enumerator
12045    may be used to declare the individual values as they are read.  */
12046
12047 tree
12048 start_enum (tree name, tree enumtype, tree underlying_type,
12049             bool scoped_enum_p, bool *is_new)
12050 {
12051   tree prevtype = NULL_TREE;
12052   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
12053
12054   if (is_new)
12055     *is_new = false;
12056   /* [C++0x dcl.enum]p5:
12057
12058     If not explicitly specified, the underlying type of a scoped
12059     enumeration type is int.  */
12060   if (!underlying_type && scoped_enum_p)
12061     underlying_type = integer_type_node;
12062
12063   if (underlying_type)
12064     underlying_type = cv_unqualified (underlying_type);
12065
12066   /* If this is the real definition for a previous forward reference,
12067      fill in the contents in the same object that used to be the
12068      forward reference.  */
12069   if (!enumtype)
12070     enumtype = lookup_and_check_tag (enum_type, name,
12071                                      /*tag_scope=*/ts_current,
12072                                      /*template_header_p=*/false);
12073
12074   /* In case of a template_decl, the only check that should be deferred
12075      to instantiation time is the comparison of underlying types.  */
12076   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12077     {
12078       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12079         {
12080           error_at (input_location, "scoped/unscoped mismatch "
12081                     "in enum %q#T", enumtype);
12082           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12083                     "previous definition here");
12084           enumtype = error_mark_node;
12085         }
12086       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12087         {
12088           error_at (input_location, "underlying type mismatch "
12089                     "in enum %q#T", enumtype);
12090           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12091                     "previous definition here");
12092           enumtype = error_mark_node;
12093         }
12094       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12095                && !dependent_type_p (underlying_type)
12096                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12097                && !same_type_p (underlying_type,
12098                                 ENUM_UNDERLYING_TYPE (enumtype)))
12099         {
12100           error_at (input_location, "different underlying type "
12101                     "in enum %q#T", enumtype);
12102           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12103                     "previous definition here");
12104           underlying_type = NULL_TREE;
12105         }
12106     }
12107
12108   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12109       || processing_template_decl)
12110     {
12111       /* In case of error, make a dummy enum to allow parsing to
12112          continue.  */
12113       if (enumtype == error_mark_node)
12114         {
12115           name = make_anon_name ();
12116           enumtype = NULL_TREE;
12117         }
12118
12119       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12120          of an opaque enum, or an opaque enum of an already defined
12121          enumeration (C++0x only).
12122          In any other case, it'll be NULL_TREE. */
12123       if (!enumtype)
12124         {
12125           if (is_new)
12126             *is_new = true;
12127         }
12128       prevtype = enumtype;
12129
12130       /* Do not push the decl more than once, unless we need to
12131          compare underlying types at instantiation time */
12132       if (!enumtype
12133           || TREE_CODE (enumtype) != ENUMERAL_TYPE
12134           || (underlying_type
12135               && dependent_type_p (underlying_type))
12136           || (ENUM_UNDERLYING_TYPE (enumtype)
12137               && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12138         {
12139           enumtype = cxx_make_type (ENUMERAL_TYPE);
12140           enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12141         }
12142       else
12143           enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12144                                false);
12145
12146       if (enumtype == error_mark_node)
12147         return error_mark_node;
12148
12149       /* The enum is considered opaque until the opening '{' of the
12150          enumerator list.  */
12151       SET_OPAQUE_ENUM_P (enumtype, true);
12152       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12153     }
12154
12155   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12156
12157   if (underlying_type)
12158     {
12159       if (CP_INTEGRAL_TYPE_P (underlying_type))
12160         {
12161           copy_type_enum (enumtype, underlying_type);
12162           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12163         }
12164       else if (dependent_type_p (underlying_type))
12165         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12166       else
12167         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
12168                underlying_type, enumtype);
12169     }
12170
12171   /* If into a template class, the returned enum is always the first
12172      declaration (opaque or not) seen. This way all the references to
12173      this type will be to the same declaration. The following ones are used
12174      only to check for definition errors.  */
12175   if (prevtype && processing_template_decl)
12176     return prevtype;
12177   else
12178     return enumtype;
12179 }
12180
12181 /* After processing and defining all the values of an enumeration type,
12182    install their decls in the enumeration type.
12183    ENUMTYPE is the type object.  */
12184
12185 void
12186 finish_enum_value_list (tree enumtype)
12187 {
12188   tree values;
12189   tree underlying_type;
12190   tree decl;
12191   tree value;
12192   tree minnode, maxnode;
12193   tree t;
12194
12195   bool fixed_underlying_type_p 
12196     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12197
12198   /* We built up the VALUES in reverse order.  */
12199   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12200
12201   /* For an enum defined in a template, just set the type of the values;
12202      all further processing is postponed until the template is
12203      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12204      works.  */
12205   if (processing_template_decl)
12206     {
12207       for (values = TYPE_VALUES (enumtype);
12208            values;
12209            values = TREE_CHAIN (values))
12210         TREE_TYPE (TREE_VALUE (values)) = enumtype;
12211       return;
12212     }
12213
12214   /* Determine the minimum and maximum values of the enumerators.  */
12215   if (TYPE_VALUES (enumtype))
12216     {
12217       minnode = maxnode = NULL_TREE;
12218
12219       for (values = TYPE_VALUES (enumtype);
12220            values;
12221            values = TREE_CHAIN (values))
12222         {
12223           decl = TREE_VALUE (values);
12224
12225           /* [dcl.enum]: Following the closing brace of an enum-specifier,
12226              each enumerator has the type of its enumeration.  Prior to the
12227              closing brace, the type of each enumerator is the type of its
12228              initializing value.  */
12229           TREE_TYPE (decl) = enumtype;
12230
12231           /* Update the minimum and maximum values, if appropriate.  */
12232           value = DECL_INITIAL (decl);
12233           if (value == error_mark_node)
12234             value = integer_zero_node;
12235           /* Figure out what the minimum and maximum values of the
12236              enumerators are.  */
12237           if (!minnode)
12238             minnode = maxnode = value;
12239           else if (tree_int_cst_lt (maxnode, value))
12240             maxnode = value;
12241           else if (tree_int_cst_lt (value, minnode))
12242             minnode = value;
12243         }
12244     }
12245   else
12246     /* [dcl.enum]
12247
12248        If the enumerator-list is empty, the underlying type is as if
12249        the enumeration had a single enumerator with value 0.  */
12250     minnode = maxnode = integer_zero_node;
12251
12252   if (!fixed_underlying_type_p)
12253     {
12254       /* Compute the number of bits require to represent all values of the
12255          enumeration.  We must do this before the type of MINNODE and
12256          MAXNODE are transformed, since tree_int_cst_min_precision relies
12257          on the TREE_TYPE of the value it is passed.  */
12258       bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12259       int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12260       int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12261       int precision = MAX (lowprec, highprec);
12262       unsigned int itk;
12263       bool use_short_enum;
12264
12265       /* Determine the underlying type of the enumeration.
12266
12267          [dcl.enum]
12268
12269          The underlying type of an enumeration is an integral type that
12270          can represent all the enumerator values defined in the
12271          enumeration.  It is implementation-defined which integral type is
12272          used as the underlying type for an enumeration except that the
12273          underlying type shall not be larger than int unless the value of
12274          an enumerator cannot fit in an int or unsigned int.
12275
12276          We use "int" or an "unsigned int" as the underlying type, even if
12277          a smaller integral type would work, unless the user has
12278          explicitly requested that we use the smallest possible type.  The
12279          user can request that for all enumerations with a command line
12280          flag, or for just one enumeration with an attribute.  */
12281
12282       use_short_enum = flag_short_enums
12283         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12284
12285       for (itk = (use_short_enum ? itk_char : itk_int);
12286            itk != itk_none;
12287            itk++)
12288         {
12289           underlying_type = integer_types[itk];
12290           if (underlying_type != NULL_TREE
12291               && TYPE_PRECISION (underlying_type) >= precision
12292               && TYPE_UNSIGNED (underlying_type) == unsignedp)
12293             break;
12294         }
12295       if (itk == itk_none)
12296         {
12297           /* DR 377
12298
12299              IF no integral type can represent all the enumerator values, the
12300              enumeration is ill-formed.  */
12301           error ("no integral type can represent all of the enumerator values "
12302                  "for %qT", enumtype);
12303           precision = TYPE_PRECISION (long_long_integer_type_node);
12304           underlying_type = integer_types[itk_unsigned_long_long];
12305         }
12306
12307       /* [dcl.enum]
12308
12309          The value of sizeof() applied to an enumeration type, an object
12310          of an enumeration type, or an enumerator, is the value of sizeof()
12311          applied to the underlying type.  */
12312       copy_type_enum (enumtype, underlying_type);
12313
12314       /* Compute the minimum and maximum values for the type.
12315
12316          [dcl.enum]
12317
12318          For an enumeration where emin is the smallest enumerator and emax
12319          is the largest, the values of the enumeration are the values of the
12320          underlying type in the range bmin to bmax, where bmin and bmax are,
12321          respectively, the smallest and largest values of the smallest bit-
12322          field that can store emin and emax.  */
12323
12324       /* The middle-end currently assumes that types with TYPE_PRECISION
12325          narrower than their underlying type are suitably zero or sign
12326          extended to fill their mode.  Similarly, it assumes that the front
12327          end assures that a value of a particular type must be within
12328          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12329
12330          We used to set these fields based on bmin and bmax, but that led
12331          to invalid assumptions like optimizing away bounds checking.  So
12332          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12333          TYPE_MAX_VALUE to the values for the mode above and only restrict
12334          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12335       ENUM_UNDERLYING_TYPE (enumtype)
12336         = build_distinct_type_copy (underlying_type);
12337       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12338       set_min_and_max_values_for_integral_type
12339         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12340
12341       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12342       if (flag_strict_enums)
12343         set_min_and_max_values_for_integral_type (enumtype, precision,
12344                                                   unsignedp);
12345     }
12346   else
12347     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12348
12349   /* Convert each of the enumerators to the type of the underlying
12350      type of the enumeration.  */
12351   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12352     {
12353       location_t saved_location;
12354
12355       decl = TREE_VALUE (values);
12356       saved_location = input_location;
12357       input_location = DECL_SOURCE_LOCATION (decl);
12358       if (fixed_underlying_type_p)
12359         /* If the enumeration type has a fixed underlying type, we
12360            already checked all of the enumerator values.  */
12361         value = DECL_INITIAL (decl);
12362       else
12363         value = perform_implicit_conversion (underlying_type,
12364                                              DECL_INITIAL (decl),
12365                                              tf_warning_or_error);
12366       input_location = saved_location;
12367
12368       /* Do not clobber shared ints.  */
12369       value = copy_node (value);
12370
12371       TREE_TYPE (value) = enumtype;
12372       DECL_INITIAL (decl) = value;
12373     }
12374
12375   /* Fix up all variant types of this enum type.  */
12376   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12377     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12378
12379   if (at_class_scope_p ()
12380       && COMPLETE_TYPE_P (current_class_type)
12381       && UNSCOPED_ENUM_P (enumtype))
12382     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12383                                                        current_class_type);
12384
12385   /* Finish debugging output for this type.  */
12386   rest_of_type_compilation (enumtype, namespace_bindings_p ());
12387 }
12388
12389 /* Finishes the enum type. This is called only the first time an
12390    enumeration is seen, be it opaque or odinary.
12391    ENUMTYPE is the type object.  */
12392
12393 void
12394 finish_enum (tree enumtype)
12395 {
12396   if (processing_template_decl)
12397     {
12398       if (at_function_scope_p ())
12399         add_stmt (build_min (TAG_DEFN, enumtype));
12400       return;
12401     }
12402
12403   /* If this is a forward declaration, there should not be any variants,
12404      though we can get a variant in the middle of an enum-specifier with
12405      wacky code like 'enum E { e = sizeof(const E*) };'  */
12406   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12407               && (TYPE_VALUES (enumtype)
12408                   || !TYPE_NEXT_VARIANT (enumtype)));
12409 }
12410
12411 /* Build and install a CONST_DECL for an enumeration constant of the
12412    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12413    LOC is the location of NAME.
12414    Assignment of sequential values by default is handled here.  */
12415
12416 void
12417 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12418 {
12419   tree decl;
12420   tree context;
12421   tree type;
12422
12423   /* If the VALUE was erroneous, pretend it wasn't there; that will
12424      result in the enum being assigned the next value in sequence.  */
12425   if (value == error_mark_node)
12426     value = NULL_TREE;
12427
12428   /* Remove no-op casts from the value.  */
12429   if (value)
12430     STRIP_TYPE_NOPS (value);
12431
12432   if (! processing_template_decl)
12433     {
12434       /* Validate and default VALUE.  */
12435       if (value != NULL_TREE)
12436         {
12437           value = cxx_constant_value (value);
12438
12439           if (TREE_CODE (value) != INTEGER_CST
12440               || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12441             {
12442               error ("enumerator value for %qD is not an integer constant",
12443                      name);
12444               value = NULL_TREE;
12445             }
12446         }
12447
12448       /* Default based on previous value.  */
12449       if (value == NULL_TREE)
12450         {
12451           if (TYPE_VALUES (enumtype))
12452             {
12453               HOST_WIDE_INT hi;
12454               unsigned HOST_WIDE_INT lo;
12455               tree prev_value;
12456               bool overflowed;
12457
12458               /* C++03 7.2/4: If no initializer is specified for the first
12459                  enumerator, the type is an unspecified integral
12460                  type. Otherwise the type is the same as the type of the
12461                  initializing value of the preceding enumerator unless the
12462                  incremented value is not representable in that type, in
12463                  which case the type is an unspecified integral type
12464                  sufficient to contain the incremented value.  */
12465               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12466               if (error_operand_p (prev_value))
12467                 value = error_mark_node;
12468               else
12469                 {
12470                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12471                                            TREE_INT_CST_HIGH (prev_value),
12472                                            1, 0, &lo, &hi);
12473                   if (!overflowed)
12474                     {
12475                       double_int di;
12476                       tree type = TREE_TYPE (prev_value);
12477                       bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12478                       di.low = lo; di.high = hi;
12479                       if (!double_int_fits_to_tree_p (type, di))
12480                         {
12481                           unsigned int itk;
12482                           for (itk = itk_int; itk != itk_none; itk++)
12483                             {
12484                               type = integer_types[itk];
12485                               if (type != NULL_TREE
12486                                   && (pos || !TYPE_UNSIGNED (type))
12487                                   && double_int_fits_to_tree_p (type, di))
12488                                 break;
12489                             }
12490                           if (type && cxx_dialect < cxx0x
12491                               && itk > itk_unsigned_long)
12492                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
12493 incremented enumerator value is too large for %<unsigned long%>" :  "\
12494 incremented enumerator value is too large for %<long%>");
12495                         }
12496                       if (type == NULL_TREE)
12497                         overflowed = true;
12498                       else
12499                         value = double_int_to_tree (type, di);
12500                     }
12501
12502                   if (overflowed)
12503                     {
12504                       error ("overflow in enumeration values at %qD", name);
12505                       value = error_mark_node;
12506                     }
12507                 }
12508             }
12509           else
12510             value = integer_zero_node;
12511         }
12512
12513       /* Remove no-op casts from the value.  */
12514       STRIP_TYPE_NOPS (value);
12515
12516       /* If the underlying type of the enum is fixed, check whether
12517          the enumerator values fits in the underlying type.  If it
12518          does not fit, the program is ill-formed [C++0x dcl.enum].  */
12519       if (ENUM_UNDERLYING_TYPE (enumtype)
12520           && value
12521           && TREE_CODE (value) == INTEGER_CST
12522           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12523         {
12524           error ("enumerator value %E is too large for underlying type %<%T%>",
12525                  value, ENUM_UNDERLYING_TYPE (enumtype));
12526
12527           /* Silently convert the value so that we can continue.  */
12528           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12529                                                value, tf_none);
12530         }
12531     }
12532
12533   /* C++ associates enums with global, function, or class declarations.  */
12534   context = current_scope ();
12535
12536   /* Build the actual enumeration constant.  Note that the enumeration
12537      constants have the underlying type of the enum (if it is fixed)
12538      or the type of their initializer (if the underlying type of the
12539      enum is not fixed):
12540
12541       [ C++0x dcl.enum ]
12542
12543         If the underlying type is fixed, the type of each enumerator
12544         prior to the closing brace is the underlying type; if the
12545         initializing value of an enumerator cannot be represented by
12546         the underlying type, the program is ill-formed. If the
12547         underlying type is not fixed, the type of each enumerator is
12548         the type of its initializing value.
12549
12550     If the underlying type is not fixed, it will be computed by
12551     finish_enum and we will reset the type of this enumerator.  Of
12552     course, if we're processing a template, there may be no value.  */
12553   type = value ? TREE_TYPE (value) : NULL_TREE;
12554
12555   if (context && context == current_class_type)
12556     /* This enum declaration is local to the class.  We need the full
12557        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12558     decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12559   else
12560     /* It's a global enum, or it's local to a function.  (Note local to
12561        a function could mean local to a class method.  */
12562     decl = build_decl (loc, CONST_DECL, name, type);
12563   
12564   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12565   TREE_CONSTANT (decl) = 1;
12566   TREE_READONLY (decl) = 1;
12567   DECL_INITIAL (decl) = value;
12568
12569   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12570     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12571        on the TYPE_FIELDS list for `S'.  (That's so that you can say
12572        things like `S::i' later.)  */
12573     finish_member_declaration (decl);
12574   else
12575     pushdecl (decl);
12576
12577   /* Add this enumeration constant to the list for this type.  */
12578   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12579 }
12580
12581 /* Look for an enumerator with the given NAME within the enumeration
12582    type ENUMTYPE.  This routine is used primarily for qualified name
12583    lookup into an enumerator in C++0x, e.g.,
12584
12585      enum class Color { Red, Green, Blue };
12586
12587      Color color = Color::Red;
12588
12589    Returns the value corresponding to the enumerator, or
12590    NULL_TREE if no such enumerator was found.  */
12591 tree
12592 lookup_enumerator (tree enumtype, tree name)
12593 {
12594   tree e;
12595   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12596
12597   e = purpose_member (name, TYPE_VALUES (enumtype));
12598   return e? TREE_VALUE (e) : NULL_TREE;
12599 }
12600
12601 \f
12602 /* We're defining DECL.  Make sure that its type is OK.  */
12603
12604 static void
12605 check_function_type (tree decl, tree current_function_parms)
12606 {
12607   tree fntype = TREE_TYPE (decl);
12608   tree return_type = complete_type (TREE_TYPE (fntype));
12609
12610   /* In a function definition, arg types must be complete.  */
12611   require_complete_types_for_parms (current_function_parms);
12612
12613   if (dependent_type_p (return_type))
12614     return;
12615   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12616       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12617     {
12618       tree args = TYPE_ARG_TYPES (fntype);
12619
12620       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12621         error ("return type %q#T is incomplete", return_type);
12622       else
12623         error ("return type has Java class type %q#T", return_type);
12624
12625       /* Make it return void instead.  */
12626       if (TREE_CODE (fntype) == METHOD_TYPE)
12627         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12628                                              void_type_node,
12629                                              TREE_CHAIN (args));
12630       else
12631         fntype = build_function_type (void_type_node, args);
12632       fntype
12633         = build_exception_variant (fntype,
12634                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12635       fntype = (cp_build_type_attribute_variant
12636                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12637       TREE_TYPE (decl) = fntype;
12638     }
12639   else
12640     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12641 }
12642
12643 /* Create the FUNCTION_DECL for a function definition.
12644    DECLSPECS and DECLARATOR are the parts of the declaration;
12645    they describe the function's name and the type it returns,
12646    but twisted together in a fashion that parallels the syntax of C.
12647
12648    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12649    DECLARATOR is really the DECL for the function we are about to
12650    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12651    indicating that the function is an inline defined in-class.
12652
12653    This function creates a binding context for the function body
12654    as well as setting up the FUNCTION_DECL in current_function_decl.
12655
12656    For C++, we must first check whether that datum makes any sense.
12657    For example, "class A local_a(1,2);" means that variable local_a
12658    is an aggregate of type A, which should have a constructor
12659    applied to it with the argument list [1, 2].
12660
12661    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12662    or may be a BLOCK if the function has been defined previously
12663    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12664    error_mark_node if the function has never been defined, or
12665    a BLOCK if the function has been defined somewhere.  */
12666
12667 void
12668 start_preparsed_function (tree decl1, tree attrs, int flags)
12669 {
12670   tree ctype = NULL_TREE;
12671   tree fntype;
12672   tree restype;
12673   int doing_friend = 0;
12674   cp_binding_level *bl;
12675   tree current_function_parms;
12676   struct c_fileinfo *finfo
12677     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12678   bool honor_interface;
12679
12680   /* Sanity check.  */
12681   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12682   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12683
12684   fntype = TREE_TYPE (decl1);
12685   if (TREE_CODE (fntype) == METHOD_TYPE)
12686     ctype = TYPE_METHOD_BASETYPE (fntype);
12687
12688   /* ISO C++ 11.4/5.  A friend function defined in a class is in
12689      the (lexical) scope of the class in which it is defined.  */
12690   if (!ctype && DECL_FRIEND_P (decl1))
12691     {
12692       ctype = DECL_FRIEND_CONTEXT (decl1);
12693
12694       /* CTYPE could be null here if we're dealing with a template;
12695          for example, `inline friend float foo()' inside a template
12696          will have no CTYPE set.  */
12697       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12698         ctype = NULL_TREE;
12699       else
12700         doing_friend = 1;
12701     }
12702
12703   if (DECL_DECLARED_INLINE_P (decl1)
12704       && lookup_attribute ("noinline", attrs))
12705     warning (0, "inline function %q+D given attribute noinline", decl1);
12706
12707   /* Handle gnu_inline attribute.  */
12708   if (GNU_INLINE_P (decl1))
12709     {
12710       DECL_EXTERNAL (decl1) = 1;
12711       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12712       DECL_INTERFACE_KNOWN (decl1) = 1;
12713       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12714     }
12715
12716   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12717     /* This is a constructor, we must ensure that any default args
12718        introduced by this definition are propagated to the clones
12719        now. The clones are used directly in overload resolution.  */
12720     adjust_clone_args (decl1);
12721
12722   /* Sometimes we don't notice that a function is a static member, and
12723      build a METHOD_TYPE for it.  Fix that up now.  */
12724   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12725                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12726
12727   /* Set up current_class_type, and enter the scope of the class, if
12728      appropriate.  */
12729   if (ctype)
12730     push_nested_class (ctype);
12731   else if (DECL_STATIC_FUNCTION_P (decl1))
12732     push_nested_class (DECL_CONTEXT (decl1));
12733
12734   /* Now that we have entered the scope of the class, we must restore
12735      the bindings for any template parameters surrounding DECL1, if it
12736      is an inline member template.  (Order is important; consider the
12737      case where a template parameter has the same name as a field of
12738      the class.)  It is not until after this point that
12739      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12740   if (flags & SF_INCLASS_INLINE)
12741     maybe_begin_member_template_processing (decl1);
12742
12743   /* Effective C++ rule 15.  */
12744   if (warn_ecpp
12745       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12746       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12747     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12748
12749   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12750      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12751   if (!DECL_INITIAL (decl1))
12752     DECL_INITIAL (decl1) = error_mark_node;
12753
12754   /* This function exists in static storage.
12755      (This does not mean `static' in the C sense!)  */
12756   TREE_STATIC (decl1) = 1;
12757
12758   /* We must call push_template_decl after current_class_type is set
12759      up.  (If we are processing inline definitions after exiting a
12760      class scope, current_class_type will be NULL_TREE until set above
12761      by push_nested_class.)  */
12762   if (processing_template_decl)
12763     {
12764       /* FIXME: Handle error_mark_node more gracefully.  */
12765       tree newdecl1 = push_template_decl (decl1);
12766       if (newdecl1 != error_mark_node)
12767         decl1 = newdecl1;
12768     }
12769
12770   /* We are now in the scope of the function being defined.  */
12771   current_function_decl = decl1;
12772
12773   /* Save the parm names or decls from this function's declarator
12774      where store_parm_decls will find them.  */
12775   current_function_parms = DECL_ARGUMENTS (decl1);
12776
12777   /* Make sure the parameter and return types are reasonable.  When
12778      you declare a function, these types can be incomplete, but they
12779      must be complete when you define the function.  */
12780   check_function_type (decl1, current_function_parms);
12781
12782   /* Build the return declaration for the function.  */
12783   restype = TREE_TYPE (fntype);
12784   if (DECL_RESULT (decl1) == NULL_TREE)
12785     {
12786       tree resdecl;
12787
12788       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12789       DECL_ARTIFICIAL (resdecl) = 1;
12790       DECL_IGNORED_P (resdecl) = 1;
12791       DECL_RESULT (decl1) = resdecl;
12792
12793       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12794     }
12795
12796   /* Let the user know we're compiling this function.  */
12797   announce_function (decl1);
12798
12799   /* Record the decl so that the function name is defined.
12800      If we already have a decl for this name, and it is a FUNCTION_DECL,
12801      use the old decl.  */
12802   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12803     {
12804       /* A specialization is not used to guide overload resolution.  */
12805       if (!DECL_FUNCTION_MEMBER_P (decl1)
12806           && !(DECL_USE_TEMPLATE (decl1) &&
12807                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12808         {
12809           tree olddecl = pushdecl (decl1);
12810
12811           if (olddecl == error_mark_node)
12812             /* If something went wrong when registering the declaration,
12813                use DECL1; we have to have a FUNCTION_DECL to use when
12814                parsing the body of the function.  */
12815             ;
12816           else
12817             {
12818               /* Otherwise, OLDDECL is either a previous declaration
12819                  of the same function or DECL1 itself.  */
12820
12821               if (warn_missing_declarations
12822                   && olddecl == decl1
12823                   && !DECL_MAIN_P (decl1)
12824                   && TREE_PUBLIC (decl1)
12825                   && !DECL_DECLARED_INLINE_P (decl1))
12826                 {
12827                   tree context;
12828
12829                   /* Check whether DECL1 is in an anonymous
12830                      namespace.  */
12831                   for (context = DECL_CONTEXT (decl1);
12832                        context;
12833                        context = DECL_CONTEXT (context))
12834                     {
12835                       if (TREE_CODE (context) == NAMESPACE_DECL
12836                           && DECL_NAME (context) == NULL_TREE)
12837                         break;
12838                     }
12839
12840                   if (context == NULL)
12841                     warning (OPT_Wmissing_declarations,
12842                              "no previous declaration for %q+D", decl1);
12843                 }
12844
12845               decl1 = olddecl;
12846             }
12847         }
12848       else
12849         {
12850           /* We need to set the DECL_CONTEXT.  */
12851           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12852             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12853         }
12854       fntype = TREE_TYPE (decl1);
12855
12856       /* If #pragma weak applies, mark the decl appropriately now.
12857          The pragma only applies to global functions.  Because
12858          determining whether or not the #pragma applies involves
12859          computing the mangled name for the declaration, we cannot
12860          apply the pragma until after we have merged this declaration
12861          with any previous declarations; if the original declaration
12862          has a linkage specification, that specification applies to
12863          the definition as well, and may affect the mangled name.  */
12864       if (DECL_FILE_SCOPE_P (decl1))
12865         maybe_apply_pragma_weak (decl1);
12866     }
12867
12868   /* Reset this in case the call to pushdecl changed it.  */
12869   current_function_decl = decl1;
12870
12871   gcc_assert (DECL_INITIAL (decl1));
12872
12873   /* This function may already have been parsed, in which case just
12874      return; our caller will skip over the body without parsing.  */
12875   if (DECL_INITIAL (decl1) != error_mark_node)
12876     return;
12877
12878   /* Initialize RTL machinery.  We cannot do this until
12879      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12880      even when processing a template; this is how we get
12881      CFUN set up, and our per-function variables initialized.
12882      FIXME factor out the non-RTL stuff.  */
12883   bl = current_binding_level;
12884   allocate_struct_function (decl1, processing_template_decl);
12885
12886   /* Initialize the language data structures.  Whenever we start
12887      a new function, we destroy temporaries in the usual way.  */
12888   cfun->language = ggc_alloc_cleared_language_function ();
12889   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12890   current_binding_level = bl;
12891
12892   /* Start the statement-tree, start the tree now.  */
12893   DECL_SAVED_TREE (decl1) = push_stmt_list ();
12894
12895   /* If we are (erroneously) defining a function that we have already
12896      defined before, wipe out what we knew before.  */
12897   if (!DECL_PENDING_INLINE_P (decl1))
12898     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12899
12900   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12901     {
12902       /* We know that this was set up by `grokclassfn'.  We do not
12903          wait until `store_parm_decls', since evil parse errors may
12904          never get us to that point.  Here we keep the consistency
12905          between `current_class_type' and `current_class_ptr'.  */
12906       tree t = DECL_ARGUMENTS (decl1);
12907
12908       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12909       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12910
12911       cp_function_chain->x_current_class_ref
12912         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12913       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
12914       cp_function_chain->x_current_class_ptr = t;
12915
12916       /* Constructors and destructors need to know whether they're "in
12917          charge" of initializing virtual base classes.  */
12918       t = DECL_CHAIN (t);
12919       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12920         {
12921           current_in_charge_parm = t;
12922           t = DECL_CHAIN (t);
12923         }
12924       if (DECL_HAS_VTT_PARM_P (decl1))
12925         {
12926           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12927           current_vtt_parm = t;
12928         }
12929     }
12930
12931   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12932                      /* Implicitly-defined methods (like the
12933                         destructor for a class in which no destructor
12934                         is explicitly declared) must not be defined
12935                         until their definition is needed.  So, we
12936                         ignore interface specifications for
12937                         compiler-generated functions.  */
12938                      && !DECL_ARTIFICIAL (decl1));
12939
12940   if (processing_template_decl)
12941     /* Don't mess with interface flags.  */;
12942   else if (DECL_INTERFACE_KNOWN (decl1))
12943     {
12944       tree ctx = decl_function_context (decl1);
12945
12946       if (DECL_NOT_REALLY_EXTERN (decl1))
12947         DECL_EXTERNAL (decl1) = 0;
12948
12949       if (ctx != NULL_TREE && vague_linkage_p (ctx))
12950         /* This is a function in a local class in an extern inline
12951            or template function.  */
12952         comdat_linkage (decl1);
12953     }
12954   /* If this function belongs to an interface, it is public.
12955      If it belongs to someone else's interface, it is also external.
12956      This only affects inlines and template instantiations.  */
12957   else if (!finfo->interface_unknown && honor_interface)
12958     {
12959       if (DECL_DECLARED_INLINE_P (decl1)
12960           || DECL_TEMPLATE_INSTANTIATION (decl1))
12961         {
12962           DECL_EXTERNAL (decl1)
12963             = (finfo->interface_only
12964                || (DECL_DECLARED_INLINE_P (decl1)
12965                    && ! flag_implement_inlines
12966                    && !DECL_VINDEX (decl1)));
12967
12968           /* For WIN32 we also want to put these in linkonce sections.  */
12969           maybe_make_one_only (decl1);
12970         }
12971       else
12972         DECL_EXTERNAL (decl1) = 0;
12973       DECL_INTERFACE_KNOWN (decl1) = 1;
12974       /* If this function is in an interface implemented in this file,
12975          make sure that the back end knows to emit this function
12976          here.  */
12977       if (!DECL_EXTERNAL (decl1))
12978         mark_needed (decl1);
12979     }
12980   else if (finfo->interface_unknown && finfo->interface_only
12981            && honor_interface)
12982     {
12983       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12984          interface, we will have both finfo->interface_unknown and
12985          finfo->interface_only set.  In that case, we don't want to
12986          use the normal heuristics because someone will supply a
12987          #pragma implementation elsewhere, and deducing it here would
12988          produce a conflict.  */
12989       comdat_linkage (decl1);
12990       DECL_EXTERNAL (decl1) = 0;
12991       DECL_INTERFACE_KNOWN (decl1) = 1;
12992       DECL_DEFER_OUTPUT (decl1) = 1;
12993     }
12994   else
12995     {
12996       /* This is a definition, not a reference.
12997          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12998       if (!GNU_INLINE_P (decl1))
12999         DECL_EXTERNAL (decl1) = 0;
13000
13001       if ((DECL_DECLARED_INLINE_P (decl1)
13002            || DECL_TEMPLATE_INSTANTIATION (decl1))
13003           && ! DECL_INTERFACE_KNOWN (decl1))
13004         DECL_DEFER_OUTPUT (decl1) = 1;
13005       else
13006         DECL_INTERFACE_KNOWN (decl1) = 1;
13007     }
13008
13009   /* Determine the ELF visibility attribute for the function.  We must not
13010      do this before calling "pushdecl", as we must allow "duplicate_decls"
13011      to merge any attributes appropriately.  We also need to wait until
13012      linkage is set.  */
13013   if (!DECL_CLONED_FUNCTION_P (decl1))
13014     determine_visibility (decl1);
13015
13016   begin_scope (sk_function_parms, decl1);
13017
13018   ++function_depth;
13019
13020   if (DECL_DESTRUCTOR_P (decl1)
13021       || (DECL_CONSTRUCTOR_P (decl1)
13022           && targetm.cxx.cdtor_returns_this ()))
13023     {
13024       cdtor_label = build_decl (input_location, 
13025                                 LABEL_DECL, NULL_TREE, NULL_TREE);
13026       DECL_CONTEXT (cdtor_label) = current_function_decl;
13027     }
13028
13029   start_fname_decls ();
13030
13031   store_parm_decls (current_function_parms);
13032 }
13033
13034
13035 /* Like start_preparsed_function, except that instead of a
13036    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13037
13038    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13039    (it defines a datum instead), we return 0, which tells
13040    yyparse to report a parse error.  */
13041
13042 int
13043 start_function (cp_decl_specifier_seq *declspecs,
13044                 const cp_declarator *declarator,
13045                 tree attrs)
13046 {
13047   tree decl1;
13048
13049   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13050   if (decl1 == error_mark_node)
13051     return 0;
13052   /* If the declarator is not suitable for a function definition,
13053      cause a syntax error.  */
13054   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13055     {
13056       error ("invalid function declaration");
13057       return 0;
13058     }
13059
13060   if (DECL_MAIN_P (decl1))
13061     /* main must return int.  grokfndecl should have corrected it
13062        (and issued a diagnostic) if the user got it wrong.  */
13063     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13064                              integer_type_node));
13065
13066   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13067
13068   return 1;
13069 }
13070 \f
13071 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13072    FN.  */
13073
13074 static bool
13075 use_eh_spec_block (tree fn)
13076 {
13077   return (flag_exceptions && flag_enforce_eh_specs
13078           && !processing_template_decl
13079           && !type_throw_all_p (TREE_TYPE (fn))
13080           /* We insert the EH_SPEC_BLOCK only in the original
13081              function; then, it is copied automatically to the
13082              clones.  */
13083           && !DECL_CLONED_FUNCTION_P (fn)
13084           /* Implicitly-generated constructors and destructors have
13085              exception specifications.  However, those specifications
13086              are the union of the possible exceptions specified by the
13087              constructors/destructors for bases and members, so no
13088              unallowed exception will ever reach this function.  By
13089              not creating the EH_SPEC_BLOCK we save a little memory,
13090              and we avoid spurious warnings about unreachable
13091              code.  */
13092           && !DECL_DEFAULTED_FN (fn));
13093 }
13094
13095 /* Store the parameter declarations into the current function declaration.
13096    This is called after parsing the parameter declarations, before
13097    digesting the body of the function.
13098
13099    Also install to binding contour return value identifier, if any.  */
13100
13101 static void
13102 store_parm_decls (tree current_function_parms)
13103 {
13104   tree fndecl = current_function_decl;
13105   tree parm;
13106
13107   /* This is a chain of any other decls that came in among the parm
13108      declarations.  If a parm is declared with  enum {foo, bar} x;
13109      then CONST_DECLs for foo and bar are put here.  */
13110   tree nonparms = NULL_TREE;
13111
13112   if (current_function_parms)
13113     {
13114       /* This case is when the function was defined with an ANSI prototype.
13115          The parms already have decls, so we need not do anything here
13116          except record them as in effect
13117          and complain if any redundant old-style parm decls were written.  */
13118
13119       tree specparms = current_function_parms;
13120       tree next;
13121
13122       /* Must clear this because it might contain TYPE_DECLs declared
13123              at class level.  */
13124       current_binding_level->names = NULL;
13125
13126       /* If we're doing semantic analysis, then we'll call pushdecl
13127              for each of these.  We must do them in reverse order so that
13128              they end in the correct forward order.  */
13129       specparms = nreverse (specparms);
13130
13131       for (parm = specparms; parm; parm = next)
13132         {
13133           next = DECL_CHAIN (parm);
13134           if (TREE_CODE (parm) == PARM_DECL)
13135             {
13136               if (DECL_NAME (parm) == NULL_TREE
13137                   || TREE_CODE (parm) != VOID_TYPE)
13138                 pushdecl (parm);
13139               else
13140                 error ("parameter %qD declared void", parm);
13141             }
13142           else
13143             {
13144               /* If we find an enum constant or a type tag,
13145                  put it aside for the moment.  */
13146               TREE_CHAIN (parm) = NULL_TREE;
13147               nonparms = chainon (nonparms, parm);
13148             }
13149         }
13150
13151       /* Get the decls in their original chain order and record in the
13152          function.  This is all and only the PARM_DECLs that were
13153          pushed into scope by the loop above.  */
13154       DECL_ARGUMENTS (fndecl) = getdecls ();
13155     }
13156   else
13157     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13158
13159   /* Now store the final chain of decls for the arguments
13160      as the decl-chain of the current lexical scope.
13161      Put the enumerators in as well, at the front so that
13162      DECL_ARGUMENTS is not modified.  */
13163   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13164
13165   if (use_eh_spec_block (current_function_decl))
13166     current_eh_spec_block = begin_eh_spec_block ();
13167 }
13168
13169 \f
13170 /* We have finished doing semantic analysis on DECL, but have not yet
13171    generated RTL for its body.  Save away our current state, so that
13172    when we want to generate RTL later we know what to do.  */
13173
13174 static void
13175 save_function_data (tree decl)
13176 {
13177   struct language_function *f;
13178
13179   /* Save the language-specific per-function data so that we can
13180      get it back when we really expand this function.  */
13181   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13182
13183   /* Make a copy.  */
13184   f = ggc_alloc_language_function ();
13185   memcpy (f, cp_function_chain, sizeof (struct language_function));
13186   DECL_SAVED_FUNCTION_DATA (decl) = f;
13187
13188   /* Clear out the bits we don't need.  */
13189   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13190   f->bindings = NULL;
13191   f->x_local_names = NULL;
13192   f->base.local_typedefs = NULL;
13193 }
13194
13195
13196 /* Set the return value of the constructor (if present).  */
13197
13198 static void
13199 finish_constructor_body (void)
13200 {
13201   tree val;
13202   tree exprstmt;
13203
13204   if (targetm.cxx.cdtor_returns_this ()
13205       && (! TYPE_FOR_JAVA (current_class_type)))
13206     {
13207       /* Any return from a constructor will end up here.  */
13208       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13209
13210       val = DECL_ARGUMENTS (current_function_decl);
13211       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13212                     DECL_RESULT (current_function_decl), val);
13213       /* Return the address of the object.  */
13214       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13215       add_stmt (exprstmt);
13216     }
13217 }
13218
13219 /* Do all the processing for the beginning of a destructor; set up the
13220    vtable pointers and cleanups for bases and members.  */
13221
13222 static void
13223 begin_destructor_body (void)
13224 {
13225   tree compound_stmt;
13226
13227   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13228      issued an error message.  We still want to try to process the
13229      body of the function, but initialize_vtbl_ptrs will crash if
13230      TYPE_BINFO is NULL.  */
13231   if (COMPLETE_TYPE_P (current_class_type))
13232     {
13233       compound_stmt = begin_compound_stmt (0);
13234       /* Make all virtual function table pointers in non-virtual base
13235          classes point to CURRENT_CLASS_TYPE's virtual function
13236          tables.  */
13237       initialize_vtbl_ptrs (current_class_ptr);
13238       finish_compound_stmt (compound_stmt);
13239
13240       /* And insert cleanups for our bases and members so that they
13241          will be properly destroyed if we throw.  */
13242       push_base_cleanups ();
13243     }
13244 }
13245
13246 /* At the end of every destructor we generate code to delete the object if
13247    necessary.  Do that now.  */
13248
13249 static void
13250 finish_destructor_body (void)
13251 {
13252   tree exprstmt;
13253
13254   /* Any return from a destructor will end up here; that way all base
13255      and member cleanups will be run when the function returns.  */
13256   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13257
13258   /* In a virtual destructor, we must call delete.  */
13259   if (DECL_VIRTUAL_P (current_function_decl))
13260     {
13261       tree if_stmt;
13262       tree virtual_size = cxx_sizeof (current_class_type);
13263
13264       /* [class.dtor]
13265
13266       At the point of definition of a virtual destructor (including
13267       an implicit definition), non-placement operator delete shall
13268       be looked up in the scope of the destructor's class and if
13269       found shall be accessible and unambiguous.  */
13270       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13271                                       virtual_size,
13272                                       /*global_p=*/false,
13273                                       /*placement=*/NULL_TREE,
13274                                       /*alloc_fn=*/NULL_TREE);
13275
13276       if_stmt = begin_if_stmt ();
13277       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13278                                    current_in_charge_parm,
13279                                    integer_one_node),
13280                            if_stmt);
13281       finish_expr_stmt (exprstmt);
13282       finish_then_clause (if_stmt);
13283       finish_if_stmt (if_stmt);
13284     }
13285
13286   if (targetm.cxx.cdtor_returns_this ())
13287     {
13288       tree val;
13289
13290       val = DECL_ARGUMENTS (current_function_decl);
13291       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13292                     DECL_RESULT (current_function_decl), val);
13293       /* Return the address of the object.  */
13294       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13295       add_stmt (exprstmt);
13296     }
13297 }
13298
13299 /* Do the necessary processing for the beginning of a function body, which
13300    in this case includes member-initializers, but not the catch clauses of
13301    a function-try-block.  Currently, this means opening a binding level
13302    for the member-initializers (in a ctor), member cleanups (in a dtor),
13303    and capture proxies (in a lambda operator()).  */
13304
13305 tree
13306 begin_function_body (void)
13307 {
13308   tree stmt;
13309
13310   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13311     return NULL_TREE;
13312
13313   if (processing_template_decl)
13314     /* Do nothing now.  */;
13315   else
13316     /* Always keep the BLOCK node associated with the outermost pair of
13317        curly braces of a function.  These are needed for correct
13318        operation of dwarfout.c.  */
13319     keep_next_level (true);
13320
13321   stmt = begin_compound_stmt (BCS_FN_BODY);
13322
13323   if (processing_template_decl)
13324     /* Do nothing now.  */;
13325   else if (DECL_DESTRUCTOR_P (current_function_decl))
13326     begin_destructor_body ();
13327
13328   return stmt;
13329 }
13330
13331 /* Do the processing for the end of a function body.  Currently, this means
13332    closing out the cleanups for fully-constructed bases and members, and in
13333    the case of the destructor, deleting the object if desired.  Again, this
13334    is only meaningful for [cd]tors, since they are the only functions where
13335    there is a significant distinction between the main body and any
13336    function catch clauses.  Handling, say, main() return semantics here
13337    would be wrong, as flowing off the end of a function catch clause for
13338    main() would also need to return 0.  */
13339
13340 void
13341 finish_function_body (tree compstmt)
13342 {
13343   if (compstmt == NULL_TREE)
13344     return;
13345
13346   /* Close the block.  */
13347   finish_compound_stmt (compstmt);
13348
13349   if (processing_template_decl)
13350     /* Do nothing now.  */;
13351   else if (DECL_CONSTRUCTOR_P (current_function_decl))
13352     finish_constructor_body ();
13353   else if (DECL_DESTRUCTOR_P (current_function_decl))
13354     finish_destructor_body ();
13355 }
13356
13357 /* Given a function, returns the BLOCK corresponding to the outermost level
13358    of curly braces, skipping the artificial block created for constructor
13359    initializers.  */
13360
13361 tree
13362 outer_curly_brace_block (tree fndecl)
13363 {
13364   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13365   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13366     /* Skip the artificial function body block.  */
13367     block = BLOCK_SUBBLOCKS (block);
13368   return block;
13369 }
13370
13371 /* If FNDECL is a class's key method, add the class to the list of
13372    keyed classes that should be emitted.  */
13373
13374 static void
13375 record_key_method_defined (tree fndecl)
13376 {
13377   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13378       && DECL_VIRTUAL_P (fndecl)
13379       && !processing_template_decl)
13380     {
13381       tree fnclass = DECL_CONTEXT (fndecl);
13382       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13383         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13384     }
13385 }
13386
13387 /* Subroutine of finish_function.
13388    Save the body of constexpr functions for possible
13389    future compile time evaluation.  */
13390
13391 static void
13392 maybe_save_function_definition (tree fun)
13393 {
13394   if (!processing_template_decl
13395       && DECL_DECLARED_CONSTEXPR_P (fun)
13396       && !DECL_CLONED_FUNCTION_P (fun))
13397     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13398 }
13399
13400 /* Finish up a function declaration and compile that function
13401    all the way to assembler language output.  The free the storage
13402    for the function definition.
13403
13404    FLAGS is a bitwise or of the following values:
13405      2 - INCLASS_INLINE
13406        We just finished processing the body of an in-class inline
13407        function definition.  (This processing will have taken place
13408        after the class definition is complete.)  */
13409
13410 tree
13411 finish_function (int flags)
13412 {
13413   tree fndecl = current_function_decl;
13414   tree fntype, ctype = NULL_TREE;
13415   int inclass_inline = (flags & 2) != 0;
13416
13417   /* When we get some parse errors, we can end up without a
13418      current_function_decl, so cope.  */
13419   if (fndecl == NULL_TREE)
13420     return error_mark_node;
13421
13422   if (c_dialect_objc ())
13423     objc_finish_function ();
13424
13425   gcc_assert (!defer_mark_used_calls);
13426   defer_mark_used_calls = true;
13427
13428   record_key_method_defined (fndecl);
13429
13430   fntype = TREE_TYPE (fndecl);
13431
13432   /*  TREE_READONLY (fndecl) = 1;
13433       This caused &foo to be of type ptr-to-const-function
13434       which then got a warning when stored in a ptr-to-function variable.  */
13435
13436   gcc_assert (building_stmt_list_p ());
13437   /* The current function is being defined, so its DECL_INITIAL should
13438      be set, and unless there's a multiple definition, it should be
13439      error_mark_node.  */
13440   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13441
13442   /* For a cloned function, we've already got all the code we need;
13443      there's no need to add any extra bits.  */
13444   if (!DECL_CLONED_FUNCTION_P (fndecl))
13445     {
13446       if (DECL_MAIN_P (current_function_decl))
13447         {
13448           /* Make it so that `main' always returns 0 by default (or
13449              1 for VMS).  */
13450 #if VMS_TARGET
13451           finish_return_stmt (integer_one_node);
13452 #else
13453           finish_return_stmt (integer_zero_node);
13454 #endif
13455         }
13456
13457       if (use_eh_spec_block (current_function_decl))
13458         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13459                               (TREE_TYPE (current_function_decl)),
13460                               current_eh_spec_block);
13461     }
13462
13463   /* If we're saving up tree structure, tie off the function now.  */
13464   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13465
13466   finish_fname_decls ();
13467
13468   /* If this function can't throw any exceptions, remember that.  */
13469   if (!processing_template_decl
13470       && !cp_function_chain->can_throw
13471       && !flag_non_call_exceptions
13472       && !decl_replaceable_p (fndecl))
13473     TREE_NOTHROW (fndecl) = 1;
13474
13475   /* This must come after expand_function_end because cleanups might
13476      have declarations (from inline functions) that need to go into
13477      this function's blocks.  */
13478
13479   /* If the current binding level isn't the outermost binding level
13480      for this function, either there is a bug, or we have experienced
13481      syntax errors and the statement tree is malformed.  */
13482   if (current_binding_level->kind != sk_function_parms)
13483     {
13484       /* Make sure we have already experienced errors.  */
13485       gcc_assert (errorcount);
13486
13487       /* Throw away the broken statement tree and extra binding
13488          levels.  */
13489       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13490
13491       while (current_binding_level->kind != sk_function_parms)
13492         {
13493           if (current_binding_level->kind == sk_class)
13494             pop_nested_class ();
13495           else
13496             poplevel (0, 0, 0);
13497         }
13498     }
13499   poplevel (1, 0, 1);
13500
13501   /* Statements should always be full-expressions at the outermost set
13502      of curly braces for a function.  */
13503   gcc_assert (stmts_are_full_exprs_p ());
13504
13505   /* Save constexpr function body before it gets munged by
13506      the NRV transformation.   */
13507   maybe_save_function_definition (fndecl);
13508
13509   /* Set up the named return value optimization, if we can.  Candidate
13510      variables are selected in check_return_expr.  */
13511   if (current_function_return_value)
13512     {
13513       tree r = current_function_return_value;
13514       tree outer;
13515
13516       if (r != error_mark_node
13517           /* This is only worth doing for fns that return in memory--and
13518              simpler, since we don't have to worry about promoted modes.  */
13519           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13520           /* Only allow this for variables declared in the outer scope of
13521              the function so we know that their lifetime always ends with a
13522              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13523              we were to do this optimization in tree-ssa.  */
13524           && (outer = outer_curly_brace_block (fndecl))
13525           && chain_member (r, BLOCK_VARS (outer)))
13526         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13527
13528       current_function_return_value = NULL_TREE;
13529     }
13530
13531   /* Remember that we were in class scope.  */
13532   if (current_class_name)
13533     ctype = current_class_type;
13534
13535   /* Must mark the RESULT_DECL as being in this function.  */
13536   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13537
13538   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13539      to the FUNCTION_DECL node itself.  */
13540   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13541
13542   /* Save away current state, if appropriate.  */
13543   if (!processing_template_decl)
13544     save_function_data (fndecl);
13545
13546   /* Complain if there's just no return statement.  */
13547   if (warn_return_type
13548       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13549       && !dependent_type_p (TREE_TYPE (fntype))
13550       && !current_function_returns_value && !current_function_returns_null
13551       /* Don't complain if we abort or throw.  */
13552       && !current_function_returns_abnormally
13553       /* Don't complain if we are declared noreturn.  */
13554       && !TREE_THIS_VOLATILE (fndecl)
13555       && !DECL_NAME (DECL_RESULT (fndecl))
13556       && !TREE_NO_WARNING (fndecl)
13557       /* Structor return values (if any) are set by the compiler.  */
13558       && !DECL_CONSTRUCTOR_P (fndecl)
13559       && !DECL_DESTRUCTOR_P (fndecl))
13560     {
13561       warning (OPT_Wreturn_type,
13562                "no return statement in function returning non-void");
13563       TREE_NO_WARNING (fndecl) = 1;
13564     }
13565
13566   /* Store the end of the function, so that we get good line number
13567      info for the epilogue.  */
13568   cfun->function_end_locus = input_location;
13569
13570   /* Complain about parameters that are only set, but never otherwise used.  */
13571   if (warn_unused_but_set_parameter
13572       && !processing_template_decl
13573       && errorcount == unused_but_set_errorcount
13574       && !DECL_CLONED_FUNCTION_P (fndecl))
13575     {
13576       tree decl;
13577
13578       for (decl = DECL_ARGUMENTS (fndecl);
13579            decl;
13580            decl = DECL_CHAIN (decl))
13581         if (TREE_USED (decl)
13582             && TREE_CODE (decl) == PARM_DECL
13583             && !DECL_READ_P (decl)
13584             && DECL_NAME (decl)
13585             && !DECL_ARTIFICIAL (decl)
13586             && !TREE_NO_WARNING (decl)
13587             && !DECL_IN_SYSTEM_HEADER (decl)
13588             && TREE_TYPE (decl) != error_mark_node
13589             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13590             && (!CLASS_TYPE_P (TREE_TYPE (decl))
13591                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13592           warning (OPT_Wunused_but_set_parameter,
13593                    "parameter %q+D set but not used", decl);
13594       unused_but_set_errorcount = errorcount;
13595     }
13596
13597   /* Complain about locally defined typedefs that are not used in this
13598      function.  */
13599   maybe_warn_unused_local_typedefs ();
13600
13601   /* Genericize before inlining.  */
13602   if (!processing_template_decl)
13603     {
13604       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13605       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13606       cp_genericize (fndecl);
13607       /* Clear out the bits we don't need.  */
13608       f->x_current_class_ptr = NULL;
13609       f->x_current_class_ref = NULL;
13610       f->x_eh_spec_block = NULL;
13611       f->x_in_charge_parm = NULL;
13612       f->x_vtt_parm = NULL;
13613       f->x_return_value = NULL;
13614       f->bindings = NULL;
13615       f->extern_decl_map = NULL;
13616     }
13617   /* Clear out the bits we don't need.  */
13618   local_names = NULL;
13619
13620   /* We're leaving the context of this function, so zap cfun.  It's still in
13621      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13622   set_cfun (NULL);
13623   current_function_decl = NULL;
13624
13625   /* If this is an in-class inline definition, we may have to pop the
13626      bindings for the template parameters that we added in
13627      maybe_begin_member_template_processing when start_function was
13628      called.  */
13629   if (inclass_inline)
13630     maybe_end_member_template_processing ();
13631
13632   /* Leave the scope of the class.  */
13633   if (ctype)
13634     pop_nested_class ();
13635
13636   --function_depth;
13637
13638   /* Clean up.  */
13639   current_function_decl = NULL_TREE;
13640
13641   defer_mark_used_calls = false;
13642   if (deferred_mark_used_calls)
13643     {
13644       unsigned int i;
13645       tree decl;
13646
13647       FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13648         mark_used (decl);
13649       VEC_free (tree, gc, deferred_mark_used_calls);
13650     }
13651
13652   return fndecl;
13653 }
13654 \f
13655 /* Create the FUNCTION_DECL for a function definition.
13656    DECLSPECS and DECLARATOR are the parts of the declaration;
13657    they describe the return type and the name of the function,
13658    but twisted together in a fashion that parallels the syntax of C.
13659
13660    This function creates a binding context for the function body
13661    as well as setting up the FUNCTION_DECL in current_function_decl.
13662
13663    Returns a FUNCTION_DECL on success.
13664
13665    If the DECLARATOR is not suitable for a function (it defines a datum
13666    instead), we return 0, which tells yyparse to report a parse error.
13667
13668    May return void_type_node indicating that this method is actually
13669    a friend.  See grokfield for more details.
13670
13671    Came here with a `.pushlevel' .
13672
13673    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13674    CHANGES TO CODE IN `grokfield'.  */
13675
13676 tree
13677 grokmethod (cp_decl_specifier_seq *declspecs,
13678             const cp_declarator *declarator, tree attrlist)
13679 {
13680   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13681                                 &attrlist);
13682
13683   if (fndecl == error_mark_node)
13684     return error_mark_node;
13685
13686   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13687     {
13688       error ("invalid member function declaration");
13689       return error_mark_node;
13690     }
13691
13692   if (attrlist)
13693     cplus_decl_attributes (&fndecl, attrlist, 0);
13694
13695   /* Pass friends other than inline friend functions back.  */
13696   if (fndecl == void_type_node)
13697     return fndecl;
13698
13699   if (DECL_IN_AGGR_P (fndecl))
13700     {
13701       if (DECL_CLASS_SCOPE_P (fndecl))
13702         error ("%qD is already defined in class %qT", fndecl,
13703                DECL_CONTEXT (fndecl));
13704       return error_mark_node;
13705     }
13706
13707   check_template_shadow (fndecl);
13708
13709   DECL_DECLARED_INLINE_P (fndecl) = 1;
13710   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13711
13712   /* We process method specializations in finish_struct_1.  */
13713   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13714     {
13715       fndecl = push_template_decl (fndecl);
13716       if (fndecl == error_mark_node)
13717         return fndecl;
13718     }
13719
13720   if (! DECL_FRIEND_P (fndecl))
13721     {
13722       if (DECL_CHAIN (fndecl))
13723         {
13724           fndecl = copy_node (fndecl);
13725           TREE_CHAIN (fndecl) = NULL_TREE;
13726         }
13727     }
13728
13729   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13730
13731   DECL_IN_AGGR_P (fndecl) = 1;
13732   return fndecl;
13733 }
13734 \f
13735
13736 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13737    we can lay it out later, when and if its type becomes complete.  */
13738
13739 void
13740 maybe_register_incomplete_var (tree var)
13741 {
13742   gcc_assert (TREE_CODE (var) == VAR_DECL);
13743
13744   /* Keep track of variables with incomplete types.  */
13745   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13746       && DECL_EXTERNAL (var))
13747     {
13748       tree inner_type = TREE_TYPE (var);
13749
13750       while (TREE_CODE (inner_type) == ARRAY_TYPE)
13751         inner_type = TREE_TYPE (inner_type);
13752       inner_type = TYPE_MAIN_VARIANT (inner_type);
13753
13754       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13755           /* RTTI TD entries are created while defining the type_info.  */
13756           || (TYPE_LANG_SPECIFIC (inner_type)
13757               && TYPE_BEING_DEFINED (inner_type)))
13758         {
13759           incomplete_var *iv
13760             = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13761           iv->decl = var;
13762           iv->incomplete_type = inner_type;
13763         }
13764     }
13765 }
13766
13767 /* Called when a class type (given by TYPE) is defined.  If there are
13768    any existing VAR_DECLs whose type has been completed by this
13769    declaration, update them now.  */
13770
13771 void
13772 complete_vars (tree type)
13773 {
13774   unsigned ix;
13775   incomplete_var *iv;
13776
13777   for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13778     {
13779       if (same_type_p (type, iv->incomplete_type))
13780         {
13781           tree var = iv->decl;
13782           tree type = TREE_TYPE (var);
13783           /* Complete the type of the variable.  The VAR_DECL itself
13784              will be laid out in expand_expr.  */
13785           complete_type (type);
13786           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13787           /* Remove this entry from the list.  */
13788           VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13789         }
13790       else
13791         ix++;
13792     }
13793
13794   /* Check for pending declarations which may have abstract type.  */
13795   complete_type_check_abstract (type);
13796 }
13797
13798 /* If DECL is of a type which needs a cleanup, build and return an
13799    expression to perform that cleanup here.  Return NULL_TREE if no
13800    cleanup need be done.  */
13801
13802 tree
13803 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13804 {
13805   tree type;
13806   tree attr;
13807   tree cleanup;
13808
13809   /* Assume no cleanup is required.  */
13810   cleanup = NULL_TREE;
13811
13812   if (error_operand_p (decl))
13813     return cleanup;
13814
13815   /* Handle "__attribute__((cleanup))".  We run the cleanup function
13816      before the destructor since the destructor is what actually
13817      terminates the lifetime of the object.  */
13818   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13819   if (attr)
13820     {
13821       tree id;
13822       tree fn;
13823       tree arg;
13824
13825       /* Get the name specified by the user for the cleanup function.  */
13826       id = TREE_VALUE (TREE_VALUE (attr));
13827       /* Look up the name to find the cleanup function to call.  It is
13828          important to use lookup_name here because that is what is
13829          used in c-common.c:handle_cleanup_attribute when performing
13830          initial checks on the attribute.  Note that those checks
13831          include ensuring that the function found is not an overloaded
13832          function, or an object with an overloaded call operator,
13833          etc.; we can rely on the fact that the function found is an
13834          ordinary FUNCTION_DECL.  */
13835       fn = lookup_name (id);
13836       arg = build_address (decl);
13837       mark_used (decl);
13838       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13839       if (cleanup == error_mark_node)
13840         return error_mark_node;
13841     }
13842   /* Handle ordinary C++ destructors.  */
13843   type = TREE_TYPE (decl);
13844   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13845     {
13846       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13847       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13848                          && CLASSTYPE_VBASECLASSES (type));
13849       tree addr;
13850       tree call;
13851
13852       if (TREE_CODE (type) == ARRAY_TYPE)
13853         addr = decl;
13854       else
13855         addr = build_address (decl);
13856
13857       /* Optimize for space over speed here.  */
13858       if (!has_vbases || flag_expensive_optimizations)
13859         flags |= LOOKUP_NONVIRTUAL;
13860
13861       call = build_delete (TREE_TYPE (addr), addr,
13862                            sfk_complete_destructor, flags, 0, complain);
13863       if (call == error_mark_node)
13864         cleanup = error_mark_node;
13865       else if (cleanup)
13866         cleanup = cp_build_compound_expr (cleanup, call, complain);
13867       else
13868         cleanup = call;
13869     }
13870
13871   /* build_delete sets the location of the destructor call to the
13872      current location, even though the destructor is going to be
13873      called later, at the end of the current scope.  This can lead to
13874      a "jumpy" behaviour for users of debuggers when they step around
13875      the end of the block.  So let's unset the location of the
13876      destructor call instead.  */
13877   if (cleanup != NULL && EXPR_P (cleanup))
13878     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
13879   return cleanup;
13880 }
13881
13882 \f
13883 /* When a stmt has been parsed, this function is called.  */
13884
13885 void
13886 finish_stmt (void)
13887 {
13888 }
13889
13890 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13891    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13892    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13893
13894 tree
13895 static_fn_type (tree memfntype)
13896 {
13897   tree fntype;
13898   tree args;
13899
13900   if (TYPE_PTRMEMFUNC_P (memfntype))
13901     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13902   if (POINTER_TYPE_P (memfntype)
13903       || TREE_CODE (memfntype) == FUNCTION_DECL)
13904     memfntype = TREE_TYPE (memfntype);
13905   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13906     return memfntype;
13907   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13908   args = TYPE_ARG_TYPES (memfntype);
13909   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13910   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13911   fntype = (cp_build_type_attribute_variant
13912             (fntype, TYPE_ATTRIBUTES (memfntype)));
13913   fntype = (build_exception_variant
13914             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13915   return fntype;
13916 }
13917
13918 /* DECL was originally constructed as a non-static member function,
13919    but turned out to be static.  Update it accordingly.  */
13920
13921 void
13922 revert_static_member_fn (tree decl)
13923 {
13924   tree stype = static_fn_type (decl);
13925   cp_cv_quals quals = type_memfn_quals (stype);
13926
13927   if (quals != TYPE_UNQUALIFIED)
13928     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13929
13930   TREE_TYPE (decl) = stype;
13931
13932   if (DECL_ARGUMENTS (decl))
13933     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13934   DECL_STATIC_FUNCTION_P (decl) = 1;
13935 }
13936
13937 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13938    one of the language-independent trees.  */
13939
13940 enum cp_tree_node_structure_enum
13941 cp_tree_node_structure (union lang_tree_node * t)
13942 {
13943   switch (TREE_CODE (&t->generic))
13944     {
13945     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
13946     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
13947     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
13948     case OVERLOAD:              return TS_CP_OVERLOAD;
13949     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
13950     case PTRMEM_CST:            return TS_CP_PTRMEM;
13951     case BASELINK:              return TS_CP_BASELINK;
13952     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
13953     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13954     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
13955     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
13956     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
13957     case USERDEF_LITERAL:       return TS_CP_USERDEF_LITERAL;
13958     default:                    return TS_CP_GENERIC;
13959     }
13960 }
13961
13962 /* Build the void_list_node (void_type_node having been created).  */
13963 tree
13964 build_void_list_node (void)
13965 {
13966   tree t = build_tree_list (NULL_TREE, void_type_node);
13967   return t;
13968 }
13969
13970 bool
13971 cp_missing_noreturn_ok_p (tree decl)
13972 {
13973   /* A missing noreturn is ok for the `main' function.  */
13974   return DECL_MAIN_P (decl);
13975 }
13976
13977 /* Return the COMDAT group into which DECL should be placed.  */
13978
13979 tree
13980 cxx_comdat_group (tree decl)
13981 {
13982   tree name;
13983
13984   /* Virtual tables, construction virtual tables, and virtual table
13985      tables all go in a single COMDAT group, named after the primary
13986      virtual table.  */
13987   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13988     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13989   /* For all other DECLs, the COMDAT group is the mangled name of the
13990      declaration itself.  */
13991   else
13992     {
13993       while (DECL_THUNK_P (decl))
13994         {
13995           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13996              into the same section as the target function.  In that case
13997              we must return target's name.  */
13998           tree target = THUNK_TARGET (decl);
13999           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
14000               && DECL_SECTION_NAME (target) != NULL
14001               && DECL_ONE_ONLY (target))
14002             decl = target;
14003           else
14004             break;
14005         }
14006       name = DECL_ASSEMBLER_NAME (decl);
14007     }
14008
14009   return name;
14010 }
14011
14012 #include "gt-cp-decl.h"