OSDN Git Service

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