OSDN Git Service

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