OSDN Git Service

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