OSDN Git Service

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