OSDN Git Service

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