OSDN Git Service

572efcd35c7a48c8d5ef693ca82231bb4eb86a52
[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_LANG_SPECIFIC (t))
921             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
922           else
923             DECL_DISCRIMINATOR (decl) = 1;
924
925           VEC_replace (tree, local_names, i, decl);
926           timevar_stop (TV_NAME_LOOKUP);
927           return;
928         }
929     }
930
931   VEC_safe_push (tree, gc, local_names, decl);
932   timevar_stop (TV_NAME_LOOKUP);
933 }
934 \f
935 /* Subroutine of duplicate_decls: return truthvalue of whether
936    or not types of these decls match.
937
938    For C++, we must compare the parameter list so that `int' can match
939    `int&' in a parameter position, but `int&' is not confused with
940    `const int&'.  */
941
942 int
943 decls_match (tree newdecl, tree olddecl)
944 {
945   int types_match;
946
947   if (newdecl == olddecl)
948     return 1;
949
950   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
951     /* If the two DECLs are not even the same kind of thing, we're not
952        interested in their types.  */
953     return 0;
954
955   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       /* If merge_types produces a non-typedef type, just use the old type.  */
1819       if (TREE_CODE (newdecl) == TYPE_DECL
1820           && newtype == DECL_ORIGINAL_TYPE (newdecl))
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         {
5561           init_code = build_aggr_init_full_exprs (decl, init, flags);
5562
5563           /* If this is a constexpr initializer, expand_default_init will
5564              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5565              case, pull the initializer back out and pass it down into
5566              store_init_value.  */
5567           while (TREE_CODE (init_code) == EXPR_STMT
5568                  || TREE_CODE (init_code) == CONVERT_EXPR)
5569             init_code = TREE_OPERAND (init_code, 0);
5570           if (TREE_CODE (init_code) == INIT_EXPR)
5571             {
5572               init = TREE_OPERAND (init_code, 1);
5573               init_code = NULL_TREE;
5574               /* Don't call digest_init; it's unnecessary and will complain
5575                  about aggregate initialization of non-aggregate classes.  */
5576               flags |= LOOKUP_ALREADY_DIGESTED;
5577             }
5578           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5579             {
5580               /* Declared constexpr, but no suitable initializer; massage
5581                  init appropriately so we can pass it into store_init_value
5582                  for the error.  */
5583               if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5584                 init = finish_compound_literal (type, init,
5585                                                 tf_warning_or_error);
5586               else if (CLASS_TYPE_P (type)
5587                        && (!init || TREE_CODE (init) == TREE_LIST))
5588                 {
5589                   init = build_functional_cast (type, init, tf_none);
5590                   if (init != error_mark_node)
5591                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5592                 }
5593               init_code = NULL_TREE;
5594             }
5595           else
5596             init = NULL_TREE;
5597         }
5598
5599       if (init && TREE_CODE (init) != TREE_VEC)
5600         {
5601           /* In aggregate initialization of a variable, each element
5602              initialization is a full-expression because there is no
5603              enclosing expression.  */
5604           gcc_assert (stmts_are_full_exprs_p ());
5605
5606           init_code = store_init_value (decl, init, cleanups, flags);
5607
5608           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5609               && DECL_INITIAL (decl)
5610               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5611               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5612             warning (0, "array %qD initialized by parenthesized string literal %qE",
5613                      decl, DECL_INITIAL (decl));
5614           init = NULL;
5615         }
5616     }
5617   else
5618     {
5619       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5620           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5621               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5622         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5623                                                   /*complain=*/true);
5624
5625       check_for_uninitialized_const_var (decl);
5626     }
5627
5628   if (init && init != error_mark_node)
5629     init_code = build2 (INIT_EXPR, type, decl, init);
5630
5631   if (extra_init)
5632     init_code = add_stmt_to_compound (extra_init, init_code);
5633
5634   if (init_code && DECL_IN_AGGR_P (decl))
5635     {
5636       static int explained = 0;
5637
5638       if (cxx_dialect < cxx0x)
5639         error ("initializer invalid for static member with constructor");
5640       else
5641         error ("non-constant in-class initialization invalid for static "
5642                "member %qD", decl);
5643       if (!explained)
5644         {
5645           error ("(an out of class initialization is required)");
5646           explained = 1;
5647         }
5648     }
5649
5650   return init_code;
5651 }
5652
5653 /* If DECL is not a local variable, give it RTL.  */
5654
5655 static void
5656 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5657 {
5658   int toplev = toplevel_bindings_p ();
5659   int defer_p;
5660   const char *filename;
5661
5662   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5663   if (asmspec)
5664     {
5665       /* The `register' keyword, when used together with an
5666          asm-specification, indicates that the variable should be
5667          placed in a particular register.  */
5668       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5669         {
5670           set_user_assembler_name (decl, asmspec);
5671           DECL_HARD_REGISTER (decl) = 1;
5672         }
5673       else
5674         {
5675           if (TREE_CODE (decl) == FUNCTION_DECL
5676               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5677             set_builtin_user_assembler_name (decl, asmspec);
5678           set_user_assembler_name (decl, asmspec);
5679         }
5680     }
5681
5682   /* Handle non-variables up front.  */
5683   if (TREE_CODE (decl) != VAR_DECL)
5684     {
5685       rest_of_decl_compilation (decl, toplev, at_eof);
5686       return;
5687     }
5688
5689   /* If we see a class member here, it should be a static data
5690      member.  */
5691   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5692     {
5693       gcc_assert (TREE_STATIC (decl));
5694       /* An in-class declaration of a static data member should be
5695          external; it is only a declaration, and not a definition.  */
5696       if (init == NULL_TREE)
5697         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5698     }
5699
5700   /* We don't create any RTL for local variables.  */
5701   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5702     return;
5703
5704   /* We defer emission of local statics until the corresponding
5705      DECL_EXPR is expanded.  */
5706   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5707
5708   /* We try to defer namespace-scope static constants so that they are
5709      not emitted into the object file unnecessarily.  */
5710   filename = input_filename;
5711   if (!DECL_VIRTUAL_P (decl)
5712       && TREE_READONLY (decl)
5713       && DECL_INITIAL (decl) != NULL_TREE
5714       && DECL_INITIAL (decl) != error_mark_node
5715       && filename != NULL
5716       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5717       && toplev
5718       && !TREE_PUBLIC (decl))
5719     {
5720       /* Fool with the linkage of static consts according to #pragma
5721          interface.  */
5722       struct c_fileinfo *finfo = get_fileinfo (filename);
5723       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5724         {
5725           TREE_PUBLIC (decl) = 1;
5726           DECL_EXTERNAL (decl) = finfo->interface_only;
5727         }
5728
5729       defer_p = 1;
5730     }
5731   /* Likewise for template instantiations.  */
5732   else if (DECL_LANG_SPECIFIC (decl)
5733            && DECL_IMPLICIT_INSTANTIATION (decl))
5734     defer_p = 1;
5735
5736   /* If we're not deferring, go ahead and assemble the variable.  */
5737   if (!defer_p)
5738     rest_of_decl_compilation (decl, toplev, at_eof);
5739 }
5740
5741 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5742
5743 static tree
5744 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5745 {
5746   /* Stop at types or full-expression boundaries.  */
5747   if (TYPE_P (*stmt_p)
5748       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
5749     {
5750       *walk_subtrees = 0;
5751       return NULL_TREE;
5752     }
5753
5754   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5755     {
5756       tree guard = (tree)data;
5757       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5758
5759       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5760       /* Tell honor_protect_cleanup_actions to handle this as a separate
5761          cleanup.  */
5762       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5763  
5764       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5765     }
5766
5767   return NULL_TREE;
5768 }
5769
5770 /* We're initializing a local variable which has a cleanup GUARD.  If there
5771    are any temporaries used in the initializer INIT of this variable, we
5772    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5773    variable will be cleaned up properly if one of them throws.
5774
5775    Unfortunately, there's no way to express this properly in terms of
5776    nesting, as the regions for the temporaries overlap the region for the
5777    variable itself; if there are two temporaries, the variable needs to be
5778    the first thing destroyed if either of them throws.  However, we only
5779    want to run the variable's cleanup if it actually got constructed.  So
5780    we need to guard the temporary cleanups with the variable's cleanup if
5781    they are run on the normal path, but not if they are run on the
5782    exceptional path.  We implement this by telling
5783    honor_protect_cleanup_actions to strip the variable cleanup from the
5784    exceptional path.  */
5785
5786 static void
5787 wrap_temporary_cleanups (tree init, tree guard)
5788 {
5789   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5790 }
5791
5792 /* Generate code to initialize DECL (a local variable).  */
5793
5794 static void
5795 initialize_local_var (tree decl, tree init)
5796 {
5797   tree type = TREE_TYPE (decl);
5798   tree cleanup;
5799   int already_used;
5800
5801   gcc_assert (TREE_CODE (decl) == VAR_DECL
5802               || TREE_CODE (decl) == RESULT_DECL);
5803   gcc_assert (!TREE_STATIC (decl));
5804
5805   if (DECL_SIZE (decl) == NULL_TREE)
5806     {
5807       /* If we used it already as memory, it must stay in memory.  */
5808       DECL_INITIAL (decl) = NULL_TREE;
5809       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5810       return;
5811     }
5812
5813   if (type == error_mark_node)
5814     return;
5815
5816   /* Compute and store the initial value.  */
5817   already_used = TREE_USED (decl) || TREE_USED (type);
5818   if (TREE_USED (type))
5819     DECL_READ_P (decl) = 1;
5820
5821   /* Generate a cleanup, if necessary.  */
5822   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5823
5824   /* Perform the initialization.  */
5825   if (init)
5826     {
5827       if (TREE_CODE (init) == INIT_EXPR
5828           && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5829         {
5830           /* Stick simple initializers in DECL_INITIAL so that
5831              -Wno-init-self works (c++/34772).  */
5832           gcc_assert (TREE_OPERAND (init, 0) == decl);
5833           DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5834         }
5835       else
5836         {
5837           int saved_stmts_are_full_exprs_p;
5838
5839           /* If we're only initializing a single object, guard the
5840              destructors of any temporaries used in its initializer with
5841              its destructor.  This isn't right for arrays because each
5842              element initialization is a full-expression.  */
5843           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5844             wrap_temporary_cleanups (init, cleanup);
5845
5846           gcc_assert (building_stmt_list_p ());
5847           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5848           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5849           finish_expr_stmt (init);
5850           current_stmt_tree ()->stmts_are_full_exprs_p =
5851             saved_stmts_are_full_exprs_p;
5852         }
5853     }
5854
5855   /* Set this to 0 so we can tell whether an aggregate which was
5856      initialized was ever used.  Don't do this if it has a
5857      destructor, so we don't complain about the 'resource
5858      allocation is initialization' idiom.  Now set
5859      attribute((unused)) on types so decls of that type will be
5860      marked used. (see TREE_USED, above.)  */
5861   if (TYPE_NEEDS_CONSTRUCTING (type)
5862       && ! already_used
5863       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5864       && DECL_NAME (decl))
5865     TREE_USED (decl) = 0;
5866   else if (already_used)
5867     TREE_USED (decl) = 1;
5868
5869   if (cleanup)
5870     finish_decl_cleanup (decl, cleanup);
5871 }
5872
5873 /* DECL is a VAR_DECL for a compiler-generated variable with static
5874    storage duration (like a virtual table) whose initializer is a
5875    compile-time constant.  Initialize the variable and provide it to the
5876    back end.  */
5877
5878 void
5879 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5880 {
5881   tree init;
5882   gcc_assert (DECL_ARTIFICIAL (decl));
5883   init = build_constructor (TREE_TYPE (decl), v);
5884   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5885   DECL_INITIAL (decl) = init;
5886   DECL_INITIALIZED_P (decl) = 1;
5887   determine_visibility (decl);
5888   layout_var_decl (decl);
5889   maybe_commonize_var (decl);
5890   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5891 }
5892
5893 /* INIT is the initializer for a variable, as represented by the
5894    parser.  Returns true iff INIT is type-dependent.  */
5895
5896 static bool
5897 type_dependent_init_p (tree init)
5898 {
5899   if (TREE_CODE (init) == TREE_LIST)
5900     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5901     return any_type_dependent_elements_p (init);
5902   else if (TREE_CODE (init) == CONSTRUCTOR)
5903   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5904     {
5905       VEC(constructor_elt, gc) *elts;
5906       size_t nelts;
5907       size_t i;
5908
5909       elts = CONSTRUCTOR_ELTS (init);
5910       nelts = VEC_length (constructor_elt, elts);
5911       for (i = 0; i < nelts; ++i)
5912         if (type_dependent_init_p (VEC_index (constructor_elt,
5913                                               elts, i)->value))
5914           return true;
5915     }
5916   else
5917     /* It must be a simple expression, e.g., int i = 3;  */
5918     return type_dependent_expression_p (init);
5919
5920   return false;
5921 }
5922
5923 /* INIT is the initializer for a variable, as represented by the
5924    parser.  Returns true iff INIT is value-dependent.  */
5925
5926 static bool
5927 value_dependent_init_p (tree init)
5928 {
5929   if (TREE_CODE (init) == TREE_LIST)
5930     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5931     return any_value_dependent_elements_p (init);
5932   else if (TREE_CODE (init) == CONSTRUCTOR)
5933   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5934     {
5935       VEC(constructor_elt, gc) *elts;
5936       size_t nelts;
5937       size_t i;
5938
5939       elts = CONSTRUCTOR_ELTS (init);
5940       nelts = VEC_length (constructor_elt, elts);
5941       for (i = 0; i < nelts; ++i)
5942         if (value_dependent_init_p (VEC_index (constructor_elt,
5943                                                elts, i)->value))
5944           return true;
5945     }
5946   else
5947     /* It must be a simple expression, e.g., int i = 3;  */
5948     return value_dependent_expression_p (init);
5949   
5950   return false;
5951 }
5952
5953 /* Finish processing of a declaration;
5954    install its line number and initial value.
5955    If the length of an array type is not known before,
5956    it must be determined now, from the initial value, or it is an error.
5957
5958    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5959    true, then INIT is an integral constant expression.
5960
5961    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5962    if the (init) syntax was used.  */
5963
5964 void
5965 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5966                 tree asmspec_tree, int flags)
5967 {
5968   tree type;
5969   VEC(tree,gc) *cleanups = NULL;
5970   const char *asmspec = NULL;
5971   int was_readonly = 0;
5972   bool var_definition_p = false;
5973   tree auto_node;
5974
5975   if (decl == error_mark_node)
5976     return;
5977   else if (! decl)
5978     {
5979       if (init)
5980         error ("assignment (not initialization) in declaration");
5981       return;
5982     }
5983
5984   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5985   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5986   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5987
5988   type = TREE_TYPE (decl);
5989   if (type == error_mark_node)
5990     return;
5991
5992   /* If a name was specified, get the string.  */
5993   if (at_namespace_scope_p ())
5994     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5995   if (asmspec_tree && asmspec_tree != error_mark_node)
5996     asmspec = TREE_STRING_POINTER (asmspec_tree);
5997
5998   if (current_class_type
5999       && CP_DECL_CONTEXT (decl) == current_class_type
6000       && TYPE_BEING_DEFINED (current_class_type)
6001       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6002       && (DECL_INITIAL (decl) || init))
6003     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6004
6005   auto_node = type_uses_auto (type);
6006   if (auto_node)
6007     {
6008       tree d_init;
6009       if (init == NULL_TREE)
6010         {
6011           error ("declaration of %q#D has no initializer", decl);
6012           TREE_TYPE (decl) = error_mark_node;
6013           return;
6014         }
6015       d_init = init;
6016       if (TREE_CODE (d_init) == TREE_LIST)
6017         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6018                                                   tf_warning_or_error);
6019       d_init = resolve_nondeduced_context (d_init);
6020       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
6021                                                    auto_node);
6022       if (type == error_mark_node)
6023         return;
6024     }
6025
6026   if (!ensure_literal_type_for_constexpr_object (decl))
6027     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6028
6029   if (TREE_CODE (decl) == VAR_DECL
6030       && DECL_CLASS_SCOPE_P (decl)
6031       && DECL_INITIALIZED_IN_CLASS_P (decl))
6032     check_static_variable_definition (decl, type);
6033
6034   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6035     {
6036       tree clone;
6037       if (init == ridpointers[(int)RID_DELETE])
6038         {
6039           /* FIXME check this is 1st decl.  */
6040           DECL_DELETED_FN (decl) = 1;
6041           DECL_DECLARED_INLINE_P (decl) = 1;
6042           DECL_INITIAL (decl) = error_mark_node;
6043           FOR_EACH_CLONE (clone, decl)
6044             {
6045               DECL_DELETED_FN (clone) = 1;
6046               DECL_DECLARED_INLINE_P (clone) = 1;
6047               DECL_INITIAL (clone) = error_mark_node;
6048             }
6049           init = NULL_TREE;
6050         }
6051       else if (init == ridpointers[(int)RID_DEFAULT])
6052         {
6053           if (defaultable_fn_check (decl))
6054             DECL_DEFAULTED_FN (decl) = 1;
6055           else
6056             DECL_INITIAL (decl) = NULL_TREE;
6057         }
6058     }
6059
6060   if (init && TREE_CODE (decl) == VAR_DECL)
6061     {
6062       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6063       /* If DECL is a reference, then we want to know whether init is a
6064          reference constant; init_const_expr_p as passed tells us whether
6065          it's an rvalue constant.  */
6066       if (TREE_CODE (type) == REFERENCE_TYPE)
6067         init_const_expr_p = potential_constant_expression (init);
6068       if (init_const_expr_p)
6069         {
6070           /* Set these flags now for templates.  We'll update the flags in
6071              store_init_value for instantiations.  */
6072           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6073           if (decl_maybe_constant_var_p (decl))
6074             TREE_CONSTANT (decl) = 1;
6075         }
6076     }
6077
6078   if (processing_template_decl)
6079     {
6080       bool type_dependent_p;
6081
6082       /* Add this declaration to the statement-tree.  */
6083       if (at_function_scope_p ())
6084         add_decl_expr (decl);
6085
6086       type_dependent_p = dependent_type_p (type);
6087
6088       if (check_for_bare_parameter_packs (init))
6089         {
6090           init = NULL_TREE;
6091           DECL_INITIAL (decl) = NULL_TREE;
6092         }
6093
6094       /* Generally, initializers in templates are expanded when the
6095          template is instantiated.  But, if DECL is a variable constant
6096          then it can be used in future constant expressions, so its value
6097          must be available. */
6098
6099       if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6100         /* We can't do anything if the decl has dependent type.  */;
6101       else if (init
6102                && init_const_expr_p
6103                && !type_dependent_p
6104                && decl_maybe_constant_var_p (decl)
6105                && !type_dependent_init_p (init)
6106                && !value_dependent_init_p (init))
6107         {
6108           /* This variable seems to be a non-dependent constant, so process
6109              its initializer.  If check_initializer returns non-null the
6110              initialization wasn't constant after all.  */
6111           tree init_code;
6112           cleanups = make_tree_vector ();
6113           init_code = check_initializer (decl, init, flags, &cleanups);
6114           if (init_code == NULL_TREE)
6115             init = NULL_TREE;
6116           release_tree_vector (cleanups);
6117         }
6118       else if (!DECL_PRETTY_FUNCTION_P (decl))
6119         /* Deduce array size even if the initializer is dependent.  */
6120         maybe_deduce_size_from_array_init (decl, init);
6121
6122       if (init)
6123         DECL_INITIAL (decl) = init;
6124       return;
6125     }
6126
6127   /* Just store non-static data member initializers for later.  */
6128   if (init && TREE_CODE (decl) == FIELD_DECL)
6129     DECL_INITIAL (decl) = init;
6130
6131   /* Take care of TYPE_DECLs up front.  */
6132   if (TREE_CODE (decl) == TYPE_DECL)
6133     {
6134       if (type != error_mark_node
6135           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6136         {
6137           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6138             warning (0, "shadowing previous type declaration of %q#D", decl);
6139           set_identifier_type_value (DECL_NAME (decl), decl);
6140         }
6141
6142       /* If we have installed this as the canonical typedef for this
6143          type, and that type has not been defined yet, delay emitting
6144          the debug information for it, as we will emit it later.  */
6145       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6146           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6147         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6148
6149       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6150                                 at_eof);
6151       return;
6152     }
6153
6154   /* A reference will be modified here, as it is initialized.  */
6155   if (! DECL_EXTERNAL (decl)
6156       && TREE_READONLY (decl)
6157       && TREE_CODE (type) == REFERENCE_TYPE)
6158     {
6159       was_readonly = 1;
6160       TREE_READONLY (decl) = 0;
6161     }
6162
6163   if (TREE_CODE (decl) == VAR_DECL)
6164     {
6165       /* Only variables with trivial initialization and destruction can
6166          have thread-local storage.  */
6167       if (DECL_THREAD_LOCAL_P (decl)
6168           && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6169               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6170         error ("%qD cannot be thread-local because it has non-trivial "
6171                "type %qT", decl, TREE_TYPE (decl));
6172       /* If this is a local variable that will need a mangled name,
6173          register it now.  We must do this before processing the
6174          initializer for the variable, since the initialization might
6175          require a guard variable, and since the mangled name of the
6176          guard variable will depend on the mangled name of this
6177          variable.  */
6178       if (DECL_FUNCTION_SCOPE_P (decl)
6179           && TREE_STATIC (decl)
6180           && !DECL_ARTIFICIAL (decl))
6181         {
6182           push_local_name (decl);
6183           if (DECL_CONSTRUCTOR_P (current_function_decl)
6184               || DECL_DESTRUCTOR_P (current_function_decl))
6185             /* Normally local_decls is populated during GIMPLE lowering,
6186                but [cd]tors are never actually compiled directly.  We need
6187                to put statics on the list so we can deal with the label
6188                address extension.  */
6189             add_local_decl (cfun, decl);
6190         }
6191
6192       /* Convert the initializer to the type of DECL, if we have not
6193          already initialized DECL.  */
6194       if (!DECL_INITIALIZED_P (decl)
6195           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6196              case of a static data member initialized inside the
6197              class-specifier, there can be an initializer even if DECL
6198              is *not* defined.  */
6199           && (!DECL_EXTERNAL (decl) || init))
6200         {
6201           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6202             {
6203               tree jclass
6204                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6205               /* Allow libjava/prims.cc define primitive classes.  */
6206               if (init != NULL_TREE
6207                   || jclass == NULL_TREE
6208                   || TREE_CODE (jclass) != TYPE_DECL
6209                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6210                   || !same_type_ignoring_top_level_qualifiers_p
6211                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6212                 error ("Java object %qD not allocated with %<new%>", decl);
6213               init = NULL_TREE;
6214             }
6215           cleanups = make_tree_vector ();
6216           init = check_initializer (decl, init, flags, &cleanups);
6217           /* Thread-local storage cannot be dynamically initialized.  */
6218           if (DECL_THREAD_LOCAL_P (decl) && init)
6219             {
6220               error ("%qD is thread-local and so cannot be dynamically "
6221                      "initialized", decl);
6222               init = NULL_TREE;
6223             }
6224
6225           /* Check that the initializer for a static data member was a
6226              constant.  Although we check in the parser that the
6227              initializer is an integral constant expression, we do not
6228              simplify division-by-zero at the point at which it
6229              occurs.  Therefore, in:
6230
6231                struct S { static const int i = 7 / 0; };
6232
6233              we issue an error at this point.  It would
6234              probably be better to forbid division by zero in
6235              integral constant expressions.  */
6236           if (DECL_EXTERNAL (decl) && init)
6237             {
6238               error ("%qD cannot be initialized by a non-constant expression"
6239                      " when being declared", decl);
6240               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6241               init = NULL_TREE;
6242             }
6243
6244           /* Handle:
6245
6246              [dcl.init]
6247
6248              The memory occupied by any object of static storage
6249              duration is zero-initialized at program startup before
6250              any other initialization takes place.
6251
6252              We cannot create an appropriate initializer until after
6253              the type of DECL is finalized.  If DECL_INITIAL is set,
6254              then the DECL is statically initialized, and any
6255              necessary zero-initialization has already been performed.  */
6256           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6257             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6258                                                    /*nelts=*/NULL_TREE,
6259                                                    /*static_storage_p=*/true);
6260           /* Remember that the initialization for this variable has
6261              taken place.  */
6262           DECL_INITIALIZED_P (decl) = 1;
6263           /* This declaration is the definition of this variable,
6264              unless we are initializing a static data member within
6265              the class specifier.  */
6266           if (!DECL_EXTERNAL (decl))
6267             var_definition_p = true;
6268         }
6269       /* If the variable has an array type, lay out the type, even if
6270          there is no initializer.  It is valid to index through the
6271          array, and we must get TYPE_ALIGN set correctly on the array
6272          type.  */
6273       else if (TREE_CODE (type) == ARRAY_TYPE)
6274         layout_type (type);
6275
6276       if (TREE_STATIC (decl)
6277           && !at_function_scope_p ()
6278           && current_function_decl == NULL)
6279         /* So decl is a global variable or a static member of a
6280            non local class. Record the types it uses
6281            so that we can decide later to emit debug info for them.  */
6282         record_types_used_by_current_var_decl (decl);
6283     }
6284   else if (TREE_CODE (decl) == FIELD_DECL
6285            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6286     error ("non-static data member %qD has Java class type", decl);
6287
6288   /* Add this declaration to the statement-tree.  This needs to happen
6289      after the call to check_initializer so that the DECL_EXPR for a
6290      reference temp is added before the DECL_EXPR for the reference itself.  */
6291   if (DECL_FUNCTION_SCOPE_P (decl))
6292     add_decl_expr (decl);
6293
6294   /* Let the middle end know about variables and functions -- but not
6295      static data members in uninstantiated class templates.  */
6296   if (TREE_CODE (decl) == VAR_DECL
6297       || TREE_CODE (decl) == FUNCTION_DECL)
6298     {
6299       if (TREE_CODE (decl) == VAR_DECL)
6300         {
6301           layout_var_decl (decl);
6302           maybe_commonize_var (decl);
6303         }
6304
6305       /* This needs to happen after the linkage is set. */
6306       determine_visibility (decl);
6307
6308       if (var_definition_p && TREE_STATIC (decl))
6309         {
6310           /* If a TREE_READONLY variable needs initialization
6311              at runtime, it is no longer readonly and we need to
6312              avoid MEM_READONLY_P being set on RTL created for it.  */
6313           if (init)
6314             {
6315               if (TREE_READONLY (decl))
6316                 TREE_READONLY (decl) = 0;
6317               was_readonly = 0;
6318             }
6319           else if (was_readonly)
6320             TREE_READONLY (decl) = 1;
6321         }
6322
6323       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6324
6325       /* Check for abstractness of the type. Notice that there is no
6326          need to strip array types here since the check for those types
6327          is already done within create_array_type_for_decl.  */
6328       if (TREE_CODE (type) == FUNCTION_TYPE
6329           || TREE_CODE (type) == METHOD_TYPE)
6330         abstract_virtuals_error (decl, TREE_TYPE (type));
6331       else
6332         abstract_virtuals_error (decl, type);
6333
6334       if (TREE_TYPE (decl) == error_mark_node)
6335         /* No initialization required.  */
6336         ;
6337       else if (TREE_CODE (decl) == FUNCTION_DECL)
6338         {
6339           if (init)
6340             {
6341               if (init == ridpointers[(int)RID_DEFAULT])
6342                 {
6343                   /* An out-of-class default definition is defined at
6344                      the point where it is explicitly defaulted.  */
6345                   if (DECL_DELETED_FN (decl))
6346                     maybe_explain_implicit_delete (decl);
6347                   else if (DECL_INITIAL (decl) == error_mark_node)
6348                     synthesize_method (decl);
6349                 }
6350               else
6351                 error ("function %q#D is initialized like a variable", decl);
6352             }
6353           /* else no initialization required.  */
6354         }
6355       else if (DECL_EXTERNAL (decl)
6356                && ! (DECL_LANG_SPECIFIC (decl)
6357                      && DECL_NOT_REALLY_EXTERN (decl)))
6358         {
6359           if (init)
6360             DECL_INITIAL (decl) = init;
6361         }
6362       /* A variable definition.  */
6363       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6364         /* Initialize the local variable.  */
6365         initialize_local_var (decl, init);
6366
6367       /* If a variable is defined, and then a subsequent
6368          definition with external linkage is encountered, we will
6369          get here twice for the same variable.  We want to avoid
6370          calling expand_static_init more than once.  For variables
6371          that are not static data members, we can call
6372          expand_static_init only when we actually process the
6373          initializer.  It is not legal to redeclare a static data
6374          member, so this issue does not arise in that case.  */
6375       else if (var_definition_p && TREE_STATIC (decl))
6376         expand_static_init (decl, init);
6377     }
6378
6379   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6380      reference, insert it in the statement-tree now.  */
6381   if (cleanups)
6382     {
6383       unsigned i; tree t;
6384       FOR_EACH_VEC_ELT (tree, cleanups, i, t)
6385         push_cleanup (decl, t, false);
6386       release_tree_vector (cleanups);
6387     }
6388
6389   if (was_readonly)
6390     TREE_READONLY (decl) = 1;
6391
6392   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
6393 }
6394
6395 /* Returns a declaration for a VAR_DECL as if:
6396
6397      extern "C" TYPE NAME;
6398
6399    had been seen.  Used to create compiler-generated global
6400    variables.  */
6401
6402 static tree
6403 declare_global_var (tree name, tree type)
6404 {
6405   tree decl;
6406
6407   push_to_top_level ();
6408   decl = build_decl (input_location, VAR_DECL, name, type);
6409   TREE_PUBLIC (decl) = 1;
6410   DECL_EXTERNAL (decl) = 1;
6411   DECL_ARTIFICIAL (decl) = 1;
6412   /* If the user has explicitly declared this variable (perhaps
6413      because the code we are compiling is part of a low-level runtime
6414      library), then it is possible that our declaration will be merged
6415      with theirs by pushdecl.  */
6416   decl = pushdecl (decl);
6417   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6418   pop_from_top_level ();
6419
6420   return decl;
6421 }
6422
6423 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6424    if "__cxa_atexit" is not being used) corresponding to the function
6425    to be called when the program exits.  */
6426
6427 static tree
6428 get_atexit_fn_ptr_type (void)
6429 {
6430   tree fn_type;
6431
6432   if (!atexit_fn_ptr_type_node)
6433     {
6434       tree arg_type;
6435       if (flag_use_cxa_atexit 
6436           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6437         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6438         arg_type = ptr_type_node;
6439       else
6440         /* The parameter to "atexit" is "void (*)(void)".  */
6441         arg_type = NULL_TREE;
6442       
6443       fn_type = build_function_type_list (void_type_node,
6444                                           arg_type, NULL_TREE);
6445       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6446     }
6447
6448   return atexit_fn_ptr_type_node;
6449 }
6450
6451 /* Returns a pointer to the `atexit' function.  Note that if
6452    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6453    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6454
6455 static tree
6456 get_atexit_node (void)
6457 {
6458   tree atexit_fndecl;
6459   tree fn_type;
6460   tree fn_ptr_type;
6461   const char *name;
6462   bool use_aeabi_atexit;
6463
6464   if (atexit_node)
6465     return atexit_node;
6466
6467   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6468     {
6469       /* The declaration for `__cxa_atexit' is:
6470
6471            int __cxa_atexit (void (*)(void *), void *, void *)
6472
6473          We build up the argument types and then the function type
6474          itself.  */
6475       tree argtype0, argtype1, argtype2;
6476
6477       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6478       /* First, build the pointer-to-function type for the first
6479          argument.  */
6480       fn_ptr_type = get_atexit_fn_ptr_type ();
6481       /* Then, build the rest of the argument types.  */
6482       argtype2 = ptr_type_node;
6483       if (use_aeabi_atexit)
6484         {
6485           argtype1 = fn_ptr_type;
6486           argtype0 = ptr_type_node;
6487         }
6488       else
6489         {
6490           argtype1 = ptr_type_node;
6491           argtype0 = fn_ptr_type;
6492         }
6493       /* And the final __cxa_atexit type.  */
6494       fn_type = build_function_type_list (integer_type_node,
6495                                           argtype0, argtype1, argtype2,
6496                                           NULL_TREE);
6497       fn_ptr_type = build_pointer_type (fn_type);
6498       if (use_aeabi_atexit)
6499         name = "__aeabi_atexit";
6500       else
6501         name = "__cxa_atexit";
6502     }
6503   else
6504     {
6505       /* The declaration for `atexit' is:
6506
6507            int atexit (void (*)());
6508
6509          We build up the argument types and then the function type
6510          itself.  */
6511       fn_ptr_type = get_atexit_fn_ptr_type ();
6512       /* Build the final atexit type.  */
6513       fn_type = build_function_type_list (integer_type_node,
6514                                           fn_ptr_type, NULL_TREE);
6515       name = "atexit";
6516     }
6517
6518   /* Now, build the function declaration.  */
6519   push_lang_context (lang_name_c);
6520   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6521   mark_used (atexit_fndecl);
6522   pop_lang_context ();
6523   atexit_node = decay_conversion (atexit_fndecl);
6524
6525   return atexit_node;
6526 }
6527
6528 /* Returns the __dso_handle VAR_DECL.  */
6529
6530 static tree
6531 get_dso_handle_node (void)
6532 {
6533   if (dso_handle_node)
6534     return dso_handle_node;
6535
6536   /* Declare the variable.  */
6537   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6538                                         ptr_type_node);
6539
6540 #ifdef HAVE_GAS_HIDDEN
6541   DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6542   DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6543 #endif
6544
6545   return dso_handle_node;
6546 }
6547
6548 /* Begin a new function with internal linkage whose job will be simply
6549    to destroy some particular variable.  */
6550
6551 static GTY(()) int start_cleanup_cnt;
6552
6553 static tree
6554 start_cleanup_fn (void)
6555 {
6556   char name[32];
6557   tree fntype;
6558   tree fndecl;
6559   bool use_cxa_atexit = flag_use_cxa_atexit
6560                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6561
6562   push_to_top_level ();
6563
6564   /* No need to mangle this.  */
6565   push_lang_context (lang_name_c);
6566
6567   /* Build the name of the function.  */
6568   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6569   /* Build the function declaration.  */
6570   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6571   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6572   /* It's a function with internal linkage, generated by the
6573      compiler.  */
6574   TREE_PUBLIC (fndecl) = 0;
6575   DECL_ARTIFICIAL (fndecl) = 1;
6576   /* Make the function `inline' so that it is only emitted if it is
6577      actually needed.  It is unlikely that it will be inlined, since
6578      it is only called via a function pointer, but we avoid unnecessary
6579      emissions this way.  */
6580   DECL_DECLARED_INLINE_P (fndecl) = 1;
6581   DECL_INTERFACE_KNOWN (fndecl) = 1;
6582   /* Build the parameter.  */
6583   if (use_cxa_atexit)
6584     {
6585       tree parmdecl;
6586
6587       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6588       DECL_CONTEXT (parmdecl) = fndecl;
6589       TREE_USED (parmdecl) = 1;
6590       DECL_READ_P (parmdecl) = 1;
6591       DECL_ARGUMENTS (fndecl) = parmdecl;
6592     }
6593
6594   pushdecl (fndecl);
6595   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6596
6597   pop_lang_context ();
6598
6599   return current_function_decl;
6600 }
6601
6602 /* Finish the cleanup function begun by start_cleanup_fn.  */
6603
6604 static void
6605 end_cleanup_fn (void)
6606 {
6607   expand_or_defer_fn (finish_function (0));
6608
6609   pop_from_top_level ();
6610 }
6611
6612 /* Generate code to handle the destruction of DECL, an object with
6613    static storage duration.  */
6614
6615 tree
6616 register_dtor_fn (tree decl)
6617 {
6618   tree cleanup;
6619   tree compound_stmt;
6620   tree fcall;
6621   tree type;
6622   bool use_dtor;
6623   tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6624
6625   type = TREE_TYPE (decl);
6626   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6627     return void_zero_node;
6628
6629   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6630      a class object, we can just pass the destructor to
6631      "__cxa_atexit"; we don't have to build a temporary function to do
6632      the cleanup.  */
6633   use_dtor = (flag_use_cxa_atexit 
6634               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6635               && CLASS_TYPE_P (type));
6636   if (use_dtor)
6637     {
6638       int idx;
6639
6640       /* Find the destructor.  */
6641       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6642       gcc_assert (idx >= 0);
6643       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6644       /* Make sure it is accessible.  */
6645       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6646     }
6647   else
6648     {
6649       /* Call build_cleanup before we enter the anonymous function so
6650          that any access checks will be done relative to the current
6651          scope, rather than the scope of the anonymous function.  */
6652       build_cleanup (decl);
6653   
6654       /* Now start the function.  */
6655       cleanup = start_cleanup_fn ();
6656       
6657       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6658          to the original function, rather than the anonymous one.  That
6659          will make the back end think that nested functions are in use,
6660          which causes confusion.  */
6661       push_deferring_access_checks (dk_no_check);
6662       fcall = build_cleanup (decl);
6663       pop_deferring_access_checks ();
6664       
6665       /* Create the body of the anonymous function.  */
6666       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6667       finish_expr_stmt (fcall);
6668       finish_compound_stmt (compound_stmt);
6669       end_cleanup_fn ();
6670     }
6671
6672   /* Call atexit with the cleanup function.  */
6673   mark_used (cleanup);
6674   cleanup = build_address (cleanup);
6675   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6676     {
6677       tree addr;
6678
6679       if (use_dtor)
6680         {
6681           /* We must convert CLEANUP to the type that "__cxa_atexit"
6682              expects.  */
6683           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6684           /* "__cxa_atexit" will pass the address of DECL to the
6685              cleanup function.  */
6686           mark_used (decl);
6687           addr = build_address (decl);
6688           /* The declared type of the parameter to "__cxa_atexit" is
6689              "void *".  For plain "T*", we could just let the
6690              machinery in cp_build_function_call convert it -- but if the
6691              type is "cv-qualified T *", then we need to convert it
6692              before passing it in, to avoid spurious errors.  */
6693           addr = build_nop (ptr_type_node, addr);
6694         }
6695       else
6696         /* Since the cleanup functions we build ignore the address
6697            they're given, there's no reason to pass the actual address
6698            in, and, in general, it's cheaper to pass NULL than any
6699            other value.  */
6700         addr = null_pointer_node;
6701       arg2 = cp_build_addr_expr (get_dso_handle_node (),
6702                                  tf_warning_or_error);
6703       if (targetm.cxx.use_aeabi_atexit ())
6704         {
6705           arg1 = cleanup;
6706           arg0 = addr;
6707         }
6708       else
6709         {
6710           arg1 = addr;
6711           arg0 = cleanup;
6712         }
6713     }
6714   else
6715     arg0 = cleanup;
6716   return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6717                                       arg0, arg1, arg2, NULL_TREE);
6718 }
6719
6720 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6721    is its initializer.  Generate code to handle the construction
6722    and destruction of DECL.  */
6723
6724 static void
6725 expand_static_init (tree decl, tree init)
6726 {
6727   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6728   gcc_assert (TREE_STATIC (decl));
6729
6730   /* Some variables require no dynamic initialization.  */
6731   if (!init
6732       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6733     return;
6734
6735   if (DECL_FUNCTION_SCOPE_P (decl))
6736     {
6737       /* Emit code to perform this initialization but once.  */
6738       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6739       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6740       tree guard, guard_addr;
6741       tree flag, begin;
6742
6743       /* Emit code to perform this initialization but once.  This code
6744          looks like:
6745
6746            static <type> guard;
6747            if (!guard.first_byte) {
6748              if (__cxa_guard_acquire (&guard)) {
6749                bool flag = false;
6750                try {
6751                  // Do initialization.
6752                  flag = true; __cxa_guard_release (&guard);
6753                  // Register variable for destruction at end of program.
6754                } catch {
6755                  if (!flag) __cxa_guard_abort (&guard);
6756                }
6757            }
6758
6759          Note that the `flag' variable is only set to 1 *after* the
6760          initialization is complete.  This ensures that an exception,
6761          thrown during the construction, will cause the variable to
6762          reinitialized when we pass through this code again, as per:
6763
6764            [stmt.dcl]
6765
6766            If the initialization exits by throwing an exception, the
6767            initialization is not complete, so it will be tried again
6768            the next time control enters the declaration.
6769
6770          This process should be thread-safe, too; multiple threads
6771          should not be able to initialize the variable more than
6772          once.  */
6773
6774       /* Create the guard variable.  */
6775       guard = get_guard (decl);
6776
6777       /* This optimization isn't safe on targets with relaxed memory
6778          consistency.  On such targets we force synchronization in
6779          __cxa_guard_acquire.  */
6780       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6781         {
6782           /* Begin the conditional initialization.  */
6783           if_stmt = begin_if_stmt ();
6784           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6785           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6786         }
6787
6788       if (flag_threadsafe_statics)
6789         {
6790           tree vfntype = NULL_TREE;
6791           tree acquire_name, release_name, abort_name;
6792           tree acquire_fn, release_fn, abort_fn;
6793           guard_addr = build_address (guard);
6794
6795           acquire_name = get_identifier ("__cxa_guard_acquire");
6796           release_name = get_identifier ("__cxa_guard_release");
6797           abort_name = get_identifier ("__cxa_guard_abort");
6798           acquire_fn = identifier_global_value (acquire_name);
6799           release_fn = identifier_global_value (release_name);
6800           abort_fn = identifier_global_value (abort_name);
6801           if (!acquire_fn)
6802             acquire_fn = push_library_fn
6803               (acquire_name, build_function_type_list (integer_type_node,
6804                                                        TREE_TYPE (guard_addr),
6805                                                        NULL_TREE),
6806                NULL_TREE);
6807           if (!release_fn || !abort_fn)
6808             vfntype = build_function_type_list (void_type_node,
6809                                                 TREE_TYPE (guard_addr),
6810                                                 NULL_TREE);
6811           if (!release_fn)
6812             release_fn = push_library_fn (release_name, vfntype, NULL_TREE);
6813           if (!abort_fn)
6814             abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE);
6815
6816           inner_if_stmt = begin_if_stmt ();
6817           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6818                                inner_if_stmt);
6819
6820           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6821           begin = get_target_expr (boolean_false_node);
6822           flag = TARGET_EXPR_SLOT (begin);
6823
6824           TARGET_EXPR_CLEANUP (begin)
6825             = build3 (COND_EXPR, void_type_node, flag,
6826                       void_zero_node,
6827                       build_call_n (abort_fn, 1, guard_addr));
6828           CLEANUP_EH_ONLY (begin) = 1;
6829
6830           /* Do the initialization itself.  */
6831           init = add_stmt_to_compound (begin, init);
6832           init = add_stmt_to_compound
6833             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6834           init = add_stmt_to_compound
6835             (init, build_call_n (release_fn, 1, guard_addr));
6836         }
6837       else
6838         init = add_stmt_to_compound (init, set_guard (guard));
6839
6840       /* Use atexit to register a function for destroying this static
6841          variable.  */
6842       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6843
6844       finish_expr_stmt (init);
6845
6846       if (flag_threadsafe_statics)
6847         {
6848           finish_compound_stmt (inner_then_clause);
6849           finish_then_clause (inner_if_stmt);
6850           finish_if_stmt (inner_if_stmt);
6851         }
6852
6853       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6854         {
6855           finish_compound_stmt (then_clause);
6856           finish_then_clause (if_stmt);
6857           finish_if_stmt (if_stmt);
6858         }
6859     }
6860   else
6861     static_aggregates = tree_cons (init, decl, static_aggregates);
6862 }
6863
6864 \f
6865 /* Make TYPE a complete type based on INITIAL_VALUE.
6866    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6867    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6868    3 if the initializer list is empty (in pedantic mode). */
6869
6870 int
6871 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6872 {
6873   int failure;
6874   tree type, elt_type;
6875
6876   if (initial_value)
6877     {
6878       unsigned HOST_WIDE_INT i;
6879       tree value;
6880
6881       /* An array of character type can be initialized from a
6882          brace-enclosed string constant.
6883
6884          FIXME: this code is duplicated from reshape_init. Probably
6885          we should just call reshape_init here?  */
6886       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6887           && TREE_CODE (initial_value) == CONSTRUCTOR
6888           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6889         {
6890           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6891           tree value = VEC_index (constructor_elt, v, 0)->value;
6892
6893           if (TREE_CODE (value) == STRING_CST
6894               && VEC_length (constructor_elt, v) == 1)
6895             initial_value = value;
6896         }
6897
6898       /* If any of the elements are parameter packs, we can't actually
6899          complete this type now because the array size is dependent.  */
6900       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6901         {
6902           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6903                                       i, value)
6904             {
6905               if (PACK_EXPANSION_P (value))
6906                 return 0;
6907             }
6908         }
6909     }
6910
6911   failure = complete_array_type (ptype, initial_value, do_default);
6912
6913   /* We can create the array before the element type is complete, which
6914      means that we didn't have these two bits set in the original type
6915      either.  In completing the type, we are expected to propagate these
6916      bits.  See also complete_type which does the same thing for arrays
6917      of fixed size.  */
6918   type = *ptype;
6919   if (TYPE_DOMAIN (type))
6920     {
6921       elt_type = TREE_TYPE (type);
6922       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6923       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6924         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6925     }
6926
6927   return failure;
6928 }
6929
6930 /* As above, but either give an error or reject zero-size arrays, depending
6931    on COMPLAIN.  */
6932
6933 int
6934 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6935                                  bool do_default, tsubst_flags_t complain)
6936 {
6937   int failure;
6938   bool sfinae = !(complain & tf_error);
6939   /* In SFINAE context we can't be lenient about zero-size arrays.  */
6940   if (sfinae)
6941     ++pedantic;
6942   failure = cp_complete_array_type (ptype, initial_value, do_default);
6943   if (sfinae)
6944     --pedantic;
6945   if (failure)
6946     {
6947       if (sfinae)
6948         /* Not an error.  */;
6949       else if (failure == 1)
6950         error ("initializer fails to determine size of %qT", *ptype);
6951       else if (failure == 2)
6952         {
6953           if (do_default)
6954             error ("array size missing in %qT", *ptype);
6955         }
6956       else if (failure == 3)
6957         error ("zero-size array %qT", *ptype);
6958       *ptype = error_mark_node;
6959     }
6960   return failure;
6961 }
6962 \f
6963 /* Return zero if something is declared to be a member of type
6964    CTYPE when in the context of CUR_TYPE.  STRING is the error
6965    message to print in that case.  Otherwise, quietly return 1.  */
6966
6967 static int
6968 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6969 {
6970   if (ctype && ctype != cur_type)
6971     {
6972       if (flags == DTOR_FLAG)
6973         error ("destructor for alien class %qT cannot be a member", ctype);
6974       else
6975         error ("constructor for alien class %qT cannot be a member", ctype);
6976       return 0;
6977     }
6978   return 1;
6979 }
6980 \f
6981 /* Subroutine of `grokdeclarator'.  */
6982
6983 /* Generate errors possibly applicable for a given set of specifiers.
6984    This is for ARM $7.1.2.  */
6985
6986 static void
6987 bad_specifiers (tree object,
6988                 enum bad_spec_place type,
6989                 int virtualp,
6990                 int quals,
6991                 int inlinep,
6992                 int friendp,
6993                 int raises)
6994 {
6995   switch (type)
6996     {
6997       case BSP_VAR:
6998         if (virtualp)
6999           error ("%qD declared as a %<virtual%> variable", object);
7000         if (inlinep)
7001           error ("%qD declared as an %<inline%> variable", object);
7002         if (quals)
7003           error ("%<const%> and %<volatile%> function specifiers on "
7004                  "%qD invalid in variable declaration", object);
7005         break;
7006       case BSP_PARM:
7007         if (virtualp)
7008           error ("%qD declared as a %<virtual%> parameter", object);
7009         if (inlinep)
7010           error ("%qD declared as an %<inline%> parameter", object);
7011         if (quals)
7012           error ("%<const%> and %<volatile%> function specifiers on "
7013                  "%qD invalid in parameter declaration", object);
7014         break;
7015       case BSP_TYPE:
7016         if (virtualp)
7017           error ("%qD declared as a %<virtual%> type", object);
7018         if (inlinep)
7019           error ("%qD declared as an %<inline%> type", object);
7020         if (quals)
7021           error ("%<const%> and %<volatile%> function specifiers on "
7022                  "%qD invalid in type declaration", object);
7023         break;
7024       case BSP_FIELD:
7025         if (virtualp)
7026           error ("%qD declared as a %<virtual%> field", object);
7027         if (inlinep)
7028           error ("%qD declared as an %<inline%> field", object);
7029         if (quals)
7030           error ("%<const%> and %<volatile%> function specifiers on "
7031                  "%qD invalid in field declaration", object);
7032         break;
7033       default:
7034         gcc_unreachable();
7035     }
7036   if (friendp)
7037     error ("%q+D declared as a friend", object);
7038   if (raises
7039       && (TREE_CODE (object) == TYPE_DECL
7040           || (!TYPE_PTRFN_P (TREE_TYPE (object))
7041               && !TYPE_REFFN_P (TREE_TYPE (object))
7042               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
7043     error ("%q+D declared with an exception specification", object);
7044 }
7045
7046 /* DECL is a member function or static data member and is presently
7047    being defined.  Check that the definition is taking place in a
7048    valid namespace.  */
7049
7050 static void
7051 check_class_member_definition_namespace (tree decl)
7052 {
7053   /* These checks only apply to member functions and static data
7054      members.  */
7055   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
7056               || TREE_CODE (decl) == VAR_DECL);
7057   /* We check for problems with specializations in pt.c in
7058      check_specialization_namespace, where we can issue better
7059      diagnostics.  */
7060   if (processing_specialization)
7061     return;
7062   /* There are no restrictions on the placement of
7063      explicit instantiations.  */
7064   if (processing_explicit_instantiation)
7065     return;
7066   /* [class.mfct]
7067
7068      A member function definition that appears outside of the
7069      class definition shall appear in a namespace scope enclosing
7070      the class definition.
7071
7072      [class.static.data]
7073
7074      The definition for a static data member shall appear in a
7075      namespace scope enclosing the member's class definition.  */
7076   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
7077     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
7078                decl, DECL_CONTEXT (decl));
7079 }
7080
7081 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
7082    METHOD_TYPE for a non-static member function; QUALS are the
7083    cv-qualifiers that apply to the function.  */
7084
7085 tree
7086 build_this_parm (tree type, cp_cv_quals quals)
7087 {
7088   tree this_type;
7089   tree qual_type;
7090   tree parm;
7091   cp_cv_quals this_quals;
7092
7093   if (CLASS_TYPE_P (type))
7094     {
7095       this_type
7096         = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
7097       this_type = build_pointer_type (this_type);
7098     }
7099   else
7100     this_type = type_of_this_parm (type);
7101   /* The `this' parameter is implicitly `const'; it cannot be
7102      assigned to.  */
7103   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7104   qual_type = cp_build_qualified_type (this_type, this_quals);
7105   parm = build_artificial_parm (this_identifier, qual_type);
7106   cp_apply_type_quals_to_decl (this_quals, parm);
7107   return parm;
7108 }
7109
7110 /* DECL is a static member function.  Complain if it was declared
7111    with function-cv-quals.  */
7112
7113 static void
7114 check_static_quals (tree decl, cp_cv_quals quals)
7115 {
7116   if (quals != TYPE_UNQUALIFIED)
7117     error ("static member function %q#D declared with type qualifiers",
7118            decl);
7119 }
7120
7121 /* CTYPE is class type, or null if non-class.
7122    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7123    or METHOD_TYPE.
7124    DECLARATOR is the function's name.
7125    PARMS is a chain of PARM_DECLs for the function.
7126    VIRTUALP is truthvalue of whether the function is virtual or not.
7127    FLAGS are to be passed through to `grokclassfn'.
7128    QUALS are qualifiers indicating whether the function is `const'
7129    or `volatile'.
7130    RAISES is a list of exceptions that this function can raise.
7131    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7132    not look, and -1 if we should not call `grokclassfn' at all.
7133
7134    SFK is the kind of special function (if any) for the new function.
7135
7136    Returns `NULL_TREE' if something goes wrong, after issuing
7137    applicable error messages.  */
7138
7139 static tree
7140 grokfndecl (tree ctype,
7141             tree type,
7142             tree declarator,
7143             tree parms,
7144             tree orig_declarator,
7145             int virtualp,
7146             enum overload_flags flags,
7147             cp_cv_quals quals,
7148             tree raises,
7149             int check,
7150             int friendp,
7151             int publicp,
7152             int inlinep,
7153             special_function_kind sfk,
7154             bool funcdef_flag,
7155             int template_count,
7156             tree in_namespace,
7157             tree* attrlist,
7158             location_t location)
7159 {
7160   tree decl;
7161   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7162   tree t;
7163
7164   if (raises)
7165     type = build_exception_variant (type, raises);
7166
7167   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7168
7169   /* If we have an explicit location, use it, otherwise use whatever
7170      build_lang_decl used (probably input_location).  */
7171   if (location != UNKNOWN_LOCATION)
7172     DECL_SOURCE_LOCATION (decl) = location;
7173
7174   if (TREE_CODE (type) == METHOD_TYPE)
7175     {
7176       tree parm;
7177       parm = build_this_parm (type, quals);
7178       DECL_CHAIN (parm) = parms;
7179       parms = parm;
7180     }
7181   DECL_ARGUMENTS (decl) = parms;
7182   for (t = parms; t; t = DECL_CHAIN (t))
7183     DECL_CONTEXT (t) = decl;
7184   /* Propagate volatile out from type to decl.  */
7185   if (TYPE_VOLATILE (type))
7186     TREE_THIS_VOLATILE (decl) = 1;
7187
7188   /* Setup decl according to sfk.  */
7189   switch (sfk)
7190     {
7191     case sfk_constructor:
7192     case sfk_copy_constructor:
7193     case sfk_move_constructor:
7194       DECL_CONSTRUCTOR_P (decl) = 1;
7195       break;
7196     case sfk_destructor:
7197       DECL_DESTRUCTOR_P (decl) = 1;
7198       break;
7199     default:
7200       break;
7201     }
7202
7203   /* If pointers to member functions use the least significant bit to
7204      indicate whether a function is virtual, ensure a pointer
7205      to this function will have that bit clear.  */
7206   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7207       && TREE_CODE (type) == METHOD_TYPE
7208       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7209     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7210
7211   if (friendp
7212       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7213     {
7214       if (funcdef_flag)
7215         error
7216           ("defining explicit specialization %qD in friend declaration",
7217            orig_declarator);
7218       else
7219         {
7220           tree fns = TREE_OPERAND (orig_declarator, 0);
7221           tree args = TREE_OPERAND (orig_declarator, 1);
7222
7223           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7224             {
7225               /* Something like `template <class T> friend void f<T>()'.  */
7226               error ("invalid use of template-id %qD in declaration "
7227                      "of primary template",
7228                      orig_declarator);
7229               return NULL_TREE;
7230             }
7231
7232
7233           /* A friend declaration of the form friend void f<>().  Record
7234              the information in the TEMPLATE_ID_EXPR.  */
7235           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7236
7237           if (TREE_CODE (fns) == COMPONENT_REF)
7238             {
7239               /* Due to bison parser ickiness, we will have already looked
7240                  up an operator_name or PFUNCNAME within the current class
7241                  (see template_id in parse.y). If the current class contains
7242                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
7243
7244               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7245                           == current_class_type);
7246               fns = TREE_OPERAND (fns, 1);
7247             }
7248           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7249                       || TREE_CODE (fns) == OVERLOAD);
7250           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7251
7252           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7253             if (TREE_PURPOSE (t)
7254                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7255             {
7256               error ("default arguments are not allowed in declaration "
7257                      "of friend template specialization %qD",
7258                      decl);
7259               return NULL_TREE;
7260             }
7261
7262           if (inlinep)
7263             {
7264               error ("%<inline%> is not allowed in declaration of friend "
7265                      "template specialization %qD",
7266                      decl);
7267               return NULL_TREE;
7268             }
7269         }
7270     }
7271
7272   /* If this decl has namespace scope, set that up.  */
7273   if (in_namespace)
7274     set_decl_namespace (decl, in_namespace, friendp);
7275   else if (!ctype)
7276     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7277
7278   /* `main' and builtins have implicit 'C' linkage.  */
7279   if ((MAIN_NAME_P (declarator)
7280        || (IDENTIFIER_LENGTH (declarator) > 10
7281            && IDENTIFIER_POINTER (declarator)[0] == '_'
7282            && IDENTIFIER_POINTER (declarator)[1] == '_'
7283            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7284       && current_lang_name == lang_name_cplusplus
7285       && ctype == NULL_TREE
7286       && DECL_FILE_SCOPE_P (decl))
7287     SET_DECL_LANGUAGE (decl, lang_c);
7288
7289   /* Should probably propagate const out from type to decl I bet (mrs).  */
7290   if (staticp)
7291     {
7292       DECL_STATIC_FUNCTION_P (decl) = 1;
7293       DECL_CONTEXT (decl) = ctype;
7294     }
7295
7296   if (ctype)
7297     {
7298       DECL_CONTEXT (decl) = ctype;
7299       if (funcdef_flag)
7300         check_class_member_definition_namespace (decl);
7301     }
7302
7303   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7304     {
7305       if (processing_template_decl)
7306         error ("cannot declare %<::main%> to be a template");
7307       if (inlinep)
7308         error ("cannot declare %<::main%> to be inline");
7309       if (!publicp)
7310         error ("cannot declare %<::main%> to be static");
7311       inlinep = 0;
7312       publicp = 1;
7313     }
7314
7315   /* Members of anonymous types and local classes have no linkage; make
7316      them internal.  If a typedef is made later, this will be changed.  */
7317   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7318                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7319     publicp = 0;
7320
7321   if (publicp && cxx_dialect == cxx98)
7322     {
7323       /* [basic.link]: A name with no linkage (notably, the name of a class
7324          or enumeration declared in a local scope) shall not be used to
7325          declare an entity with linkage.
7326
7327          DR 757 relaxes this restriction for C++0x.  */
7328       t = no_linkage_check (TREE_TYPE (decl),
7329                             /*relaxed_p=*/false);
7330       if (t)
7331         {
7332           if (TYPE_ANONYMOUS_P (t))
7333             {
7334               if (DECL_EXTERN_C_P (decl))
7335                 /* Allow this; it's pretty common in C.  */;
7336               else
7337                 {
7338                   permerror (input_location, "anonymous type with no linkage "
7339                              "used to declare function %q#D with linkage",
7340                              decl);
7341                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7342                     permerror (input_location, "%q+#D does not refer to the unqualified "
7343                                "type, so it is not used for linkage",
7344                                TYPE_NAME (t));
7345                 }
7346             }
7347           else
7348             permerror (input_location, "type %qT with no linkage used to "
7349                        "declare function %q#D with linkage", t, decl);
7350         }
7351     }
7352
7353   TREE_PUBLIC (decl) = publicp;
7354   if (! publicp)
7355     {
7356       DECL_INTERFACE_KNOWN (decl) = 1;
7357       DECL_NOT_REALLY_EXTERN (decl) = 1;
7358     }
7359
7360   /* If the declaration was declared inline, mark it as such.  */
7361   if (inlinep)
7362     DECL_DECLARED_INLINE_P (decl) = 1;
7363   if (inlinep & 2)
7364     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7365
7366   DECL_EXTERNAL (decl) = 1;
7367   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7368     {
7369       error (ctype
7370              ? G_("static member function %qD cannot have cv-qualifier")
7371              : G_("non-member function %qD cannot have cv-qualifier"),
7372              decl);
7373       quals = TYPE_UNQUALIFIED;
7374     }
7375
7376   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7377       && !grok_op_properties (decl, /*complain=*/true))
7378     return NULL_TREE;
7379   else if (UDLIT_OPER_P (DECL_NAME (decl)))
7380     {
7381       bool long_long_unsigned_p;
7382       bool long_double_p;
7383       const char *suffix = NULL;
7384       /* [over.literal]/6: Literal operators shall not have C linkage. */
7385       if (DECL_LANGUAGE (decl) == lang_c)
7386         {
7387           error ("literal operator with C linkage");
7388           return NULL_TREE;
7389         }
7390
7391       if (DECL_NAMESPACE_SCOPE_P (decl))
7392         {
7393           if (!check_literal_operator_args (decl, &long_long_unsigned_p,
7394                                             &long_double_p))
7395             {
7396               error ("%qD has invalid argument list", decl);
7397               return NULL_TREE;
7398             }
7399
7400           suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
7401           if (long_long_unsigned_p)
7402             {
7403               if (cpp_interpret_int_suffix (suffix, strlen (suffix)))
7404                 warning (0, "integer suffix %<%s%>"
7405                             " shadowed by implementation", suffix);
7406             }
7407           else if (long_double_p)
7408             {
7409               if (cpp_interpret_float_suffix (suffix, strlen (suffix)))
7410                 warning (0, "floating point suffix %<%s%>"
7411                             " shadowed by implementation", suffix);
7412             }
7413         }
7414       else
7415         {
7416           error ("%qD must be a non-member function", decl);
7417           return NULL_TREE;
7418         }
7419     }
7420
7421   if (funcdef_flag)
7422     /* Make the init_value nonzero so pushdecl knows this is not
7423        tentative.  error_mark_node is replaced later with the BLOCK.  */
7424     DECL_INITIAL (decl) = error_mark_node;
7425
7426   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7427     TREE_NOTHROW (decl) = 1;
7428
7429   /* Caller will do the rest of this.  */
7430   if (check < 0)
7431     return decl;
7432
7433   if (ctype != NULL_TREE)
7434     grokclassfn (ctype, decl, flags);
7435
7436   decl = check_explicit_specialization (orig_declarator, decl,
7437                                         template_count,
7438                                         2 * funcdef_flag +
7439                                         4 * (friendp != 0));
7440   if (decl == error_mark_node)
7441     return NULL_TREE;
7442
7443   if (DECL_STATIC_FUNCTION_P (decl))
7444     check_static_quals (decl, quals);
7445
7446   if (attrlist)
7447     {
7448       cplus_decl_attributes (&decl, *attrlist, 0);
7449       *attrlist = NULL_TREE;
7450     }
7451
7452   /* Check main's type after attributes have been applied.  */
7453   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7454     {
7455       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7456                         integer_type_node))
7457         {
7458           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7459           tree newtype;
7460           error ("%<::main%> must return %<int%>");
7461           newtype = build_function_type (integer_type_node, oldtypeargs);
7462           TREE_TYPE (decl) = newtype;
7463         }
7464       if (warn_main)
7465         check_main_parameter_types (decl);
7466     }
7467
7468   if (ctype != NULL_TREE
7469       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7470       && check)
7471     {
7472       tree old_decl = check_classfn (ctype, decl,
7473                                      (processing_template_decl
7474                                       > template_class_depth (ctype))
7475                                      ? current_template_parms
7476                                      : NULL_TREE);
7477
7478       if (old_decl == error_mark_node)
7479         return NULL_TREE;
7480
7481       if (old_decl)
7482         {
7483           tree ok;
7484           tree pushed_scope;
7485
7486           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7487             /* Because grokfndecl is always supposed to return a
7488                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7489                here.  We depend on our callers to figure out that its
7490                really a template that's being returned.  */
7491             old_decl = DECL_TEMPLATE_RESULT (old_decl);
7492
7493           if (DECL_STATIC_FUNCTION_P (old_decl)
7494               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7495             {
7496               /* Remove the `this' parm added by grokclassfn.  */
7497               revert_static_member_fn (decl);
7498               check_static_quals (decl, quals);
7499             }
7500           if (DECL_ARTIFICIAL (old_decl))
7501             {
7502               error ("definition of implicitly-declared %qD", old_decl);
7503               return NULL_TREE;
7504             }
7505           else if (DECL_DEFAULTED_FN (old_decl))
7506             {
7507               error ("definition of explicitly-defaulted %q+D", decl);
7508               error ("%q+#D explicitly defaulted here", old_decl);
7509               return NULL_TREE;
7510             }
7511
7512           /* Since we've smashed OLD_DECL to its
7513              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7514           if (TREE_CODE (decl) == TEMPLATE_DECL)
7515             decl = DECL_TEMPLATE_RESULT (decl);
7516
7517           /* Attempt to merge the declarations.  This can fail, in
7518              the case of some invalid specialization declarations.  */
7519           pushed_scope = push_scope (ctype);
7520           ok = duplicate_decls (decl, old_decl, friendp);
7521           if (pushed_scope)
7522             pop_scope (pushed_scope);
7523           if (!ok)
7524             {
7525               error ("no %q#D member function declared in class %qT",
7526                      decl, ctype);
7527               return NULL_TREE;
7528             }
7529           return old_decl;
7530         }
7531     }
7532
7533   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7534     return NULL_TREE;
7535
7536   if (ctype == NULL_TREE || check)
7537     return decl;
7538
7539   if (virtualp)
7540     DECL_VIRTUAL_P (decl) = 1;
7541
7542   return decl;
7543 }
7544
7545 /* decl is a FUNCTION_DECL.
7546    specifiers are the parsed virt-specifiers.
7547
7548    Set flags to reflect the virt-specifiers.
7549
7550    Returns decl.  */
7551
7552 static tree
7553 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7554 {
7555   if (decl == NULL_TREE)
7556     return decl;
7557   if (specifiers & VIRT_SPEC_OVERRIDE)
7558     DECL_OVERRIDE_P (decl) = 1;
7559   if (specifiers & VIRT_SPEC_FINAL)
7560     DECL_FINAL_P (decl) = 1;
7561   return decl;
7562 }
7563
7564 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7565    the linkage that DECL will receive in the object file.  */
7566
7567 static void
7568 set_linkage_for_static_data_member (tree decl)
7569 {
7570   /* A static data member always has static storage duration and
7571      external linkage.  Note that static data members are forbidden in
7572      local classes -- the only situation in which a class has
7573      non-external linkage.  */
7574   TREE_PUBLIC (decl) = 1;
7575   TREE_STATIC (decl) = 1;
7576   /* For non-template classes, static data members are always put
7577      out in exactly those files where they are defined, just as
7578      with ordinary namespace-scope variables.  */
7579   if (!processing_template_decl)
7580     DECL_INTERFACE_KNOWN (decl) = 1;
7581 }
7582
7583 /* Create a VAR_DECL named NAME with the indicated TYPE.
7584
7585    If SCOPE is non-NULL, it is the class type or namespace containing
7586    the variable.  If SCOPE is NULL, the variable should is created in
7587    the innermost enclosings scope.  */
7588
7589 static tree
7590 grokvardecl (tree type,
7591              tree name,
7592              const cp_decl_specifier_seq *declspecs,
7593              int initialized,
7594              int constp,
7595              tree scope)
7596 {
7597   tree decl;
7598   tree explicit_scope;
7599
7600   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7601
7602   /* Compute the scope in which to place the variable, but remember
7603      whether or not that scope was explicitly specified by the user.   */
7604   explicit_scope = scope;
7605   if (!scope)
7606     {
7607       /* An explicit "extern" specifier indicates a namespace-scope
7608          variable.  */
7609       if (declspecs->storage_class == sc_extern)
7610         scope = current_decl_namespace ();
7611       else if (!at_function_scope_p ())
7612         scope = current_scope ();
7613     }
7614
7615   if (scope
7616       && (/* If the variable is a namespace-scope variable declared in a
7617              template, we need DECL_LANG_SPECIFIC.  */
7618           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7619           /* Similarly for namespace-scope variables with language linkage
7620              other than C++.  */
7621           || (TREE_CODE (scope) == NAMESPACE_DECL
7622               && current_lang_name != lang_name_cplusplus)
7623           /* Similarly for static data members.  */
7624           || TYPE_P (scope)))
7625     decl = build_lang_decl (VAR_DECL, name, type);
7626   else
7627     decl = build_decl (input_location, VAR_DECL, name, type);
7628
7629   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7630     set_decl_namespace (decl, explicit_scope, 0);
7631   else
7632     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7633
7634   if (declspecs->storage_class == sc_extern)
7635     {
7636       DECL_THIS_EXTERN (decl) = 1;
7637       DECL_EXTERNAL (decl) = !initialized;
7638     }
7639
7640   if (DECL_CLASS_SCOPE_P (decl))
7641     {
7642       set_linkage_for_static_data_member (decl);
7643       /* This function is only called with out-of-class definitions.  */
7644       DECL_EXTERNAL (decl) = 0;
7645       check_class_member_definition_namespace (decl);
7646     }
7647   /* At top level, either `static' or no s.c. makes a definition
7648      (perhaps tentative), and absence of `static' makes it public.  */
7649   else if (toplevel_bindings_p ())
7650     {
7651       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7652                             && (DECL_THIS_EXTERN (decl) || ! constp));
7653       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7654     }
7655   /* Not at top level, only `static' makes a static definition.  */
7656   else
7657     {
7658       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7659       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7660     }
7661
7662   if (declspecs->specs[(int)ds_thread])
7663     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7664
7665   /* If the type of the decl has no linkage, make sure that we'll
7666      notice that in mark_used.  */
7667   if (cxx_dialect > cxx98
7668       && decl_linkage (decl) != lk_none
7669       && DECL_LANG_SPECIFIC (decl) == NULL
7670       && !DECL_EXTERN_C_P (decl)
7671       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7672     retrofit_lang_decl (decl);
7673
7674   if (TREE_PUBLIC (decl))
7675     {
7676       /* [basic.link]: A name with no linkage (notably, the name of a class
7677          or enumeration declared in a local scope) shall not be used to
7678          declare an entity with linkage.
7679
7680          DR 757 relaxes this restriction for C++0x.  */
7681       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7682                 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7683       if (t)
7684         {
7685           if (TYPE_ANONYMOUS_P (t))
7686             {
7687               if (DECL_EXTERN_C_P (decl))
7688                 /* Allow this; it's pretty common in C.  */
7689                 ;
7690               else
7691                 {
7692                   /* DRs 132, 319 and 389 seem to indicate types with
7693                      no linkage can only be used to declare extern "C"
7694                      entities.  Since it's not always an error in the
7695                      ISO C++ 90 Standard, we only issue a warning.  */
7696                   warning (0, "anonymous type with no linkage used to declare "
7697                            "variable %q#D with linkage", decl);
7698                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7699                     warning (0, "%q+#D does not refer to the unqualified "
7700                              "type, so it is not used for linkage",
7701                              TYPE_NAME (t));
7702                 }
7703             }
7704           else
7705             warning (0, "type %qT with no linkage used to declare variable "
7706                      "%q#D with linkage", t, decl);
7707         }
7708     }
7709   else
7710     DECL_INTERFACE_KNOWN (decl) = 1;
7711
7712   return decl;
7713 }
7714
7715 /* Create and return a canonical pointer to member function type, for
7716    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7717
7718 tree
7719 build_ptrmemfunc_type (tree type)
7720 {
7721   tree field, fields;
7722   tree t;
7723   tree unqualified_variant = NULL_TREE;
7724
7725   if (type == error_mark_node)
7726     return type;
7727
7728   /* If a canonical type already exists for this type, use it.  We use
7729      this method instead of type_hash_canon, because it only does a
7730      simple equality check on the list of field members.  */
7731
7732   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7733     return t;
7734
7735   /* Make sure that we always have the unqualified pointer-to-member
7736      type first.  */
7737   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7738     unqualified_variant
7739       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7740
7741   t = make_class_type (RECORD_TYPE);
7742   xref_basetypes (t, NULL_TREE);
7743
7744   /* Let the front end know this is a pointer to member function...  */
7745   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7746   /* ... and not really a class type.  */
7747   SET_CLASS_TYPE_P (t, 0);
7748
7749   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7750   fields = field;
7751
7752   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
7753                       delta_type_node);
7754   DECL_CHAIN (field) = fields;
7755   fields = field;
7756
7757   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7758
7759   /* Zap out the name so that the back end will give us the debugging
7760      information for this anonymous RECORD_TYPE.  */
7761   TYPE_NAME (t) = NULL_TREE;
7762
7763   /* If this is not the unqualified form of this pointer-to-member
7764      type, set the TYPE_MAIN_VARIANT for this type to be the
7765      unqualified type.  Since they are actually RECORD_TYPEs that are
7766      not variants of each other, we must do this manually.
7767      As we just built a new type there is no need to do yet another copy.  */
7768   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7769     {
7770       int type_quals = cp_type_quals (type);
7771       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7772       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7773       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7774       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7775       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7776       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7777       TREE_TYPE (TYPE_BINFO (t)) = t;
7778     }
7779
7780   /* Cache this pointer-to-member type so that we can find it again
7781      later.  */
7782   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7783
7784   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7785     SET_TYPE_STRUCTURAL_EQUALITY (t);
7786   else if (TYPE_CANONICAL (type) != type)
7787     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7788
7789   return t;
7790 }
7791
7792 /* Create and return a pointer to data member type.  */
7793
7794 tree
7795 build_ptrmem_type (tree class_type, tree member_type)
7796 {
7797   if (TREE_CODE (member_type) == METHOD_TYPE)
7798     {
7799       cp_cv_quals quals = type_memfn_quals (member_type);
7800       member_type = build_memfn_type (member_type, class_type, quals);
7801       return build_ptrmemfunc_type (build_pointer_type (member_type));
7802     }
7803   else
7804     {
7805       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7806       return build_offset_type (class_type, member_type);
7807     }
7808 }
7809
7810 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7811    Check to see that the definition is valid.  Issue appropriate error
7812    messages.  Return 1 if the definition is particularly bad, or 0
7813    otherwise.  */
7814
7815 static int
7816 check_static_variable_definition (tree decl, tree type)
7817 {
7818   /* Can't check yet if we don't know the type.  */
7819   if (dependent_type_p (type))
7820     return 0;
7821   /* If DECL is declared constexpr, we'll do the appropriate checks
7822      in check_initializer.  */
7823   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7824     return 0;
7825   else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7826     {
7827       if (!COMPLETE_TYPE_P (type))
7828         error ("in-class initialization of static data member %q#D of "
7829                "incomplete type", decl);
7830       else if (literal_type_p (type))
7831         permerror (input_location,
7832                    "%<constexpr%> needed for in-class initialization of "
7833                    "static data member %q#D of non-integral type", decl);
7834       else
7835         error ("in-class initialization of static data member %q#D of "
7836                "non-literal type", decl);
7837       return 1;
7838     }
7839
7840   /* Motion 10 at San Diego: If a static const integral data member is
7841      initialized with an integral constant expression, the initializer
7842      may appear either in the declaration (within the class), or in
7843      the definition, but not both.  If it appears in the class, the
7844      member is a member constant.  The file-scope definition is always
7845      required.  */
7846   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7847     {
7848       error ("invalid in-class initialization of static data member "
7849              "of non-integral type %qT",
7850              type);
7851       return 1;
7852     }
7853   else if (!CP_TYPE_CONST_P (type))
7854     error ("ISO C++ forbids in-class initialization of non-const "
7855            "static member %qD",
7856            decl);
7857   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7858     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7859              "%qD of non-integral type %qT", decl, type);
7860
7861   return 0;
7862 }
7863
7864 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7865    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7866    expressions out into temporary variables so that walk_tree doesn't
7867    step into them (c++/15764).  */
7868
7869 static tree
7870 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7871 {
7872   struct pointer_set_t *pset = (struct pointer_set_t *)data;
7873   tree expr = *expr_p;
7874   if (TREE_CODE (expr) == SAVE_EXPR)
7875     {
7876       tree op = TREE_OPERAND (expr, 0);
7877       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7878       if (TREE_SIDE_EFFECTS (op))
7879         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7880       *walk_subtrees = 0;
7881     }
7882   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7883     *walk_subtrees = 0;
7884   return NULL;
7885 }
7886
7887 /* Entry point for the above.  */
7888
7889 static void
7890 stabilize_vla_size (tree size)
7891 {
7892   struct pointer_set_t *pset = pointer_set_create ();
7893   /* Break out any function calls into temporary variables.  */
7894   cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7895 }
7896
7897 /* Given the SIZE (i.e., number of elements) in an array, compute an
7898    appropriate index type for the array.  If non-NULL, NAME is the
7899    name of the thing being declared.  */
7900
7901 tree
7902 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7903 {
7904   tree type;
7905   tree itype;
7906   tree osize = size;
7907   tree abi_1_itype = NULL_TREE;
7908
7909   if (error_operand_p (size))
7910     return error_mark_node;
7911
7912   type = TREE_TYPE (size);
7913   /* type_dependent_expression_p? */
7914   if (!dependent_type_p (type))
7915     {
7916       mark_rvalue_use (size);
7917
7918       if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7919           && TREE_SIDE_EFFECTS (size))
7920         /* In C++98, we mark a non-constant array bound with a magic
7921            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7922       else
7923         {
7924           size = fold_non_dependent_expr (size);
7925
7926           if (CLASS_TYPE_P (type)
7927               && CLASSTYPE_LITERAL_P (type))
7928             {
7929               size = build_expr_type_conversion (WANT_INT, size, true);
7930               if (!size)
7931                 {
7932                   if (!(complain & tf_error))
7933                     return error_mark_node;
7934                   if (name)
7935                     error ("size of array %qD has non-integral type %qT",
7936                            name, type);
7937                   else
7938                     error ("size of array has non-integral type %qT", type);
7939                   size = integer_one_node;
7940                 }
7941               if (size == error_mark_node)
7942                 return error_mark_node;
7943               type = TREE_TYPE (size);
7944               /* We didn't support this case in GCC 3.2, so don't bother
7945                  trying to model it now in ABI v1.  */
7946               abi_1_itype = error_mark_node;
7947             }
7948
7949           size = maybe_constant_value (size);
7950           if (!TREE_CONSTANT (size))
7951             size = osize;
7952         }
7953
7954       if (error_operand_p (size))
7955         return error_mark_node;
7956
7957       /* The array bound must be an integer type.  */
7958       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7959         {
7960           if (!(complain & tf_error))
7961             return error_mark_node;
7962           if (name)
7963             error ("size of array %qD has non-integral type %qT", name, type);
7964           else
7965             error ("size of array has non-integral type %qT", type);
7966           size = integer_one_node;
7967           type = TREE_TYPE (size);
7968         }
7969     }
7970
7971   /* A type is dependent if it is...an array type constructed from any
7972      dependent type or whose size is specified by a constant expression
7973      that is value-dependent.  */
7974   /* We can only call value_dependent_expression_p on integral constant
7975      expressions; treat non-constant expressions as dependent, too.  */
7976   if (processing_template_decl
7977       && (dependent_type_p (type)
7978           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7979     {
7980       /* We cannot do any checking for a SIZE that isn't known to be
7981          constant. Just build the index type and mark that it requires
7982          structural equality checks.  */
7983       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7984                                            size, integer_one_node));
7985       TYPE_DEPENDENT_P (itype) = 1;
7986       TYPE_DEPENDENT_P_VALID (itype) = 1;
7987       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7988       return itype;
7989     }
7990   
7991   if (!abi_version_at_least (2) && processing_template_decl
7992       && abi_1_itype == NULL_TREE)
7993     /* For abi-1, we handled all instances in templates the same way,
7994        even when they were non-dependent. This affects the manglings
7995        produced.  So, we do the normal checking for non-dependent
7996        sizes, but at the end we'll return the same type that abi-1
7997        would have, but with TYPE_CANONICAL set to the "right"
7998        value that the current ABI would provide. */
7999     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
8000                                                osize, integer_one_node));
8001
8002   /* Normally, the array-bound will be a constant.  */
8003   if (TREE_CODE (size) == INTEGER_CST)
8004     {
8005       /* Check to see if the array bound overflowed.  Make that an
8006          error, no matter how generous we're being.  */
8007       constant_expression_error (size);
8008
8009       /* An array must have a positive number of elements.  */
8010       if (INT_CST_LT (size, integer_zero_node))
8011         {
8012           if (!(complain & tf_error))
8013             return error_mark_node;
8014           if (name)
8015             error ("size of array %qD is negative", name);
8016           else
8017             error ("size of array is negative");
8018           size = integer_one_node;
8019         }
8020       /* As an extension we allow zero-sized arrays.  */
8021       else if (integer_zerop (size))
8022         {
8023           if (!(complain & tf_error))
8024             /* We must fail if performing argument deduction (as
8025                indicated by the state of complain), so that
8026                another substitution can be found.  */
8027             return error_mark_node;
8028           else if (in_system_header)
8029             /* Allow them in system headers because glibc uses them.  */;
8030           else if (name)
8031             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
8032           else
8033             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
8034         }
8035     }
8036   else if (TREE_CONSTANT (size)
8037            /* We don't allow VLAs at non-function scopes, or during
8038               tentative template substitution.  */
8039            || !at_function_scope_p () || !(complain & tf_error))
8040     {
8041       if (!(complain & tf_error))
8042         return error_mark_node;
8043       /* `(int) &fn' is not a valid array bound.  */
8044       if (name)
8045         error ("size of array %qD is not an integral constant-expression",
8046                name);
8047       else
8048         error ("size of array is not an integral constant-expression");
8049       size = integer_one_node;
8050     }
8051   else if (pedantic && warn_vla != 0)
8052     {
8053       if (name)
8054         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
8055       else
8056         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
8057     }
8058   else if (warn_vla > 0)
8059     {
8060       if (name)
8061         warning (OPT_Wvla, 
8062                  "variable length array %qD is used", name);
8063       else
8064         warning (OPT_Wvla, 
8065                  "variable length array is used");
8066     }
8067
8068   if (processing_template_decl && !TREE_CONSTANT (size))
8069     /* A variable sized array.  */
8070     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
8071   else
8072     {
8073       HOST_WIDE_INT saved_processing_template_decl;
8074
8075       /* Compute the index of the largest element in the array.  It is
8076          one less than the number of elements in the array.  We save
8077          and restore PROCESSING_TEMPLATE_DECL so that computations in
8078          cp_build_binary_op will be appropriately folded.  */
8079       saved_processing_template_decl = processing_template_decl;
8080       processing_template_decl = 0;
8081       itype = cp_build_binary_op (input_location,
8082                                   MINUS_EXPR,
8083                                   cp_convert (ssizetype, size),
8084                                   cp_convert (ssizetype, integer_one_node),
8085                                   tf_warning_or_error);
8086       itype = fold (itype);
8087       processing_template_decl = saved_processing_template_decl;
8088
8089       if (!TREE_CONSTANT (itype))
8090         /* A variable sized array.  */
8091         itype = variable_size (itype);
8092       /* Make sure that there was no overflow when creating to a signed
8093          index type.  (For example, on a 32-bit machine, an array with
8094          size 2^32 - 1 is too big.)  */
8095       else if (TREE_CODE (itype) == INTEGER_CST
8096                && TREE_OVERFLOW (itype))
8097         {
8098           if (!(complain & tf_error))
8099             return error_mark_node;
8100           error ("overflow in array dimension");
8101           TREE_OVERFLOW (itype) = 0;
8102         }
8103     }
8104
8105   /* Create and return the appropriate index type.  */
8106   if (abi_1_itype && abi_1_itype != error_mark_node)
8107     {
8108       tree t = build_index_type (itype);
8109       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
8110       itype = abi_1_itype;
8111     }
8112   else
8113     itype = build_index_type (itype);
8114
8115   /* If the index type were dependent, we would have returned early, so
8116      remember that it isn't.  */
8117   TYPE_DEPENDENT_P (itype) = 0;
8118   TYPE_DEPENDENT_P_VALID (itype) = 1;
8119   return itype;
8120 }
8121
8122 /* Returns the scope (if any) in which the entity declared by
8123    DECLARATOR will be located.  If the entity was declared with an
8124    unqualified name, NULL_TREE is returned.  */
8125
8126 tree
8127 get_scope_of_declarator (const cp_declarator *declarator)
8128 {
8129   while (declarator && declarator->kind != cdk_id)
8130     declarator = declarator->declarator;
8131
8132   /* If the declarator-id is a SCOPE_REF, the scope in which the
8133      declaration occurs is the first operand.  */
8134   if (declarator
8135       && declarator->u.id.qualifying_scope)
8136     return declarator->u.id.qualifying_scope;
8137
8138   /* Otherwise, the declarator is not a qualified name; the entity will
8139      be declared in the current scope.  */
8140   return NULL_TREE;
8141 }
8142
8143 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
8144    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
8145    with this type.  */
8146
8147 static tree
8148 create_array_type_for_decl (tree name, tree type, tree size)
8149 {
8150   tree itype = NULL_TREE;
8151
8152   /* If things have already gone awry, bail now.  */
8153   if (type == error_mark_node || size == error_mark_node)
8154     return error_mark_node;
8155
8156   /* 8.3.4/1: If the type of the identifier of D contains the auto
8157      type-specifier, the program is ill-formed.  */
8158   if (pedantic && type_uses_auto (type))
8159     pedwarn (input_location, OPT_pedantic,
8160              "declaration of %qD as array of %<auto%>", name);
8161
8162   /* If there are some types which cannot be array elements,
8163      issue an error-message and return.  */
8164   switch (TREE_CODE (type))
8165     {
8166     case VOID_TYPE:
8167       if (name)
8168         error ("declaration of %qD as array of void", name);
8169       else
8170         error ("creating array of void");
8171       return error_mark_node;
8172
8173     case FUNCTION_TYPE:
8174       if (name)
8175         error ("declaration of %qD as array of functions", name);
8176       else
8177         error ("creating array of functions");
8178       return error_mark_node;
8179
8180     case REFERENCE_TYPE:
8181       if (name)
8182         error ("declaration of %qD as array of references", name);
8183       else
8184         error ("creating array of references");
8185       return error_mark_node;
8186
8187     case METHOD_TYPE:
8188       if (name)
8189         error ("declaration of %qD as array of function members", name);
8190       else
8191         error ("creating array of function members");
8192       return error_mark_node;
8193
8194     default:
8195       break;
8196     }
8197
8198   /* [dcl.array]
8199
8200      The constant expressions that specify the bounds of the arrays
8201      can be omitted only for the first member of the sequence.  */
8202   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8203     {
8204       if (name)
8205         error ("declaration of %qD as multidimensional array must "
8206                "have bounds for all dimensions except the first",
8207                name);
8208       else
8209         error ("multidimensional array must have bounds for all "
8210                "dimensions except the first");
8211
8212       return error_mark_node;
8213     }
8214
8215   /* Figure out the index type for the array.  */
8216   if (size)
8217     itype = compute_array_index_type (name, size, tf_warning_or_error);
8218
8219   /* [dcl.array]
8220      T is called the array element type; this type shall not be [...] an
8221      abstract class type.  */
8222   abstract_virtuals_error (name, type);
8223
8224   return build_cplus_array_type (type, itype);
8225 }
8226
8227 /* Check that it's OK to declare a function with the indicated TYPE.
8228    SFK indicates the kind of special function (if any) that this
8229    function is.  OPTYPE is the type given in a conversion operator
8230    declaration, or the class type for a constructor/destructor.
8231    Returns the actual return type of the function; that
8232    may be different than TYPE if an error occurs, or for certain
8233    special functions.  */
8234
8235 static tree
8236 check_special_function_return_type (special_function_kind sfk,
8237                                     tree type,
8238                                     tree optype)
8239 {
8240   switch (sfk)
8241     {
8242     case sfk_constructor:
8243       if (type)
8244         error ("return type specification for constructor invalid");
8245
8246       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8247         type = build_pointer_type (optype);
8248       else
8249         type = void_type_node;
8250       break;
8251
8252     case sfk_destructor:
8253       if (type)
8254         error ("return type specification for destructor invalid");
8255       /* We can't use the proper return type here because we run into
8256          problems with ambiguous bases and covariant returns.
8257          Java classes are left unchanged because (void *) isn't a valid
8258          Java type, and we don't want to change the Java ABI.  */
8259       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8260         type = build_pointer_type (void_type_node);
8261       else
8262         type = void_type_node;
8263       break;
8264
8265     case sfk_conversion:
8266       if (type)
8267         error ("return type specified for %<operator %T%>",  optype);
8268       type = optype;
8269       break;
8270
8271     default:
8272       gcc_unreachable ();
8273     }
8274
8275   return type;
8276 }
8277
8278 /* A variable or data member (whose unqualified name is IDENTIFIER)
8279    has been declared with the indicated TYPE.  If the TYPE is not
8280    acceptable, issue an error message and return a type to use for
8281    error-recovery purposes.  */
8282
8283 tree
8284 check_var_type (tree identifier, tree type)
8285 {
8286   if (VOID_TYPE_P (type))
8287     {
8288       if (!identifier)
8289         error ("unnamed variable or field declared void");
8290       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8291         {
8292           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8293           error ("variable or field %qE declared void", identifier);
8294         }
8295       else
8296         error ("variable or field declared void");
8297       type = error_mark_node;
8298     }
8299
8300   return type;
8301 }
8302
8303 /* Given declspecs and a declarator (abstract or otherwise), determine
8304    the name and type of the object declared and construct a DECL node
8305    for it.
8306
8307    DECLSPECS points to the representation of declaration-specifier
8308    sequence that precedes declarator.
8309
8310    DECL_CONTEXT says which syntactic context this declaration is in:
8311      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8312      FUNCDEF for a function definition.  Like NORMAL but a few different
8313       error messages in each case.  Return value may be zero meaning
8314       this definition is too screwy to try to parse.
8315      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8316       handle member functions (which have FIELD context).
8317       Return value may be zero meaning this definition is too screwy to
8318       try to parse.
8319      PARM for a parameter declaration (either within a function prototype
8320       or before a function body).  Make a PARM_DECL, or return void_type_node.
8321      TPARM for a template parameter declaration.
8322      CATCHPARM for a parameter declaration before a catch clause.
8323      TYPENAME if for a typename (in a cast or sizeof).
8324       Don't make a DECL node; just return the ..._TYPE node.
8325      FIELD for a struct or union field; make a FIELD_DECL.
8326      BITFIELD for a field with specified width.
8327
8328    INITIALIZED is as for start_decl.
8329
8330    ATTRLIST is a pointer to the list of attributes, which may be NULL
8331    if there are none; *ATTRLIST may be modified if attributes from inside
8332    the declarator should be applied to the declaration.
8333
8334    When this function is called, scoping variables (such as
8335    CURRENT_CLASS_TYPE) should reflect the scope in which the
8336    declaration occurs, not the scope in which the new declaration will
8337    be placed.  For example, on:
8338
8339      void S::f() { ... }
8340
8341    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8342    should not be `S'.
8343
8344    Returns a DECL (if a declarator is present), a TYPE (if there is no
8345    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8346    error occurs. */
8347
8348 tree
8349 grokdeclarator (const cp_declarator *declarator,
8350                 const cp_decl_specifier_seq *declspecs,
8351                 enum decl_context decl_context,
8352                 int initialized,
8353                 tree* attrlist)
8354 {
8355   tree type = NULL_TREE;
8356   int longlong = 0;
8357   int explicit_int128 = 0;
8358   int virtualp, explicitp, friendp, inlinep, staticp;
8359   int explicit_int = 0;
8360   int explicit_char = 0;
8361   int defaulted_int = 0;
8362   tree dependent_name = NULL_TREE;
8363
8364   tree typedef_decl = NULL_TREE;
8365   const char *name = NULL;
8366   tree typedef_type = NULL_TREE;
8367   /* True if this declarator is a function definition.  */
8368   bool funcdef_flag = false;
8369   cp_declarator_kind innermost_code = cdk_error;
8370   int bitfield = 0;
8371 #if 0
8372   /* See the code below that used this.  */
8373   tree decl_attr = NULL_TREE;
8374 #endif
8375
8376   /* Keep track of what sort of function is being processed
8377      so that we can warn about default return values, or explicit
8378      return values which do not match prescribed defaults.  */
8379   special_function_kind sfk = sfk_none;
8380
8381   tree dname = NULL_TREE;
8382   tree ctor_return_type = NULL_TREE;
8383   enum overload_flags flags = NO_SPECIAL;
8384   /* cv-qualifiers that apply to the declarator, for a declaration of
8385      a member function.  */
8386   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8387   /* virt-specifiers that apply to the declarator, for a declaration of
8388      a member function.  */
8389   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8390   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8391   int type_quals;
8392   tree raises = NULL_TREE;
8393   int template_count = 0;
8394   tree returned_attrs = NULL_TREE;
8395   tree parms = NULL_TREE;
8396   const cp_declarator *id_declarator;
8397   /* The unqualified name of the declarator; either an
8398      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8399   tree unqualified_id;
8400   /* The class type, if any, in which this entity is located,
8401      or NULL_TREE if none.  Note that this value may be different from
8402      the current class type; for example if an attempt is made to declare
8403      "A::f" inside "B", this value will be "A".  */
8404   tree ctype = current_class_type;
8405   /* The NAMESPACE_DECL for the namespace in which this entity is
8406      located.  If an unqualified name is used to declare the entity,
8407      this value will be NULL_TREE, even if the entity is located at
8408      namespace scope.  */
8409   tree in_namespace = NULL_TREE;
8410   cp_storage_class storage_class;
8411   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8412   bool type_was_error_mark_node = false;
8413   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8414   bool template_type_arg = false;
8415   bool template_parm_flag = false;
8416   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8417   const char *errmsg;
8418
8419   signed_p = declspecs->specs[(int)ds_signed];
8420   unsigned_p = declspecs->specs[(int)ds_unsigned];
8421   short_p = declspecs->specs[(int)ds_short];
8422   long_p = declspecs->specs[(int)ds_long];
8423   longlong = declspecs->specs[(int)ds_long] >= 2;
8424   explicit_int128 = declspecs->explicit_int128_p;
8425   thread_p = declspecs->specs[(int)ds_thread];
8426
8427   if (decl_context == FUNCDEF)
8428     funcdef_flag = true, decl_context = NORMAL;
8429   else if (decl_context == MEMFUNCDEF)
8430     funcdef_flag = true, decl_context = FIELD;
8431   else if (decl_context == BITFIELD)
8432     bitfield = 1, decl_context = FIELD;
8433   else if (decl_context == TEMPLATE_TYPE_ARG)
8434     template_type_arg = true, decl_context = TYPENAME;
8435   else if (decl_context == TPARM)
8436     template_parm_flag = true, decl_context = PARM;
8437
8438   if (initialized > 1)
8439     funcdef_flag = true;
8440
8441   /* Look inside a declarator for the name being declared
8442      and get it as a string, for an error message.  */
8443   for (id_declarator = declarator;
8444        id_declarator;
8445        id_declarator = id_declarator->declarator)
8446     {
8447       if (id_declarator->kind != cdk_id)
8448         innermost_code = id_declarator->kind;
8449
8450       switch (id_declarator->kind)
8451         {
8452         case cdk_function:
8453           if (id_declarator->declarator
8454               && id_declarator->declarator->kind == cdk_id)
8455             {
8456               sfk = id_declarator->declarator->u.id.sfk;
8457               if (sfk == sfk_destructor)
8458                 flags = DTOR_FLAG;
8459             }
8460           break;
8461
8462         case cdk_id:
8463           {
8464             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8465             tree decl = id_declarator->u.id.unqualified_name;
8466             if (!decl)
8467               break;
8468             if (qualifying_scope)
8469               {
8470                 if (at_function_scope_p ())
8471                   {
8472                     /* [dcl.meaning] 
8473
8474                        A declarator-id shall not be qualified except
8475                        for ... 
8476
8477                        None of the cases are permitted in block
8478                        scope.  */
8479                     if (qualifying_scope == global_namespace)
8480                       error ("invalid use of qualified-name %<::%D%>",
8481                              decl);
8482                     else if (TYPE_P (qualifying_scope))
8483                       error ("invalid use of qualified-name %<%T::%D%>",
8484                              qualifying_scope, decl);
8485                     else 
8486                       error ("invalid use of qualified-name %<%D::%D%>",
8487                              qualifying_scope, decl);
8488                     return error_mark_node;
8489                   }
8490                 else if (TYPE_P (qualifying_scope))
8491                   {
8492                     ctype = qualifying_scope;
8493                     if (!MAYBE_CLASS_TYPE_P (ctype))
8494                       {
8495                         error ("%q#T is not a class or a namespace", ctype);
8496                         ctype = NULL_TREE;
8497                       }
8498                     else if (innermost_code != cdk_function
8499                              && current_class_type
8500                              && !UNIQUELY_DERIVED_FROM_P (ctype,
8501                                                           current_class_type))
8502                       {
8503                         error ("type %qT is not derived from type %qT",
8504                                ctype, current_class_type);
8505                         return error_mark_node;
8506                       }
8507                   }
8508                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8509                   in_namespace = qualifying_scope;
8510               }
8511             switch (TREE_CODE (decl))
8512               {
8513               case BIT_NOT_EXPR:
8514                 {
8515                   tree type;
8516
8517                   if (innermost_code != cdk_function)
8518                     {
8519                       error ("declaration of %qD as non-function", decl);
8520                       return error_mark_node;
8521                     }
8522                   else if (!qualifying_scope
8523                            && !(current_class_type && at_class_scope_p ()))
8524                     {
8525                       error ("declaration of %qD as non-member", decl);
8526                       return error_mark_node;
8527                     }
8528
8529                   type = TREE_OPERAND (decl, 0);
8530                   if (TYPE_P (type))
8531                     type = constructor_name (type);
8532                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
8533                   dname = decl;
8534                 }
8535                 break;
8536
8537               case TEMPLATE_ID_EXPR:
8538                 {
8539                   tree fns = TREE_OPERAND (decl, 0);
8540
8541                   dname = fns;
8542                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
8543                     {
8544                       gcc_assert (is_overloaded_fn (dname));
8545                       dname = DECL_NAME (get_first_fn (dname));
8546                     }
8547                 }
8548                 /* Fall through.  */
8549
8550               case IDENTIFIER_NODE:
8551                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8552                   dname = decl;
8553
8554                 if (C_IS_RESERVED_WORD (dname))
8555                   {
8556                     error ("declarator-id missing; using reserved word %qD",
8557                            dname);
8558                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8559                   }
8560                 else if (!IDENTIFIER_TYPENAME_P (dname))
8561                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8562                 else
8563                   {
8564                     gcc_assert (flags == NO_SPECIAL);
8565                     flags = TYPENAME_FLAG;
8566                     ctor_return_type = TREE_TYPE (dname);
8567                     sfk = sfk_conversion;
8568                     if (is_typename_at_global_scope (dname))
8569                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8570                     else
8571                       name = "<invalid operator>";
8572                   }
8573                 break;
8574
8575               default:
8576                 gcc_unreachable ();
8577               }
8578             break;
8579           }
8580
8581         case cdk_array:
8582         case cdk_pointer:
8583         case cdk_reference:
8584         case cdk_ptrmem:
8585           break;
8586
8587         case cdk_error:
8588           return error_mark_node;
8589
8590         default:
8591           gcc_unreachable ();
8592         }
8593       if (id_declarator->kind == cdk_id)
8594         break;
8595     }
8596
8597   /* [dcl.fct.edf]
8598
8599      The declarator in a function-definition shall have the form
8600      D1 ( parameter-declaration-clause) ...  */
8601   if (funcdef_flag && innermost_code != cdk_function)
8602     {
8603       error ("function definition does not declare parameters");
8604       return error_mark_node;
8605     }
8606
8607   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8608       && innermost_code != cdk_function
8609       && ! (ctype && !declspecs->any_specifiers_p))
8610     {
8611       error ("declaration of %qD as non-function", dname);
8612       return error_mark_node;
8613     }
8614
8615   if (dname
8616       && TREE_CODE (dname) == IDENTIFIER_NODE
8617       && UDLIT_OPER_P (dname)
8618       && innermost_code != cdk_function)
8619     {
8620       error ("declaration of %qD as non-function", dname);
8621       return error_mark_node;
8622     }
8623
8624   if (dname && IDENTIFIER_OPNAME_P (dname))
8625     {
8626       if (declspecs->specs[(int)ds_typedef])
8627         {
8628           error ("declaration of %qD as %<typedef%>", dname);
8629           return error_mark_node;
8630         }
8631       else if (decl_context == PARM || decl_context == CATCHPARM)
8632         {
8633           error ("declaration of %qD as parameter", dname);
8634           return error_mark_node;
8635         }
8636     }
8637
8638   /* Anything declared one level down from the top level
8639      must be one of the parameters of a function
8640      (because the body is at least two levels down).  */
8641
8642   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8643      by not allowing C++ class definitions to specify their parameters
8644      with xdecls (must be spec.d in the parmlist).
8645
8646      Since we now wait to push a class scope until we are sure that
8647      we are in a legitimate method context, we must set oldcname
8648      explicitly (since current_class_name is not yet alive).
8649
8650      We also want to avoid calling this a PARM if it is in a namespace.  */
8651
8652   if (decl_context == NORMAL && !toplevel_bindings_p ())
8653     {
8654       cp_binding_level *b = current_binding_level;
8655       current_binding_level = b->level_chain;
8656       if (current_binding_level != 0 && toplevel_bindings_p ())
8657         decl_context = PARM;
8658       current_binding_level = b;
8659     }
8660
8661   if (name == NULL)
8662     name = decl_context == PARM ? "parameter" : "type name";
8663
8664   if (constexpr_p && declspecs->specs[(int)ds_typedef])
8665     {
8666       error ("%<constexpr%> cannot appear in a typedef declaration");
8667       return error_mark_node;
8668     }
8669
8670   /* If there were multiple types specified in the decl-specifier-seq,
8671      issue an error message.  */
8672   if (declspecs->multiple_types_p)
8673     {
8674       error ("two or more data types in declaration of %qs", name);
8675       return error_mark_node;
8676     }
8677
8678   if (declspecs->conflicting_specifiers_p)
8679     {
8680       error ("conflicting specifiers in declaration of %qs", name);
8681       return error_mark_node;
8682     }
8683
8684   /* Extract the basic type from the decl-specifier-seq.  */
8685   type = declspecs->type;
8686   if (type == error_mark_node)
8687     {
8688       type = NULL_TREE;
8689       type_was_error_mark_node = true;
8690     }
8691   /* If the entire declaration is itself tagged as deprecated then
8692      suppress reports of deprecated items.  */
8693   if (type && TREE_DEPRECATED (type)
8694       && deprecated_state != DEPRECATED_SUPPRESS)
8695     warn_deprecated_use (type, NULL_TREE);
8696   if (type && TREE_CODE (type) == TYPE_DECL)
8697     {
8698       typedef_decl = type;
8699       type = TREE_TYPE (typedef_decl);
8700       if (TREE_DEPRECATED (type)
8701           && DECL_ARTIFICIAL (typedef_decl)
8702           && deprecated_state != DEPRECATED_SUPPRESS)
8703         warn_deprecated_use (type, NULL_TREE);
8704     }
8705   /* No type at all: default to `int', and set DEFAULTED_INT
8706      because it was not a user-defined typedef.  */
8707   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8708     {
8709       /* These imply 'int'.  */
8710       type = integer_type_node;
8711       defaulted_int = 1;
8712     }
8713   /* Gather flags.  */
8714   explicit_int = declspecs->explicit_int_p;
8715   explicit_char = declspecs->explicit_char_p;
8716
8717 #if 0
8718   /* See the code below that used this.  */
8719   if (typedef_decl)
8720     decl_attr = DECL_ATTRIBUTES (typedef_decl);
8721 #endif
8722   typedef_type = type;
8723
8724
8725   if (sfk != sfk_conversion)
8726     ctor_return_type = ctype;
8727
8728   if (sfk != sfk_none)
8729     type = check_special_function_return_type (sfk, type,
8730                                                ctor_return_type);
8731   else if (type == NULL_TREE)
8732     {
8733       int is_main;
8734
8735       explicit_int = -1;
8736
8737       /* We handle `main' specially here, because 'main () { }' is so
8738          common.  With no options, it is allowed.  With -Wreturn-type,
8739          it is a warning.  It is only an error with -pedantic-errors.  */
8740       is_main = (funcdef_flag
8741                  && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8742                  && MAIN_NAME_P (dname)
8743                  && ctype == NULL_TREE
8744                  && in_namespace == NULL_TREE
8745                  && current_namespace == global_namespace);
8746
8747       if (type_was_error_mark_node)
8748         /* We've already issued an error, don't complain more.  */;
8749       else if (in_system_header || flag_ms_extensions)
8750         /* Allow it, sigh.  */;
8751       else if (! is_main)
8752         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8753       else if (pedantic)
8754         pedwarn (input_location, OPT_pedantic,
8755                  "ISO C++ forbids declaration of %qs with no type", name);
8756       else
8757         warning (OPT_Wreturn_type,
8758                  "ISO C++ forbids declaration of %qs with no type", name);
8759
8760       type = integer_type_node;
8761     }
8762
8763   ctype = NULL_TREE;
8764
8765   if (explicit_int128)
8766     {
8767       if (int128_integer_type_node == NULL_TREE)
8768         {
8769           error ("%<__int128%> is not supported by this target");
8770           explicit_int128 = false;
8771         }
8772       else if (pedantic && ! in_system_header)
8773         pedwarn (input_location, OPT_pedantic,
8774                  "ISO C++ does not support %<__int128%> for %qs", name);
8775     }
8776
8777   /* Now process the modifiers that were specified
8778      and check for invalid combinations.  */
8779
8780   /* Long double is a special combination.  */
8781   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8782     {
8783       long_p = false;
8784       type = cp_build_qualified_type (long_double_type_node,
8785                                       cp_type_quals (type));
8786     }
8787
8788   /* Check all other uses of type modifiers.  */
8789
8790   if (unsigned_p || signed_p || long_p || short_p)
8791     {
8792       int ok = 0;
8793
8794       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8795         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8796       else if (signed_p && unsigned_p)
8797         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8798       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8799         error ("%<long long%> invalid for %qs", name);
8800       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8801         error ("%<long%> invalid for %qs", name);
8802       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8803         error ("%<short%> invalid for %qs", name);
8804       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8805         error ("%<long%> or %<short%> invalid for %qs", name);
8806       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8807         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8808       else if ((long_p || short_p) && explicit_char)
8809         error ("%<long%> or %<short%> specified with char for %qs", name);
8810       else if (long_p && short_p)
8811         error ("%<long%> and %<short%> specified together for %qs", name);
8812       else if (type == char16_type_node || type == char32_type_node)
8813         {
8814           if (signed_p || unsigned_p)
8815             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8816           else if (short_p || long_p)
8817             error ("%<short%> or %<long%> invalid for %qs", name);
8818         }
8819       else
8820         {
8821           ok = 1;
8822           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8823             {
8824               pedwarn (input_location, OPT_pedantic, 
8825                        "long, short, signed or unsigned used invalidly for %qs",
8826                        name);
8827               if (flag_pedantic_errors)
8828                 ok = 0;
8829             }
8830         }
8831
8832       /* Discard the type modifiers if they are invalid.  */
8833       if (! ok)
8834         {
8835           unsigned_p = false;
8836           signed_p = false;
8837           long_p = false;
8838           short_p = false;
8839           longlong = 0;
8840         }
8841     }
8842
8843   /* Decide whether an integer type is signed or not.
8844      Optionally treat bitfields as signed by default.  */
8845   if (unsigned_p
8846       /* [class.bit]
8847
8848          It is implementation-defined whether a plain (neither
8849          explicitly signed or unsigned) char, short, int, or long
8850          bit-field is signed or unsigned.
8851
8852          Naturally, we extend this to long long as well.  Note that
8853          this does not include wchar_t.  */
8854       || (bitfield && !flag_signed_bitfields
8855           && !signed_p
8856           /* A typedef for plain `int' without `signed' can be
8857              controlled just like plain `int', but a typedef for
8858              `signed int' cannot be so controlled.  */
8859           && !(typedef_decl
8860                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8861           && TREE_CODE (type) == INTEGER_TYPE
8862           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8863     {
8864       if (explicit_int128)
8865         type = int128_unsigned_type_node;
8866       else if (longlong)
8867         type = long_long_unsigned_type_node;
8868       else if (long_p)
8869         type = long_unsigned_type_node;
8870       else if (short_p)
8871         type = short_unsigned_type_node;
8872       else if (type == char_type_node)
8873         type = unsigned_char_type_node;
8874       else if (typedef_decl)
8875         type = unsigned_type_for (type);
8876       else
8877         type = unsigned_type_node;
8878     }
8879   else if (signed_p && type == char_type_node)
8880     type = signed_char_type_node;
8881   else if (explicit_int128)
8882     type = int128_integer_type_node;
8883   else if (longlong)
8884     type = long_long_integer_type_node;
8885   else if (long_p)
8886     type = long_integer_type_node;
8887   else if (short_p)
8888     type = short_integer_type_node;
8889
8890   if (declspecs->specs[(int)ds_complex])
8891     {
8892       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8893         error ("complex invalid for %qs", name);
8894       /* If we just have "complex", it is equivalent to
8895          "complex double", but if any modifiers at all are specified it is
8896          the complex form of TYPE.  E.g, "complex short" is
8897          "complex short int".  */
8898       else if (defaulted_int && ! longlong && ! explicit_int128
8899                && ! (long_p || short_p || signed_p || unsigned_p))
8900         type = complex_double_type_node;
8901       else if (type == integer_type_node)
8902         type = complex_integer_type_node;
8903       else if (type == float_type_node)
8904         type = complex_float_type_node;
8905       else if (type == double_type_node)
8906         type = complex_double_type_node;
8907       else if (type == long_double_type_node)
8908         type = complex_long_double_type_node;
8909       else
8910         type = build_complex_type (type);
8911     }
8912
8913   type_quals = TYPE_UNQUALIFIED;
8914   if (declspecs->specs[(int)ds_const])
8915     type_quals |= TYPE_QUAL_CONST;
8916   if (declspecs->specs[(int)ds_volatile])
8917     type_quals |= TYPE_QUAL_VOLATILE;
8918   if (declspecs->specs[(int)ds_restrict])
8919     type_quals |= TYPE_QUAL_RESTRICT;
8920   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8921     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8922            ctor_return_type);
8923
8924   type_quals |= cp_type_quals (type);
8925   type = cp_build_qualified_type_real
8926     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8927                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8928   /* We might have ignored or rejected some of the qualifiers.  */
8929   type_quals = cp_type_quals (type);
8930
8931   staticp = 0;
8932   inlinep = !! declspecs->specs[(int)ds_inline];
8933   virtualp = !! declspecs->specs[(int)ds_virtual];
8934   explicitp = !! declspecs->specs[(int)ds_explicit];
8935
8936   storage_class = declspecs->storage_class;
8937   if (storage_class == sc_static)
8938     staticp = 1 + (decl_context == FIELD);
8939
8940   if (virtualp && staticp == 2)
8941     {
8942       error ("member %qD cannot be declared both virtual and static", dname);
8943       storage_class = sc_none;
8944       staticp = 0;
8945     }
8946   friendp = !! declspecs->specs[(int)ds_friend];
8947
8948   if (dependent_name && !friendp)
8949     {
8950       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8951       return error_mark_node;
8952     }
8953
8954   /* Issue errors about use of storage classes for parameters.  */
8955   if (decl_context == PARM)
8956     {
8957       if (declspecs->specs[(int)ds_typedef])
8958         {
8959           error ("typedef declaration invalid in parameter declaration");
8960           return error_mark_node;
8961         }
8962       else if (template_parm_flag && storage_class != sc_none)
8963         {
8964           error ("storage class specified for template parameter %qs", name);
8965           return error_mark_node;
8966         }
8967       else if (storage_class == sc_static
8968                || storage_class == sc_extern
8969                || thread_p)
8970         error ("storage class specifiers invalid in parameter declarations");
8971
8972       /* Function parameters cannot be constexpr.  If we saw one, moan
8973          and pretend it wasn't there.  */
8974       if (constexpr_p)
8975         {
8976           error ("a parameter cannot be declared %<constexpr%>");
8977           constexpr_p = 0;
8978         }
8979     }
8980
8981   /* Give error if `virtual' is used outside of class declaration.  */
8982   if (virtualp
8983       && (current_class_name == NULL_TREE || decl_context != FIELD))
8984     {
8985       error ("%<virtual%> outside class declaration");
8986       virtualp = 0;
8987     }
8988
8989   /* Static anonymous unions are dealt with here.  */
8990   if (staticp && decl_context == TYPENAME
8991       && declspecs->type
8992       && ANON_AGGR_TYPE_P (declspecs->type))
8993     decl_context = FIELD;
8994
8995   /* Warn about storage classes that are invalid for certain
8996      kinds of declarations (parameters, typenames, etc.).  */
8997   if (thread_p
8998       && ((storage_class
8999            && storage_class != sc_extern
9000            && storage_class != sc_static)
9001           || declspecs->specs[(int)ds_typedef]))
9002     {
9003       error ("multiple storage classes in declaration of %qs", name);
9004       thread_p = false;
9005     }
9006   if (decl_context != NORMAL
9007       && ((storage_class != sc_none
9008            && storage_class != sc_mutable)
9009           || thread_p))
9010     {
9011       if ((decl_context == PARM || decl_context == CATCHPARM)
9012           && (storage_class == sc_register
9013               || storage_class == sc_auto))
9014         ;
9015       else if (declspecs->specs[(int)ds_typedef])
9016         ;
9017       else if (decl_context == FIELD
9018                /* C++ allows static class elements.  */
9019                && storage_class == sc_static)
9020         /* C++ also allows inlines and signed and unsigned elements,
9021            but in those cases we don't come in here.  */
9022         ;
9023       else
9024         {
9025           if (decl_context == FIELD)
9026             error ("storage class specified for %qs", name);
9027           else
9028             {
9029               if (decl_context == PARM || decl_context == CATCHPARM)
9030                 error ("storage class specified for parameter %qs", name);
9031               else
9032                 error ("storage class specified for typename");
9033             }
9034           if (storage_class == sc_register
9035               || storage_class == sc_auto
9036               || storage_class == sc_extern
9037               || thread_p)
9038             storage_class = sc_none;
9039         }
9040     }
9041   else if (storage_class == sc_extern && funcdef_flag
9042            && ! toplevel_bindings_p ())
9043     error ("nested function %qs declared %<extern%>", name);
9044   else if (toplevel_bindings_p ())
9045     {
9046       if (storage_class == sc_auto)
9047         error ("top-level declaration of %qs specifies %<auto%>", name);
9048     }
9049   else if (thread_p
9050            && storage_class != sc_extern
9051            && storage_class != sc_static)
9052     {
9053       error ("function-scope %qs implicitly auto and declared %<__thread%>",
9054              name);
9055       thread_p = false;
9056     }
9057
9058   if (storage_class && friendp)
9059     {
9060       error ("storage class specifiers invalid in friend function declarations");
9061       storage_class = sc_none;
9062       staticp = 0;
9063     }
9064
9065   if (!id_declarator)
9066     unqualified_id = NULL_TREE;
9067   else
9068     {
9069       unqualified_id = id_declarator->u.id.unqualified_name;
9070       switch (TREE_CODE (unqualified_id))
9071         {
9072         case BIT_NOT_EXPR:
9073           unqualified_id = TREE_OPERAND (unqualified_id, 0);
9074           if (TYPE_P (unqualified_id))
9075             unqualified_id = constructor_name (unqualified_id);
9076           break;
9077
9078         case IDENTIFIER_NODE:
9079         case TEMPLATE_ID_EXPR:
9080           break;
9081
9082         default:
9083           gcc_unreachable ();
9084         }
9085     }
9086
9087   /* Determine the type of the entity declared by recurring on the
9088      declarator.  */
9089   for (; declarator; declarator = declarator->declarator)
9090     {
9091       const cp_declarator *inner_declarator;
9092       tree attrs;
9093
9094       if (type == error_mark_node)
9095         return error_mark_node;
9096
9097       attrs = declarator->attributes;
9098       if (attrs)
9099         {
9100           int attr_flags;
9101
9102           attr_flags = 0;
9103           if (declarator == NULL || declarator->kind == cdk_id)
9104             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
9105           if (declarator->kind == cdk_function)
9106             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
9107           if (declarator->kind == cdk_array)
9108             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
9109           returned_attrs = decl_attributes (&type,
9110                                             chainon (returned_attrs, attrs),
9111                                             attr_flags);
9112         }
9113
9114       if (declarator->kind == cdk_id)
9115         break;
9116
9117       inner_declarator = declarator->declarator;
9118
9119       switch (declarator->kind)
9120         {
9121         case cdk_array:
9122           type = create_array_type_for_decl (dname, type,
9123                                              declarator->u.array.bounds);
9124           break;
9125
9126         case cdk_function:
9127           {
9128             tree arg_types;
9129             int funcdecl_p;
9130
9131             /* Declaring a function type.
9132                Make sure we have a valid type for the function to return.  */
9133
9134             if (type_quals != TYPE_UNQUALIFIED)
9135               {
9136                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
9137                   warning (OPT_Wignored_qualifiers,
9138                            "type qualifiers ignored on function return type");
9139                 /* We now know that the TYPE_QUALS don't apply to the
9140                    decl, but to its return type.  */
9141                 type_quals = TYPE_UNQUALIFIED;
9142               }
9143             errmsg = targetm.invalid_return_type (type);
9144             if (errmsg)
9145               {
9146                 error (errmsg);
9147                 type = integer_type_node;
9148               }
9149
9150             /* Error about some types functions can't return.  */
9151
9152             if (TREE_CODE (type) == FUNCTION_TYPE)
9153               {
9154                 error ("%qs declared as function returning a function", name);
9155                 return error_mark_node;
9156               }
9157             if (TREE_CODE (type) == ARRAY_TYPE)
9158               {
9159                 error ("%qs declared as function returning an array", name);
9160                 return error_mark_node;
9161               }
9162
9163             /* Pick up type qualifiers which should be applied to `this'.  */
9164             memfn_quals = declarator->u.function.qualifiers;
9165             /* Pick up virt-specifiers.  */
9166             virt_specifiers = declarator->u.function.virt_specifiers;
9167             /* Pick up the exception specifications.  */
9168             raises = declarator->u.function.exception_specification;
9169             /* If the exception-specification is ill-formed, let's pretend
9170                there wasn't one.  */
9171             if (raises == error_mark_node)
9172               raises = NULL_TREE;
9173
9174             /* Say it's a definition only for the CALL_EXPR
9175                closest to the identifier.  */
9176             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9177
9178             /* Handle a late-specified return type.  */
9179             if (funcdecl_p)
9180               {
9181                 if (type_uses_auto (type))
9182                   {
9183                     if (!declarator->u.function.late_return_type)
9184                       {
9185                         error ("%qs function uses %<auto%> type specifier without"
9186                                " trailing return type", name);
9187                         return error_mark_node;
9188                       }
9189                     else if (!is_auto (type))
9190                       {
9191                         error ("%qs function with trailing return type has"
9192                                " %qT as its type rather than plain %<auto%>",
9193                                name, type);
9194                         return error_mark_node;
9195                       }
9196                   }
9197                 else if (declarator->u.function.late_return_type)
9198                   {
9199                     if (cxx_dialect < cxx0x)
9200                       /* Not using maybe_warn_cpp0x because this should
9201                          always be an error.  */
9202                       error ("trailing return type only available with "
9203                              "-std=c++11 or -std=gnu++11");
9204                     else
9205                       error ("%qs function with trailing return type not "
9206                              "declared with %<auto%> type specifier", name);
9207                     return error_mark_node;
9208                   }
9209               }
9210             type = splice_late_return_type
9211               (type, declarator->u.function.late_return_type);
9212             if (type == error_mark_node)
9213               return error_mark_node;
9214
9215             if (ctype == NULL_TREE
9216                 && decl_context == FIELD
9217                 && funcdecl_p
9218                 && (friendp == 0 || dname == current_class_name))
9219               ctype = current_class_type;
9220
9221             if (ctype && (sfk == sfk_constructor
9222                           || sfk == sfk_destructor))
9223               {
9224                 /* We are within a class's scope. If our declarator name
9225                    is the same as the class name, and we are defining
9226                    a function, then it is a constructor/destructor, and
9227                    therefore returns a void type.  */
9228
9229                 /* ISO C++ 12.4/2.  A destructor may not be declared
9230                    const or volatile.  A destructor may not be
9231                    static.
9232
9233                    ISO C++ 12.1.  A constructor may not be declared
9234                    const or volatile.  A constructor may not be
9235                    virtual.  A constructor may not be static.  */
9236                 if (staticp == 2)
9237                   error ((flags == DTOR_FLAG)
9238                          ? G_("destructor cannot be static member function")
9239                          : G_("constructor cannot be static member function"));
9240                 if (memfn_quals)
9241                   {
9242                     error ((flags == DTOR_FLAG)
9243                            ? G_("destructors may not be cv-qualified")
9244                            : G_("constructors may not be cv-qualified"));
9245                     memfn_quals = TYPE_UNQUALIFIED;
9246                   }
9247
9248                 if (decl_context == FIELD
9249                     && !member_function_or_else (ctype,
9250                                                  current_class_type,
9251                                                  flags))
9252                   return error_mark_node;
9253
9254                 if (flags != DTOR_FLAG)
9255                   {
9256                     /* It's a constructor.  */
9257                     if (explicitp == 1)
9258                       explicitp = 2;
9259                     if (virtualp)
9260                       {
9261                         permerror (input_location, "constructors cannot be declared virtual");
9262                         virtualp = 0;
9263                       }
9264                     if (decl_context == FIELD
9265                         && sfk != sfk_constructor)
9266                       return error_mark_node;
9267                   }
9268                 if (decl_context == FIELD)
9269                   staticp = 0;
9270               }
9271             else if (friendp)
9272               {
9273                 if (initialized)
9274                   error ("can%'t initialize friend function %qs", name);
9275                 if (virtualp)
9276                   {
9277                     /* Cannot be both friend and virtual.  */
9278                     error ("virtual functions cannot be friends");
9279                     friendp = 0;
9280                   }
9281                 if (decl_context == NORMAL)
9282                   error ("friend declaration not in class definition");
9283                 if (current_function_decl && funcdef_flag)
9284                   error ("can%'t define friend function %qs in a local "
9285                          "class definition",
9286                          name);
9287               }
9288             else if (ctype && sfk == sfk_conversion)
9289               {
9290                 if (explicitp == 1)
9291                   {
9292                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9293                     explicitp = 2;
9294                   }
9295               }
9296
9297             arg_types = grokparms (declarator->u.function.parameters,
9298                                    &parms);
9299
9300             if (inner_declarator
9301                 && inner_declarator->kind == cdk_id
9302                 && inner_declarator->u.id.sfk == sfk_destructor
9303                 && arg_types != void_list_node)
9304               {
9305                 error ("destructors may not have parameters");
9306                 arg_types = void_list_node;
9307                 parms = NULL_TREE;
9308               }
9309
9310             type = build_function_type (type, arg_types);
9311           }
9312           break;
9313
9314         case cdk_pointer:
9315         case cdk_reference:
9316         case cdk_ptrmem:
9317           /* Filter out pointers-to-references and references-to-references.
9318              We can get these if a TYPE_DECL is used.  */
9319
9320           if (TREE_CODE (type) == REFERENCE_TYPE)
9321             {
9322               if (declarator->kind != cdk_reference)
9323                 {
9324                   error ("cannot declare pointer to %q#T", type);
9325                   type = TREE_TYPE (type);
9326                 }
9327
9328               /* In C++0x, we allow reference to reference declarations
9329                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9330                  and template type arguments [14.3.1/4 temp.arg.type]. The
9331                  check for direct reference to reference declarations, which
9332                  are still forbidden, occurs below. Reasoning behind the change
9333                  can be found in DR106, DR540, and the rvalue reference
9334                  proposals. */
9335               else if (cxx_dialect == cxx98)
9336                 {
9337                   error ("cannot declare reference to %q#T", type);
9338                   type = TREE_TYPE (type);
9339                 }
9340             }
9341           else if (VOID_TYPE_P (type))
9342             {
9343               if (declarator->kind == cdk_reference)
9344                 error ("cannot declare reference to %q#T", type);
9345               else if (declarator->kind == cdk_ptrmem)
9346                 error ("cannot declare pointer to %q#T member", type);
9347             }
9348
9349           /* We now know that the TYPE_QUALS don't apply to the decl,
9350              but to the target of the pointer.  */
9351           type_quals = TYPE_UNQUALIFIED;
9352
9353           if (declarator->kind == cdk_ptrmem
9354               && (TREE_CODE (type) == FUNCTION_TYPE
9355                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9356             {
9357               memfn_quals |= type_memfn_quals (type);
9358               type = build_memfn_type (type,
9359                                        declarator->u.pointer.class_type,
9360                                        memfn_quals);
9361               if (type == error_mark_node)
9362                 return error_mark_node;
9363               memfn_quals = TYPE_UNQUALIFIED;
9364             }
9365
9366           if (TREE_CODE (type) == FUNCTION_TYPE
9367               && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9368             error (declarator->kind == cdk_reference
9369                    ? G_("cannot declare reference to qualified function type %qT")
9370                    : G_("cannot declare pointer to qualified function type %qT"),
9371                    type);
9372
9373           /* When the pointed-to type involves components of variable size,
9374              care must be taken to ensure that the size evaluation code is
9375              emitted early enough to dominate all the possible later uses
9376              and late enough for the variables on which it depends to have
9377              been assigned.
9378
9379              This is expected to happen automatically when the pointed-to
9380              type has a name/declaration of it's own, but special attention
9381              is required if the type is anonymous.
9382
9383              We handle the NORMAL and FIELD contexts here by inserting a
9384              dummy statement that just evaluates the size at a safe point
9385              and ensures it is not deferred until e.g. within a deeper
9386              conditional context (c++/43555).
9387
9388              We expect nothing to be needed here for PARM or TYPENAME.
9389              Evaluating the size at this point for TYPENAME would
9390              actually be incorrect, as we might be in the middle of an
9391              expression with side effects on the pointed-to type size
9392              "arguments" prior to the pointer declaration point and the
9393              size evaluation could end up prior to the side effects.  */
9394
9395           if (!TYPE_NAME (type)
9396               && (decl_context == NORMAL || decl_context == FIELD)
9397               && at_function_scope_p ()
9398               && variably_modified_type_p (type, NULL_TREE))
9399             {
9400               /* First break out any side-effects.  */
9401               stabilize_vla_size (TYPE_SIZE (type));
9402               /* And then force evaluation of the SAVE_EXPR.  */
9403               finish_expr_stmt (TYPE_SIZE (type));
9404             }
9405
9406           if (declarator->kind == cdk_reference)
9407             {
9408               /* In C++0x, the type we are creating a reference to might be
9409                  a typedef which is itself a reference type. In that case,
9410                  we follow the reference collapsing rules in
9411                  [7.1.3/8 dcl.typedef] to create the final reference type:
9412
9413                  "If a typedef TD names a type that is a reference to a type
9414                  T, an attempt to create the type 'lvalue reference to cv TD'
9415                  creates the type 'lvalue reference to T,' while an attempt
9416                  to create the type "rvalue reference to cv TD' creates the
9417                  type TD."
9418               */
9419               if (VOID_TYPE_P (type))
9420                 /* We already gave an error.  */;
9421               else if (TREE_CODE (type) == REFERENCE_TYPE)
9422                 {
9423                   if (declarator->u.reference.rvalue_ref)
9424                     /* Leave type alone.  */;
9425                   else
9426                     type = cp_build_reference_type (TREE_TYPE (type), false);
9427                 }
9428               else
9429                 type = cp_build_reference_type
9430                   (type, declarator->u.reference.rvalue_ref);
9431
9432               /* In C++0x, we need this check for direct reference to
9433                  reference declarations, which are forbidden by
9434                  [8.3.2/5 dcl.ref]. Reference to reference declarations
9435                  are only allowed indirectly through typedefs and template
9436                  type arguments. Example:
9437
9438                    void foo(int & &);      // invalid ref-to-ref decl
9439
9440                    typedef int & int_ref;
9441                    void foo(int_ref &);    // valid ref-to-ref decl
9442               */
9443               if (inner_declarator && inner_declarator->kind == cdk_reference)
9444                 error ("cannot declare reference to %q#T, which is not "
9445                        "a typedef or a template type argument", type);
9446             }
9447           else if (TREE_CODE (type) == METHOD_TYPE)
9448             type = build_ptrmemfunc_type (build_pointer_type (type));
9449           else if (declarator->kind == cdk_ptrmem)
9450             {
9451               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9452                           != NAMESPACE_DECL);
9453               if (declarator->u.pointer.class_type == error_mark_node)
9454                 /* We will already have complained.  */
9455                 type = error_mark_node;
9456               else
9457                 type = build_ptrmem_type (declarator->u.pointer.class_type,
9458                                           type);
9459             }
9460           else
9461             type = build_pointer_type (type);
9462
9463           /* Process a list of type modifier keywords (such as
9464              const or volatile) that were given inside the `*' or `&'.  */
9465
9466           if (declarator->u.pointer.qualifiers)
9467             {
9468               type
9469                 = cp_build_qualified_type (type,
9470                                            declarator->u.pointer.qualifiers);
9471               type_quals = cp_type_quals (type);
9472             }
9473           ctype = NULL_TREE;
9474           break;
9475
9476         case cdk_error:
9477           break;
9478
9479         default:
9480           gcc_unreachable ();
9481         }
9482     }
9483
9484   /* We need to stabilize side-effects in VLA sizes for regular array
9485      declarations too, not just pointers to arrays.  */
9486   if (type != error_mark_node && !TYPE_NAME (type)
9487       && (decl_context == NORMAL || decl_context == FIELD)
9488       && at_function_scope_p ()
9489       && variably_modified_type_p (type, NULL_TREE))
9490     stabilize_vla_size (TYPE_SIZE (type));
9491
9492   /* A `constexpr' specifier used in an object declaration declares
9493      the object as `const'.  */
9494   if (constexpr_p && innermost_code != cdk_function)
9495     {
9496       if (type_quals & TYPE_QUAL_CONST)
9497         error ("both %<const%> and %<constexpr%> cannot be used here");
9498       if (type_quals & TYPE_QUAL_VOLATILE)
9499         error ("both %<volatile%> and %<constexpr%> cannot be used here");
9500       if (TREE_CODE (type) != REFERENCE_TYPE)
9501         {
9502           type_quals |= TYPE_QUAL_CONST;
9503           type = cp_build_qualified_type (type, type_quals);
9504         }
9505     }
9506
9507   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9508       && TREE_CODE (type) != FUNCTION_TYPE
9509       && TREE_CODE (type) != METHOD_TYPE)
9510     {
9511       error ("template-id %qD used as a declarator",
9512              unqualified_id);
9513       unqualified_id = dname;
9514     }
9515
9516   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9517      qualified with a class-name, turn it into a METHOD_TYPE, unless
9518      we know that the function is static.  We take advantage of this
9519      opportunity to do other processing that pertains to entities
9520      explicitly declared to be class members.  Note that if DECLARATOR
9521      is non-NULL, we know it is a cdk_id declarator; otherwise, we
9522      would not have exited the loop above.  */
9523   if (declarator
9524       && declarator->u.id.qualifying_scope
9525       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
9526     {
9527       tree t;
9528
9529       ctype = declarator->u.id.qualifying_scope;
9530       ctype = TYPE_MAIN_VARIANT (ctype);
9531       t = ctype;
9532       while (t != NULL_TREE && CLASS_TYPE_P (t))
9533         {
9534           /* You're supposed to have one `template <...>' for every
9535              template class, but you don't need one for a full
9536              specialization.  For example:
9537
9538                template <class T> struct S{};
9539                template <> struct S<int> { void f(); };
9540                void S<int>::f () {}
9541
9542              is correct; there shouldn't be a `template <>' for the
9543              definition of `S<int>::f'.  */
9544           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9545               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9546             /* T is an explicit (not partial) specialization.  All
9547                containing classes must therefore also be explicitly
9548                specialized.  */
9549             break;
9550           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9551               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9552             template_count += 1;
9553
9554           t = TYPE_MAIN_DECL (t);
9555           t = DECL_CONTEXT (t);
9556         }
9557
9558       if (ctype == current_class_type)
9559         {
9560           if (friendp)
9561             {
9562               permerror (input_location, "member functions are implicitly friends of their class");
9563               friendp = 0;
9564             }
9565           else
9566             permerror (declarator->id_loc, 
9567                           "extra qualification %<%T::%> on member %qs",
9568                           ctype, name);
9569         }
9570       else if (/* If the qualifying type is already complete, then we
9571                   can skip the following checks.  */
9572                !COMPLETE_TYPE_P (ctype)
9573                && (/* If the function is being defined, then
9574                       qualifying type must certainly be complete.  */
9575                    funcdef_flag
9576                    /* A friend declaration of "T::f" is OK, even if
9577                       "T" is a template parameter.  But, if this
9578                       function is not a friend, the qualifying type
9579                       must be a class.  */
9580                    || (!friendp && !CLASS_TYPE_P (ctype))
9581                    /* For a declaration, the type need not be
9582                       complete, if either it is dependent (since there
9583                       is no meaningful definition of complete in that
9584                       case) or the qualifying class is currently being
9585                       defined.  */
9586                    || !(dependent_type_p (ctype)
9587                         || currently_open_class (ctype)))
9588                /* Check that the qualifying type is complete.  */
9589                && !complete_type_or_else (ctype, NULL_TREE))
9590         return error_mark_node;
9591       else if (TREE_CODE (type) == FUNCTION_TYPE)
9592         {
9593           if (current_class_type
9594               && (!friendp || funcdef_flag))
9595             {
9596               error (funcdef_flag
9597                      ? G_("cannot define member function %<%T::%s%> "
9598                           "within %<%T%>")
9599                      : G_("cannot declare member function %<%T::%s%> "
9600                           "within %<%T%>"),
9601                      ctype, name, current_class_type);
9602               return error_mark_node;
9603             }
9604         }
9605       else if (declspecs->specs[(int)ds_typedef]
9606                && current_class_type)
9607         {
9608           error ("cannot declare member %<%T::%s%> within %qT",
9609                  ctype, name, current_class_type);
9610           return error_mark_node;
9611         }
9612     }
9613
9614   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9615     ctype = current_class_type;
9616
9617   /* Now TYPE has the actual type.  */
9618
9619   if (returned_attrs)
9620     {
9621       if (attrlist)
9622         *attrlist = chainon (returned_attrs, *attrlist);
9623       else
9624         attrlist = &returned_attrs;
9625     }
9626
9627   /* Handle parameter packs. */
9628   if (parameter_pack_p)
9629     {
9630       if (decl_context == PARM)
9631         /* Turn the type into a pack expansion.*/
9632         type = make_pack_expansion (type);
9633       else
9634         error ("non-parameter %qs cannot be a parameter pack", name);
9635     }
9636
9637   /* Did array size calculations overflow?  */
9638
9639   if (TREE_CODE (type) == ARRAY_TYPE
9640       && COMPLETE_TYPE_P (type)
9641       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9642       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9643     {
9644       error ("size of array %qs is too large", name);
9645       /* If we proceed with the array type as it is, we'll eventually
9646          crash in tree_low_cst().  */
9647       type = error_mark_node;
9648     }
9649
9650   if ((decl_context == FIELD || decl_context == PARM)
9651       && !processing_template_decl
9652       && variably_modified_type_p (type, NULL_TREE))
9653     {
9654       if (decl_context == FIELD)
9655         error ("data member may not have variably modified type %qT", type);
9656       else
9657         error ("parameter may not have variably modified type %qT", type);
9658       type = error_mark_node;
9659     }
9660
9661   if (explicitp == 1 || (explicitp && friendp))
9662     {
9663       /* [dcl.fct.spec] The explicit specifier shall only be used in
9664          declarations of constructors within a class definition.  */
9665       error ("only declarations of constructors can be %<explicit%>");
9666       explicitp = 0;
9667     }
9668
9669   if (storage_class == sc_mutable)
9670     {
9671       if (decl_context != FIELD || friendp)
9672         {
9673           error ("non-member %qs cannot be declared %<mutable%>", name);
9674           storage_class = sc_none;
9675         }
9676       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9677         {
9678           error ("non-object member %qs cannot be declared %<mutable%>", name);
9679           storage_class = sc_none;
9680         }
9681       else if (TREE_CODE (type) == FUNCTION_TYPE
9682                || TREE_CODE (type) == METHOD_TYPE)
9683         {
9684           error ("function %qs cannot be declared %<mutable%>", name);
9685           storage_class = sc_none;
9686         }
9687       else if (staticp)
9688         {
9689           error ("static %qs cannot be declared %<mutable%>", name);
9690           storage_class = sc_none;
9691         }
9692       else if (type_quals & TYPE_QUAL_CONST)
9693         {
9694           error ("const %qs cannot be declared %<mutable%>", name);
9695           storage_class = sc_none;
9696         }
9697       else if (TREE_CODE (type) == REFERENCE_TYPE)
9698         {
9699           permerror (input_location, "reference %qs cannot be declared "
9700                      "%<mutable%>", name);
9701           storage_class = sc_none;
9702         }
9703     }
9704
9705   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9706   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9707     {
9708       tree decl;
9709
9710       /* Note that the grammar rejects storage classes
9711          in typenames, fields or parameters.  */
9712       if (current_lang_name == lang_name_java)
9713         TYPE_FOR_JAVA (type) = 1;
9714
9715       /* This declaration:
9716
9717            typedef void f(int) const;
9718
9719          declares a function type which is not a member of any
9720          particular class, but which is cv-qualified; for
9721          example "f S::*" declares a pointer to a const-qualified
9722          member function of S.  We record the cv-qualification in the
9723          function type.  */
9724       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9725         {
9726           type = apply_memfn_quals (type, memfn_quals);
9727           
9728           /* We have now dealt with these qualifiers.  */
9729           memfn_quals = TYPE_UNQUALIFIED;
9730         }
9731
9732       if (type_uses_auto (type))
9733         {
9734           error ("typedef declared %<auto%>");
9735           type = error_mark_node;
9736         }
9737
9738       if (decl_context == FIELD)
9739         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9740       else
9741         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9742       if (id_declarator && declarator->u.id.qualifying_scope) {
9743         error_at (DECL_SOURCE_LOCATION (decl), 
9744                   "typedef name may not be a nested-name-specifier");
9745         TREE_TYPE (decl) = error_mark_node;
9746       }
9747
9748       if (decl_context != FIELD)
9749         {
9750           if (!current_function_decl)
9751             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9752           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9753                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9754                        (current_function_decl)))
9755             /* The TYPE_DECL is "abstract" because there will be
9756                clones of this constructor/destructor, and there will
9757                be copies of this TYPE_DECL generated in those
9758                clones.  */
9759             DECL_ABSTRACT (decl) = 1;
9760         }
9761       else if (constructor_name_p (unqualified_id, current_class_type))
9762         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9763                    "as enclosing class",
9764                    unqualified_id);
9765
9766       /* If the user declares "typedef struct {...} foo" then the
9767          struct will have an anonymous name.  Fill that name in now.
9768          Nothing can refer to it, so nothing needs know about the name
9769          change.  */
9770       if (type != error_mark_node
9771           && unqualified_id
9772           && TYPE_NAME (type)
9773           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9774           && TYPE_ANONYMOUS_P (type)
9775           && declspecs->type_definition_p
9776           && cp_type_quals (type) == TYPE_UNQUALIFIED)
9777         {
9778           tree t;
9779
9780           /* Replace the anonymous name with the real name everywhere.  */
9781           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9782             {
9783               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9784                 /* We do not rename the debug info representing the
9785                    anonymous tagged type because the standard says in
9786                    [dcl.typedef] that the naming applies only for
9787                    linkage purposes.  */
9788                 /*debug_hooks->set_name (t, decl);*/
9789                 TYPE_NAME (t) = decl;
9790             }
9791
9792           if (TYPE_LANG_SPECIFIC (type))
9793             TYPE_WAS_ANONYMOUS (type) = 1;
9794
9795           /* If this is a typedef within a template class, the nested
9796              type is a (non-primary) template.  The name for the
9797              template needs updating as well.  */
9798           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9799             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9800               = TYPE_IDENTIFIER (type);
9801
9802           /* Adjust linkage now that we aren't anonymous anymore.  */
9803           set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9804           determine_visibility (TYPE_MAIN_DECL (type));
9805
9806           /* FIXME remangle member functions; member functions of a
9807              type with external linkage have external linkage.  */
9808         }
9809
9810       if (signed_p
9811           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9812         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9813
9814       bad_specifiers (decl, BSP_TYPE, virtualp,
9815                       memfn_quals != TYPE_UNQUALIFIED,
9816                       inlinep, friendp, raises != NULL_TREE);
9817
9818       if (declspecs->specs[(int)ds_alias])
9819         /* Acknowledge that this was written:
9820              `using analias = atype;'.  */
9821         TYPE_DECL_ALIAS_P (decl) = 1;
9822
9823       return decl;
9824     }
9825
9826   /* Detect the case of an array type of unspecified size
9827      which came, as such, direct from a typedef name.
9828      We must copy the type, so that the array's domain can be
9829      individually set by the object's initializer.  */
9830
9831   if (type && typedef_type
9832       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9833       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9834     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9835
9836   /* Detect where we're using a typedef of function type to declare a
9837      function. PARMS will not be set, so we must create it now.  */
9838
9839   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9840     {
9841       tree decls = NULL_TREE;
9842       tree args;
9843
9844       for (args = TYPE_ARG_TYPES (type);
9845            args && args != void_list_node;
9846            args = TREE_CHAIN (args))
9847         {
9848           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9849
9850           DECL_CHAIN (decl) = decls;
9851           decls = decl;
9852         }
9853
9854       parms = nreverse (decls);
9855
9856       if (decl_context != TYPENAME)
9857         {
9858           /* A cv-qualifier-seq shall only be part of the function type
9859              for a non-static member function. [8.3.5/4 dcl.fct] */
9860           if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9861               && (current_class_type == NULL_TREE || staticp) )
9862             {
9863               error (staticp
9864                      ? G_("qualified function types cannot be used to "
9865                           "declare static member functions")
9866                      : G_("qualified function types cannot be used to "
9867                           "declare free functions"));
9868               type = TYPE_MAIN_VARIANT (type);
9869             }
9870
9871           /* The qualifiers on the function type become the qualifiers on
9872              the non-static member function. */
9873           memfn_quals |= type_memfn_quals (type);
9874           type_quals = TYPE_UNQUALIFIED;
9875         }
9876     }
9877
9878   /* If this is a type name (such as, in a cast or sizeof),
9879      compute the type and return it now.  */
9880
9881   if (decl_context == TYPENAME)
9882     {
9883       /* Note that the grammar rejects storage classes
9884          in typenames, fields or parameters.  */
9885       if (type_quals != TYPE_UNQUALIFIED)
9886         type_quals = TYPE_UNQUALIFIED;
9887
9888       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9889       if (friendp)
9890         {
9891           if (type_quals != TYPE_UNQUALIFIED)
9892             {
9893               error ("type qualifiers specified for friend class declaration");
9894               type_quals = TYPE_UNQUALIFIED;
9895             }
9896           if (inlinep)
9897             {
9898               error ("%<inline%> specified for friend class declaration");
9899               inlinep = 0;
9900             }
9901
9902           if (!current_aggr)
9903             {
9904               /* Don't allow friend declaration without a class-key.  */
9905               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9906                 permerror (input_location, "template parameters cannot be friends");
9907               else if (TREE_CODE (type) == TYPENAME_TYPE)
9908                 permerror (input_location, "friend declaration requires class-key, "
9909                            "i.e. %<friend class %T::%D%>",
9910                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9911               else
9912                 permerror (input_location, "friend declaration requires class-key, "
9913                            "i.e. %<friend %#T%>",
9914                            type);
9915             }
9916
9917           /* Only try to do this stuff if we didn't already give up.  */
9918           if (type != integer_type_node)
9919             {
9920               /* A friendly class?  */
9921               if (current_class_type)
9922                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9923                                    /*complain=*/true);
9924               else
9925                 error ("trying to make class %qT a friend of global scope",
9926                        type);
9927
9928               type = void_type_node;
9929             }
9930         }
9931       else if (memfn_quals)
9932         {
9933           if (ctype == NULL_TREE
9934               && TREE_CODE (type) == METHOD_TYPE)
9935             ctype = TYPE_METHOD_BASETYPE (type);
9936
9937           if (ctype)
9938             type = build_memfn_type (type, ctype, memfn_quals);
9939           /* Core issue #547: need to allow this in template type args.  */
9940           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9941             type = apply_memfn_quals (type, memfn_quals);
9942           else
9943             error ("invalid qualifiers on non-member function type");
9944         }
9945
9946       return type;
9947     }
9948   else if (unqualified_id == NULL_TREE && decl_context != PARM
9949            && decl_context != CATCHPARM
9950            && TREE_CODE (type) != UNION_TYPE
9951            && ! bitfield)
9952     {
9953       error ("abstract declarator %qT used as declaration", type);
9954       return error_mark_node;
9955     }
9956
9957   /* Only functions may be declared using an operator-function-id.  */
9958   if (unqualified_id
9959       && IDENTIFIER_OPNAME_P (unqualified_id)
9960       && TREE_CODE (type) != FUNCTION_TYPE
9961       && TREE_CODE (type) != METHOD_TYPE)
9962     {
9963       error ("declaration of %qD as non-function", unqualified_id);
9964       return error_mark_node;
9965     }
9966
9967   /* We don't check parameter types here because we can emit a better
9968      error message later.  */
9969   if (decl_context != PARM)
9970     {
9971       type = check_var_type (unqualified_id, type);
9972       if (type == error_mark_node)
9973         return error_mark_node;
9974     }
9975
9976   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9977      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9978
9979   if (decl_context == PARM || decl_context == CATCHPARM)
9980     {
9981       if (ctype || in_namespace)
9982         error ("cannot use %<::%> in parameter declaration");
9983
9984       if (type_uses_auto (type))
9985         {
9986           error ("parameter declared %<auto%>");
9987           type = error_mark_node;
9988         }
9989
9990       /* A parameter declared as an array of T is really a pointer to T.
9991          One declared as a function is really a pointer to a function.
9992          One declared as a member is really a pointer to member.  */
9993
9994       if (TREE_CODE (type) == ARRAY_TYPE)
9995         {
9996           /* Transfer const-ness of array into that of type pointed to.  */
9997           type = build_pointer_type (TREE_TYPE (type));
9998           type_quals = TYPE_UNQUALIFIED;
9999         }
10000       else if (TREE_CODE (type) == FUNCTION_TYPE)
10001         type = build_pointer_type (type);
10002     }
10003
10004   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
10005       && !NEW_DELETE_OPNAME_P (unqualified_id))
10006     {
10007       cp_cv_quals real_quals = memfn_quals;
10008       if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
10009         real_quals |= TYPE_QUAL_CONST;
10010       type = build_memfn_type (type, ctype, real_quals);
10011     }
10012
10013   {
10014     tree decl;
10015
10016     if (decl_context == PARM)
10017       {
10018         decl = cp_build_parm_decl (unqualified_id, type);
10019
10020         bad_specifiers (decl, BSP_PARM, virtualp,
10021                         memfn_quals != TYPE_UNQUALIFIED,
10022                         inlinep, friendp, raises != NULL_TREE);
10023       }
10024     else if (decl_context == FIELD)
10025       {
10026         if (!staticp && type_uses_auto (type))
10027           {
10028             error ("non-static data member declared %<auto%>");
10029             type = error_mark_node;
10030           }
10031
10032         /* The C99 flexible array extension.  */
10033         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
10034             && TYPE_DOMAIN (type) == NULL_TREE)
10035           {
10036             tree itype = compute_array_index_type (dname, integer_zero_node,
10037                                                    tf_warning_or_error);
10038             type = build_cplus_array_type (TREE_TYPE (type), itype);
10039           }
10040
10041         if (type == error_mark_node)
10042           {
10043             /* Happens when declaring arrays of sizes which
10044                are error_mark_node, for example.  */
10045             decl = NULL_TREE;
10046           }
10047         else if (in_namespace && !friendp)
10048           {
10049             /* Something like struct S { int N::j; };  */
10050             error ("invalid use of %<::%>");
10051             return error_mark_node;
10052           }
10053         else if (TREE_CODE (type) == FUNCTION_TYPE
10054                  || TREE_CODE (type) == METHOD_TYPE)
10055           {
10056             int publicp = 0;
10057             tree function_context;
10058
10059             if (friendp == 0)
10060               {
10061                 /* This should never happen in pure C++ (the check
10062                    could be an assert).  It could happen in
10063                    Objective-C++ if someone writes invalid code that
10064                    uses a function declaration for an instance
10065                    variable or property (instance variables and
10066                    properties are parsed as FIELD_DECLs, but they are
10067                    part of an Objective-C class, not a C++ class).
10068                    That code is invalid and is caught by this
10069                    check.  */
10070                 if (!ctype)
10071                   {
10072                     error ("declaration of function %qD in invalid context",
10073                            unqualified_id);
10074                     return error_mark_node;
10075                   }
10076
10077                 /* ``A union may [ ... ] not [ have ] virtual functions.''
10078                    ARM 9.5 */
10079                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
10080                   {
10081                     error ("function %qD declared virtual inside a union",
10082                            unqualified_id);
10083                     return error_mark_node;
10084                   }
10085
10086                 if (NEW_DELETE_OPNAME_P (unqualified_id))
10087                   {
10088                     if (virtualp)
10089                       {
10090                         error ("%qD cannot be declared virtual, since it "
10091                                "is always static",
10092                                unqualified_id);
10093                         virtualp = 0;
10094                       }
10095                   }
10096               }
10097
10098             /* Check that the name used for a destructor makes sense.  */
10099             if (sfk == sfk_destructor)
10100               {
10101                 tree uqname = id_declarator->u.id.unqualified_name;
10102
10103                 if (!ctype)
10104                   {
10105                     gcc_assert (friendp);
10106                     error ("expected qualified name in friend declaration "
10107                            "for destructor %qD", uqname);
10108                     return error_mark_node;
10109                   }
10110
10111                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
10112                   {
10113                     error ("declaration of %qD as member of %qT",
10114                            uqname, ctype);
10115                     return error_mark_node;
10116                   }
10117                 if (constexpr_p)
10118                   {
10119                     error ("a destructor cannot be %<constexpr%>");
10120                     return error_mark_node;
10121                   }
10122               }
10123             else if (sfk == sfk_constructor && friendp && !ctype)
10124               {
10125                 error ("expected qualified name in friend declaration "
10126                        "for constructor %qD",
10127                        id_declarator->u.id.unqualified_name);
10128                 return error_mark_node;
10129               }
10130
10131             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
10132             function_context = (ctype != NULL_TREE) ?
10133               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
10134             publicp = (! friendp || ! staticp)
10135               && function_context == NULL_TREE;
10136             decl = grokfndecl (ctype, type,
10137                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
10138                                ? unqualified_id : dname,
10139                                parms,
10140                                unqualified_id,
10141                                virtualp, flags, memfn_quals, raises,
10142                                friendp ? -1 : 0, friendp, publicp,
10143                                inlinep | (2 * constexpr_p),
10144                                sfk,
10145                                funcdef_flag, template_count, in_namespace,
10146                                attrlist, declarator->id_loc);
10147             decl = set_virt_specifiers (decl, virt_specifiers);
10148             if (decl == NULL_TREE)
10149               return error_mark_node;
10150 #if 0
10151             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
10152             /* The decl and setting of decl_attr is also turned off.  */
10153             decl = build_decl_attribute_variant (decl, decl_attr);
10154 #endif
10155
10156             /* [class.conv.ctor]
10157
10158                A constructor declared without the function-specifier
10159                explicit that can be called with a single parameter
10160                specifies a conversion from the type of its first
10161                parameter to the type of its class.  Such a constructor
10162                is called a converting constructor.  */
10163             if (explicitp == 2)
10164               DECL_NONCONVERTING_P (decl) = 1;
10165           }
10166         else if (!staticp && !dependent_type_p (type)
10167                  && !COMPLETE_TYPE_P (complete_type (type))
10168                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
10169           {
10170             if (unqualified_id)
10171               error ("field %qD has incomplete type", unqualified_id);
10172             else
10173               error ("name %qT has incomplete type", type);
10174
10175             /* If we're instantiating a template, tell them which
10176                instantiation made the field's type be incomplete.  */
10177             if (current_class_type
10178                 && TYPE_NAME (current_class_type)
10179                 && IDENTIFIER_TEMPLATE (current_class_name)
10180                 && declspecs->type
10181                 && declspecs->type == type)
10182               error ("  in instantiation of template %qT",
10183                      current_class_type);
10184
10185             return error_mark_node;
10186           }
10187         else
10188           {
10189             if (friendp)
10190               {
10191                 error ("%qE is neither function nor member function; "
10192                        "cannot be declared friend", unqualified_id);
10193                 friendp = 0;
10194               }
10195             decl = NULL_TREE;
10196           }
10197
10198         if (friendp)
10199           {
10200             /* Friends are treated specially.  */
10201             if (ctype == current_class_type)
10202               ;  /* We already issued a permerror.  */
10203             else if (decl && DECL_NAME (decl))
10204               {
10205                 if (template_class_depth (current_class_type) == 0)
10206                   {
10207                     decl = check_explicit_specialization
10208                       (unqualified_id, decl, template_count,
10209                        2 * funcdef_flag + 4);
10210                     if (decl == error_mark_node)
10211                       return error_mark_node;
10212                   }
10213
10214                 decl = do_friend (ctype, unqualified_id, decl,
10215                                   *attrlist, flags,
10216                                   funcdef_flag);
10217                 return decl;
10218               }
10219             else
10220               return error_mark_node;
10221           }
10222
10223         /* Structure field.  It may not be a function, except for C++.  */
10224
10225         if (decl == NULL_TREE)
10226           {
10227             if (staticp)
10228               {
10229                 /* C++ allows static class members.  All other work
10230                    for this is done by grokfield.  */
10231                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10232                 set_linkage_for_static_data_member (decl);
10233                 /* Even if there is an in-class initialization, DECL
10234                    is considered undefined until an out-of-class
10235                    definition is provided.  */
10236                 DECL_EXTERNAL (decl) = 1;
10237
10238                 if (thread_p)
10239                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10240
10241                 if (constexpr_p && !initialized)
10242                   {
10243                     error ("constexpr static data member %qD must have an "
10244                            "initializer", decl);
10245                     constexpr_p = false;
10246                   }
10247               }
10248             else
10249               {
10250                 if (constexpr_p)
10251                   {
10252                     error ("non-static data member %qE declared %<constexpr%>",
10253                            unqualified_id);
10254                     constexpr_p = false;
10255                   }
10256                 decl = build_decl (input_location,
10257                                    FIELD_DECL, unqualified_id, type);
10258                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10259                 if (bitfield && !unqualified_id)
10260                   TREE_NO_WARNING (decl) = 1;
10261
10262                 if (storage_class == sc_mutable)
10263                   {
10264                     DECL_MUTABLE_P (decl) = 1;
10265                     storage_class = sc_none;
10266                   }
10267
10268                 if (initialized)
10269                   {
10270                     /* An attempt is being made to initialize a non-static
10271                        member.  This is new in C++11.  */
10272                     maybe_warn_cpp0x (CPP0X_NSDMI);
10273
10274                     /* If this has been parsed with static storage class, but
10275                        errors forced staticp to be cleared, ensure NSDMI is
10276                        not present.  */
10277                     if (declspecs->storage_class == sc_static)
10278                       DECL_INITIAL (decl) = error_mark_node;
10279                   }
10280               }
10281
10282             bad_specifiers (decl, BSP_FIELD, virtualp,
10283                             memfn_quals != TYPE_UNQUALIFIED,
10284                             inlinep, friendp, raises != NULL_TREE);
10285           }
10286       }
10287     else if (TREE_CODE (type) == FUNCTION_TYPE
10288              || TREE_CODE (type) == METHOD_TYPE)
10289       {
10290         tree original_name;
10291         int publicp = 0;
10292
10293         if (!unqualified_id)
10294           return error_mark_node;
10295
10296         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10297           original_name = dname;
10298         else
10299           original_name = unqualified_id;
10300
10301         if (storage_class == sc_auto)
10302           error ("storage class %<auto%> invalid for function %qs", name);
10303         else if (storage_class == sc_register)
10304           error ("storage class %<register%> invalid for function %qs", name);
10305         else if (thread_p)
10306           error ("storage class %<__thread%> invalid for function %qs", name);
10307
10308         if (virt_specifiers)
10309           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10310         /* Function declaration not at top level.
10311            Storage classes other than `extern' are not allowed
10312            and `extern' makes no difference.  */
10313         if (! toplevel_bindings_p ()
10314             && (storage_class == sc_static
10315                 || declspecs->specs[(int)ds_inline])
10316             && pedantic)
10317           {
10318             if (storage_class == sc_static)
10319               pedwarn (input_location, OPT_pedantic, 
10320                        "%<static%> specified invalid for function %qs "
10321                        "declared out of global scope", name);
10322             else
10323               pedwarn (input_location, OPT_pedantic, 
10324                        "%<inline%> specifier invalid for function %qs "
10325                        "declared out of global scope", name);
10326           }
10327
10328         if (ctype == NULL_TREE)
10329           {
10330             if (virtualp)
10331               {
10332                 error ("virtual non-class function %qs", name);
10333                 virtualp = 0;
10334               }
10335             else if (sfk == sfk_constructor
10336                      || sfk == sfk_destructor)
10337               {
10338                 error (funcdef_flag
10339                        ? G_("%qs defined in a non-class scope")
10340                        : G_("%qs declared in a non-class scope"), name);
10341                 sfk = sfk_none;
10342               }
10343           }
10344
10345         /* Record presence of `static'.  */
10346         publicp = (ctype != NULL_TREE
10347                    || storage_class == sc_extern
10348                    || storage_class != sc_static);
10349
10350         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10351                            virtualp, flags, memfn_quals, raises,
10352                            1, friendp,
10353                            publicp, inlinep | (2 * constexpr_p), sfk,
10354                            funcdef_flag,
10355                            template_count, in_namespace, attrlist,
10356                            declarator->id_loc);
10357         if (decl == NULL_TREE)
10358           return error_mark_node;
10359
10360         if (staticp == 1)
10361           {
10362             int invalid_static = 0;
10363
10364             /* Don't allow a static member function in a class, and forbid
10365                declaring main to be static.  */
10366             if (TREE_CODE (type) == METHOD_TYPE)
10367               {
10368                 permerror (input_location, "cannot declare member function %qD to have "
10369                            "static linkage", decl);
10370                 invalid_static = 1;
10371               }
10372             else if (current_function_decl)
10373               {
10374                 /* FIXME need arm citation */
10375                 error ("cannot declare static function inside another function");
10376                 invalid_static = 1;
10377               }
10378
10379             if (invalid_static)
10380               {
10381                 staticp = 0;
10382                 storage_class = sc_none;
10383               }
10384           }
10385       }
10386     else
10387       {
10388         /* It's a variable.  */
10389
10390         /* An uninitialized decl with `extern' is a reference.  */
10391         decl = grokvardecl (type, unqualified_id,
10392                             declspecs,
10393                             initialized,
10394                             (type_quals & TYPE_QUAL_CONST) != 0,
10395                             ctype ? ctype : in_namespace);
10396         bad_specifiers (decl, BSP_VAR, virtualp,
10397                         memfn_quals != TYPE_UNQUALIFIED,
10398                         inlinep, friendp, raises != NULL_TREE);
10399
10400         if (ctype)
10401           {
10402             DECL_CONTEXT (decl) = ctype;
10403             if (staticp == 1)
10404               {
10405                 permerror (input_location, "%<static%> may not be used when defining "
10406                            "(as opposed to declaring) a static data member");
10407                 staticp = 0;
10408                 storage_class = sc_none;
10409               }
10410             if (storage_class == sc_register && TREE_STATIC (decl))
10411               {
10412                 error ("static member %qD declared %<register%>", decl);
10413                 storage_class = sc_none;
10414               }
10415             if (storage_class == sc_extern && pedantic)
10416               {
10417                 pedwarn (input_location, OPT_pedantic, 
10418                          "cannot explicitly declare member %q#D to have "
10419                          "extern linkage", decl);
10420                 storage_class = sc_none;
10421               }
10422           }
10423         else if (constexpr_p && DECL_EXTERNAL (decl))
10424           {
10425             error ("declaration of constexpr variable %qD is not a definition",
10426                    decl);
10427             constexpr_p = false;
10428           }
10429       }
10430
10431     if (storage_class == sc_extern && initialized && !funcdef_flag)
10432       {
10433         if (toplevel_bindings_p ())
10434           {
10435             /* It's common practice (and completely valid) to have a const
10436                be initialized and declared extern.  */
10437             if (!(type_quals & TYPE_QUAL_CONST))
10438               warning (0, "%qs initialized and declared %<extern%>", name);
10439           }
10440         else
10441           {
10442             error ("%qs has both %<extern%> and initializer", name);
10443             return error_mark_node;
10444           }
10445       }
10446
10447     /* Record `register' declaration for warnings on &
10448        and in case doing stupid register allocation.  */
10449
10450     if (storage_class == sc_register)
10451       DECL_REGISTER (decl) = 1;
10452     else if (storage_class == sc_extern)
10453       DECL_THIS_EXTERN (decl) = 1;
10454     else if (storage_class == sc_static)
10455       DECL_THIS_STATIC (decl) = 1;
10456
10457     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10458     if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10459       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10460
10461     /* Record constancy and volatility on the DECL itself .  There's
10462        no need to do this when processing a template; we'll do this
10463        for the instantiated declaration based on the type of DECL.  */
10464     if (!processing_template_decl)
10465       cp_apply_type_quals_to_decl (type_quals, decl);
10466
10467     return decl;
10468   }
10469 }
10470 \f
10471 /* Subroutine of start_function.  Ensure that each of the parameter
10472    types (as listed in PARMS) is complete, as is required for a
10473    function definition.  */
10474
10475 static void
10476 require_complete_types_for_parms (tree parms)
10477 {
10478   for (; parms; parms = DECL_CHAIN (parms))
10479     {
10480       if (dependent_type_p (TREE_TYPE (parms)))
10481         continue;
10482       if (!VOID_TYPE_P (TREE_TYPE (parms))
10483           && complete_type_or_else (TREE_TYPE (parms), parms))
10484         {
10485           relayout_decl (parms);
10486           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10487         }
10488       else
10489         /* grokparms or complete_type_or_else will have already issued
10490            an error.  */
10491         TREE_TYPE (parms) = error_mark_node;
10492     }
10493 }
10494
10495 /* Returns nonzero if T is a local variable.  */
10496
10497 int
10498 local_variable_p (const_tree t)
10499 {
10500   if ((TREE_CODE (t) == VAR_DECL
10501        /* A VAR_DECL with a context that is a _TYPE is a static data
10502           member.  */
10503        && !TYPE_P (CP_DECL_CONTEXT (t))
10504        /* Any other non-local variable must be at namespace scope.  */
10505        && !DECL_NAMESPACE_SCOPE_P (t))
10506       || (TREE_CODE (t) == PARM_DECL))
10507     return 1;
10508
10509   return 0;
10510 }
10511
10512 /* Like local_variable_p, but suitable for use as a tree-walking
10513    function.  */
10514
10515 static tree
10516 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10517                          void *data ATTRIBUTE_UNUSED)
10518 {
10519   /* Check DECL_NAME to avoid including temporaries.  We don't check
10520      DECL_ARTIFICIAL because we do want to complain about 'this'.  */
10521   if (local_variable_p (*tp) && DECL_NAME (*tp))
10522     return *tp;
10523   else if (TYPE_P (*tp))
10524     *walk_subtrees = 0;
10525
10526   return NULL_TREE;
10527 }
10528
10529 /* Check that ARG, which is a default-argument expression for a
10530    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10531    something goes wrong.  DECL may also be a _TYPE node, rather than a
10532    DECL, if there is no DECL available.  */
10533
10534 tree
10535 check_default_argument (tree decl, tree arg)
10536 {
10537   tree var;
10538   tree decl_type;
10539
10540   if (TREE_CODE (arg) == DEFAULT_ARG)
10541     /* We get a DEFAULT_ARG when looking at an in-class declaration
10542        with a default argument.  Ignore the argument for now; we'll
10543        deal with it after the class is complete.  */
10544     return arg;
10545
10546   if (TYPE_P (decl))
10547     {
10548       decl_type = decl;
10549       decl = NULL_TREE;
10550     }
10551   else
10552     decl_type = TREE_TYPE (decl);
10553
10554   if (arg == error_mark_node
10555       || decl == error_mark_node
10556       || TREE_TYPE (arg) == error_mark_node
10557       || decl_type == error_mark_node)
10558     /* Something already went wrong.  There's no need to check
10559        further.  */
10560     return error_mark_node;
10561
10562   /* [dcl.fct.default]
10563
10564      A default argument expression is implicitly converted to the
10565      parameter type.  */
10566   if (!TREE_TYPE (arg)
10567       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10568     {
10569       if (decl)
10570         error ("default argument for %q#D has type %qT",
10571                decl, TREE_TYPE (arg));
10572       else
10573         error ("default argument for parameter of type %qT has type %qT",
10574                decl_type, TREE_TYPE (arg));
10575
10576       return error_mark_node;
10577     }
10578
10579   if (warn_zero_as_null_pointer_constant
10580       && c_inhibit_evaluation_warnings == 0
10581       && (TYPE_PTR_P (decl_type) || TYPE_PTR_TO_MEMBER_P (decl_type))
10582       && null_ptr_cst_p (arg)
10583       && !NULLPTR_TYPE_P (TREE_TYPE (arg)))
10584     {
10585       warning (OPT_Wzero_as_null_pointer_constant,
10586                "zero as null pointer constant");
10587       return nullptr_node;
10588     }
10589
10590   /* [dcl.fct.default]
10591
10592      Local variables shall not be used in default argument
10593      expressions.
10594
10595      The keyword `this' shall not be used in a default argument of a
10596      member function.  */
10597   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10598   if (var)
10599     {
10600       if (DECL_NAME (var) == this_identifier)
10601         permerror (input_location, "default argument %qE uses %qD", arg, var);
10602       else
10603         error ("default argument %qE uses local variable %qD", arg, var);
10604       return error_mark_node;
10605     }
10606
10607   /* All is well.  */
10608   return arg;
10609 }
10610
10611 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10612
10613 static tree
10614 type_is_deprecated (tree type)
10615 {
10616   enum tree_code code;
10617   if (TREE_DEPRECATED (type))
10618     return type;
10619   if (TYPE_NAME (type)
10620       && TREE_DEPRECATED (TYPE_NAME (type)))
10621     return type;
10622
10623   /* Do warn about using typedefs to a deprecated class.  */
10624   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10625     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10626
10627   code = TREE_CODE (type);
10628
10629   if (code == POINTER_TYPE || code == REFERENCE_TYPE
10630       || code == OFFSET_TYPE || code == FUNCTION_TYPE
10631       || code == METHOD_TYPE || code == ARRAY_TYPE)
10632     return type_is_deprecated (TREE_TYPE (type));
10633
10634   if (TYPE_PTRMEMFUNC_P (type))
10635     return type_is_deprecated
10636       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10637
10638   return NULL_TREE;
10639 }
10640
10641 /* Decode the list of parameter types for a function type.
10642    Given the list of things declared inside the parens,
10643    return a list of types.
10644
10645    If this parameter does not end with an ellipsis, we append
10646    void_list_node.
10647
10648    *PARMS is set to the chain of PARM_DECLs created.  */
10649
10650 static tree
10651 grokparms (tree parmlist, tree *parms)
10652 {
10653   tree result = NULL_TREE;
10654   tree decls = NULL_TREE;
10655   tree parm;
10656   int any_error = 0;
10657
10658   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10659     {
10660       tree type = NULL_TREE;
10661       tree init = TREE_PURPOSE (parm);
10662       tree decl = TREE_VALUE (parm);
10663       const char *errmsg;
10664
10665       if (parm == void_list_node)
10666         break;
10667
10668       if (! decl || TREE_TYPE (decl) == error_mark_node)
10669         continue;
10670
10671       type = TREE_TYPE (decl);
10672       if (VOID_TYPE_P (type))
10673         {
10674           if (same_type_p (type, void_type_node)
10675               && DECL_SELF_REFERENCE_P (type)
10676               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10677             /* this is a parmlist of `(void)', which is ok.  */
10678             break;
10679           cxx_incomplete_type_error (decl, type);
10680           /* It's not a good idea to actually create parameters of
10681              type `void'; other parts of the compiler assume that a
10682              void type terminates the parameter list.  */
10683           type = error_mark_node;
10684           TREE_TYPE (decl) = error_mark_node;
10685         }
10686
10687       if (type != error_mark_node
10688           && TYPE_FOR_JAVA (type)
10689           && MAYBE_CLASS_TYPE_P (type))
10690         {
10691           error ("parameter %qD has Java class type", decl);
10692           type = error_mark_node;
10693           TREE_TYPE (decl) = error_mark_node;
10694           init = NULL_TREE;
10695         }
10696
10697       if (type != error_mark_node
10698           && (errmsg = targetm.invalid_parameter_type (type)))
10699         {
10700           error (errmsg);
10701           type = error_mark_node;
10702           TREE_TYPE (decl) = error_mark_node;
10703         }
10704
10705       if (type != error_mark_node)
10706         {
10707           if (deprecated_state != DEPRECATED_SUPPRESS)
10708             {
10709               tree deptype = type_is_deprecated (type);
10710               if (deptype)
10711                 warn_deprecated_use (deptype, NULL_TREE);
10712             }
10713
10714           /* Top-level qualifiers on the parameters are
10715              ignored for function types.  */
10716           type = cp_build_qualified_type (type, 0);
10717           if (TREE_CODE (type) == METHOD_TYPE)
10718             {
10719               error ("parameter %qD invalidly declared method type", decl);
10720               type = build_pointer_type (type);
10721               TREE_TYPE (decl) = type;
10722             }
10723           else if (abstract_virtuals_error (decl, type))
10724             any_error = 1;  /* Seems like a good idea.  */
10725           else if (POINTER_TYPE_P (type))
10726             {
10727               /* [dcl.fct]/6, parameter types cannot contain pointers
10728                  (references) to arrays of unknown bound.  */
10729               tree t = TREE_TYPE (type);
10730               int ptr = TYPE_PTR_P (type);
10731
10732               while (1)
10733                 {
10734                   if (TYPE_PTR_P (t))
10735                     ptr = 1;
10736                   else if (TREE_CODE (t) != ARRAY_TYPE)
10737                     break;
10738                   else if (!TYPE_DOMAIN (t))
10739                     break;
10740                   t = TREE_TYPE (t);
10741                 }
10742               if (TREE_CODE (t) == ARRAY_TYPE)
10743                 error (ptr
10744                        ? G_("parameter %qD includes pointer to array of "
10745                             "unknown bound %qT")
10746                        : G_("parameter %qD includes reference to array of "
10747                             "unknown bound %qT"),
10748                        decl, t);
10749             }
10750
10751           if (any_error)
10752             init = NULL_TREE;
10753           else if (init && !processing_template_decl)
10754             init = check_default_argument (decl, init);
10755         }
10756
10757       DECL_CHAIN (decl) = decls;
10758       decls = decl;
10759       result = tree_cons (init, type, result);
10760     }
10761   decls = nreverse (decls);
10762   result = nreverse (result);
10763   if (parm)
10764     result = chainon (result, void_list_node);
10765   *parms = decls;
10766
10767   return result;
10768 }
10769
10770 \f
10771 /* D is a constructor or overloaded `operator='.
10772
10773    Let T be the class in which D is declared. Then, this function
10774    returns:
10775
10776    -1 if D's is an ill-formed constructor or copy assignment operator
10777       whose first parameter is of type `T'.
10778    0  if D is not a copy constructor or copy assignment
10779       operator.
10780    1  if D is a copy constructor or copy assignment operator whose
10781       first parameter is a reference to non-const qualified T.
10782    2  if D is a copy constructor or copy assignment operator whose
10783       first parameter is a reference to const qualified T.
10784
10785    This function can be used as a predicate. Positive values indicate
10786    a copy constructor and nonzero values indicate a copy assignment
10787    operator.  */
10788
10789 int
10790 copy_fn_p (const_tree d)
10791 {
10792   tree args;
10793   tree arg_type;
10794   int result = 1;
10795
10796   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10797
10798   if (TREE_CODE (d) == TEMPLATE_DECL
10799       || (DECL_TEMPLATE_INFO (d)
10800           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10801     /* Instantiations of template member functions are never copy
10802        functions.  Note that member functions of templated classes are
10803        represented as template functions internally, and we must
10804        accept those as copy functions.  */
10805     return 0;
10806
10807   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10808   if (!args)
10809     return 0;
10810
10811   arg_type = TREE_VALUE (args);
10812   if (arg_type == error_mark_node)
10813     return 0;
10814
10815   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10816     {
10817       /* Pass by value copy assignment operator.  */
10818       result = -1;
10819     }
10820   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10821            && !TYPE_REF_IS_RVALUE (arg_type)
10822            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10823     {
10824       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10825         result = 2;
10826     }
10827   else
10828     return 0;
10829
10830   args = TREE_CHAIN (args);
10831
10832   if (args && args != void_list_node && !TREE_PURPOSE (args))
10833     /* There are more non-optional args.  */
10834     return 0;
10835
10836   return result;
10837 }
10838
10839 /* D is a constructor or overloaded `operator='.
10840
10841    Let T be the class in which D is declared. Then, this function
10842    returns true when D is a move constructor or move assignment
10843    operator, false otherwise.  */
10844
10845 bool
10846 move_fn_p (const_tree d)
10847 {
10848   tree args;
10849   tree arg_type;
10850   bool result = false;
10851
10852   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10853
10854   if (cxx_dialect == cxx98)
10855     /* There are no move constructors if we are in C++98 mode.  */
10856     return false;
10857
10858   if (TREE_CODE (d) == TEMPLATE_DECL
10859       || (DECL_TEMPLATE_INFO (d)
10860          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10861     /* Instantiations of template member functions are never copy
10862        functions.  Note that member functions of templated classes are
10863        represented as template functions internally, and we must
10864        accept those as copy functions.  */
10865     return 0;
10866
10867   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10868   if (!args)
10869     return 0;
10870
10871   arg_type = TREE_VALUE (args);
10872   if (arg_type == error_mark_node)
10873     return 0;
10874
10875   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10876       && TYPE_REF_IS_RVALUE (arg_type)
10877       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10878                       DECL_CONTEXT (d)))
10879     result = true;
10880
10881   args = TREE_CHAIN (args);
10882
10883   if (args && args != void_list_node && !TREE_PURPOSE (args))
10884     /* There are more non-optional args.  */
10885     return false;
10886
10887   return result;
10888 }
10889
10890 /* Remember any special properties of member function DECL.  */
10891
10892 void
10893 grok_special_member_properties (tree decl)
10894 {
10895   tree class_type;
10896
10897   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10898     return;
10899
10900   class_type = DECL_CONTEXT (decl);
10901   if (DECL_CONSTRUCTOR_P (decl))
10902     {
10903       int ctor = copy_fn_p (decl);
10904
10905       if (!DECL_ARTIFICIAL (decl))
10906         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10907
10908       if (ctor > 0)
10909         {
10910           /* [class.copy]
10911
10912              A non-template constructor for class X is a copy
10913              constructor if its first parameter is of type X&, const
10914              X&, volatile X& or const volatile X&, and either there
10915              are no other parameters or else all other parameters have
10916              default arguments.  */
10917           TYPE_HAS_COPY_CTOR (class_type) = 1;
10918           if (user_provided_p (decl))
10919             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10920           if (ctor > 1)
10921             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10922         }
10923       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10924         {
10925           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10926           if (user_provided_p (decl))
10927             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10928         }
10929       else if (move_fn_p (decl) && user_provided_p (decl))
10930         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10931       else if (is_list_ctor (decl))
10932         TYPE_HAS_LIST_CTOR (class_type) = 1;
10933
10934       if (DECL_DECLARED_CONSTEXPR_P (decl)
10935           && !copy_fn_p (decl) && !move_fn_p (decl))
10936         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10937     }
10938   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10939     {
10940       /* [class.copy]
10941
10942          A non-template assignment operator for class X is a copy
10943          assignment operator if its parameter is of type X, X&, const
10944          X&, volatile X& or const volatile X&.  */
10945
10946       int assop = copy_fn_p (decl);
10947
10948       if (assop)
10949         {
10950           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10951           if (user_provided_p (decl))
10952             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10953           if (assop != 1)
10954             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10955         }
10956       else if (move_fn_p (decl) && user_provided_p (decl))
10957         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10958     }
10959   /* Destructors are handled in check_methods.  */
10960 }
10961
10962 /* Check a constructor DECL has the correct form.  Complains
10963    if the class has a constructor of the form X(X).  */
10964
10965 int
10966 grok_ctor_properties (const_tree ctype, const_tree decl)
10967 {
10968   int ctor_parm = copy_fn_p (decl);
10969
10970   if (ctor_parm < 0)
10971     {
10972       /* [class.copy]
10973
10974          A declaration of a constructor for a class X is ill-formed if
10975          its first parameter is of type (optionally cv-qualified) X
10976          and either there are no other parameters or else all other
10977          parameters have default arguments.
10978
10979          We *don't* complain about member template instantiations that
10980          have this form, though; they can occur as we try to decide
10981          what constructor to use during overload resolution.  Since
10982          overload resolution will never prefer such a constructor to
10983          the non-template copy constructor (which is either explicitly
10984          or implicitly defined), there's no need to worry about their
10985          existence.  Theoretically, they should never even be
10986          instantiated, but that's hard to forestall.  */
10987       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10988                 ctype, ctype);
10989       return 0;
10990     }
10991
10992   return 1;
10993 }
10994
10995 /* An operator with this code is unary, but can also be binary.  */
10996
10997 static int
10998 ambi_op_p (enum tree_code code)
10999 {
11000   return (code == INDIRECT_REF
11001           || code == ADDR_EXPR
11002           || code == UNARY_PLUS_EXPR
11003           || code == NEGATE_EXPR
11004           || code == PREINCREMENT_EXPR
11005           || code == PREDECREMENT_EXPR);
11006 }
11007
11008 /* An operator with this name can only be unary.  */
11009
11010 static int
11011 unary_op_p (enum tree_code code)
11012 {
11013   return (code == TRUTH_NOT_EXPR
11014           || code == BIT_NOT_EXPR
11015           || code == COMPONENT_REF
11016           || code == TYPE_EXPR);
11017 }
11018
11019 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
11020    errors are issued for invalid declarations.  */
11021
11022 bool
11023 grok_op_properties (tree decl, bool complain)
11024 {
11025   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
11026   tree argtype;
11027   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
11028   tree name = DECL_NAME (decl);
11029   enum tree_code operator_code;
11030   int arity;
11031   bool ellipsis_p;
11032   tree class_type;
11033
11034   /* Count the number of arguments and check for ellipsis.  */
11035   for (argtype = argtypes, arity = 0;
11036        argtype && argtype != void_list_node;
11037        argtype = TREE_CHAIN (argtype))
11038     ++arity;
11039   ellipsis_p = !argtype;
11040
11041   class_type = DECL_CONTEXT (decl);
11042   if (class_type && !CLASS_TYPE_P (class_type))
11043     class_type = NULL_TREE;
11044
11045   if (DECL_CONV_FN_P (decl))
11046     operator_code = TYPE_EXPR;
11047   else
11048     do
11049       {
11050 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
11051         if (ansi_opname (CODE) == name)                         \
11052           {                                                     \
11053             operator_code = (CODE);                             \
11054             break;                                              \
11055           }                                                     \
11056         else if (ansi_assopname (CODE) == name)                 \
11057           {                                                     \
11058             operator_code = (CODE);                             \
11059             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
11060             break;                                              \
11061           }
11062
11063 #include "operators.def"
11064 #undef DEF_OPERATOR
11065
11066         gcc_unreachable ();
11067       }
11068     while (0);
11069   gcc_assert (operator_code != MAX_TREE_CODES);
11070   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11071
11072   if (class_type)
11073     switch (operator_code)
11074       {
11075       case NEW_EXPR:
11076         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
11077         break;
11078
11079       case DELETE_EXPR:
11080         TYPE_GETS_DELETE (class_type) |= 1;
11081         break;
11082
11083       case VEC_NEW_EXPR:
11084         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
11085         break;
11086
11087       case VEC_DELETE_EXPR:
11088         TYPE_GETS_DELETE (class_type) |= 2;
11089         break;
11090
11091       default:
11092         break;
11093       }
11094
11095     /* [basic.std.dynamic.allocation]/1:
11096
11097        A program is ill-formed if an allocation function is declared
11098        in a namespace scope other than global scope or declared static
11099        in global scope.
11100
11101        The same also holds true for deallocation functions.  */
11102   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
11103       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11104     {
11105       if (DECL_NAMESPACE_SCOPE_P (decl))
11106         {
11107           if (CP_DECL_CONTEXT (decl) != global_namespace)
11108             {
11109               error ("%qD may not be declared within a namespace", decl);
11110               return false;
11111             }
11112           else if (!TREE_PUBLIC (decl))
11113             {
11114               error ("%qD may not be declared as static", decl);
11115               return false;
11116             }
11117         }
11118     }
11119
11120   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
11121     {
11122       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
11123       DECL_IS_OPERATOR_NEW (decl) = 1;
11124     }
11125   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
11126     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
11127   else
11128     {
11129       /* An operator function must either be a non-static member function
11130          or have at least one parameter of a class, a reference to a class,
11131          an enumeration, or a reference to an enumeration.  13.4.0.6 */
11132       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
11133         {
11134           if (operator_code == TYPE_EXPR
11135               || operator_code == CALL_EXPR
11136               || operator_code == COMPONENT_REF
11137               || operator_code == ARRAY_REF
11138               || operator_code == NOP_EXPR)
11139             {
11140               error ("%qD must be a nonstatic member function", decl);
11141               return false;
11142             }
11143           else
11144             {
11145               tree p;
11146
11147               if (DECL_STATIC_FUNCTION_P (decl))
11148                 {
11149                   error ("%qD must be either a non-static member "
11150                          "function or a non-member function", decl);
11151                   return false;
11152                 }
11153
11154               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
11155                 {
11156                   tree arg = non_reference (TREE_VALUE (p));
11157                   if (arg == error_mark_node)
11158                     return false;
11159
11160                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
11161                      because these checks are performed even on
11162                      template functions.  */
11163                   if (MAYBE_CLASS_TYPE_P (arg)
11164                       || TREE_CODE (arg) == ENUMERAL_TYPE)
11165                     break;
11166                 }
11167
11168               if (!p || p == void_list_node)
11169                 {
11170                   if (complain)
11171                     error ("%qD must have an argument of class or "
11172                            "enumerated type", decl);
11173                   return false;
11174                 }
11175             }
11176         }
11177
11178       /* There are no restrictions on the arguments to an overloaded
11179          "operator ()".  */
11180       if (operator_code == CALL_EXPR)
11181         return true;
11182
11183       /* Warn about conversion operators that will never be used.  */
11184       if (IDENTIFIER_TYPENAME_P (name)
11185           && ! DECL_TEMPLATE_INFO (decl)
11186           && warn_conversion
11187           /* Warn only declaring the function; there is no need to
11188              warn again about out-of-class definitions.  */
11189           && class_type == current_class_type)
11190         {
11191           tree t = TREE_TYPE (name);
11192           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11193
11194           if (ref)
11195             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11196
11197           if (TREE_CODE (t) == VOID_TYPE)
11198             warning (OPT_Wconversion,
11199                      ref
11200                      ? G_("conversion to a reference to void "
11201                           "will never use a type conversion operator")
11202                      : G_("conversion to void "
11203                           "will never use a type conversion operator"));
11204           else if (class_type)
11205             {
11206               if (t == class_type)
11207                 warning (OPT_Wconversion,
11208                      ref
11209                      ? G_("conversion to a reference to the same type "
11210                           "will never use a type conversion operator")
11211                      : G_("conversion to the same type "
11212                           "will never use a type conversion operator"));                
11213               /* Don't force t to be complete here.  */
11214               else if (MAYBE_CLASS_TYPE_P (t)
11215                        && COMPLETE_TYPE_P (t)
11216                        && DERIVED_FROM_P (t, class_type))
11217                  warning (OPT_Wconversion,
11218                           ref
11219                           ? G_("conversion to a reference to a base class "
11220                                "will never use a type conversion operator")
11221                           : G_("conversion to a base class "
11222                                "will never use a type conversion operator"));           
11223             }
11224
11225         }
11226
11227       if (operator_code == COND_EXPR)
11228         {
11229           /* 13.4.0.3 */
11230           error ("ISO C++ prohibits overloading operator ?:");
11231           return false;
11232         }
11233       else if (ellipsis_p)
11234         {
11235           error ("%qD must not have variable number of arguments", decl);
11236           return false;
11237         }
11238       else if (ambi_op_p (operator_code))
11239         {
11240           if (arity == 1)
11241             /* We pick the one-argument operator codes by default, so
11242                we don't have to change anything.  */
11243             ;
11244           else if (arity == 2)
11245             {
11246               /* If we thought this was a unary operator, we now know
11247                  it to be a binary operator.  */
11248               switch (operator_code)
11249                 {
11250                 case INDIRECT_REF:
11251                   operator_code = MULT_EXPR;
11252                   break;
11253
11254                 case ADDR_EXPR:
11255                   operator_code = BIT_AND_EXPR;
11256                   break;
11257
11258                 case UNARY_PLUS_EXPR:
11259                   operator_code = PLUS_EXPR;
11260                   break;
11261
11262                 case NEGATE_EXPR:
11263                   operator_code = MINUS_EXPR;
11264                   break;
11265
11266                 case PREINCREMENT_EXPR:
11267                   operator_code = POSTINCREMENT_EXPR;
11268                   break;
11269
11270                 case PREDECREMENT_EXPR:
11271                   operator_code = POSTDECREMENT_EXPR;
11272                   break;
11273
11274                 default:
11275                   gcc_unreachable ();
11276                 }
11277
11278               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11279
11280               if ((operator_code == POSTINCREMENT_EXPR
11281                    || operator_code == POSTDECREMENT_EXPR)
11282                   && ! processing_template_decl
11283                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11284                 {
11285                   if (methodp)
11286                     error ("postfix %qD must take %<int%> as its argument",
11287                            decl);
11288                   else
11289                     error ("postfix %qD must take %<int%> as its second "
11290                            "argument", decl);
11291                   return false;
11292                 }
11293             }
11294           else
11295             {
11296               if (methodp)
11297                 error ("%qD must take either zero or one argument", decl);
11298               else
11299                 error ("%qD must take either one or two arguments", decl);
11300               return false;
11301             }
11302
11303           /* More Effective C++ rule 6.  */
11304           if (warn_ecpp
11305               && (operator_code == POSTINCREMENT_EXPR
11306                   || operator_code == POSTDECREMENT_EXPR
11307                   || operator_code == PREINCREMENT_EXPR
11308                   || operator_code == PREDECREMENT_EXPR))
11309             {
11310               tree arg = TREE_VALUE (argtypes);
11311               tree ret = TREE_TYPE (TREE_TYPE (decl));
11312               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11313                 arg = TREE_TYPE (arg);
11314               arg = TYPE_MAIN_VARIANT (arg);
11315               if (operator_code == PREINCREMENT_EXPR
11316                   || operator_code == PREDECREMENT_EXPR)
11317                 {
11318                   if (TREE_CODE (ret) != REFERENCE_TYPE
11319                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11320                                        arg))
11321                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11322                              build_reference_type (arg));
11323                 }
11324               else
11325                 {
11326                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11327                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11328                 }
11329             }
11330         }
11331       else if (unary_op_p (operator_code))
11332         {
11333           if (arity != 1)
11334             {
11335               if (methodp)
11336                 error ("%qD must take %<void%>", decl);
11337               else
11338                 error ("%qD must take exactly one argument", decl);
11339               return false;
11340             }
11341         }
11342       else /* if (binary_op_p (operator_code)) */
11343         {
11344           if (arity != 2)
11345             {
11346               if (methodp)
11347                 error ("%qD must take exactly one argument", decl);
11348               else
11349                 error ("%qD must take exactly two arguments", decl);
11350               return false;
11351             }
11352
11353           /* More Effective C++ rule 7.  */
11354           if (warn_ecpp
11355               && (operator_code == TRUTH_ANDIF_EXPR
11356                   || operator_code == TRUTH_ORIF_EXPR
11357                   || operator_code == COMPOUND_EXPR))
11358             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11359                      decl);
11360         }
11361
11362       /* Effective C++ rule 23.  */
11363       if (warn_ecpp
11364           && arity == 2
11365           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11366           && (operator_code == PLUS_EXPR
11367               || operator_code == MINUS_EXPR
11368               || operator_code == TRUNC_DIV_EXPR
11369               || operator_code == MULT_EXPR
11370               || operator_code == TRUNC_MOD_EXPR)
11371           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11372         warning (OPT_Weffc__, "%qD should return by value", decl);
11373
11374       /* [over.oper]/8 */
11375       for (; argtypes && argtypes != void_list_node;
11376           argtypes = TREE_CHAIN (argtypes))
11377         if (TREE_PURPOSE (argtypes))
11378           {
11379             TREE_PURPOSE (argtypes) = NULL_TREE;
11380             if (operator_code == POSTINCREMENT_EXPR
11381                 || operator_code == POSTDECREMENT_EXPR)
11382               {
11383                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
11384                          decl);
11385               }
11386             else
11387               {
11388                 error ("%qD cannot have default arguments", decl);
11389                 return false;
11390               }
11391           }
11392     }
11393   return true;
11394 }
11395 \f
11396 /* Return a string giving the keyword associate with CODE.  */
11397
11398 static const char *
11399 tag_name (enum tag_types code)
11400 {
11401   switch (code)
11402     {
11403     case record_type:
11404       return "struct";
11405     case class_type:
11406       return "class";
11407     case union_type:
11408       return "union";
11409     case enum_type:
11410       return "enum";
11411     case typename_type:
11412       return "typename";
11413     default:
11414       gcc_unreachable ();
11415     }
11416 }
11417
11418 /* Name lookup in an elaborated-type-specifier (after the keyword
11419    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11420    elaborated-type-specifier is invalid, issue a diagnostic and return
11421    error_mark_node; otherwise, return the *_TYPE to which it referred.
11422    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11423
11424 tree
11425 check_elaborated_type_specifier (enum tag_types tag_code,
11426                                  tree decl,
11427                                  bool allow_template_p)
11428 {
11429   tree type;
11430
11431   if (decl == error_mark_node)
11432     return error_mark_node;
11433
11434   /* In the case of:
11435
11436        struct S { struct S *p; };
11437
11438      name lookup will find the TYPE_DECL for the implicit "S::S"
11439      typedef.  Adjust for that here.  */
11440   if (DECL_SELF_REFERENCE_P (decl))
11441     decl = TYPE_NAME (TREE_TYPE (decl));
11442
11443   type = TREE_TYPE (decl);
11444
11445   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11446      is false for this case as well.  */
11447   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11448     {
11449       error ("using template type parameter %qT after %qs",
11450              type, tag_name (tag_code));
11451       return error_mark_node;
11452     }
11453   /* Accept bound template template parameters.  */
11454   else if (allow_template_p
11455            && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11456     ;
11457   /*   [dcl.type.elab]
11458
11459        If the identifier resolves to a typedef-name or the
11460        simple-template-id resolves to an alias template
11461        specialization, the elaborated-type-specifier is ill-formed.
11462
11463      In other words, the only legitimate declaration to use in the
11464      elaborated type specifier is the implicit typedef created when
11465      the type is declared.  */
11466   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11467            && !DECL_SELF_REFERENCE_P (decl)
11468            && tag_code != typename_type)
11469     {
11470       if (alias_template_specialization_p (type))
11471         error ("using alias template specialization %qT after %qs",
11472                type, tag_name (tag_code));
11473       else
11474         error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11475       inform (DECL_SOURCE_LOCATION (decl),
11476               "%qD has a previous declaration here", decl);
11477       return error_mark_node;
11478     }
11479   else if (TREE_CODE (type) != RECORD_TYPE
11480            && TREE_CODE (type) != UNION_TYPE
11481            && tag_code != enum_type
11482            && tag_code != typename_type)
11483     {
11484       error ("%qT referred to as %qs", type, tag_name (tag_code));
11485       error ("%q+T has a previous declaration here", type);
11486       return error_mark_node;
11487     }
11488   else if (TREE_CODE (type) != ENUMERAL_TYPE
11489            && tag_code == enum_type)
11490     {
11491       error ("%qT referred to as enum", type);
11492       error ("%q+T has a previous declaration here", type);
11493       return error_mark_node;
11494     }
11495   else if (!allow_template_p
11496            && TREE_CODE (type) == RECORD_TYPE
11497            && CLASSTYPE_IS_TEMPLATE (type))
11498     {
11499       /* If a class template appears as elaborated type specifier
11500          without a template header such as:
11501
11502            template <class T> class C {};
11503            void f(class C);             // No template header here
11504
11505          then the required template argument is missing.  */
11506       error ("template argument required for %<%s %T%>",
11507              tag_name (tag_code),
11508              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11509       return error_mark_node;
11510     }
11511
11512   return type;
11513 }
11514
11515 /* Lookup NAME in elaborate type specifier in scope according to
11516    SCOPE and issue diagnostics if necessary.
11517    Return *_TYPE node upon success, NULL_TREE when the NAME is not
11518    found, and ERROR_MARK_NODE for type error.  */
11519
11520 static tree
11521 lookup_and_check_tag (enum tag_types tag_code, tree name,
11522                       tag_scope scope, bool template_header_p)
11523 {
11524   tree t;
11525   tree decl;
11526   if (scope == ts_global)
11527     {
11528       /* First try ordinary name lookup, ignoring hidden class name
11529          injected via friend declaration.  */
11530       decl = lookup_name_prefer_type (name, 2);
11531       /* If that fails, the name will be placed in the smallest
11532          non-class, non-function-prototype scope according to 3.3.1/5.
11533          We may already have a hidden name declared as friend in this
11534          scope.  So lookup again but not ignoring hidden names.
11535          If we find one, that name will be made visible rather than
11536          creating a new tag.  */
11537       if (!decl)
11538         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11539     }
11540   else
11541     decl = lookup_type_scope (name, scope);
11542
11543   if (decl && DECL_CLASS_TEMPLATE_P (decl))
11544     decl = DECL_TEMPLATE_RESULT (decl);
11545
11546   if (decl && TREE_CODE (decl) == TYPE_DECL)
11547     {
11548       /* Look for invalid nested type:
11549            class C {
11550              class C {};
11551            };  */
11552       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11553         {
11554           error ("%qD has the same name as the class in which it is "
11555                  "declared",
11556                  decl);
11557           return error_mark_node;
11558         }
11559
11560       /* Two cases we need to consider when deciding if a class
11561          template is allowed as an elaborated type specifier:
11562          1. It is a self reference to its own class.
11563          2. It comes with a template header.
11564
11565          For example:
11566
11567            template <class T> class C {
11568              class C *c1;               // DECL_SELF_REFERENCE_P is true
11569              class D;
11570            };
11571            template <class U> class C; // template_header_p is true
11572            template <class T> class C<T>::D {
11573              class C *c2;               // DECL_SELF_REFERENCE_P is true
11574            };  */
11575
11576       t = check_elaborated_type_specifier (tag_code,
11577                                            decl,
11578                                            template_header_p
11579                                            | DECL_SELF_REFERENCE_P (decl));
11580       return t;
11581     }
11582   else if (decl && TREE_CODE (decl) == TREE_LIST)
11583     {
11584       error ("reference to %qD is ambiguous", name);
11585       print_candidates (decl);
11586       return error_mark_node;
11587     }
11588   else
11589     return NULL_TREE;
11590 }
11591
11592 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11593    Define the tag as a forward-reference if it is not defined.
11594
11595    If a declaration is given, process it here, and report an error if
11596    multiple declarations are not identical.
11597
11598    SCOPE is TS_CURRENT when this is also a definition.  Only look in
11599    the current frame for the name (since C++ allows new names in any
11600    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11601    declaration.  Only look beginning from the current scope outward up
11602    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11603
11604    TEMPLATE_HEADER_P is true when this declaration is preceded by
11605    a set of template parameters.  */
11606
11607 static tree
11608 xref_tag_1 (enum tag_types tag_code, tree name,
11609             tag_scope scope, bool template_header_p)
11610 {
11611   enum tree_code code;
11612   tree t;
11613   tree context = NULL_TREE;
11614
11615   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11616
11617   switch (tag_code)
11618     {
11619     case record_type:
11620     case class_type:
11621       code = RECORD_TYPE;
11622       break;
11623     case union_type:
11624       code = UNION_TYPE;
11625       break;
11626     case enum_type:
11627       code = ENUMERAL_TYPE;
11628       break;
11629     default:
11630       gcc_unreachable ();
11631     }
11632
11633   /* In case of anonymous name, xref_tag is only called to
11634      make type node and push name.  Name lookup is not required.  */
11635   if (ANON_AGGRNAME_P (name))
11636     t = NULL_TREE;
11637   else
11638     t = lookup_and_check_tag  (tag_code, name,
11639                                scope, template_header_p);
11640
11641   if (t == error_mark_node)
11642     return error_mark_node;
11643
11644   if (scope != ts_current && t && current_class_type
11645       && template_class_depth (current_class_type)
11646       && template_header_p)
11647     {
11648       /* Since SCOPE is not TS_CURRENT, we are not looking at a
11649          definition of this tag.  Since, in addition, we are currently
11650          processing a (member) template declaration of a template
11651          class, we must be very careful; consider:
11652
11653            template <class X>
11654            struct S1
11655
11656            template <class U>
11657            struct S2
11658            { template <class V>
11659            friend struct S1; };
11660
11661          Here, the S2::S1 declaration should not be confused with the
11662          outer declaration.  In particular, the inner version should
11663          have a template parameter of level 2, not level 1.  This
11664          would be particularly important if the member declaration
11665          were instead:
11666
11667            template <class V = U> friend struct S1;
11668
11669          say, when we should tsubst into `U' when instantiating
11670          S2.  On the other hand, when presented with:
11671
11672            template <class T>
11673            struct S1 {
11674              template <class U>
11675              struct S2 {};
11676              template <class U>
11677              friend struct S2;
11678            };
11679
11680          we must find the inner binding eventually.  We
11681          accomplish this by making sure that the new type we
11682          create to represent this declaration has the right
11683          TYPE_CONTEXT.  */
11684       context = TYPE_CONTEXT (t);
11685       t = NULL_TREE;
11686     }
11687
11688   if (! t)
11689     {
11690       /* If no such tag is yet defined, create a forward-reference node
11691          and record it as the "definition".
11692          When a real declaration of this type is found,
11693          the forward-reference will be altered into a real type.  */
11694       if (code == ENUMERAL_TYPE)
11695         {
11696           error ("use of enum %q#D without previous declaration", name);
11697           return error_mark_node;
11698         }
11699       else
11700         {
11701           t = make_class_type (code);
11702           TYPE_CONTEXT (t) = context;
11703           t = pushtag (name, t, scope);
11704         }
11705     }
11706   else
11707     {
11708       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11709         {
11710           if (!redeclare_class_template (t, current_template_parms))
11711             return error_mark_node;
11712         }
11713       else if (!processing_template_decl
11714                && CLASS_TYPE_P (t)
11715                && CLASSTYPE_IS_TEMPLATE (t))
11716         {
11717           error ("redeclaration of %qT as a non-template", t);
11718           error ("previous declaration %q+D", t);
11719           return error_mark_node;
11720         }
11721
11722       /* Make injected friend class visible.  */
11723       if (scope != ts_within_enclosing_non_class
11724           && hidden_name_p (TYPE_NAME (t)))
11725         {
11726           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11727           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11728
11729           if (TYPE_TEMPLATE_INFO (t))
11730             {
11731               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11732               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11733             }
11734         }
11735     }
11736
11737   return t;
11738 }
11739
11740 /* Wrapper for xref_tag_1.  */
11741
11742 tree
11743 xref_tag (enum tag_types tag_code, tree name,
11744           tag_scope scope, bool template_header_p)
11745 {
11746   tree ret;
11747   bool subtime;
11748   subtime = timevar_cond_start (TV_NAME_LOOKUP);
11749   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11750   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
11751   return ret;
11752 }
11753
11754
11755 tree
11756 xref_tag_from_type (tree old, tree id, tag_scope scope)
11757 {
11758   enum tag_types tag_kind;
11759
11760   if (TREE_CODE (old) == RECORD_TYPE)
11761     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11762   else
11763     tag_kind  = union_type;
11764
11765   if (id == NULL_TREE)
11766     id = TYPE_IDENTIFIER (old);
11767
11768   return xref_tag (tag_kind, id, scope, false);
11769 }
11770
11771 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11772    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11773    access_* node, and the TREE_VALUE is the type of the base-class.
11774    Non-NULL TREE_TYPE indicates virtual inheritance.  
11775  
11776    Returns true if the binfo hierarchy was successfully created,
11777    false if an error was detected. */
11778
11779 bool
11780 xref_basetypes (tree ref, tree base_list)
11781 {
11782   tree *basep;
11783   tree binfo, base_binfo;
11784   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11785   unsigned max_bases = 0;  /* Maximum direct bases.  */
11786   int i;
11787   tree default_access;
11788   tree igo_prev; /* Track Inheritance Graph Order.  */
11789
11790   if (ref == error_mark_node)
11791     return false;
11792
11793   /* The base of a derived class is private by default, all others are
11794      public.  */
11795   default_access = (TREE_CODE (ref) == RECORD_TYPE
11796                     && CLASSTYPE_DECLARED_CLASS (ref)
11797                     ? access_private_node : access_public_node);
11798
11799   /* First, make sure that any templates in base-classes are
11800      instantiated.  This ensures that if we call ourselves recursively
11801      we do not get confused about which classes are marked and which
11802      are not.  */
11803   basep = &base_list;
11804   while (*basep)
11805     {
11806       tree basetype = TREE_VALUE (*basep);
11807
11808       if (!(processing_template_decl && uses_template_parms (basetype))
11809           && !complete_type_or_else (basetype, NULL))
11810         /* An incomplete type.  Remove it from the list.  */
11811         *basep = TREE_CHAIN (*basep);
11812       else
11813         {
11814           max_bases++;
11815           if (TREE_TYPE (*basep))
11816             max_vbases++;
11817           if (CLASS_TYPE_P (basetype))
11818             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11819           basep = &TREE_CHAIN (*basep);
11820         }
11821     }
11822
11823   TYPE_MARKED_P (ref) = 1;
11824
11825   /* The binfo slot should be empty, unless this is an (ill-formed)
11826      redefinition.  */
11827   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11828     {
11829       error ("redefinition of %q#T", ref);
11830       return false;
11831     }
11832
11833   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11834
11835   binfo = make_tree_binfo (max_bases);
11836
11837   TYPE_BINFO (ref) = binfo;
11838   BINFO_OFFSET (binfo) = size_zero_node;
11839   BINFO_TYPE (binfo) = ref;
11840
11841   /* Apply base-class info set up to the variants of this type.  */
11842   fixup_type_variants (ref);
11843
11844   if (max_bases)
11845     {
11846       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11847       /* An aggregate cannot have baseclasses.  */
11848       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11849
11850       if (TREE_CODE (ref) == UNION_TYPE)
11851         {
11852           error ("derived union %qT invalid", ref);
11853           return false;
11854         }
11855     }
11856
11857   if (max_bases > 1)
11858     {
11859       if (TYPE_FOR_JAVA (ref))
11860         {
11861           error ("Java class %qT cannot have multiple bases", ref);
11862           return false;
11863         }
11864     }
11865
11866   if (max_vbases)
11867     {
11868       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11869
11870       if (TYPE_FOR_JAVA (ref))
11871         {
11872           error ("Java class %qT cannot have virtual bases", ref);
11873           return false;
11874         }
11875     }
11876
11877   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11878     {
11879       tree access = TREE_PURPOSE (base_list);
11880       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11881       tree basetype = TREE_VALUE (base_list);
11882
11883       if (access == access_default_node)
11884         access = default_access;
11885
11886       if (PACK_EXPANSION_P (basetype))
11887         basetype = PACK_EXPANSION_PATTERN (basetype);
11888       if (TREE_CODE (basetype) == TYPE_DECL)
11889         basetype = TREE_TYPE (basetype);
11890       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11891         {
11892           error ("base type %qT fails to be a struct or class type",
11893                  basetype);
11894           return false;
11895         }
11896
11897       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11898         TYPE_FOR_JAVA (ref) = 1;
11899
11900       base_binfo = NULL_TREE;
11901       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
11902         {
11903           base_binfo = TYPE_BINFO (basetype);
11904           /* The original basetype could have been a typedef'd type.  */
11905           basetype = BINFO_TYPE (base_binfo);
11906
11907           /* Inherit flags from the base.  */
11908           TYPE_HAS_NEW_OPERATOR (ref)
11909             |= TYPE_HAS_NEW_OPERATOR (basetype);
11910           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11911             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11912           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11913           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11914           CLASSTYPE_DIAMOND_SHAPED_P (ref)
11915             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11916           CLASSTYPE_REPEATED_BASE_P (ref)
11917             |= CLASSTYPE_REPEATED_BASE_P (basetype);
11918         }
11919
11920       /* We must do this test after we've seen through a typedef
11921          type.  */
11922       if (TYPE_MARKED_P (basetype))
11923         {
11924           if (basetype == ref)
11925             error ("recursive type %qT undefined", basetype);
11926           else
11927             error ("duplicate base type %qT invalid", basetype);
11928           return false;
11929         }
11930
11931       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11932         /* Regenerate the pack expansion for the bases. */
11933         basetype = make_pack_expansion (basetype);
11934
11935       TYPE_MARKED_P (basetype) = 1;
11936
11937       base_binfo = copy_binfo (base_binfo, basetype, ref,
11938                                &igo_prev, via_virtual);
11939       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11940         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11941
11942       BINFO_BASE_APPEND (binfo, base_binfo);
11943       BINFO_BASE_ACCESS_APPEND (binfo, access);
11944     }
11945
11946   if (VEC_length (tree, CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
11947     /* If we didn't get max_vbases vbases, we must have shared at
11948        least one of them, and are therefore diamond shaped.  */
11949     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11950
11951   /* Unmark all the types.  */
11952   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11953     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11954   TYPE_MARKED_P (ref) = 0;
11955
11956   /* Now see if we have a repeated base type.  */
11957   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11958     {
11959       for (base_binfo = binfo; base_binfo;
11960            base_binfo = TREE_CHAIN (base_binfo))
11961         {
11962           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11963             {
11964               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11965               break;
11966             }
11967           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11968         }
11969       for (base_binfo = binfo; base_binfo;
11970            base_binfo = TREE_CHAIN (base_binfo))
11971         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11972           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11973         else
11974           break;
11975     }
11976
11977   return true;
11978 }
11979
11980 \f
11981 /* Copies the enum-related properties from type SRC to type DST.
11982    Used with the underlying type of an enum and the enum itself.  */
11983 static void
11984 copy_type_enum (tree dst, tree src)
11985 {
11986   tree t;
11987   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
11988     {
11989       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
11990       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
11991       TYPE_SIZE (t) = TYPE_SIZE (src);
11992       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
11993       SET_TYPE_MODE (dst, TYPE_MODE (src));
11994       TYPE_PRECISION (t) = TYPE_PRECISION (src);
11995       TYPE_ALIGN (t) = TYPE_ALIGN (src);
11996       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
11997       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
11998     }
11999 }
12000
12001 /* Begin compiling the definition of an enumeration type.
12002    NAME is its name, 
12003
12004    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
12005
12006    UNDERLYING_TYPE is the type that will be used as the storage for
12007    the enumeration type. This should be NULL_TREE if no storage type
12008    was specified.
12009
12010    SCOPED_ENUM_P is true if this is a scoped enumeration type.
12011
12012    if IS_NEW is not NULL, gets TRUE iff a new type is created.
12013
12014    Returns the type object, as yet incomplete.
12015    Also records info about it so that build_enumerator
12016    may be used to declare the individual values as they are read.  */
12017
12018 tree
12019 start_enum (tree name, tree enumtype, tree underlying_type,
12020             bool scoped_enum_p, bool *is_new)
12021 {
12022   tree prevtype = NULL_TREE;
12023   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
12024
12025   if (is_new)
12026     *is_new = false;
12027   /* [C++0x dcl.enum]p5:
12028
12029     If not explicitly specified, the underlying type of a scoped
12030     enumeration type is int.  */
12031   if (!underlying_type && scoped_enum_p)
12032     underlying_type = integer_type_node;
12033
12034   if (underlying_type)
12035     underlying_type = cv_unqualified (underlying_type);
12036
12037   /* If this is the real definition for a previous forward reference,
12038      fill in the contents in the same object that used to be the
12039      forward reference.  */
12040   if (!enumtype)
12041     enumtype = lookup_and_check_tag (enum_type, name,
12042                                      /*tag_scope=*/ts_current,
12043                                      /*template_header_p=*/false);
12044
12045   /* In case of a template_decl, the only check that should be deferred
12046      to instantiation time is the comparison of underlying types.  */
12047   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
12048     {
12049       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
12050         {
12051           error_at (input_location, "scoped/unscoped mismatch "
12052                     "in enum %q#T", enumtype);
12053           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12054                     "previous definition here");
12055           enumtype = error_mark_node;
12056         }
12057       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
12058         {
12059           error_at (input_location, "underlying type mismatch "
12060                     "in enum %q#T", enumtype);
12061           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12062                     "previous definition here");
12063           enumtype = error_mark_node;
12064         }
12065       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
12066                && !dependent_type_p (underlying_type)
12067                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
12068                && !same_type_p (underlying_type,
12069                                 ENUM_UNDERLYING_TYPE (enumtype)))
12070         {
12071           error_at (input_location, "different underlying type "
12072                     "in enum %q#T", enumtype);
12073           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
12074                     "previous definition here");
12075           underlying_type = NULL_TREE;
12076         }
12077     }
12078
12079   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
12080       || processing_template_decl)
12081     {
12082       /* In case of error, make a dummy enum to allow parsing to
12083          continue.  */
12084       if (enumtype == error_mark_node)
12085         {
12086           name = make_anon_name ();
12087           enumtype = NULL_TREE;
12088         }
12089
12090       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
12091          of an opaque enum, or an opaque enum of an already defined
12092          enumeration (C++0x only).
12093          In any other case, it'll be NULL_TREE. */
12094       if (!enumtype)
12095         {
12096           if (is_new)
12097             *is_new = true;
12098         }
12099       prevtype = enumtype;
12100
12101       /* Do not push the decl more than once, unless we need to
12102          compare underlying types at instantiation time */
12103       if (!enumtype
12104           || TREE_CODE (enumtype) != ENUMERAL_TYPE
12105           || (underlying_type
12106               && dependent_type_p (underlying_type))
12107           || (ENUM_UNDERLYING_TYPE (enumtype)
12108               && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
12109         {
12110           enumtype = cxx_make_type (ENUMERAL_TYPE);
12111           enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
12112         }
12113       else
12114           enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
12115                                false);
12116
12117       if (enumtype == error_mark_node)
12118         return error_mark_node;
12119
12120       /* The enum is considered opaque until the opening '{' of the
12121          enumerator list.  */
12122       SET_OPAQUE_ENUM_P (enumtype, true);
12123       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
12124     }
12125
12126   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
12127
12128   if (underlying_type)
12129     {
12130       if (CP_INTEGRAL_TYPE_P (underlying_type))
12131         {
12132           copy_type_enum (enumtype, underlying_type);
12133           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12134         }
12135       else if (dependent_type_p (underlying_type))
12136         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
12137       else
12138         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
12139                underlying_type, enumtype);
12140     }
12141
12142   /* If into a template class, the returned enum is always the first
12143      declaration (opaque or not) seen. This way all the references to
12144      this type will be to the same declaration. The following ones are used
12145      only to check for definition errors.  */
12146   if (prevtype && processing_template_decl)
12147     return prevtype;
12148   else
12149     return enumtype;
12150 }
12151
12152 /* After processing and defining all the values of an enumeration type,
12153    install their decls in the enumeration type.
12154    ENUMTYPE is the type object.  */
12155
12156 void
12157 finish_enum_value_list (tree enumtype)
12158 {
12159   tree values;
12160   tree underlying_type;
12161   tree decl;
12162   tree value;
12163   tree minnode, maxnode;
12164   tree t;
12165
12166   bool fixed_underlying_type_p 
12167     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
12168
12169   /* We built up the VALUES in reverse order.  */
12170   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
12171
12172   /* For an enum defined in a template, just set the type of the values;
12173      all further processing is postponed until the template is
12174      instantiated.  We need to set the type so that tsubst of a CONST_DECL
12175      works.  */
12176   if (processing_template_decl)
12177     {
12178       for (values = TYPE_VALUES (enumtype);
12179            values;
12180            values = TREE_CHAIN (values))
12181         TREE_TYPE (TREE_VALUE (values)) = enumtype;
12182       return;
12183     }
12184
12185   /* Determine the minimum and maximum values of the enumerators.  */
12186   if (TYPE_VALUES (enumtype))
12187     {
12188       minnode = maxnode = NULL_TREE;
12189
12190       for (values = TYPE_VALUES (enumtype);
12191            values;
12192            values = TREE_CHAIN (values))
12193         {
12194           decl = TREE_VALUE (values);
12195
12196           /* [dcl.enum]: Following the closing brace of an enum-specifier,
12197              each enumerator has the type of its enumeration.  Prior to the
12198              closing brace, the type of each enumerator is the type of its
12199              initializing value.  */
12200           TREE_TYPE (decl) = enumtype;
12201
12202           /* Update the minimum and maximum values, if appropriate.  */
12203           value = DECL_INITIAL (decl);
12204           if (value == error_mark_node)
12205             value = integer_zero_node;
12206           /* Figure out what the minimum and maximum values of the
12207              enumerators are.  */
12208           if (!minnode)
12209             minnode = maxnode = value;
12210           else if (tree_int_cst_lt (maxnode, value))
12211             maxnode = value;
12212           else if (tree_int_cst_lt (value, minnode))
12213             minnode = value;
12214         }
12215     }
12216   else
12217     /* [dcl.enum]
12218
12219        If the enumerator-list is empty, the underlying type is as if
12220        the enumeration had a single enumerator with value 0.  */
12221     minnode = maxnode = integer_zero_node;
12222
12223   if (!fixed_underlying_type_p)
12224     {
12225       /* Compute the number of bits require to represent all values of the
12226          enumeration.  We must do this before the type of MINNODE and
12227          MAXNODE are transformed, since tree_int_cst_min_precision relies
12228          on the TREE_TYPE of the value it is passed.  */
12229       bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12230       int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12231       int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12232       int precision = MAX (lowprec, highprec);
12233       unsigned int itk;
12234       bool use_short_enum;
12235
12236       /* Determine the underlying type of the enumeration.
12237
12238          [dcl.enum]
12239
12240          The underlying type of an enumeration is an integral type that
12241          can represent all the enumerator values defined in the
12242          enumeration.  It is implementation-defined which integral type is
12243          used as the underlying type for an enumeration except that the
12244          underlying type shall not be larger than int unless the value of
12245          an enumerator cannot fit in an int or unsigned int.
12246
12247          We use "int" or an "unsigned int" as the underlying type, even if
12248          a smaller integral type would work, unless the user has
12249          explicitly requested that we use the smallest possible type.  The
12250          user can request that for all enumerations with a command line
12251          flag, or for just one enumeration with an attribute.  */
12252
12253       use_short_enum = flag_short_enums
12254         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12255
12256       for (itk = (use_short_enum ? itk_char : itk_int);
12257            itk != itk_none;
12258            itk++)
12259         {
12260           underlying_type = integer_types[itk];
12261           if (underlying_type != NULL_TREE
12262               && TYPE_PRECISION (underlying_type) >= precision
12263               && TYPE_UNSIGNED (underlying_type) == unsignedp)
12264             break;
12265         }
12266       if (itk == itk_none)
12267         {
12268           /* DR 377
12269
12270              IF no integral type can represent all the enumerator values, the
12271              enumeration is ill-formed.  */
12272           error ("no integral type can represent all of the enumerator values "
12273                  "for %qT", enumtype);
12274           precision = TYPE_PRECISION (long_long_integer_type_node);
12275           underlying_type = integer_types[itk_unsigned_long_long];
12276         }
12277
12278       /* [dcl.enum]
12279
12280          The value of sizeof() applied to an enumeration type, an object
12281          of an enumeration type, or an enumerator, is the value of sizeof()
12282          applied to the underlying type.  */
12283       copy_type_enum (enumtype, underlying_type);
12284
12285       /* Compute the minimum and maximum values for the type.
12286
12287          [dcl.enum]
12288
12289          For an enumeration where emin is the smallest enumerator and emax
12290          is the largest, the values of the enumeration are the values of the
12291          underlying type in the range bmin to bmax, where bmin and bmax are,
12292          respectively, the smallest and largest values of the smallest bit-
12293          field that can store emin and emax.  */
12294
12295       /* The middle-end currently assumes that types with TYPE_PRECISION
12296          narrower than their underlying type are suitably zero or sign
12297          extended to fill their mode.  Similarly, it assumes that the front
12298          end assures that a value of a particular type must be within
12299          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12300
12301          We used to set these fields based on bmin and bmax, but that led
12302          to invalid assumptions like optimizing away bounds checking.  So
12303          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12304          TYPE_MAX_VALUE to the values for the mode above and only restrict
12305          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12306       ENUM_UNDERLYING_TYPE (enumtype)
12307         = build_distinct_type_copy (underlying_type);
12308       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12309       set_min_and_max_values_for_integral_type
12310         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12311
12312       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12313       if (flag_strict_enums)
12314         set_min_and_max_values_for_integral_type (enumtype, precision,
12315                                                   unsignedp);
12316     }
12317   else
12318     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12319
12320   /* Convert each of the enumerators to the type of the underlying
12321      type of the enumeration.  */
12322   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12323     {
12324       location_t saved_location;
12325
12326       decl = TREE_VALUE (values);
12327       saved_location = input_location;
12328       input_location = DECL_SOURCE_LOCATION (decl);
12329       if (fixed_underlying_type_p)
12330         /* If the enumeration type has a fixed underlying type, we
12331            already checked all of the enumerator values.  */
12332         value = DECL_INITIAL (decl);
12333       else
12334         value = perform_implicit_conversion (underlying_type,
12335                                              DECL_INITIAL (decl),
12336                                              tf_warning_or_error);
12337       input_location = saved_location;
12338
12339       /* Do not clobber shared ints.  */
12340       value = copy_node (value);
12341
12342       TREE_TYPE (value) = enumtype;
12343       DECL_INITIAL (decl) = value;
12344     }
12345
12346   /* Fix up all variant types of this enum type.  */
12347   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12348     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12349
12350   if (at_class_scope_p ()
12351       && COMPLETE_TYPE_P (current_class_type)
12352       && UNSCOPED_ENUM_P (enumtype))
12353     insert_late_enum_def_into_classtype_sorted_fields (enumtype,
12354                                                        current_class_type);
12355
12356   /* Finish debugging output for this type.  */
12357   rest_of_type_compilation (enumtype, namespace_bindings_p ());
12358 }
12359
12360 /* Finishes the enum type. This is called only the first time an
12361    enumeration is seen, be it opaque or odinary.
12362    ENUMTYPE is the type object.  */
12363
12364 void
12365 finish_enum (tree enumtype)
12366 {
12367   if (processing_template_decl)
12368     {
12369       if (at_function_scope_p ())
12370         add_stmt (build_min (TAG_DEFN, enumtype));
12371       return;
12372     }
12373
12374   /* If this is a forward declaration, there should not be any variants,
12375      though we can get a variant in the middle of an enum-specifier with
12376      wacky code like 'enum E { e = sizeof(const E*) };'  */
12377   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12378               && (TYPE_VALUES (enumtype)
12379                   || !TYPE_NEXT_VARIANT (enumtype)));
12380 }
12381
12382 /* Build and install a CONST_DECL for an enumeration constant of the
12383    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12384    LOC is the location of NAME.
12385    Assignment of sequential values by default is handled here.  */
12386
12387 void
12388 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12389 {
12390   tree decl;
12391   tree context;
12392   tree type;
12393
12394   /* If the VALUE was erroneous, pretend it wasn't there; that will
12395      result in the enum being assigned the next value in sequence.  */
12396   if (value == error_mark_node)
12397     value = NULL_TREE;
12398
12399   /* Remove no-op casts from the value.  */
12400   if (value)
12401     STRIP_TYPE_NOPS (value);
12402
12403   if (! processing_template_decl)
12404     {
12405       /* Validate and default VALUE.  */
12406       if (value != NULL_TREE)
12407         {
12408           value = cxx_constant_value (value);
12409
12410           if (TREE_CODE (value) != INTEGER_CST
12411               || ! INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12412             {
12413               error ("enumerator value for %qD is not an integer constant",
12414                      name);
12415               value = NULL_TREE;
12416             }
12417         }
12418
12419       /* Default based on previous value.  */
12420       if (value == NULL_TREE)
12421         {
12422           if (TYPE_VALUES (enumtype))
12423             {
12424               HOST_WIDE_INT hi;
12425               unsigned HOST_WIDE_INT lo;
12426               tree prev_value;
12427               bool overflowed;
12428
12429               /* C++03 7.2/4: If no initializer is specified for the first
12430                  enumerator, the type is an unspecified integral
12431                  type. Otherwise the type is the same as the type of the
12432                  initializing value of the preceding enumerator unless the
12433                  incremented value is not representable in that type, in
12434                  which case the type is an unspecified integral type
12435                  sufficient to contain the incremented value.  */
12436               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12437               if (error_operand_p (prev_value))
12438                 value = error_mark_node;
12439               else
12440                 {
12441                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12442                                            TREE_INT_CST_HIGH (prev_value),
12443                                            1, 0, &lo, &hi);
12444                   if (!overflowed)
12445                     {
12446                       double_int di;
12447                       tree type = TREE_TYPE (prev_value);
12448                       bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12449                       di.low = lo; di.high = hi;
12450                       if (!double_int_fits_to_tree_p (type, di))
12451                         {
12452                           unsigned int itk;
12453                           for (itk = itk_int; itk != itk_none; itk++)
12454                             {
12455                               type = integer_types[itk];
12456                               if (type != NULL_TREE
12457                                   && (pos || !TYPE_UNSIGNED (type))
12458                                   && double_int_fits_to_tree_p (type, di))
12459                                 break;
12460                             }
12461                           if (type && cxx_dialect < cxx0x
12462                               && itk > itk_unsigned_long)
12463                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
12464 incremented enumerator value is too large for %<unsigned long%>" :  "\
12465 incremented enumerator value is too large for %<long%>");
12466                         }
12467                       if (type == NULL_TREE)
12468                         overflowed = true;
12469                       else
12470                         value = double_int_to_tree (type, di);
12471                     }
12472
12473                   if (overflowed)
12474                     {
12475                       error ("overflow in enumeration values at %qD", name);
12476                       value = error_mark_node;
12477                     }
12478                 }
12479             }
12480           else
12481             value = integer_zero_node;
12482         }
12483
12484       /* Remove no-op casts from the value.  */
12485       STRIP_TYPE_NOPS (value);
12486
12487       /* If the underlying type of the enum is fixed, check whether
12488          the enumerator values fits in the underlying type.  If it
12489          does not fit, the program is ill-formed [C++0x dcl.enum].  */
12490       if (ENUM_UNDERLYING_TYPE (enumtype)
12491           && value
12492           && TREE_CODE (value) == INTEGER_CST
12493           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12494         {
12495           error ("enumerator value %E is too large for underlying type %<%T%>",
12496                  value, ENUM_UNDERLYING_TYPE (enumtype));
12497
12498           /* Silently convert the value so that we can continue.  */
12499           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12500                                                value, tf_none);
12501         }
12502     }
12503
12504   /* C++ associates enums with global, function, or class declarations.  */
12505   context = current_scope ();
12506
12507   /* Build the actual enumeration constant.  Note that the enumeration
12508      constants have the underlying type of the enum (if it is fixed)
12509      or the type of their initializer (if the underlying type of the
12510      enum is not fixed):
12511
12512       [ C++0x dcl.enum ]
12513
12514         If the underlying type is fixed, the type of each enumerator
12515         prior to the closing brace is the underlying type; if the
12516         initializing value of an enumerator cannot be represented by
12517         the underlying type, the program is ill-formed. If the
12518         underlying type is not fixed, the type of each enumerator is
12519         the type of its initializing value.
12520
12521     If the underlying type is not fixed, it will be computed by
12522     finish_enum and we will reset the type of this enumerator.  Of
12523     course, if we're processing a template, there may be no value.  */
12524   type = value ? TREE_TYPE (value) : NULL_TREE;
12525
12526   if (context && context == current_class_type)
12527     /* This enum declaration is local to the class.  We need the full
12528        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12529     decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12530   else
12531     /* It's a global enum, or it's local to a function.  (Note local to
12532        a function could mean local to a class method.  */
12533     decl = build_decl (loc, CONST_DECL, name, type);
12534   
12535   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12536   TREE_CONSTANT (decl) = 1;
12537   TREE_READONLY (decl) = 1;
12538   DECL_INITIAL (decl) = value;
12539
12540   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12541     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12542        on the TYPE_FIELDS list for `S'.  (That's so that you can say
12543        things like `S::i' later.)  */
12544     finish_member_declaration (decl);
12545   else
12546     pushdecl (decl);
12547
12548   /* Add this enumeration constant to the list for this type.  */
12549   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12550 }
12551
12552 /* Look for an enumerator with the given NAME within the enumeration
12553    type ENUMTYPE.  This routine is used primarily for qualified name
12554    lookup into an enumerator in C++0x, e.g.,
12555
12556      enum class Color { Red, Green, Blue };
12557
12558      Color color = Color::Red;
12559
12560    Returns the value corresponding to the enumerator, or
12561    NULL_TREE if no such enumerator was found.  */
12562 tree
12563 lookup_enumerator (tree enumtype, tree name)
12564 {
12565   tree e;
12566   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12567
12568   e = purpose_member (name, TYPE_VALUES (enumtype));
12569   return e? TREE_VALUE (e) : NULL_TREE;
12570 }
12571
12572 \f
12573 /* We're defining DECL.  Make sure that its type is OK.  */
12574
12575 static void
12576 check_function_type (tree decl, tree current_function_parms)
12577 {
12578   tree fntype = TREE_TYPE (decl);
12579   tree return_type = complete_type (TREE_TYPE (fntype));
12580
12581   /* In a function definition, arg types must be complete.  */
12582   require_complete_types_for_parms (current_function_parms);
12583
12584   if (dependent_type_p (return_type))
12585     return;
12586   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12587       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12588     {
12589       tree args = TYPE_ARG_TYPES (fntype);
12590
12591       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12592         error ("return type %q#T is incomplete", return_type);
12593       else
12594         error ("return type has Java class type %q#T", return_type);
12595
12596       /* Make it return void instead.  */
12597       if (TREE_CODE (fntype) == METHOD_TYPE)
12598         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12599                                              void_type_node,
12600                                              TREE_CHAIN (args));
12601       else
12602         fntype = build_function_type (void_type_node, args);
12603       fntype
12604         = build_exception_variant (fntype,
12605                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12606       fntype = (cp_build_type_attribute_variant
12607                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12608       TREE_TYPE (decl) = fntype;
12609     }
12610   else
12611     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12612 }
12613
12614 /* Create the FUNCTION_DECL for a function definition.
12615    DECLSPECS and DECLARATOR are the parts of the declaration;
12616    they describe the function's name and the type it returns,
12617    but twisted together in a fashion that parallels the syntax of C.
12618
12619    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12620    DECLARATOR is really the DECL for the function we are about to
12621    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12622    indicating that the function is an inline defined in-class.
12623
12624    This function creates a binding context for the function body
12625    as well as setting up the FUNCTION_DECL in current_function_decl.
12626
12627    For C++, we must first check whether that datum makes any sense.
12628    For example, "class A local_a(1,2);" means that variable local_a
12629    is an aggregate of type A, which should have a constructor
12630    applied to it with the argument list [1, 2].
12631
12632    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12633    or may be a BLOCK if the function has been defined previously
12634    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12635    error_mark_node if the function has never been defined, or
12636    a BLOCK if the function has been defined somewhere.  */
12637
12638 void
12639 start_preparsed_function (tree decl1, tree attrs, int flags)
12640 {
12641   tree ctype = NULL_TREE;
12642   tree fntype;
12643   tree restype;
12644   int doing_friend = 0;
12645   cp_binding_level *bl;
12646   tree current_function_parms;
12647   struct c_fileinfo *finfo
12648     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12649   bool honor_interface;
12650
12651   /* Sanity check.  */
12652   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12653   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12654
12655   fntype = TREE_TYPE (decl1);
12656   if (TREE_CODE (fntype) == METHOD_TYPE)
12657     ctype = TYPE_METHOD_BASETYPE (fntype);
12658
12659   /* ISO C++ 11.4/5.  A friend function defined in a class is in
12660      the (lexical) scope of the class in which it is defined.  */
12661   if (!ctype && DECL_FRIEND_P (decl1))
12662     {
12663       ctype = DECL_FRIEND_CONTEXT (decl1);
12664
12665       /* CTYPE could be null here if we're dealing with a template;
12666          for example, `inline friend float foo()' inside a template
12667          will have no CTYPE set.  */
12668       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12669         ctype = NULL_TREE;
12670       else
12671         doing_friend = 1;
12672     }
12673
12674   if (DECL_DECLARED_INLINE_P (decl1)
12675       && lookup_attribute ("noinline", attrs))
12676     warning (0, "inline function %q+D given attribute noinline", decl1);
12677
12678   /* Handle gnu_inline attribute.  */
12679   if (GNU_INLINE_P (decl1))
12680     {
12681       DECL_EXTERNAL (decl1) = 1;
12682       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12683       DECL_INTERFACE_KNOWN (decl1) = 1;
12684       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12685     }
12686
12687   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12688     /* This is a constructor, we must ensure that any default args
12689        introduced by this definition are propagated to the clones
12690        now. The clones are used directly in overload resolution.  */
12691     adjust_clone_args (decl1);
12692
12693   /* Sometimes we don't notice that a function is a static member, and
12694      build a METHOD_TYPE for it.  Fix that up now.  */
12695   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12696                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12697
12698   /* Set up current_class_type, and enter the scope of the class, if
12699      appropriate.  */
12700   if (ctype)
12701     push_nested_class (ctype);
12702   else if (DECL_STATIC_FUNCTION_P (decl1))
12703     push_nested_class (DECL_CONTEXT (decl1));
12704
12705   /* Now that we have entered the scope of the class, we must restore
12706      the bindings for any template parameters surrounding DECL1, if it
12707      is an inline member template.  (Order is important; consider the
12708      case where a template parameter has the same name as a field of
12709      the class.)  It is not until after this point that
12710      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12711   if (flags & SF_INCLASS_INLINE)
12712     maybe_begin_member_template_processing (decl1);
12713
12714   /* Effective C++ rule 15.  */
12715   if (warn_ecpp
12716       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12717       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12718     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12719
12720   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12721      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12722   if (!DECL_INITIAL (decl1))
12723     DECL_INITIAL (decl1) = error_mark_node;
12724
12725   /* This function exists in static storage.
12726      (This does not mean `static' in the C sense!)  */
12727   TREE_STATIC (decl1) = 1;
12728
12729   /* We must call push_template_decl after current_class_type is set
12730      up.  (If we are processing inline definitions after exiting a
12731      class scope, current_class_type will be NULL_TREE until set above
12732      by push_nested_class.)  */
12733   if (processing_template_decl)
12734     {
12735       /* FIXME: Handle error_mark_node more gracefully.  */
12736       tree newdecl1 = push_template_decl (decl1);
12737       if (newdecl1 != error_mark_node)
12738         decl1 = newdecl1;
12739     }
12740
12741   /* We are now in the scope of the function being defined.  */
12742   current_function_decl = decl1;
12743
12744   /* Save the parm names or decls from this function's declarator
12745      where store_parm_decls will find them.  */
12746   current_function_parms = DECL_ARGUMENTS (decl1);
12747
12748   /* Make sure the parameter and return types are reasonable.  When
12749      you declare a function, these types can be incomplete, but they
12750      must be complete when you define the function.  */
12751   check_function_type (decl1, current_function_parms);
12752
12753   /* Build the return declaration for the function.  */
12754   restype = TREE_TYPE (fntype);
12755   if (DECL_RESULT (decl1) == NULL_TREE)
12756     {
12757       tree resdecl;
12758
12759       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12760       DECL_ARTIFICIAL (resdecl) = 1;
12761       DECL_IGNORED_P (resdecl) = 1;
12762       DECL_RESULT (decl1) = resdecl;
12763
12764       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12765     }
12766
12767   /* Let the user know we're compiling this function.  */
12768   announce_function (decl1);
12769
12770   /* Record the decl so that the function name is defined.
12771      If we already have a decl for this name, and it is a FUNCTION_DECL,
12772      use the old decl.  */
12773   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12774     {
12775       /* A specialization is not used to guide overload resolution.  */
12776       if (!DECL_FUNCTION_MEMBER_P (decl1)
12777           && !(DECL_USE_TEMPLATE (decl1) &&
12778                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12779         {
12780           tree olddecl = pushdecl (decl1);
12781
12782           if (olddecl == error_mark_node)
12783             /* If something went wrong when registering the declaration,
12784                use DECL1; we have to have a FUNCTION_DECL to use when
12785                parsing the body of the function.  */
12786             ;
12787           else
12788             {
12789               /* Otherwise, OLDDECL is either a previous declaration
12790                  of the same function or DECL1 itself.  */
12791
12792               if (warn_missing_declarations
12793                   && olddecl == decl1
12794                   && !DECL_MAIN_P (decl1)
12795                   && TREE_PUBLIC (decl1)
12796                   && !DECL_DECLARED_INLINE_P (decl1))
12797                 {
12798                   tree context;
12799
12800                   /* Check whether DECL1 is in an anonymous
12801                      namespace.  */
12802                   for (context = DECL_CONTEXT (decl1);
12803                        context;
12804                        context = DECL_CONTEXT (context))
12805                     {
12806                       if (TREE_CODE (context) == NAMESPACE_DECL
12807                           && DECL_NAME (context) == NULL_TREE)
12808                         break;
12809                     }
12810
12811                   if (context == NULL)
12812                     warning (OPT_Wmissing_declarations,
12813                              "no previous declaration for %q+D", decl1);
12814                 }
12815
12816               decl1 = olddecl;
12817             }
12818         }
12819       else
12820         {
12821           /* We need to set the DECL_CONTEXT.  */
12822           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12823             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12824         }
12825       fntype = TREE_TYPE (decl1);
12826
12827       /* If #pragma weak applies, mark the decl appropriately now.
12828          The pragma only applies to global functions.  Because
12829          determining whether or not the #pragma applies involves
12830          computing the mangled name for the declaration, we cannot
12831          apply the pragma until after we have merged this declaration
12832          with any previous declarations; if the original declaration
12833          has a linkage specification, that specification applies to
12834          the definition as well, and may affect the mangled name.  */
12835       if (DECL_FILE_SCOPE_P (decl1))
12836         maybe_apply_pragma_weak (decl1);
12837     }
12838
12839   /* Reset this in case the call to pushdecl changed it.  */
12840   current_function_decl = decl1;
12841
12842   gcc_assert (DECL_INITIAL (decl1));
12843
12844   /* This function may already have been parsed, in which case just
12845      return; our caller will skip over the body without parsing.  */
12846   if (DECL_INITIAL (decl1) != error_mark_node)
12847     return;
12848
12849   /* Initialize RTL machinery.  We cannot do this until
12850      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12851      even when processing a template; this is how we get
12852      CFUN set up, and our per-function variables initialized.
12853      FIXME factor out the non-RTL stuff.  */
12854   bl = current_binding_level;
12855   allocate_struct_function (decl1, processing_template_decl);
12856
12857   /* Initialize the language data structures.  Whenever we start
12858      a new function, we destroy temporaries in the usual way.  */
12859   cfun->language = ggc_alloc_cleared_language_function ();
12860   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12861   current_binding_level = bl;
12862
12863   /* Start the statement-tree, start the tree now.  */
12864   DECL_SAVED_TREE (decl1) = push_stmt_list ();
12865
12866   /* If we are (erroneously) defining a function that we have already
12867      defined before, wipe out what we knew before.  */
12868   if (!DECL_PENDING_INLINE_P (decl1))
12869     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12870
12871   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12872     {
12873       /* We know that this was set up by `grokclassfn'.  We do not
12874          wait until `store_parm_decls', since evil parse errors may
12875          never get us to that point.  Here we keep the consistency
12876          between `current_class_type' and `current_class_ptr'.  */
12877       tree t = DECL_ARGUMENTS (decl1);
12878
12879       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12880       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12881
12882       cp_function_chain->x_current_class_ref
12883         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12884       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
12885       cp_function_chain->x_current_class_ptr = t;
12886
12887       /* Constructors and destructors need to know whether they're "in
12888          charge" of initializing virtual base classes.  */
12889       t = DECL_CHAIN (t);
12890       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12891         {
12892           current_in_charge_parm = t;
12893           t = DECL_CHAIN (t);
12894         }
12895       if (DECL_HAS_VTT_PARM_P (decl1))
12896         {
12897           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12898           current_vtt_parm = t;
12899         }
12900     }
12901
12902   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12903                      /* Implicitly-defined methods (like the
12904                         destructor for a class in which no destructor
12905                         is explicitly declared) must not be defined
12906                         until their definition is needed.  So, we
12907                         ignore interface specifications for
12908                         compiler-generated functions.  */
12909                      && !DECL_ARTIFICIAL (decl1));
12910
12911   if (processing_template_decl)
12912     /* Don't mess with interface flags.  */;
12913   else if (DECL_INTERFACE_KNOWN (decl1))
12914     {
12915       tree ctx = decl_function_context (decl1);
12916
12917       if (DECL_NOT_REALLY_EXTERN (decl1))
12918         DECL_EXTERNAL (decl1) = 0;
12919
12920       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12921           && TREE_PUBLIC (ctx))
12922         /* This is a function in a local class in an extern inline
12923            function.  */
12924         comdat_linkage (decl1);
12925     }
12926   /* If this function belongs to an interface, it is public.
12927      If it belongs to someone else's interface, it is also external.
12928      This only affects inlines and template instantiations.  */
12929   else if (!finfo->interface_unknown && honor_interface)
12930     {
12931       if (DECL_DECLARED_INLINE_P (decl1)
12932           || DECL_TEMPLATE_INSTANTIATION (decl1))
12933         {
12934           DECL_EXTERNAL (decl1)
12935             = (finfo->interface_only
12936                || (DECL_DECLARED_INLINE_P (decl1)
12937                    && ! flag_implement_inlines
12938                    && !DECL_VINDEX (decl1)));
12939
12940           /* For WIN32 we also want to put these in linkonce sections.  */
12941           maybe_make_one_only (decl1);
12942         }
12943       else
12944         DECL_EXTERNAL (decl1) = 0;
12945       DECL_INTERFACE_KNOWN (decl1) = 1;
12946       /* If this function is in an interface implemented in this file,
12947          make sure that the back end knows to emit this function
12948          here.  */
12949       if (!DECL_EXTERNAL (decl1))
12950         mark_needed (decl1);
12951     }
12952   else if (finfo->interface_unknown && finfo->interface_only
12953            && honor_interface)
12954     {
12955       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12956          interface, we will have both finfo->interface_unknown and
12957          finfo->interface_only set.  In that case, we don't want to
12958          use the normal heuristics because someone will supply a
12959          #pragma implementation elsewhere, and deducing it here would
12960          produce a conflict.  */
12961       comdat_linkage (decl1);
12962       DECL_EXTERNAL (decl1) = 0;
12963       DECL_INTERFACE_KNOWN (decl1) = 1;
12964       DECL_DEFER_OUTPUT (decl1) = 1;
12965     }
12966   else
12967     {
12968       /* This is a definition, not a reference.
12969          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12970       if (!GNU_INLINE_P (decl1))
12971         DECL_EXTERNAL (decl1) = 0;
12972
12973       if ((DECL_DECLARED_INLINE_P (decl1)
12974            || DECL_TEMPLATE_INSTANTIATION (decl1))
12975           && ! DECL_INTERFACE_KNOWN (decl1))
12976         DECL_DEFER_OUTPUT (decl1) = 1;
12977       else
12978         DECL_INTERFACE_KNOWN (decl1) = 1;
12979     }
12980
12981   /* Determine the ELF visibility attribute for the function.  We must not
12982      do this before calling "pushdecl", as we must allow "duplicate_decls"
12983      to merge any attributes appropriately.  We also need to wait until
12984      linkage is set.  */
12985   if (!DECL_CLONED_FUNCTION_P (decl1))
12986     determine_visibility (decl1);
12987
12988   begin_scope (sk_function_parms, decl1);
12989
12990   ++function_depth;
12991
12992   if (DECL_DESTRUCTOR_P (decl1)
12993       || (DECL_CONSTRUCTOR_P (decl1)
12994           && targetm.cxx.cdtor_returns_this ()))
12995     {
12996       cdtor_label = build_decl (input_location, 
12997                                 LABEL_DECL, NULL_TREE, NULL_TREE);
12998       DECL_CONTEXT (cdtor_label) = current_function_decl;
12999     }
13000
13001   start_fname_decls ();
13002
13003   store_parm_decls (current_function_parms);
13004 }
13005
13006
13007 /* Like start_preparsed_function, except that instead of a
13008    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
13009
13010    Returns 1 on success.  If the DECLARATOR is not suitable for a function
13011    (it defines a datum instead), we return 0, which tells
13012    yyparse to report a parse error.  */
13013
13014 int
13015 start_function (cp_decl_specifier_seq *declspecs,
13016                 const cp_declarator *declarator,
13017                 tree attrs)
13018 {
13019   tree decl1;
13020
13021   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
13022   if (decl1 == error_mark_node)
13023     return 0;
13024   /* If the declarator is not suitable for a function definition,
13025      cause a syntax error.  */
13026   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
13027     {
13028       error ("invalid function declaration");
13029       return 0;
13030     }
13031
13032   if (DECL_MAIN_P (decl1))
13033     /* main must return int.  grokfndecl should have corrected it
13034        (and issued a diagnostic) if the user got it wrong.  */
13035     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
13036                              integer_type_node));
13037
13038   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
13039
13040   return 1;
13041 }
13042 \f
13043 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
13044    FN.  */
13045
13046 static bool
13047 use_eh_spec_block (tree fn)
13048 {
13049   return (flag_exceptions && flag_enforce_eh_specs
13050           && !processing_template_decl
13051           && !type_throw_all_p (TREE_TYPE (fn))
13052           /* We insert the EH_SPEC_BLOCK only in the original
13053              function; then, it is copied automatically to the
13054              clones.  */
13055           && !DECL_CLONED_FUNCTION_P (fn)
13056           /* Implicitly-generated constructors and destructors have
13057              exception specifications.  However, those specifications
13058              are the union of the possible exceptions specified by the
13059              constructors/destructors for bases and members, so no
13060              unallowed exception will ever reach this function.  By
13061              not creating the EH_SPEC_BLOCK we save a little memory,
13062              and we avoid spurious warnings about unreachable
13063              code.  */
13064           && !DECL_DEFAULTED_FN (fn));
13065 }
13066
13067 /* Store the parameter declarations into the current function declaration.
13068    This is called after parsing the parameter declarations, before
13069    digesting the body of the function.
13070
13071    Also install to binding contour return value identifier, if any.  */
13072
13073 static void
13074 store_parm_decls (tree current_function_parms)
13075 {
13076   tree fndecl = current_function_decl;
13077   tree parm;
13078
13079   /* This is a chain of any other decls that came in among the parm
13080      declarations.  If a parm is declared with  enum {foo, bar} x;
13081      then CONST_DECLs for foo and bar are put here.  */
13082   tree nonparms = NULL_TREE;
13083
13084   if (current_function_parms)
13085     {
13086       /* This case is when the function was defined with an ANSI prototype.
13087          The parms already have decls, so we need not do anything here
13088          except record them as in effect
13089          and complain if any redundant old-style parm decls were written.  */
13090
13091       tree specparms = current_function_parms;
13092       tree next;
13093
13094       /* Must clear this because it might contain TYPE_DECLs declared
13095              at class level.  */
13096       current_binding_level->names = NULL;
13097
13098       /* If we're doing semantic analysis, then we'll call pushdecl
13099              for each of these.  We must do them in reverse order so that
13100              they end in the correct forward order.  */
13101       specparms = nreverse (specparms);
13102
13103       for (parm = specparms; parm; parm = next)
13104         {
13105           next = DECL_CHAIN (parm);
13106           if (TREE_CODE (parm) == PARM_DECL)
13107             {
13108               if (DECL_NAME (parm) == NULL_TREE
13109                   || TREE_CODE (parm) != VOID_TYPE)
13110                 pushdecl (parm);
13111               else
13112                 error ("parameter %qD declared void", parm);
13113             }
13114           else
13115             {
13116               /* If we find an enum constant or a type tag,
13117                  put it aside for the moment.  */
13118               TREE_CHAIN (parm) = NULL_TREE;
13119               nonparms = chainon (nonparms, parm);
13120             }
13121         }
13122
13123       /* Get the decls in their original chain order and record in the
13124          function.  This is all and only the PARM_DECLs that were
13125          pushed into scope by the loop above.  */
13126       DECL_ARGUMENTS (fndecl) = getdecls ();
13127     }
13128   else
13129     DECL_ARGUMENTS (fndecl) = NULL_TREE;
13130
13131   /* Now store the final chain of decls for the arguments
13132      as the decl-chain of the current lexical scope.
13133      Put the enumerators in as well, at the front so that
13134      DECL_ARGUMENTS is not modified.  */
13135   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
13136
13137   if (use_eh_spec_block (current_function_decl))
13138     current_eh_spec_block = begin_eh_spec_block ();
13139 }
13140
13141 \f
13142 /* We have finished doing semantic analysis on DECL, but have not yet
13143    generated RTL for its body.  Save away our current state, so that
13144    when we want to generate RTL later we know what to do.  */
13145
13146 static void
13147 save_function_data (tree decl)
13148 {
13149   struct language_function *f;
13150
13151   /* Save the language-specific per-function data so that we can
13152      get it back when we really expand this function.  */
13153   gcc_assert (!DECL_PENDING_INLINE_P (decl));
13154
13155   /* Make a copy.  */
13156   f = ggc_alloc_language_function ();
13157   memcpy (f, cp_function_chain, sizeof (struct language_function));
13158   DECL_SAVED_FUNCTION_DATA (decl) = f;
13159
13160   /* Clear out the bits we don't need.  */
13161   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
13162   f->bindings = NULL;
13163   f->x_local_names = NULL;
13164   f->base.local_typedefs = NULL;
13165 }
13166
13167
13168 /* Set the return value of the constructor (if present).  */
13169
13170 static void
13171 finish_constructor_body (void)
13172 {
13173   tree val;
13174   tree exprstmt;
13175
13176   if (targetm.cxx.cdtor_returns_this ()
13177       && (! TYPE_FOR_JAVA (current_class_type)))
13178     {
13179       /* Any return from a constructor will end up here.  */
13180       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13181
13182       val = DECL_ARGUMENTS (current_function_decl);
13183       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13184                     DECL_RESULT (current_function_decl), val);
13185       /* Return the address of the object.  */
13186       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13187       add_stmt (exprstmt);
13188     }
13189 }
13190
13191 /* Do all the processing for the beginning of a destructor; set up the
13192    vtable pointers and cleanups for bases and members.  */
13193
13194 static void
13195 begin_destructor_body (void)
13196 {
13197   tree compound_stmt;
13198
13199   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
13200      issued an error message.  We still want to try to process the
13201      body of the function, but initialize_vtbl_ptrs will crash if
13202      TYPE_BINFO is NULL.  */
13203   if (COMPLETE_TYPE_P (current_class_type))
13204     {
13205       compound_stmt = begin_compound_stmt (0);
13206       /* Make all virtual function table pointers in non-virtual base
13207          classes point to CURRENT_CLASS_TYPE's virtual function
13208          tables.  */
13209       initialize_vtbl_ptrs (current_class_ptr);
13210       finish_compound_stmt (compound_stmt);
13211
13212       /* And insert cleanups for our bases and members so that they
13213          will be properly destroyed if we throw.  */
13214       push_base_cleanups ();
13215     }
13216 }
13217
13218 /* At the end of every destructor we generate code to delete the object if
13219    necessary.  Do that now.  */
13220
13221 static void
13222 finish_destructor_body (void)
13223 {
13224   tree exprstmt;
13225
13226   /* Any return from a destructor will end up here; that way all base
13227      and member cleanups will be run when the function returns.  */
13228   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13229
13230   /* In a virtual destructor, we must call delete.  */
13231   if (DECL_VIRTUAL_P (current_function_decl))
13232     {
13233       tree if_stmt;
13234       tree virtual_size = cxx_sizeof (current_class_type);
13235
13236       /* [class.dtor]
13237
13238       At the point of definition of a virtual destructor (including
13239       an implicit definition), non-placement operator delete shall
13240       be looked up in the scope of the destructor's class and if
13241       found shall be accessible and unambiguous.  */
13242       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13243                                       virtual_size,
13244                                       /*global_p=*/false,
13245                                       /*placement=*/NULL_TREE,
13246                                       /*alloc_fn=*/NULL_TREE);
13247
13248       if_stmt = begin_if_stmt ();
13249       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13250                                    current_in_charge_parm,
13251                                    integer_one_node),
13252                            if_stmt);
13253       finish_expr_stmt (exprstmt);
13254       finish_then_clause (if_stmt);
13255       finish_if_stmt (if_stmt);
13256     }
13257
13258   if (targetm.cxx.cdtor_returns_this ())
13259     {
13260       tree val;
13261
13262       val = DECL_ARGUMENTS (current_function_decl);
13263       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13264                     DECL_RESULT (current_function_decl), val);
13265       /* Return the address of the object.  */
13266       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13267       add_stmt (exprstmt);
13268     }
13269 }
13270
13271 /* Do the necessary processing for the beginning of a function body, which
13272    in this case includes member-initializers, but not the catch clauses of
13273    a function-try-block.  Currently, this means opening a binding level
13274    for the member-initializers (in a ctor), member cleanups (in a dtor),
13275    and capture proxies (in a lambda operator()).  */
13276
13277 tree
13278 begin_function_body (void)
13279 {
13280   tree stmt;
13281
13282   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13283     return NULL_TREE;
13284
13285   if (processing_template_decl)
13286     /* Do nothing now.  */;
13287   else
13288     /* Always keep the BLOCK node associated with the outermost pair of
13289        curly braces of a function.  These are needed for correct
13290        operation of dwarfout.c.  */
13291     keep_next_level (true);
13292
13293   stmt = begin_compound_stmt (BCS_FN_BODY);
13294
13295   if (processing_template_decl)
13296     /* Do nothing now.  */;
13297   else if (DECL_DESTRUCTOR_P (current_function_decl))
13298     begin_destructor_body ();
13299
13300   return stmt;
13301 }
13302
13303 /* Do the processing for the end of a function body.  Currently, this means
13304    closing out the cleanups for fully-constructed bases and members, and in
13305    the case of the destructor, deleting the object if desired.  Again, this
13306    is only meaningful for [cd]tors, since they are the only functions where
13307    there is a significant distinction between the main body and any
13308    function catch clauses.  Handling, say, main() return semantics here
13309    would be wrong, as flowing off the end of a function catch clause for
13310    main() would also need to return 0.  */
13311
13312 void
13313 finish_function_body (tree compstmt)
13314 {
13315   if (compstmt == NULL_TREE)
13316     return;
13317
13318   /* Close the block.  */
13319   finish_compound_stmt (compstmt);
13320
13321   if (processing_template_decl)
13322     /* Do nothing now.  */;
13323   else if (DECL_CONSTRUCTOR_P (current_function_decl))
13324     finish_constructor_body ();
13325   else if (DECL_DESTRUCTOR_P (current_function_decl))
13326     finish_destructor_body ();
13327 }
13328
13329 /* Given a function, returns the BLOCK corresponding to the outermost level
13330    of curly braces, skipping the artificial block created for constructor
13331    initializers.  */
13332
13333 tree
13334 outer_curly_brace_block (tree fndecl)
13335 {
13336   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13337   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13338     /* Skip the artificial function body block.  */
13339     block = BLOCK_SUBBLOCKS (block);
13340   return block;
13341 }
13342
13343 /* If FNDECL is a class's key method, add the class to the list of
13344    keyed classes that should be emitted.  */
13345
13346 static void
13347 record_key_method_defined (tree fndecl)
13348 {
13349   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13350       && DECL_VIRTUAL_P (fndecl)
13351       && !processing_template_decl)
13352     {
13353       tree fnclass = DECL_CONTEXT (fndecl);
13354       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13355         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13356     }
13357 }
13358
13359 /* Subroutine of finish_function.
13360    Save the body of constexpr functions for possible
13361    future compile time evaluation.  */
13362
13363 static void
13364 maybe_save_function_definition (tree fun)
13365 {
13366   if (!processing_template_decl
13367       && DECL_DECLARED_CONSTEXPR_P (fun)
13368       && !DECL_CLONED_FUNCTION_P (fun))
13369     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13370 }
13371
13372 /* Finish up a function declaration and compile that function
13373    all the way to assembler language output.  The free the storage
13374    for the function definition.
13375
13376    FLAGS is a bitwise or of the following values:
13377      2 - INCLASS_INLINE
13378        We just finished processing the body of an in-class inline
13379        function definition.  (This processing will have taken place
13380        after the class definition is complete.)  */
13381
13382 tree
13383 finish_function (int flags)
13384 {
13385   tree fndecl = current_function_decl;
13386   tree fntype, ctype = NULL_TREE;
13387   int inclass_inline = (flags & 2) != 0;
13388
13389   /* When we get some parse errors, we can end up without a
13390      current_function_decl, so cope.  */
13391   if (fndecl == NULL_TREE)
13392     return error_mark_node;
13393
13394   if (c_dialect_objc ())
13395     objc_finish_function ();
13396
13397   gcc_assert (!defer_mark_used_calls);
13398   defer_mark_used_calls = true;
13399
13400   record_key_method_defined (fndecl);
13401
13402   fntype = TREE_TYPE (fndecl);
13403
13404   /*  TREE_READONLY (fndecl) = 1;
13405       This caused &foo to be of type ptr-to-const-function
13406       which then got a warning when stored in a ptr-to-function variable.  */
13407
13408   gcc_assert (building_stmt_list_p ());
13409   /* The current function is being defined, so its DECL_INITIAL should
13410      be set, and unless there's a multiple definition, it should be
13411      error_mark_node.  */
13412   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13413
13414   /* For a cloned function, we've already got all the code we need;
13415      there's no need to add any extra bits.  */
13416   if (!DECL_CLONED_FUNCTION_P (fndecl))
13417     {
13418       if (DECL_MAIN_P (current_function_decl))
13419         {
13420           /* Make it so that `main' always returns 0 by default (or
13421              1 for VMS).  */
13422 #if VMS_TARGET
13423           finish_return_stmt (integer_one_node);
13424 #else
13425           finish_return_stmt (integer_zero_node);
13426 #endif
13427         }
13428
13429       if (use_eh_spec_block (current_function_decl))
13430         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13431                               (TREE_TYPE (current_function_decl)),
13432                               current_eh_spec_block);
13433     }
13434
13435   /* If we're saving up tree structure, tie off the function now.  */
13436   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13437
13438   finish_fname_decls ();
13439
13440   /* If this function can't throw any exceptions, remember that.  */
13441   if (!processing_template_decl
13442       && !cp_function_chain->can_throw
13443       && !flag_non_call_exceptions
13444       && !decl_replaceable_p (fndecl))
13445     TREE_NOTHROW (fndecl) = 1;
13446
13447   /* This must come after expand_function_end because cleanups might
13448      have declarations (from inline functions) that need to go into
13449      this function's blocks.  */
13450
13451   /* If the current binding level isn't the outermost binding level
13452      for this function, either there is a bug, or we have experienced
13453      syntax errors and the statement tree is malformed.  */
13454   if (current_binding_level->kind != sk_function_parms)
13455     {
13456       /* Make sure we have already experienced errors.  */
13457       gcc_assert (errorcount);
13458
13459       /* Throw away the broken statement tree and extra binding
13460          levels.  */
13461       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13462
13463       while (current_binding_level->kind != sk_function_parms)
13464         {
13465           if (current_binding_level->kind == sk_class)
13466             pop_nested_class ();
13467           else
13468             poplevel (0, 0, 0);
13469         }
13470     }
13471   poplevel (1, 0, 1);
13472
13473   /* Statements should always be full-expressions at the outermost set
13474      of curly braces for a function.  */
13475   gcc_assert (stmts_are_full_exprs_p ());
13476
13477   /* Save constexpr function body before it gets munged by
13478      the NRV transformation.   */
13479   maybe_save_function_definition (fndecl);
13480
13481   /* Set up the named return value optimization, if we can.  Candidate
13482      variables are selected in check_return_expr.  */
13483   if (current_function_return_value)
13484     {
13485       tree r = current_function_return_value;
13486       tree outer;
13487
13488       if (r != error_mark_node
13489           /* This is only worth doing for fns that return in memory--and
13490              simpler, since we don't have to worry about promoted modes.  */
13491           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13492           /* Only allow this for variables declared in the outer scope of
13493              the function so we know that their lifetime always ends with a
13494              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13495              we were to do this optimization in tree-ssa.  */
13496           && (outer = outer_curly_brace_block (fndecl))
13497           && chain_member (r, BLOCK_VARS (outer)))
13498         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13499
13500       current_function_return_value = NULL_TREE;
13501     }
13502
13503   /* Remember that we were in class scope.  */
13504   if (current_class_name)
13505     ctype = current_class_type;
13506
13507   /* Must mark the RESULT_DECL as being in this function.  */
13508   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13509
13510   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13511      to the FUNCTION_DECL node itself.  */
13512   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13513
13514   /* Save away current state, if appropriate.  */
13515   if (!processing_template_decl)
13516     save_function_data (fndecl);
13517
13518   /* Complain if there's just no return statement.  */
13519   if (warn_return_type
13520       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13521       && !dependent_type_p (TREE_TYPE (fntype))
13522       && !current_function_returns_value && !current_function_returns_null
13523       /* Don't complain if we abort or throw.  */
13524       && !current_function_returns_abnormally
13525       /* Don't complain if we are declared noreturn.  */
13526       && !TREE_THIS_VOLATILE (fndecl)
13527       && !DECL_NAME (DECL_RESULT (fndecl))
13528       && !TREE_NO_WARNING (fndecl)
13529       /* Structor return values (if any) are set by the compiler.  */
13530       && !DECL_CONSTRUCTOR_P (fndecl)
13531       && !DECL_DESTRUCTOR_P (fndecl))
13532     {
13533       warning (OPT_Wreturn_type,
13534                "no return statement in function returning non-void");
13535       TREE_NO_WARNING (fndecl) = 1;
13536     }
13537
13538   /* Store the end of the function, so that we get good line number
13539      info for the epilogue.  */
13540   cfun->function_end_locus = input_location;
13541
13542   /* Complain about parameters that are only set, but never otherwise used.  */
13543   if (warn_unused_but_set_parameter
13544       && !processing_template_decl
13545       && errorcount == unused_but_set_errorcount
13546       && !DECL_CLONED_FUNCTION_P (fndecl))
13547     {
13548       tree decl;
13549
13550       for (decl = DECL_ARGUMENTS (fndecl);
13551            decl;
13552            decl = DECL_CHAIN (decl))
13553         if (TREE_USED (decl)
13554             && TREE_CODE (decl) == PARM_DECL
13555             && !DECL_READ_P (decl)
13556             && DECL_NAME (decl)
13557             && !DECL_ARTIFICIAL (decl)
13558             && !TREE_NO_WARNING (decl)
13559             && !DECL_IN_SYSTEM_HEADER (decl)
13560             && TREE_TYPE (decl) != error_mark_node
13561             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13562             && (!CLASS_TYPE_P (TREE_TYPE (decl))
13563                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13564           warning (OPT_Wunused_but_set_parameter,
13565                    "parameter %q+D set but not used", decl);
13566       unused_but_set_errorcount = errorcount;
13567     }
13568
13569   /* Complain about locally defined typedefs that are not used in this
13570      function.  */
13571   maybe_warn_unused_local_typedefs ();
13572
13573   /* Genericize before inlining.  */
13574   if (!processing_template_decl)
13575     {
13576       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13577       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13578       cp_genericize (fndecl);
13579       /* Clear out the bits we don't need.  */
13580       f->x_current_class_ptr = NULL;
13581       f->x_current_class_ref = NULL;
13582       f->x_eh_spec_block = NULL;
13583       f->x_in_charge_parm = NULL;
13584       f->x_vtt_parm = NULL;
13585       f->x_return_value = NULL;
13586       f->bindings = NULL;
13587       f->extern_decl_map = NULL;
13588     }
13589   /* Clear out the bits we don't need.  */
13590   local_names = NULL;
13591
13592   /* We're leaving the context of this function, so zap cfun.  It's still in
13593      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13594   set_cfun (NULL);
13595   current_function_decl = NULL;
13596
13597   /* If this is an in-class inline definition, we may have to pop the
13598      bindings for the template parameters that we added in
13599      maybe_begin_member_template_processing when start_function was
13600      called.  */
13601   if (inclass_inline)
13602     maybe_end_member_template_processing ();
13603
13604   /* Leave the scope of the class.  */
13605   if (ctype)
13606     pop_nested_class ();
13607
13608   --function_depth;
13609
13610   /* Clean up.  */
13611   current_function_decl = NULL_TREE;
13612
13613   defer_mark_used_calls = false;
13614   if (deferred_mark_used_calls)
13615     {
13616       unsigned int i;
13617       tree decl;
13618
13619       FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13620         mark_used (decl);
13621       VEC_free (tree, gc, deferred_mark_used_calls);
13622     }
13623
13624   return fndecl;
13625 }
13626 \f
13627 /* Create the FUNCTION_DECL for a function definition.
13628    DECLSPECS and DECLARATOR are the parts of the declaration;
13629    they describe the return type and the name of the function,
13630    but twisted together in a fashion that parallels the syntax of C.
13631
13632    This function creates a binding context for the function body
13633    as well as setting up the FUNCTION_DECL in current_function_decl.
13634
13635    Returns a FUNCTION_DECL on success.
13636
13637    If the DECLARATOR is not suitable for a function (it defines a datum
13638    instead), we return 0, which tells yyparse to report a parse error.
13639
13640    May return void_type_node indicating that this method is actually
13641    a friend.  See grokfield for more details.
13642
13643    Came here with a `.pushlevel' .
13644
13645    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13646    CHANGES TO CODE IN `grokfield'.  */
13647
13648 tree
13649 grokmethod (cp_decl_specifier_seq *declspecs,
13650             const cp_declarator *declarator, tree attrlist)
13651 {
13652   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13653                                 &attrlist);
13654
13655   if (fndecl == error_mark_node)
13656     return error_mark_node;
13657
13658   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13659     {
13660       error ("invalid member function declaration");
13661       return error_mark_node;
13662     }
13663
13664   if (attrlist)
13665     cplus_decl_attributes (&fndecl, attrlist, 0);
13666
13667   /* Pass friends other than inline friend functions back.  */
13668   if (fndecl == void_type_node)
13669     return fndecl;
13670
13671   if (DECL_IN_AGGR_P (fndecl))
13672     {
13673       if (DECL_CLASS_SCOPE_P (fndecl))
13674         error ("%qD is already defined in class %qT", fndecl,
13675                DECL_CONTEXT (fndecl));
13676       return error_mark_node;
13677     }
13678
13679   check_template_shadow (fndecl);
13680
13681   DECL_DECLARED_INLINE_P (fndecl) = 1;
13682   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13683
13684   /* We process method specializations in finish_struct_1.  */
13685   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13686     {
13687       fndecl = push_template_decl (fndecl);
13688       if (fndecl == error_mark_node)
13689         return fndecl;
13690     }
13691
13692   if (! DECL_FRIEND_P (fndecl))
13693     {
13694       if (DECL_CHAIN (fndecl))
13695         {
13696           fndecl = copy_node (fndecl);
13697           TREE_CHAIN (fndecl) = NULL_TREE;
13698         }
13699     }
13700
13701   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13702
13703   DECL_IN_AGGR_P (fndecl) = 1;
13704   return fndecl;
13705 }
13706 \f
13707
13708 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13709    we can lay it out later, when and if its type becomes complete.  */
13710
13711 void
13712 maybe_register_incomplete_var (tree var)
13713 {
13714   gcc_assert (TREE_CODE (var) == VAR_DECL);
13715
13716   /* Keep track of variables with incomplete types.  */
13717   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13718       && DECL_EXTERNAL (var))
13719     {
13720       tree inner_type = TREE_TYPE (var);
13721
13722       while (TREE_CODE (inner_type) == ARRAY_TYPE)
13723         inner_type = TREE_TYPE (inner_type);
13724       inner_type = TYPE_MAIN_VARIANT (inner_type);
13725
13726       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13727           /* RTTI TD entries are created while defining the type_info.  */
13728           || (TYPE_LANG_SPECIFIC (inner_type)
13729               && TYPE_BEING_DEFINED (inner_type)))
13730         {
13731           incomplete_var *iv
13732             = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13733           iv->decl = var;
13734           iv->incomplete_type = inner_type;
13735         }
13736     }
13737 }
13738
13739 /* Called when a class type (given by TYPE) is defined.  If there are
13740    any existing VAR_DECLs whose type has been completed by this
13741    declaration, update them now.  */
13742
13743 void
13744 complete_vars (tree type)
13745 {
13746   unsigned ix;
13747   incomplete_var *iv;
13748
13749   for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13750     {
13751       if (same_type_p (type, iv->incomplete_type))
13752         {
13753           tree var = iv->decl;
13754           tree type = TREE_TYPE (var);
13755           /* Complete the type of the variable.  The VAR_DECL itself
13756              will be laid out in expand_expr.  */
13757           complete_type (type);
13758           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13759           /* Remove this entry from the list.  */
13760           VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13761         }
13762       else
13763         ix++;
13764     }
13765
13766   /* Check for pending declarations which may have abstract type.  */
13767   complete_type_check_abstract (type);
13768 }
13769
13770 /* If DECL is of a type which needs a cleanup, build and return an
13771    expression to perform that cleanup here.  Return NULL_TREE if no
13772    cleanup need be done.  */
13773
13774 tree
13775 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13776 {
13777   tree type;
13778   tree attr;
13779   tree cleanup;
13780
13781   /* Assume no cleanup is required.  */
13782   cleanup = NULL_TREE;
13783
13784   if (error_operand_p (decl))
13785     return cleanup;
13786
13787   /* Handle "__attribute__((cleanup))".  We run the cleanup function
13788      before the destructor since the destructor is what actually
13789      terminates the lifetime of the object.  */
13790   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13791   if (attr)
13792     {
13793       tree id;
13794       tree fn;
13795       tree arg;
13796
13797       /* Get the name specified by the user for the cleanup function.  */
13798       id = TREE_VALUE (TREE_VALUE (attr));
13799       /* Look up the name to find the cleanup function to call.  It is
13800          important to use lookup_name here because that is what is
13801          used in c-common.c:handle_cleanup_attribute when performing
13802          initial checks on the attribute.  Note that those checks
13803          include ensuring that the function found is not an overloaded
13804          function, or an object with an overloaded call operator,
13805          etc.; we can rely on the fact that the function found is an
13806          ordinary FUNCTION_DECL.  */
13807       fn = lookup_name (id);
13808       arg = build_address (decl);
13809       mark_used (decl);
13810       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13811       if (cleanup == error_mark_node)
13812         return error_mark_node;
13813     }
13814   /* Handle ordinary C++ destructors.  */
13815   type = TREE_TYPE (decl);
13816   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13817     {
13818       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13819       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13820                          && CLASSTYPE_VBASECLASSES (type));
13821       tree addr;
13822       tree call;
13823
13824       if (TREE_CODE (type) == ARRAY_TYPE)
13825         addr = decl;
13826       else
13827         addr = build_address (decl);
13828
13829       /* Optimize for space over speed here.  */
13830       if (!has_vbases || flag_expensive_optimizations)
13831         flags |= LOOKUP_NONVIRTUAL;
13832
13833       call = build_delete (TREE_TYPE (addr), addr,
13834                            sfk_complete_destructor, flags, 0, complain);
13835       if (call == error_mark_node)
13836         cleanup = error_mark_node;
13837       else if (cleanup)
13838         cleanup = cp_build_compound_expr (cleanup, call, complain);
13839       else
13840         cleanup = call;
13841     }
13842
13843   /* build_delete sets the location of the destructor call to the
13844      current location, even though the destructor is going to be
13845      called later, at the end of the current scope.  This can lead to
13846      a "jumpy" behaviour for users of debuggers when they step around
13847      the end of the block.  So let's unset the location of the
13848      destructor call instead.  */
13849   if (cleanup != NULL && EXPR_P (cleanup))
13850     SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION);
13851   return cleanup;
13852 }
13853
13854 \f
13855 /* When a stmt has been parsed, this function is called.  */
13856
13857 void
13858 finish_stmt (void)
13859 {
13860 }
13861
13862 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13863    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13864    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13865
13866 tree
13867 static_fn_type (tree memfntype)
13868 {
13869   tree fntype;
13870   tree args;
13871
13872   if (TYPE_PTRMEMFUNC_P (memfntype))
13873     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13874   if (POINTER_TYPE_P (memfntype)
13875       || TREE_CODE (memfntype) == FUNCTION_DECL)
13876     memfntype = TREE_TYPE (memfntype);
13877   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13878     return memfntype;
13879   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13880   args = TYPE_ARG_TYPES (memfntype);
13881   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13882   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13883   fntype = (cp_build_type_attribute_variant
13884             (fntype, TYPE_ATTRIBUTES (memfntype)));
13885   fntype = (build_exception_variant
13886             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13887   return fntype;
13888 }
13889
13890 /* DECL was originally constructed as a non-static member function,
13891    but turned out to be static.  Update it accordingly.  */
13892
13893 void
13894 revert_static_member_fn (tree decl)
13895 {
13896   tree stype = static_fn_type (decl);
13897   cp_cv_quals quals = type_memfn_quals (stype);
13898
13899   if (quals != TYPE_UNQUALIFIED)
13900     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13901
13902   TREE_TYPE (decl) = stype;
13903
13904   if (DECL_ARGUMENTS (decl))
13905     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13906   DECL_STATIC_FUNCTION_P (decl) = 1;
13907 }
13908
13909 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13910    one of the language-independent trees.  */
13911
13912 enum cp_tree_node_structure_enum
13913 cp_tree_node_structure (union lang_tree_node * t)
13914 {
13915   switch (TREE_CODE (&t->generic))
13916     {
13917     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
13918     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
13919     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
13920     case OVERLOAD:              return TS_CP_OVERLOAD;
13921     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
13922     case PTRMEM_CST:            return TS_CP_PTRMEM;
13923     case BASELINK:              return TS_CP_BASELINK;
13924     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
13925     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13926     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
13927     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
13928     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
13929     case USERDEF_LITERAL:       return TS_CP_USERDEF_LITERAL;
13930     default:                    return TS_CP_GENERIC;
13931     }
13932 }
13933
13934 /* Build the void_list_node (void_type_node having been created).  */
13935 tree
13936 build_void_list_node (void)
13937 {
13938   tree t = build_tree_list (NULL_TREE, void_type_node);
13939   return t;
13940 }
13941
13942 bool
13943 cp_missing_noreturn_ok_p (tree decl)
13944 {
13945   /* A missing noreturn is ok for the `main' function.  */
13946   return DECL_MAIN_P (decl);
13947 }
13948
13949 /* Return the COMDAT group into which DECL should be placed.  */
13950
13951 tree
13952 cxx_comdat_group (tree decl)
13953 {
13954   tree name;
13955
13956   /* Virtual tables, construction virtual tables, and virtual table
13957      tables all go in a single COMDAT group, named after the primary
13958      virtual table.  */
13959   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13960     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13961   /* For all other DECLs, the COMDAT group is the mangled name of the
13962      declaration itself.  */
13963   else
13964     {
13965       while (DECL_THUNK_P (decl))
13966         {
13967           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13968              into the same section as the target function.  In that case
13969              we must return target's name.  */
13970           tree target = THUNK_TARGET (decl);
13971           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13972               && DECL_SECTION_NAME (target) != NULL
13973               && DECL_ONE_ONLY (target))
13974             decl = target;
13975           else
13976             break;
13977         }
13978       name = DECL_ASSEMBLER_NAME (decl);
13979     }
13980
13981   return name;
13982 }
13983
13984 #include "gt-cp-decl.h"