OSDN Git Service

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