OSDN Git Service

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