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