OSDN Git Service

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