OSDN Git Service

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