OSDN Git Service

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