OSDN Git Service

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