OSDN Git Service

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