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