OSDN Git Service

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