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