class.c (alter_access): Use %E format specifier to print an identifier node.
[platform/upstream/gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004  Free Software Foundation, Inc.
4    Contributed by Michael Tiemann (tiemann@cygnus.com)
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23
24 /* Process declarations and symbol lookup for C++ front end.
25    Also constructs types; the standard scalar types at initialization,
26    and structure, union, array and enum types when they are declared.  */
27
28 /* ??? not all decl nodes are given the most useful possible
29    line numbers.  For example, the CONST_DECLs for enum values.  */
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "lex.h"
43 #include "output.h"
44 #include "except.h"
45 #include "toplev.h"
46 #include "hashtab.h"
47 #include "tm_p.h"
48 #include "target.h"
49 #include "c-common.h"
50 #include "c-pragma.h"
51 #include "diagnostic.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "tree-flow.h"
55
56 static tree grokparms (tree, tree *);
57 static const char *redeclaration_error_message (tree, tree);
58
59 static int decl_jump_unsafe (tree);
60 static void require_complete_types_for_parms (tree);
61 static int ambi_op_p (enum tree_code);
62 static int unary_op_p (enum tree_code);
63 static void push_local_name (tree);
64 static tree grok_reference_init (tree, tree, tree, tree *);
65 static tree grokfndecl (tree, tree, tree, tree, tree, int,
66                         enum overload_flags, tree,
67                         tree, int, int, int, int, int, int, tree);
68 static tree grokvardecl (tree, tree, RID_BIT_TYPE *, int, int, tree);
69 static void record_unknown_type (tree, const char *);
70 static tree builtin_function_1 (const char *, tree, tree, int,
71                                 enum built_in_class, const char *,
72                                 tree);
73 static tree build_library_fn_1 (tree, enum tree_code, tree);
74 static int member_function_or_else (tree, tree, enum overload_flags);
75 static void bad_specifiers (tree, const char *, int, int, int, int,
76                             int);
77 static void check_for_uninitialized_const_var (tree);
78 static hashval_t typename_hash (const void *);
79 static int typename_compare (const void *, const void *);
80 static tree local_variable_p_walkfn (tree *, int *, void *);
81 static tree record_builtin_java_type (const char *, int);
82 static const char *tag_name (enum tag_types code);
83 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
84 static int walk_globals_r (tree, void*);
85 static int walk_vtables_r (tree, void*);
86 static tree make_label_decl (tree, int);
87 static void use_label (tree);
88 static void check_previous_goto_1 (tree, struct cp_binding_level *, tree,
89                                    const location_t *);
90 static void check_previous_goto (struct named_label_use_list *);
91 static void check_switch_goto (struct cp_binding_level *);
92 static void check_previous_gotos (tree);
93 static void pop_label (tree, tree);
94 static void pop_labels (tree);
95 static void maybe_deduce_size_from_array_init (tree, tree);
96 static void layout_var_decl (tree);
97 static void maybe_commonize_var (tree);
98 static tree check_initializer (tree, tree, int, tree *);
99 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
100 static void save_function_data (tree);
101 static void check_function_type (tree, tree);
102 static void begin_constructor_body (void);
103 static void finish_constructor_body (void);
104 static void begin_destructor_body (void);
105 static void finish_destructor_body (void);
106 static tree create_array_type_for_decl (tree, tree, tree);
107 static tree get_atexit_node (void);
108 static tree get_dso_handle_node (void);
109 static tree start_cleanup_fn (void);
110 static void end_cleanup_fn (void);
111 static tree cp_make_fname_decl (tree, int);
112 static void initialize_predefined_identifiers (void);
113 static tree check_special_function_return_type 
114         (special_function_kind, tree, tree);
115 static tree push_cp_library_fn (enum tree_code, tree);
116 static tree build_cp_library_fn (tree, enum tree_code, tree);
117 static void store_parm_decls (tree);
118 static void initialize_local_var (tree, tree);
119 static void expand_static_init (tree, tree);
120 static tree next_initializable_field (tree);
121 static tree reshape_init (tree, tree *);
122 static tree build_typename_type (tree, tree, tree);
123
124 /* Erroneous argument lists can use this *IFF* they do not modify it.  */
125 tree error_mark_list;
126
127 /* The following symbols are subsumed in the cp_global_trees array, and
128    listed here individually for documentation purposes.
129
130    C++ extensions
131         tree wchar_decl_node;
132
133         tree vtable_entry_type;
134         tree delta_type_node;
135         tree __t_desc_type_node;
136         tree ti_desc_type_node;
137         tree bltn_desc_type_node, ptr_desc_type_node;
138         tree ary_desc_type_node, func_desc_type_node, enum_desc_type_node;
139         tree class_desc_type_node, si_class_desc_type_node, vmi_class_desc_type_node;
140         tree ptm_desc_type_node;
141         tree base_desc_type_node;
142
143         tree class_type_node;
144         tree unknown_type_node;
145
146    Array type `vtable_entry_type[]'
147
148         tree vtbl_type_node;
149         tree vtbl_ptr_type_node;
150
151    Namespaces,
152
153         tree std_node;
154         tree abi_node;
155
156    A FUNCTION_DECL which can call `abort'.  Not necessarily the
157    one that the user will declare, but sufficient to be called
158    by routines that want to abort the program.
159
160         tree abort_fndecl;
161
162    The FUNCTION_DECL for the default `::operator delete'.
163
164         tree global_delete_fndecl;
165
166    Used by RTTI
167         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
168         tree tinfo_var_id;
169
170 */
171
172 tree cp_global_trees[CPTI_MAX];
173
174 /* Indicates that there is a type value in some namespace, although
175    that is not necessarily in scope at the moment.  */
176
177 tree global_type_node;
178
179 /* The node that holds the "name" of the global scope.  */
180 tree global_scope_name;
181
182 /* Used only for jumps to as-yet undefined labels, since jumps to
183    defined labels can have their validity checked immediately.  */
184
185 struct named_label_use_list GTY(())
186 {
187   struct cp_binding_level *binding_level;
188   tree names_in_scope;
189   tree label_decl;
190   location_t o_goto_locus;
191   struct named_label_use_list *next;
192 };
193
194 #define named_label_uses cp_function_chain->x_named_label_uses
195
196 #define local_names cp_function_chain->x_local_names
197
198 /* A list of objects which have constructors or destructors
199    which reside in the global scope.  The decl is stored in
200    the TREE_VALUE slot and the initializer is stored
201    in the TREE_PURPOSE slot.  */
202 tree static_aggregates;
203
204 /* -- end of C++ */
205
206 /* A node for the integer constants 2, and 3.  */
207
208 tree integer_two_node, integer_three_node;
209
210 /* A list of all LABEL_DECLs in the function that have names.  Here so
211    we can clear out their names' definitions at the end of the
212    function, and so we can check the validity of jumps to these labels.  */
213
214 struct named_label_list GTY(())
215 {
216   struct cp_binding_level *binding_level;
217   tree names_in_scope;
218   tree old_value;
219   tree label_decl;
220   tree bad_decls;
221   struct named_label_list *next;
222   unsigned int in_try_scope : 1;
223   unsigned int in_catch_scope : 1;
224 };
225
226 #define named_labels cp_function_chain->x_named_labels
227 \f
228 /* The number of function bodies which we are currently processing.
229    (Zero if we are at namespace scope, one inside the body of a
230    function, two inside the body of a function in a local class, etc.)  */
231 int function_depth;
232
233 /* States indicating how grokdeclarator() should handle declspecs marked
234    with __attribute__((deprecated)).  An object declared as
235    __attribute__((deprecated)) suppresses warnings of uses of other
236    deprecated items.  */
237    
238 enum deprecated_states {
239   DEPRECATED_NORMAL,
240   DEPRECATED_SUPPRESS
241 };
242
243 static enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
244
245 /* Set by add_implicitly_declared_members() to keep those members from
246    being flagged as deprecated or reported as using deprecated
247    types.  */
248 int adding_implicit_members = 0;
249
250 /* True if a declaration with an `extern' linkage specifier is being
251    processed.  */
252 bool have_extern_spec;
253
254 \f
255 /* A TREE_LIST of VAR_DECLs.  The TREE_PURPOSE is a RECORD_TYPE or
256    UNION_TYPE; the TREE_VALUE is a VAR_DECL with that type.  At the
257    time the VAR_DECL was declared, the type was incomplete.  */
258
259 static GTY(()) tree incomplete_vars;
260 \f
261 /* Returns the kind of template specialization we are currently
262    processing, given that it's declaration contained N_CLASS_SCOPES
263    explicit scope qualifications.  */
264
265 tmpl_spec_kind
266 current_tmpl_spec_kind (int n_class_scopes)
267 {
268   int n_template_parm_scopes = 0;
269   int seen_specialization_p = 0;
270   int innermost_specialization_p = 0;
271   struct cp_binding_level *b;
272
273   /* Scan through the template parameter scopes.  */
274   for (b = current_binding_level; 
275        b->kind == sk_template_parms; 
276        b = b->level_chain)
277     {
278       /* If we see a specialization scope inside a parameter scope,
279          then something is wrong.  That corresponds to a declaration
280          like:
281
282             template <class T> template <> ...
283
284          which is always invalid since [temp.expl.spec] forbids the
285          specialization of a class member template if the enclosing
286          class templates are not explicitly specialized as well.  */
287       if (b->explicit_spec_p)
288         {
289           if (n_template_parm_scopes == 0)
290             innermost_specialization_p = 1;
291           else
292             seen_specialization_p = 1;
293         }
294       else if (seen_specialization_p == 1)
295         return tsk_invalid_member_spec;
296
297       ++n_template_parm_scopes;
298     }
299
300   /* Handle explicit instantiations.  */
301   if (processing_explicit_instantiation)
302     {
303       if (n_template_parm_scopes != 0)
304         /* We've seen a template parameter list during an explicit
305            instantiation.  For example:
306
307              template <class T> template void f(int);
308
309            This is erroneous.  */
310         return tsk_invalid_expl_inst;
311       else
312         return tsk_expl_inst;
313     }
314
315   if (n_template_parm_scopes < n_class_scopes)
316     /* We've not seen enough template headers to match all the
317        specialized classes present.  For example:
318
319          template <class T> void R<T>::S<T>::f(int);
320
321        This is invalid; there needs to be one set of template
322        parameters for each class.  */
323     return tsk_insufficient_parms;
324   else if (n_template_parm_scopes == n_class_scopes)
325     /* We're processing a non-template declaration (even though it may
326        be a member of a template class.)  For example:
327
328          template <class T> void S<T>::f(int);
329
330        The `class T' maches the `S<T>', leaving no template headers
331        corresponding to the `f'.  */
332     return tsk_none;
333   else if (n_template_parm_scopes > n_class_scopes + 1)
334     /* We've got too many template headers.  For example:
335
336          template <> template <class T> void f (T);
337
338        There need to be more enclosing classes.  */
339     return tsk_excessive_parms;
340   else
341     /* This must be a template.  It's of the form:
342
343          template <class T> template <class U> void S<T>::f(U);
344
345        This is a specialization if the innermost level was a
346        specialization; otherwise it's just a definition of the
347        template.  */
348     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
349 }
350
351 /* Exit the current scope.  */
352
353 void
354 finish_scope (void)
355 {
356   poplevel (0, 0, 0);
357 }
358
359 /* When a label goes out of scope, check to see if that label was used
360    in a valid manner, and issue any appropriate warnings or errors.  */
361
362 static void
363 pop_label (tree label, tree old_value)
364 {
365   if (!processing_template_decl)
366     {
367       if (DECL_INITIAL (label) == NULL_TREE)
368         {
369           location_t location;
370
371           cp_error_at ("label `%D' used but not defined", label);
372           location.file = input_filename;
373           location.line = 0;
374           /* Avoid crashing later.  */
375           define_label (location, DECL_NAME (label));
376         }
377       else if (warn_unused_label && !TREE_USED (label))
378         cp_warning_at ("label `%D' defined but not used", label);
379     }
380
381   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
382 }
383
384 /* At the end of a function, all labels declared within the function
385    go out of scope.  BLOCK is the top-level block for the
386    function.  */
387
388 static void
389 pop_labels (tree block)
390 {
391   struct named_label_list *link;
392
393   /* Clear out the definitions of all label names, since their scopes
394      end here.  */
395   for (link = named_labels; link; link = link->next)
396     {
397       pop_label (link->label_decl, link->old_value);
398       /* Put the labels into the "variables" of the top-level block,
399          so debugger can see them.  */
400       TREE_CHAIN (link->label_decl) = BLOCK_VARS (block);
401       BLOCK_VARS (block) = link->label_decl;
402     }
403
404   named_labels = NULL;
405 }
406
407 /* Exit a binding level.
408    Pop the level off, and restore the state of the identifier-decl mappings
409    that were in effect when this level was entered.
410
411    If KEEP == 1, this level had explicit declarations, so
412    and create a "block" (a BLOCK node) for the level
413    to record its declarations and subblocks for symbol table output.
414
415    If FUNCTIONBODY is nonzero, this level is the body of a function,
416    so create a block as if KEEP were set and also clear out all
417    label names.
418
419    If REVERSE is nonzero, reverse the order of decls before putting
420    them into the BLOCK.  */
421
422 tree
423 poplevel (int keep, int reverse, int functionbody)
424 {
425   tree link;
426   /* The chain of decls was accumulated in reverse order.
427      Put it into forward order, just for cleanliness.  */
428   tree decls;
429   int tmp = functionbody;
430   int real_functionbody;
431   tree subblocks;
432   tree block = 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
5341       domain = build_index_type (maxindex);
5342       TYPE_DOMAIN (type) = domain;
5343
5344       if (! TREE_TYPE (maxindex))
5345         TREE_TYPE (maxindex) = domain;
5346       if (initial_value)
5347         itype = TREE_TYPE (initial_value);
5348       else
5349         itype = NULL;
5350       if (itype && !TYPE_DOMAIN (itype))
5351         TYPE_DOMAIN (itype) = domain;
5352       /* The type of the main variant should never be used for arrays
5353          of different sizes.  It should only ever be completed with the
5354          size of the array.  */
5355       if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)))
5356         TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain;
5357     }
5358
5359   /* Lay out the type now that we can get the real answer.  */
5360
5361   layout_type (type);
5362
5363   return value;
5364 }
5365 \f
5366 /* Return zero if something is declared to be a member of type
5367    CTYPE when in the context of CUR_TYPE.  STRING is the error
5368    message to print in that case.  Otherwise, quietly return 1.  */
5369
5370 static int
5371 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5372 {
5373   if (ctype && ctype != cur_type)
5374     {
5375       if (flags == DTOR_FLAG)
5376         error ("destructor for alien class `%T' cannot be a member",
5377                   ctype);
5378       else
5379         error ("constructor for alien class `%T' cannot be a member",
5380                   ctype);
5381       return 0;
5382     }
5383   return 1;
5384 }
5385 \f
5386 /* Subroutine of `grokdeclarator'.  */
5387
5388 /* Generate errors possibly applicable for a given set of specifiers.
5389    This is for ARM $7.1.2.  */
5390
5391 static void
5392 bad_specifiers (tree object,
5393                 const char* type,
5394                 int virtualp,
5395                 int quals,
5396                 int inlinep,
5397                 int friendp,
5398                 int raises)
5399 {
5400   if (virtualp)
5401     error ("`%D' declared as a `virtual' %s", object, type);
5402   if (inlinep)
5403     error ("`%D' declared as an `inline' %s", object, type);
5404   if (quals)
5405     error ("`const' and `volatile' function specifiers on `%D' invalid in %s declaration",
5406               object, type);
5407   if (friendp)
5408     cp_error_at ("`%D' declared as a friend", object);
5409   if (raises
5410       && (TREE_CODE (object) == TYPE_DECL
5411           || (!TYPE_PTRFN_P (TREE_TYPE (object))
5412               && !TYPE_REFFN_P (TREE_TYPE (object))
5413               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5414     cp_error_at ("`%D' declared with an exception specification", object);
5415 }
5416
5417 /* CTYPE is class type, or null if non-class.
5418    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5419    or METHOD_TYPE.
5420    DECLARATOR is the function's name.
5421    PARMS is a chain of PARM_DECLs for the function.
5422    VIRTUALP is truthvalue of whether the function is virtual or not.
5423    FLAGS are to be passed through to `grokclassfn'.
5424    QUALS are qualifiers indicating whether the function is `const'
5425    or `volatile'.
5426    RAISES is a list of exceptions that this function can raise.
5427    CHECK is 1 if we must find this method in CTYPE, 0 if we should
5428    not look, and -1 if we should not call `grokclassfn' at all.
5429
5430    Returns `NULL_TREE' if something goes wrong, after issuing
5431    applicable error messages.  */
5432
5433 static tree
5434 grokfndecl (tree ctype, 
5435             tree type,
5436             tree declarator,
5437             tree parms,
5438             tree orig_declarator,
5439             int virtualp,
5440             enum overload_flags flags,
5441             tree quals, 
5442             tree raises,
5443             int check, 
5444             int friendp, 
5445             int publicp, 
5446             int inlinep, 
5447             int funcdef_flag, 
5448             int template_count,
5449             tree in_namespace)
5450 {
5451   tree decl;
5452   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5453   int has_default_arg = 0;
5454   tree t;
5455
5456   if (raises)
5457     type = build_exception_variant (type, raises);
5458
5459   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5460   DECL_ARGUMENTS (decl) = parms;
5461   /* Propagate volatile out from type to decl.  */
5462   if (TYPE_VOLATILE (type))
5463     TREE_THIS_VOLATILE (decl) = 1;
5464
5465   /* If this decl has namespace scope, set that up.  */
5466   if (in_namespace)
5467     set_decl_namespace (decl, in_namespace, friendp);
5468   else if (!ctype)
5469     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5470
5471   /* `main' and builtins have implicit 'C' linkage.  */
5472   if ((MAIN_NAME_P (declarator)
5473        || (IDENTIFIER_LENGTH (declarator) > 10
5474            && IDENTIFIER_POINTER (declarator)[0] == '_'
5475            && IDENTIFIER_POINTER (declarator)[1] == '_'
5476            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5477       && current_lang_name == lang_name_cplusplus
5478       && ctype == NULL_TREE
5479       /* NULL_TREE means global namespace.  */
5480       && DECL_CONTEXT (decl) == NULL_TREE)
5481     SET_DECL_LANGUAGE (decl, lang_c);
5482
5483   /* Should probably propagate const out from type to decl I bet (mrs).  */
5484   if (staticp)
5485     {
5486       DECL_STATIC_FUNCTION_P (decl) = 1;
5487       DECL_CONTEXT (decl) = ctype;
5488     }
5489
5490   if (ctype)
5491     DECL_CONTEXT (decl) = ctype;
5492
5493   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5494     {
5495       if (processing_template_decl)
5496         error ("cannot declare `::main' to be a template");
5497       if (inlinep)
5498         error ("cannot declare `::main' to be inline");
5499       if (!publicp)
5500         error ("cannot declare `::main' to be static");
5501       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5502                         integer_type_node))
5503         error ("`main' must return `int'");
5504       inlinep = 0;
5505       publicp = 1;
5506     }
5507
5508   /* Members of anonymous types and local classes have no linkage; make
5509      them internal.  If a typedef is made later, this will be changed.  */
5510   if (ctype && (TYPE_ANONYMOUS_P (ctype)
5511                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5512     publicp = 0;
5513
5514   if (publicp)
5515     {
5516       /* [basic.link]: A name with no linkage (notably, the name of a class
5517          or enumeration declared in a local scope) shall not be used to
5518          declare an entity with linkage.
5519
5520          Only check this for public decls for now.  See core 319, 389.  */
5521       t = no_linkage_check (TREE_TYPE (decl));
5522       if (t)
5523         {
5524           if (TYPE_ANONYMOUS_P (t))
5525             {
5526               if (DECL_EXTERN_C_P (decl))
5527                 /* Allow this; it's pretty common in C.  */;
5528               else
5529                 {
5530                   pedwarn ("non-local function `%#D' uses anonymous type",
5531                               decl);
5532                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5533                     cp_pedwarn_at ("\
5534 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5535                                 TYPE_NAME (t));
5536                 }
5537             }
5538           else
5539             pedwarn ("non-local function `%#D' uses local type `%T'",
5540                         decl, t);
5541         }
5542     }
5543
5544   TREE_PUBLIC (decl) = publicp;
5545   if (! publicp)
5546     {
5547       DECL_INTERFACE_KNOWN (decl) = 1;
5548       DECL_NOT_REALLY_EXTERN (decl) = 1;
5549     }
5550
5551   /* If the declaration was declared inline, mark it as such.  */
5552   if (inlinep)
5553     DECL_DECLARED_INLINE_P (decl) = 1;
5554   /* We inline functions that are explicitly declared inline, or, when
5555      the user explicitly asks us to, all functions.  */
5556   if (DECL_DECLARED_INLINE_P (decl)
5557       || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
5558     DECL_INLINE (decl) = 1;
5559
5560   DECL_EXTERNAL (decl) = 1;
5561   if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
5562     {
5563       error ("%smember function `%D' cannot have `%T' method qualifier",
5564                 (ctype ? "static " : "non-"), decl, TREE_VALUE (quals));
5565       quals = NULL_TREE;
5566     }
5567
5568   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
5569     grok_op_properties (decl, friendp, /*complain=*/true);
5570
5571   if (ctype && decl_function_context (decl))
5572     DECL_NO_STATIC_CHAIN (decl) = 1;
5573
5574   for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5575     if (TREE_PURPOSE (t)
5576         && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5577       {
5578         has_default_arg = 1;
5579         break;
5580       }
5581
5582   if (friendp
5583       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5584     {
5585       if (funcdef_flag)
5586         error
5587           ("defining explicit specialization `%D' in friend declaration",
5588            orig_declarator);
5589       else
5590         {
5591           tree fns = TREE_OPERAND (orig_declarator, 0);
5592           tree args = TREE_OPERAND (orig_declarator, 1);
5593
5594           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5595             {
5596               /* Something like `template <class T> friend void f<T>()'.  */
5597               error ("invalid use of template-id `%D' in declaration of primary template",
5598                         orig_declarator);
5599               return NULL_TREE;
5600             }
5601
5602
5603           /* A friend declaration of the form friend void f<>().  Record
5604              the information in the TEMPLATE_ID_EXPR.  */
5605           SET_DECL_IMPLICIT_INSTANTIATION (decl);
5606
5607           if (TREE_CODE (fns) == COMPONENT_REF)
5608             {
5609               /* Due to bison parser ickiness, we will have already looked
5610                  up an operator_name or PFUNCNAME within the current class
5611                  (see template_id in parse.y). If the current class contains
5612                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
5613
5614               my_friendly_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5615                                   == current_class_type, 20001120);
5616               fns = TREE_OPERAND (fns, 1);
5617             }
5618           my_friendly_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5619                               || TREE_CODE (fns) == OVERLOAD, 20001120);
5620           DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5621
5622           if (has_default_arg)
5623             {
5624               error ("default arguments are not allowed in declaration of friend template specialization `%D'",
5625                         decl);
5626               return NULL_TREE;
5627             }
5628
5629           if (inlinep)
5630             {
5631               error ("`inline' is not allowed in declaration of friend template specialization `%D'",
5632                         decl);
5633               return NULL_TREE;
5634             }
5635         }
5636     }
5637
5638   if (funcdef_flag)
5639     /* Make the init_value nonzero so pushdecl knows this is not
5640        tentative.  error_mark_node is replaced later with the BLOCK.  */
5641     DECL_INITIAL (decl) = error_mark_node;
5642
5643   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
5644     TREE_NOTHROW (decl) = 1;
5645
5646   /* Caller will do the rest of this.  */
5647   if (check < 0)
5648     return decl;
5649
5650   if (flags == NO_SPECIAL && ctype && constructor_name_p (declarator, ctype))
5651     DECL_CONSTRUCTOR_P (decl) = 1;
5652
5653   /* Function gets the ugly name, field gets the nice one.  This call
5654      may change the type of the function (because of default
5655      parameters)!  */
5656   if (ctype != NULL_TREE)
5657     grokclassfn (ctype, decl, flags, quals);
5658
5659   decl = check_explicit_specialization (orig_declarator, decl,
5660                                         template_count,
5661                                         2 * (funcdef_flag != 0) +
5662                                         4 * (friendp != 0));
5663   if (decl == error_mark_node)
5664     return NULL_TREE;
5665
5666   if (ctype != NULL_TREE
5667       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
5668       && check)
5669     {
5670       tree old_decl;
5671
5672       old_decl = check_classfn (ctype, decl,
5673                                 (processing_template_decl
5674                                  > template_class_depth (ctype))
5675                                 ? current_template_parms
5676                                 : NULL_TREE);
5677
5678       if (old_decl && TREE_CODE (old_decl) == TEMPLATE_DECL)
5679         /* Because grokfndecl is always supposed to return a
5680            FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
5681            here.  We depend on our callers to figure out that its
5682            really a template that's being returned.  */
5683         old_decl = DECL_TEMPLATE_RESULT (old_decl);
5684
5685       if (old_decl && DECL_STATIC_FUNCTION_P (old_decl)
5686           && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
5687         /* Remove the `this' parm added by grokclassfn.
5688            XXX Isn't this done in start_function, too?  */
5689         revert_static_member_fn (decl);
5690       if (old_decl && DECL_ARTIFICIAL (old_decl))
5691         error ("definition of implicitly-declared `%D'", old_decl);
5692
5693       if (old_decl)
5694         {
5695           tree ok;
5696           bool pop_p;
5697
5698           /* Since we've smashed OLD_DECL to its
5699              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
5700           if (TREE_CODE (decl) == TEMPLATE_DECL)
5701             decl = DECL_TEMPLATE_RESULT (decl);
5702
5703           /* Attempt to merge the declarations.  This can fail, in
5704              the case of some invalid specialization declarations.  */
5705           pop_p = push_scope (ctype);
5706           ok = duplicate_decls (decl, old_decl);
5707           if (pop_p)
5708             pop_scope (ctype);
5709           if (!ok)
5710             {
5711               error ("no `%#D' member function declared in class `%T'",
5712                      decl, ctype);
5713               return NULL_TREE;
5714             }
5715           return old_decl;
5716         }
5717     }
5718
5719   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
5720     return NULL_TREE;
5721
5722   if (ctype == NULL_TREE || check)
5723     return decl;
5724
5725   if (virtualp)
5726     DECL_VIRTUAL_P (decl) = 1;
5727
5728   return decl;
5729 }
5730
5731 /* Create a VAR_DECL named NAME with the indicated TYPE.  
5732
5733    If SCOPE is non-NULL, it is the class type or namespace containing
5734    the variable.  If SCOPE is NULL, the variable should is created in
5735    the innermost enclosings scope.  */
5736
5737 static tree
5738 grokvardecl (tree type,
5739              tree name,
5740              RID_BIT_TYPE * specbits_in,
5741              int initialized,
5742              int constp,
5743              tree scope)
5744 {
5745   tree decl;
5746   RID_BIT_TYPE specbits;
5747
5748   my_friendly_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE, 
5749                       20020808);
5750
5751   specbits = *specbits_in;
5752
5753   /* Compute the scope in which to place the variable.  */
5754   if (!scope)
5755     {
5756       /* An explicit "extern" specifier indicates a namespace-scope
5757          variable.  */
5758       if (RIDBIT_SETP (RID_EXTERN, specbits))
5759         scope = current_namespace;
5760       else if (!at_function_scope_p ())
5761         {
5762           scope = current_scope ();
5763           if (!scope)
5764             scope = current_namespace;
5765         }
5766     }
5767
5768   if (scope
5769       && (/* If the variable is a namespace-scope variable declared in a
5770              template, we need DECL_LANG_SPECIFIC.  */
5771           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
5772           /* Similarly for namespace-scope variables with language linkage
5773              other than C++.  */
5774           || (TREE_CODE (scope) == NAMESPACE_DECL 
5775               && current_lang_name != lang_name_cplusplus)
5776           /* Similarly for static data members.  */
5777           || TYPE_P (scope)))
5778     decl = build_lang_decl (VAR_DECL, name, type);
5779   else
5780     decl = build_decl (VAR_DECL, name, type);
5781
5782   if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
5783     set_decl_namespace (decl, scope, 0);
5784   else
5785     DECL_CONTEXT (decl) = scope;
5786
5787   if (name && scope && current_lang_name != lang_name_c)
5788     /* We can't mangle lazily here because we don't have any
5789        way to recover whether or not a variable was `extern
5790        "C"' later.  */
5791     mangle_decl (decl);
5792
5793   if (RIDBIT_SETP (RID_EXTERN, specbits))
5794     {
5795       DECL_THIS_EXTERN (decl) = 1;
5796       DECL_EXTERNAL (decl) = !initialized;
5797     }
5798
5799   /* In class context, static means one per class,
5800      public access, and static storage.  */
5801   if (DECL_CLASS_SCOPE_P (decl))
5802     {
5803       TREE_PUBLIC (decl) = 1;
5804       TREE_STATIC (decl) = 1;
5805       DECL_EXTERNAL (decl) = 0;
5806     }
5807   /* At top level, either `static' or no s.c. makes a definition
5808      (perhaps tentative), and absence of `static' makes it public.  */
5809   else if (toplevel_bindings_p ())
5810     {
5811       TREE_PUBLIC (decl) = (RIDBIT_NOTSETP (RID_STATIC, specbits)
5812                             && (DECL_THIS_EXTERN (decl) || ! constp));
5813       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
5814     }
5815   /* Not at top level, only `static' makes a static definition.  */
5816   else
5817     {
5818       TREE_STATIC (decl) = !! RIDBIT_SETP (RID_STATIC, specbits);
5819       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
5820     }
5821
5822   if (RIDBIT_SETP (RID_THREAD, specbits))
5823     {
5824       if (targetm.have_tls)
5825         DECL_THREAD_LOCAL (decl) = 1;
5826       else
5827         /* A mere warning is sure to result in improper semantics
5828            at runtime.  Don't bother to allow this to compile.  */
5829         error ("thread-local storage not supported for this target");
5830     }
5831
5832   if (TREE_PUBLIC (decl))
5833     {
5834       /* [basic.link]: A name with no linkage (notably, the name of a class
5835          or enumeration declared in a local scope) shall not be used to
5836          declare an entity with linkage.
5837
5838          Only check this for public decls for now.  */
5839       tree t = no_linkage_check (TREE_TYPE (decl));
5840       if (t)
5841         {
5842           if (TYPE_ANONYMOUS_P (t))
5843             {
5844               if (DECL_EXTERN_C_P (decl))
5845                 /* Allow this; it's pretty common in C.  */;
5846               else
5847                 {
5848                   pedwarn ("non-local variable `%#D' uses anonymous type",
5849                            decl);
5850                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
5851                     cp_pedwarn_at ("\
5852 `%#D' does not refer to the unqualified type, so it is not used for linkage",
5853                                    TYPE_NAME (t));
5854                 }
5855             }
5856           else
5857             pedwarn ("non-local variable `%#D' uses local type `%T'",
5858                         decl, t);
5859         }
5860     }
5861
5862   return decl;
5863 }
5864
5865 /* Create and return a canonical pointer to member function type, for
5866    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
5867
5868 tree
5869 build_ptrmemfunc_type (tree type)
5870 {
5871   tree field, fields;
5872   tree t;
5873   tree unqualified_variant = NULL_TREE;
5874
5875   if (type == error_mark_node)
5876     return type;
5877
5878   /* If a canonical type already exists for this type, use it.  We use
5879      this method instead of type_hash_canon, because it only does a
5880      simple equality check on the list of field members.  */
5881
5882   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
5883     return t;
5884
5885   /* Make sure that we always have the unqualified pointer-to-member
5886      type first.  */
5887   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5888     unqualified_variant
5889       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
5890
5891   t = make_aggr_type (RECORD_TYPE);
5892   /* Let the front-end know this is a pointer to member function...  */
5893   TYPE_PTRMEMFUNC_FLAG (t) = 1;
5894   /* ... and not really an aggregate.  */
5895   SET_IS_AGGR_TYPE (t, 0);
5896
5897   field = build_decl (FIELD_DECL, pfn_identifier, type);
5898   fields = field;
5899   
5900   field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
5901   TREE_CHAIN (field) = fields;
5902   fields = field;
5903   
5904   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
5905
5906   /* Zap out the name so that the back-end will give us the debugging
5907      information for this anonymous RECORD_TYPE.  */
5908   TYPE_NAME (t) = NULL_TREE;
5909
5910   /* If this is not the unqualified form of this pointer-to-member
5911      type, set the TYPE_MAIN_VARIANT for this type to be the
5912      unqualified type.  Since they are actually RECORD_TYPEs that are
5913      not variants of each other, we must do this manually.  */
5914   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
5915     {
5916       t = build_qualified_type (t, cp_type_quals (type));
5917       TYPE_MAIN_VARIANT (t) = unqualified_variant;
5918       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
5919       TYPE_NEXT_VARIANT (unqualified_variant) = t;
5920     }
5921
5922   /* Cache this pointer-to-member type so that we can find it again
5923      later.  */
5924   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
5925
5926   return t;
5927 }
5928
5929 /* Create and return a pointer to data member type.  */
5930
5931 tree
5932 build_ptrmem_type (tree class_type, tree member_type)
5933 {
5934   if (TREE_CODE (member_type) == METHOD_TYPE)
5935     {
5936       tree arg_types;
5937
5938       arg_types = TYPE_ARG_TYPES (member_type);
5939       class_type = (cp_build_qualified_type 
5940                     (class_type,
5941                      cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
5942       member_type 
5943         = build_method_type_directly (class_type, 
5944                                       TREE_TYPE (member_type),
5945                                       TREE_CHAIN (arg_types));
5946       return build_ptrmemfunc_type (build_pointer_type (member_type));
5947     }
5948   else
5949     {
5950       my_friendly_assert (TREE_CODE (member_type) != FUNCTION_TYPE,
5951                           20030716);
5952       return build_offset_type (class_type, member_type);
5953     }
5954 }
5955
5956 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
5957    Check to see that the definition is valid.  Issue appropriate error
5958    messages.  Return 1 if the definition is particularly bad, or 0
5959    otherwise.  */
5960
5961 int
5962 check_static_variable_definition (tree decl, tree type)
5963 {
5964   /* Motion 10 at San Diego: If a static const integral data member is
5965      initialized with an integral constant expression, the initializer
5966      may appear either in the declaration (within the class), or in
5967      the definition, but not both.  If it appears in the class, the
5968      member is a member constant.  The file-scope definition is always
5969      required.  */
5970   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
5971     {
5972       error ("invalid in-class initialization of static data member of non-integral type `%T'",
5973              type);
5974       /* If we just return the declaration, crashes will sometimes
5975          occur.  We therefore return void_type_node, as if this were a
5976          friend declaration, to cause callers to completely ignore
5977          this declaration.  */
5978       return 1;
5979     }
5980   else if (!CP_TYPE_CONST_P (type))
5981     error ("ISO C++ forbids in-class initialization of non-const static member `%D'",
5982               decl);
5983   else if (pedantic && !INTEGRAL_TYPE_P (type))
5984     pedwarn ("ISO C++ forbids initialization of member constant `%D' of non-integral type `%T'", decl, type);
5985
5986   return 0;
5987 }
5988
5989 /* Given the SIZE (i.e., number of elements) in an array, compute an
5990    appropriate index type for the array.  If non-NULL, NAME is the
5991    name of the thing being declared.  */
5992
5993 tree
5994 compute_array_index_type (tree name, tree size)
5995 {
5996   tree type = TREE_TYPE (size);
5997   tree itype;
5998
5999   /* The array bound must be an integer type.  */
6000   if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6001     {
6002       if (name)
6003         error ("size of array `%D' has non-integral type `%T'", name, type);
6004       else
6005         error ("size of array has non-integral type `%T'", type);
6006       size = integer_one_node;
6007       type = TREE_TYPE (size);
6008     }
6009
6010   if (abi_version_at_least (2)
6011       /* We should only handle value dependent expressions specially.  */
6012       ? value_dependent_expression_p (size)
6013       /* But for abi-1, we handled all instances in templates. This
6014          effects the manglings produced.  */
6015       : processing_template_decl)
6016     return build_index_type (build_min (MINUS_EXPR, sizetype,
6017                                         size, integer_one_node));
6018
6019   /* The size might be the result of a cast.  */
6020   STRIP_TYPE_NOPS (size);
6021
6022   /* It might be a const variable or enumeration constant.  */
6023   size = decl_constant_value (size);
6024
6025   /* Normally, the array-bound will be a constant.  */
6026   if (TREE_CODE (size) == INTEGER_CST)
6027     {
6028       /* Check to see if the array bound overflowed.  Make that an
6029          error, no matter how generous we're being.  */
6030       int old_flag_pedantic_errors = flag_pedantic_errors;
6031       int old_pedantic = pedantic;
6032       pedantic = flag_pedantic_errors = 1;
6033       constant_expression_warning (size);
6034       pedantic = old_pedantic;
6035       flag_pedantic_errors = old_flag_pedantic_errors;
6036
6037       /* An array must have a positive number of elements.  */
6038       if (INT_CST_LT (size, integer_zero_node))
6039         {
6040           if (name)
6041             error ("size of array `%D' is negative", name);
6042           else
6043             error ("size of array is negative");
6044           size = integer_one_node;
6045         }
6046       /* As an extension we allow zero-sized arrays.  We always allow
6047          them in system headers because glibc uses them.  */
6048       else if (integer_zerop (size) && pedantic && !in_system_header)
6049         {
6050           if (name)
6051             pedwarn ("ISO C++ forbids zero-size array `%D'", name);
6052           else
6053             pedwarn ("ISO C++ forbids zero-size array");
6054         }
6055     }
6056   else if (TREE_CONSTANT (size))
6057     {
6058       /* `(int) &fn' is not a valid array bound.  */
6059       if (name)
6060         error ("size of array `%D' is not an integral constant-expression",
6061                   name);
6062       else
6063         error ("size of array is not an integral constant-expression");
6064     }
6065   else if (pedantic)
6066     {
6067       if (name)
6068         pedwarn ("ISO C++ forbids variable-size array `%D'", name);
6069       else
6070         pedwarn ("ISO C++ forbids variable-size array");
6071     }
6072
6073   if (processing_template_decl && !TREE_CONSTANT (size))
6074     /* A variable sized array.  */
6075     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6076   else
6077     {
6078       /* Compute the index of the largest element in the array.  It is
6079          one less than the number of elements in the array.  */
6080       itype
6081         = fold (cp_build_binary_op (MINUS_EXPR,
6082                                     cp_convert (ssizetype, size),
6083                                     cp_convert (ssizetype, integer_one_node)));
6084       if (!TREE_CONSTANT (itype))
6085         /* A variable sized array.  */
6086         itype = variable_size (itype);
6087       /* Make sure that there was no overflow when creating to a signed
6088          index type.  (For example, on a 32-bit machine, an array with
6089          size 2^32 - 1 is too big.)  */
6090       else if (TREE_OVERFLOW (itype))
6091         {
6092           error ("overflow in array dimension");
6093           TREE_OVERFLOW (itype) = 0;
6094         }
6095     }
6096
6097   /* Create and return the appropriate index type.  */
6098   return build_index_type (itype);
6099 }
6100
6101 /* Returns the scope (if any) in which the entity declared by
6102    DECLARATOR will be located.  If the entity was declared with an
6103    unqualified name, NULL_TREE is returned.  */
6104
6105 tree
6106 get_scope_of_declarator (tree declarator)
6107 {
6108   if (!declarator)
6109     return NULL_TREE;
6110   
6111   switch (TREE_CODE (declarator))
6112     {
6113     case CALL_EXPR:
6114     case ARRAY_REF:
6115     case INDIRECT_REF:
6116     case ADDR_EXPR:
6117       /* For any of these, the main declarator is the first operand.  */
6118       return get_scope_of_declarator (TREE_OPERAND
6119                                       (declarator, 0));
6120
6121     case SCOPE_REF:
6122       /* For a pointer-to-member, continue descending.  */
6123       if (TREE_CODE (TREE_OPERAND (declarator, 1))
6124           == INDIRECT_REF)
6125         return get_scope_of_declarator (TREE_OPERAND
6126                                         (declarator, 1));
6127       /* Otherwise, if the declarator-id is a SCOPE_REF, the scope in
6128          which the declaration occurs is the first operand.  */
6129       return TREE_OPERAND (declarator, 0);
6130
6131     case TREE_LIST:
6132       /* Attributes to be applied. The declarator is TREE_VALUE.  */
6133       return get_scope_of_declarator (TREE_VALUE (declarator));
6134       
6135     default:
6136       /* Otherwise, we have a declarator-id which is not a qualified
6137          name; the entity will be declared in the current scope.  */
6138       return NULL_TREE;
6139     }
6140 }
6141
6142 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6143    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
6144    with this type.  */
6145
6146 static tree
6147 create_array_type_for_decl (tree name, tree type, tree size)
6148 {
6149   tree itype = NULL_TREE;
6150   const char* error_msg;
6151
6152   /* If things have already gone awry, bail now.  */
6153   if (type == error_mark_node || size == error_mark_node)
6154     return error_mark_node;
6155
6156   /* Assume that everything will go OK.  */
6157   error_msg = NULL;
6158
6159   /* There are some types which cannot be array elements.  */
6160   switch (TREE_CODE (type))
6161     {
6162     case VOID_TYPE:
6163       error_msg = "array of void";
6164       break;
6165
6166     case FUNCTION_TYPE:
6167       error_msg = "array of functions";
6168       break;
6169
6170     case REFERENCE_TYPE:
6171       error_msg = "array of references";
6172       break;
6173
6174     case METHOD_TYPE:
6175       error_msg = "array of function members";
6176       break;
6177
6178     default:
6179       break;
6180     }
6181
6182   /* If something went wrong, issue an error-message and return.  */
6183   if (error_msg)
6184     {
6185       if (name)
6186         error ("declaration of `%D' as %s", name, error_msg);
6187       else
6188         error ("creating %s", error_msg);
6189
6190       return error_mark_node;
6191     }
6192
6193   /* [dcl.array]
6194
6195      The constant expressions that specify the bounds of the arrays
6196      can be omitted only for the first member of the sequence.  */
6197   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6198     {
6199       if (name)
6200         error ("declaration of `%D' as multidimensional array must have bounds for all dimensions except the first",
6201                   name);
6202       else
6203         error ("multidimensional array must have bounds for all dimensions except the first");
6204
6205       return error_mark_node;
6206     }
6207
6208   /* Figure out the index type for the array.  */
6209   if (size)
6210     itype = compute_array_index_type (name, size);
6211
6212   return build_cplus_array_type (type, itype);
6213 }
6214
6215 /* Check that it's OK to declare a function with the indicated TYPE.
6216    SFK indicates the kind of special function (if any) that this
6217    function is.  OPTYPE is the type given in a conversion operator
6218    declaration.  Returns the actual return type of the function; that
6219    may be different than TYPE if an error occurs, or for certain
6220    special functions.  */
6221
6222 static tree
6223 check_special_function_return_type (special_function_kind sfk,
6224                                     tree type,
6225                                     tree optype)
6226 {
6227   switch (sfk)
6228     {
6229     case sfk_constructor:
6230       if (type)
6231         error ("return type specification for constructor invalid");
6232
6233       type = void_type_node;
6234       break;
6235
6236     case sfk_destructor:
6237       if (type)
6238         error ("return type specification for destructor invalid");
6239       type = void_type_node;
6240       break;
6241
6242     case sfk_conversion:
6243       if (type && !same_type_p (type, optype))
6244         error ("operator `%T' declared to return `%T'", optype, type);
6245       else if (type)
6246         pedwarn ("return type specified for `operator %T'",  optype);
6247       type = optype;
6248       break;
6249
6250     default:
6251       abort ();
6252       break;
6253     }
6254
6255   return type;
6256 }
6257
6258 /* Given declspecs and a declarator (abstract or otherwise), determine
6259    the name and type of the object declared and construct a DECL node
6260    for it.
6261
6262    DECLSPECS is a chain of tree_list nodes whose value fields
6263     are the storage classes and type specifiers.
6264
6265    DECL_CONTEXT says which syntactic context this declaration is in:
6266      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6267      FUNCDEF for a function definition.  Like NORMAL but a few different
6268       error messages in each case.  Return value may be zero meaning
6269       this definition is too screwy to try to parse.
6270      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
6271       handle member functions (which have FIELD context).
6272       Return value may be zero meaning this definition is too screwy to
6273       try to parse.
6274      PARM for a parameter declaration (either within a function prototype
6275       or before a function body).  Make a PARM_DECL, or return void_type_node.
6276      CATCHPARM for a parameter declaration before a catch clause.
6277      TYPENAME if for a typename (in a cast or sizeof).
6278       Don't make a DECL node; just return the ..._TYPE node.
6279      FIELD for a struct or union field; make a FIELD_DECL.
6280      BITFIELD for a field with specified width.
6281    INITIALIZED is 1 if the decl has an initializer.
6282
6283    ATTRLIST is a pointer to the list of attributes, which may be NULL
6284    if there are none; *ATTRLIST may be modified if attributes from inside
6285    the declarator should be applied to the declaration.
6286
6287    When this function is called, scoping variables (such as
6288    CURRENT_CLASS_TYPE) should reflect the scope in which the
6289    declaration occurs, not the scope in which the new declaration will
6290    be placed.  For example, on:
6291
6292      void S::f() { ... }
6293
6294    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6295    should not be `S'.  */
6296
6297 tree
6298 grokdeclarator (tree declarator,
6299                 tree declspecs,
6300                 enum decl_context decl_context,
6301                 int initialized,
6302                 tree* attrlist)
6303 {
6304   RID_BIT_TYPE specbits;
6305   int nclasses = 0;
6306   tree spec;
6307   tree type = NULL_TREE;
6308   int longlong = 0;
6309   int type_quals;
6310   int virtualp, explicitp, friendp, inlinep, staticp;
6311   int explicit_int = 0;
6312   int explicit_char = 0;
6313   int defaulted_int = 0;
6314   int extern_langp = 0;
6315   tree dependant_name = NULL_TREE;
6316   
6317   tree typedef_decl = NULL_TREE;
6318   const char *name;
6319   tree typedef_type = NULL_TREE;
6320   int funcdef_flag = 0;
6321   enum tree_code innermost_code = ERROR_MARK;
6322   int bitfield = 0;
6323 #if 0
6324   /* See the code below that used this.  */
6325   tree decl_attr = NULL_TREE;
6326 #endif
6327
6328   /* Keep track of what sort of function is being processed
6329      so that we can warn about default return values, or explicit
6330      return values which do not match prescribed defaults.  */
6331   special_function_kind sfk = sfk_none;
6332
6333   tree dname = NULL_TREE;
6334   tree ctype = current_class_type;
6335   tree ctor_return_type = NULL_TREE;
6336   enum overload_flags flags = NO_SPECIAL;
6337   tree quals = NULL_TREE;
6338   tree raises = NULL_TREE;
6339   int template_count = 0;
6340   tree in_namespace = NULL_TREE;
6341   tree returned_attrs = NULL_TREE;
6342   tree scope = NULL_TREE;
6343   tree parms = NULL_TREE;
6344
6345   RIDBIT_RESET_ALL (specbits);
6346   if (decl_context == FUNCDEF)
6347     funcdef_flag = 1, decl_context = NORMAL;
6348   else if (decl_context == MEMFUNCDEF)
6349     funcdef_flag = -1, decl_context = FIELD;
6350   else if (decl_context == BITFIELD)
6351     bitfield = 1, decl_context = FIELD;
6352
6353   /* Look inside a declarator for the name being declared
6354      and get it as a string, for an error message.  */
6355   {
6356     tree *next = &declarator;
6357     tree decl;
6358     name = NULL;
6359
6360     while (next && *next)
6361       {
6362         decl = *next;
6363         switch (TREE_CODE (decl))
6364           {
6365           case TREE_LIST:
6366             /* For attributes.  */
6367             next = &TREE_VALUE (decl);
6368             break;
6369
6370           case COND_EXPR:
6371             ctype = NULL_TREE;
6372             next = &TREE_OPERAND (decl, 0);
6373             break;
6374
6375           case BIT_NOT_EXPR:    /* For C++ destructors!  */
6376             {
6377               tree name = TREE_OPERAND (decl, 0);
6378               tree rename = NULL_TREE;
6379
6380               my_friendly_assert (flags == NO_SPECIAL, 152);
6381               flags = DTOR_FLAG;
6382               sfk = sfk_destructor;
6383               if (TYPE_P (name))
6384                 TREE_OPERAND (decl, 0) = name = constructor_name (name);
6385               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 153);
6386               if (ctype == NULL_TREE)
6387                 {
6388                   if (current_class_type == NULL_TREE)
6389                     {
6390                       error ("destructors must be member functions");
6391                       flags = NO_SPECIAL;
6392                     }
6393                   else
6394                     {
6395                       tree t = constructor_name (current_class_type);
6396                       if (t != name)
6397                         rename = t;
6398                     }
6399                 }
6400               else
6401                 {
6402                   tree t = constructor_name (ctype);
6403                   if (t != name)
6404                     rename = t;
6405                 }
6406
6407               if (rename)
6408                 {
6409                   error ("destructor `%T' must match class name `%T'",
6410                             name, rename);
6411                   TREE_OPERAND (decl, 0) = rename;
6412                 }
6413               next = &name;
6414             }
6415             break;
6416
6417           case ADDR_EXPR:       /* C++ reference declaration */
6418             /* Fall through.  */
6419           case ARRAY_REF:
6420           case INDIRECT_REF:
6421             ctype = NULL_TREE;
6422             innermost_code = TREE_CODE (decl);
6423             next = &TREE_OPERAND (decl, 0);
6424             break;
6425
6426           case CALL_EXPR:
6427             innermost_code = TREE_CODE (decl);
6428             if (decl_context == FIELD && ctype == NULL_TREE)
6429               ctype = current_class_type;
6430             if (ctype
6431                 && TREE_OPERAND (decl, 0)
6432                 && (TREE_CODE (TREE_OPERAND (decl, 0)) == TYPE_DECL
6433                     && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 0)),
6434                                            ctype)))
6435               TREE_OPERAND (decl, 0) = constructor_name (ctype);
6436             next = &TREE_OPERAND (decl, 0);
6437             decl = *next;
6438             if (ctype != NULL_TREE
6439                 && decl != NULL_TREE && flags != DTOR_FLAG
6440                 && constructor_name_p (decl, ctype))
6441               {
6442                 sfk = sfk_constructor;
6443                 ctor_return_type = ctype;
6444               }
6445             ctype = NULL_TREE;
6446             break;
6447
6448           case TEMPLATE_ID_EXPR:
6449               {
6450                 tree fns = TREE_OPERAND (decl, 0);
6451
6452                 dname = fns;
6453                 if (TREE_CODE (dname) == COMPONENT_REF)
6454                   dname = TREE_OPERAND (dname, 1);
6455                 if (TREE_CODE (dname) != IDENTIFIER_NODE)
6456                   {
6457                     my_friendly_assert (is_overloaded_fn (dname),
6458                                         19990331);
6459                     dname = DECL_NAME (get_first_fn (dname));
6460                   }
6461               }
6462           /* Fall through.  */
6463
6464           case IDENTIFIER_NODE:
6465             if (TREE_CODE (decl) == IDENTIFIER_NODE)
6466               dname = decl;
6467
6468             next = 0;
6469
6470             if (C_IS_RESERVED_WORD (dname))
6471               {
6472                 error ("declarator-id missing; using reserved word `%D'",
6473                           dname);
6474                 name = IDENTIFIER_POINTER (dname);
6475               }
6476             else if (!IDENTIFIER_TYPENAME_P (dname))
6477               name = IDENTIFIER_POINTER (dname);
6478             else
6479               {
6480                 my_friendly_assert (flags == NO_SPECIAL, 154);
6481                 flags = TYPENAME_FLAG;
6482                 ctor_return_type = TREE_TYPE (dname);
6483                 sfk = sfk_conversion;
6484                 if (is_typename_at_global_scope (dname))
6485                   name = IDENTIFIER_POINTER (dname);
6486                 else
6487                   name = "<invalid operator>";
6488               }
6489             break;
6490
6491             /* C++ extension */
6492           case SCOPE_REF:
6493             {
6494               /* Perform error checking, and decide on a ctype.  */
6495               tree cname = TREE_OPERAND (decl, 0);
6496               if (cname == NULL_TREE)
6497                 ctype = NULL_TREE;
6498               else if (TREE_CODE (cname) == NAMESPACE_DECL)
6499                 {
6500                   ctype = NULL_TREE;
6501                   in_namespace = TREE_OPERAND (decl, 0);
6502                 }
6503               else if (! is_aggr_type (cname, 1))
6504                 ctype = NULL_TREE;
6505               /* Must test TREE_OPERAND (decl, 1), in case user gives
6506                  us `typedef (class::memfunc)(int); memfunc *memfuncptr;'  */
6507               else if (TREE_OPERAND (decl, 1)
6508                        && TREE_CODE (TREE_OPERAND (decl, 1)) == INDIRECT_REF)
6509                 ctype = cname;
6510               else if (TREE_CODE (cname) == TEMPLATE_TYPE_PARM
6511                        || TREE_CODE (cname) == BOUND_TEMPLATE_TEMPLATE_PARM)
6512                 {
6513                   /* This might be declaring a member of a template
6514                      parm to be a friend.  */
6515                   ctype = cname;
6516                   dependant_name = TREE_OPERAND (decl, 1);
6517                 }
6518               else if (ctype == NULL_TREE)
6519                 ctype = cname;
6520               else if (TREE_COMPLEXITY (decl) == current_class_depth)
6521                 ;
6522               else
6523                 {
6524                   if (! UNIQUELY_DERIVED_FROM_P (cname, ctype))
6525                     {
6526                       error ("type `%T' is not derived from type `%T'",
6527                                 cname, ctype);
6528                       ctype = NULL_TREE;
6529                     }
6530                   else
6531                     ctype = cname;
6532                 }
6533
6534               /* It is valid to write:
6535
6536                    class C { void f(); };
6537                    typedef C D;
6538                    void D::f();
6539
6540                  The standard is not clear about whether `typedef const C D' is
6541                  legal; as of 2002-09-15 the committee is considering
6542                  that question.  EDG 3.0 allows that syntax.
6543                  Therefore, we do as well.  */
6544               if (ctype)
6545                 ctype = TYPE_MAIN_VARIANT (ctype);
6546               /* Update the declarator so that when we process it
6547                  again the correct type is present.  */
6548               TREE_OPERAND (decl, 0) = ctype;
6549
6550               if (ctype && TREE_CODE (TREE_OPERAND (decl, 1)) == TYPE_DECL
6551                   && constructor_name_p (DECL_NAME (TREE_OPERAND (decl, 1)),
6552                                          ctype))
6553                 TREE_OPERAND (decl, 1) = constructor_name (ctype);
6554               next = &TREE_OPERAND (decl, 1);
6555               decl = *next;
6556               if (ctype)
6557                 {
6558                   tree name = decl;
6559
6560                   if (TREE_CODE (name) == BIT_NOT_EXPR)
6561                     name = TREE_OPERAND (name, 0);
6562
6563                   if (!constructor_name_p (decl, ctype))
6564                     ;
6565                   else if (decl == name)
6566                     {
6567                       sfk = sfk_constructor;
6568                       ctor_return_type = ctype;
6569                     }
6570                   else
6571                     {
6572                       sfk = sfk_destructor;
6573                       ctor_return_type = ctype;
6574                       flags = DTOR_FLAG;
6575                       TREE_OPERAND (decl, 0) = constructor_name (ctype);
6576                       next = &TREE_OPERAND (decl, 0);
6577                     }
6578                 }
6579             }
6580             break;
6581
6582           case ERROR_MARK:
6583             next = 0;
6584             break;
6585
6586           case TYPE_DECL:
6587             /* Parse error puts this typespec where
6588                a declarator should go.  */
6589             error ("`%T' specified as declarator-id", DECL_NAME (decl));
6590             if (TREE_TYPE (decl) == current_class_type)
6591               error ("  perhaps you want `%T' for a constructor",
6592                         current_class_name);
6593             dname = DECL_NAME (decl);
6594             name = IDENTIFIER_POINTER (dname);
6595
6596             /* Avoid giving two errors for this.  */
6597             IDENTIFIER_CLASS_VALUE (dname) = NULL_TREE;
6598
6599             declspecs = tree_cons (NULL_TREE, integer_type_node, declspecs);
6600             *next = dname;
6601             next = 0;
6602             break;
6603
6604           case BASELINK:
6605             next = &BASELINK_FUNCTIONS (decl);
6606             break;
6607
6608           case TEMPLATE_DECL:
6609             /* Sometimes, we see a template-name used as part of a 
6610                decl-specifier like in 
6611                   std::allocator alloc;
6612                Handle that gracefully.  */
6613             error ("invalid use of template-name '%E' in a declarator", decl);
6614             return error_mark_node;
6615             break;
6616             
6617           default:
6618             my_friendly_assert (0, 20020917);
6619           }
6620       }
6621   }
6622
6623   /* A function definition's declarator must have the form of
6624      a function declarator.  */
6625
6626   if (funcdef_flag && innermost_code != CALL_EXPR)
6627     return 0;
6628
6629   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6630       && innermost_code != CALL_EXPR
6631       && ! (ctype && declspecs == NULL_TREE))
6632     {
6633       error ("declaration of `%D' as non-function", dname);
6634       return void_type_node;
6635     }
6636
6637   /* Anything declared one level down from the top level
6638      must be one of the parameters of a function
6639      (because the body is at least two levels down).  */
6640
6641   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6642      by not allowing C++ class definitions to specify their parameters
6643      with xdecls (must be spec.d in the parmlist).
6644
6645      Since we now wait to push a class scope until we are sure that
6646      we are in a legitimate method context, we must set oldcname
6647      explicitly (since current_class_name is not yet alive).
6648
6649      We also want to avoid calling this a PARM if it is in a namespace.  */
6650
6651   if (decl_context == NORMAL && !toplevel_bindings_p ())
6652     {
6653       struct cp_binding_level *b = current_binding_level;
6654       current_binding_level = b->level_chain;
6655       if (current_binding_level != 0 && toplevel_bindings_p ())
6656         decl_context = PARM;
6657       current_binding_level = b;
6658     }
6659
6660   if (name == NULL)
6661     name = decl_context == PARM ? "parameter" : "type name";
6662
6663   /* Look through the decl specs and record which ones appear.
6664      Some typespecs are defined as built-in typenames.
6665      Others, the ones that are modifiers of other types,
6666      are represented by bits in SPECBITS: set the bits for
6667      the modifiers that appear.  Storage class keywords are also in SPECBITS.
6668
6669      If there is a typedef name or a type, store the type in TYPE.
6670      This includes builtin typedefs such as `int'.
6671
6672      Set EXPLICIT_INT if the type is `int' or `char' and did not
6673      come from a user typedef.
6674
6675      Set LONGLONG if `long' is mentioned twice.
6676
6677      For C++, constructors and destructors have their own fast treatment.  */
6678
6679   for (spec = declspecs; spec; spec = TREE_CHAIN (spec))
6680     {
6681       int i;
6682       tree id;
6683
6684       /* Certain parse errors slip through.  For example,
6685          `int class;' is not caught by the parser. Try
6686          weakly to recover here.  */
6687       if (TREE_CODE (spec) != TREE_LIST)
6688         return 0;
6689
6690       id = TREE_VALUE (spec);
6691
6692       /* If the entire declaration is itself tagged as deprecated then
6693          suppress reports of deprecated items.  */
6694       if (!adding_implicit_members && id && TREE_DEPRECATED (id))
6695         {
6696           if (deprecated_state != DEPRECATED_SUPPRESS)
6697             warn_deprecated_use (id);
6698         }
6699
6700       if (TREE_CODE (id) == IDENTIFIER_NODE)
6701         {
6702           if (id == ridpointers[(int) RID_INT]
6703               || id == ridpointers[(int) RID_CHAR]
6704               || id == ridpointers[(int) RID_BOOL]
6705               || id == ridpointers[(int) RID_WCHAR])
6706             {
6707               if (type)
6708                 {
6709                   if (id == ridpointers[(int) RID_BOOL])
6710                     error ("`bool' is now a keyword");
6711                   else
6712                     error ("extraneous `%T' ignored", id);
6713                 }
6714               else
6715                 {
6716                   if (id == ridpointers[(int) RID_INT])
6717                     explicit_int = 1;
6718                   else if (id == ridpointers[(int) RID_CHAR])
6719                     explicit_char = 1;
6720                   type = TREE_TYPE (IDENTIFIER_GLOBAL_VALUE (id));
6721                 }
6722               goto found;
6723             }
6724           /* C++ aggregate types.  */
6725           if (IDENTIFIER_HAS_TYPE_VALUE (id))
6726             {
6727               if (type)
6728                 error ("multiple declarations `%T' and `%T'", type, id);
6729               else
6730                 type = IDENTIFIER_TYPE_VALUE (id);
6731               goto found;
6732             }
6733
6734           for (i = (int) RID_FIRST_MODIFIER; i <= (int) RID_LAST_MODIFIER; i++)
6735             {
6736               if (ridpointers[i] == id)
6737                 {
6738                   if (i == (int) RID_LONG && RIDBIT_SETP (i, specbits))
6739                     {
6740                       if (pedantic && ! in_system_header && warn_long_long)
6741                         pedwarn ("ISO C++ does not support `long long'");
6742                       if (longlong)
6743                         error ("`long long long' is too long for GCC");
6744                       else
6745                         longlong = 1;
6746                     }
6747                   else if (RIDBIT_SETP (i, specbits))
6748                     pedwarn ("duplicate `%E'", id);
6749
6750                   /* Diagnose "__thread extern" or "__thread static".  */
6751                   if (RIDBIT_SETP (RID_THREAD, specbits))
6752                     {
6753                       if (i == (int)RID_EXTERN)
6754                         error ("`__thread' before `extern'");
6755                       else if (i == (int)RID_STATIC)
6756                         error ("`__thread' before `static'");
6757                     }
6758
6759                   if (i == (int)RID_EXTERN
6760                       && TREE_PURPOSE (spec) == error_mark_node)
6761                     /* This extern was part of a language linkage.  */
6762                     extern_langp = 1;
6763
6764                   RIDBIT_SET (i, specbits);
6765                   goto found;
6766                 }
6767             }
6768         }
6769       else if (TREE_CODE (id) == TYPE_DECL)
6770         {
6771           if (type)
6772             error ("multiple declarations `%T' and `%T'", type,
6773                       TREE_TYPE (id));
6774           else
6775             {
6776               type = TREE_TYPE (id);
6777               TREE_VALUE (spec) = type;
6778               typedef_decl = id;
6779             }
6780           goto found;
6781         }
6782       if (type)
6783         error ("two or more data types in declaration of `%s'", name);
6784       else if (TREE_CODE (id) == IDENTIFIER_NODE)
6785         {
6786           tree t = lookup_name (id, 1);
6787           if (!t || TREE_CODE (t) != TYPE_DECL)
6788             error ("`%E' fails to be a typedef or built in type", id);
6789           else
6790             {
6791               type = TREE_TYPE (t);
6792               typedef_decl = t;
6793             }
6794         }
6795       else if (id != error_mark_node)
6796         /* Can't change CLASS nodes into RECORD nodes here!  */
6797         type = id;
6798
6799     found: ;
6800     }
6801
6802 #if 0
6803   /* See the code below that used this.  */
6804   if (typedef_decl)
6805     decl_attr = DECL_ATTRIBUTES (typedef_decl);
6806 #endif
6807   typedef_type = type;
6808
6809   /* No type at all: default to `int', and set DEFAULTED_INT
6810      because it was not a user-defined typedef.  */
6811
6812   if (type == NULL_TREE
6813       && (RIDBIT_SETP (RID_SIGNED, specbits)
6814           || RIDBIT_SETP (RID_UNSIGNED, specbits)
6815           || RIDBIT_SETP (RID_LONG, specbits)
6816           || RIDBIT_SETP (RID_SHORT, specbits)))
6817     {
6818       /* These imply 'int'.  */
6819       type = integer_type_node;
6820       defaulted_int = 1;
6821     }
6822
6823   if (sfk != sfk_none)
6824     type = check_special_function_return_type (sfk, type,
6825                                                ctor_return_type);
6826   else if (type == NULL_TREE)
6827     {
6828       int is_main;
6829
6830       explicit_int = -1;
6831
6832       /* We handle `main' specially here, because 'main () { }' is so
6833          common.  With no options, it is allowed.  With -Wreturn-type,
6834          it is a warning.  It is only an error with -pedantic-errors.  */
6835       is_main = (funcdef_flag
6836                  && dname && MAIN_NAME_P (dname)
6837                  && ctype == NULL_TREE
6838                  && in_namespace == NULL_TREE
6839                  && current_namespace == global_namespace);
6840
6841       if (in_system_header || flag_ms_extensions)
6842         /* Allow it, sigh.  */;
6843       else if (pedantic || ! is_main)
6844         pedwarn ("ISO C++ forbids declaration of `%s' with no type",
6845                     name);
6846       else if (warn_return_type)
6847         warning ("ISO C++ forbids declaration of `%s' with no type",
6848                     name);
6849
6850       type = integer_type_node;
6851     }
6852   
6853   ctype = NULL_TREE;
6854
6855   /* Now process the modifiers that were specified
6856      and check for invalid combinations.  */
6857
6858   /* Long double is a special combination.  */
6859
6860   if (RIDBIT_SETP (RID_LONG, specbits)
6861       && TYPE_MAIN_VARIANT (type) == double_type_node)
6862     {
6863       RIDBIT_RESET (RID_LONG, specbits);
6864       type = build_qualified_type (long_double_type_node,
6865                                    cp_type_quals (type));
6866     }
6867
6868   /* Check all other uses of type modifiers.  */
6869
6870   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
6871       || RIDBIT_SETP (RID_SIGNED, specbits)
6872       || RIDBIT_SETP (RID_LONG, specbits)
6873       || RIDBIT_SETP (RID_SHORT, specbits))
6874     {
6875       int ok = 0;
6876
6877       if (TREE_CODE (type) == REAL_TYPE)
6878         error ("short, signed or unsigned invalid for `%s'", name);
6879       else if (TREE_CODE (type) != INTEGER_TYPE)
6880         error ("long, short, signed or unsigned invalid for `%s'", name);
6881       else if (RIDBIT_SETP (RID_LONG, specbits)
6882                && RIDBIT_SETP (RID_SHORT, specbits))
6883         error ("long and short specified together for `%s'", name);
6884       else if ((RIDBIT_SETP (RID_LONG, specbits)
6885                 || RIDBIT_SETP (RID_SHORT, specbits))
6886                && explicit_char)
6887         error ("long or short specified with char for `%s'", name);
6888       else if ((RIDBIT_SETP (RID_LONG, specbits)
6889                 || RIDBIT_SETP (RID_SHORT, specbits))
6890                && TREE_CODE (type) == REAL_TYPE)
6891         error ("long or short specified with floating type for `%s'", name);
6892       else if (RIDBIT_SETP (RID_SIGNED, specbits)
6893                && RIDBIT_SETP (RID_UNSIGNED, specbits))
6894         error ("signed and unsigned given together for `%s'", name);
6895       else
6896         {
6897           ok = 1;
6898           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
6899             {
6900               pedwarn ("long, short, signed or unsigned used invalidly for `%s'",
6901                        name);
6902               if (flag_pedantic_errors)
6903                 ok = 0;
6904             }
6905         }
6906
6907       /* Discard the type modifiers if they are invalid.  */
6908       if (! ok)
6909         {
6910           RIDBIT_RESET (RID_UNSIGNED, specbits);
6911           RIDBIT_RESET (RID_SIGNED, specbits);
6912           RIDBIT_RESET (RID_LONG, specbits);
6913           RIDBIT_RESET (RID_SHORT, specbits);
6914           longlong = 0;
6915         }
6916     }
6917
6918   if (RIDBIT_SETP (RID_COMPLEX, specbits)
6919       && TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
6920     {
6921       error ("complex invalid for `%s'", name);
6922       RIDBIT_RESET (RID_COMPLEX, specbits);
6923     }
6924
6925   /* Decide whether an integer type is signed or not.
6926      Optionally treat bitfields as signed by default.  */
6927   if (RIDBIT_SETP (RID_UNSIGNED, specbits)
6928       /* [class.bit]
6929
6930          It is implementation-defined whether a plain (neither
6931          explicitly signed or unsigned) char, short, int, or long
6932          bit-field is signed or unsigned.
6933
6934          Naturally, we extend this to long long as well.  Note that
6935          this does not include wchar_t.  */
6936       || (bitfield && !flag_signed_bitfields
6937           && RIDBIT_NOTSETP (RID_SIGNED, specbits)
6938           /* A typedef for plain `int' without `signed' can be
6939              controlled just like plain `int', but a typedef for
6940              `signed int' cannot be so controlled.  */
6941           && !(typedef_decl
6942                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
6943           && (TREE_CODE (type) == INTEGER_TYPE
6944               || TREE_CODE (type) == CHAR_TYPE)
6945           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
6946     {
6947       if (longlong)
6948         type = long_long_unsigned_type_node;
6949       else if (RIDBIT_SETP (RID_LONG, specbits))
6950         type = long_unsigned_type_node;
6951       else if (RIDBIT_SETP (RID_SHORT, specbits))
6952         type = short_unsigned_type_node;
6953       else if (type == char_type_node)
6954         type = unsigned_char_type_node;
6955       else if (typedef_decl)
6956         type = c_common_unsigned_type (type);
6957       else
6958         type = unsigned_type_node;
6959     }
6960   else if (RIDBIT_SETP (RID_SIGNED, specbits)
6961            && type == char_type_node)
6962     type = signed_char_type_node;
6963   else if (longlong)
6964     type = long_long_integer_type_node;
6965   else if (RIDBIT_SETP (RID_LONG, specbits))
6966     type = long_integer_type_node;
6967   else if (RIDBIT_SETP (RID_SHORT, specbits))
6968     type = short_integer_type_node;
6969
6970   if (RIDBIT_SETP (RID_COMPLEX, specbits))
6971     {
6972       /* If we just have "complex", it is equivalent to
6973          "complex double", but if any modifiers at all are specified it is
6974          the complex form of TYPE.  E.g, "complex short" is
6975          "complex short int".  */
6976
6977       if (defaulted_int && ! longlong
6978           && ! (RIDBIT_SETP (RID_LONG, specbits)
6979                 || RIDBIT_SETP (RID_SHORT, specbits)
6980                 || RIDBIT_SETP (RID_SIGNED, specbits)
6981                 || RIDBIT_SETP (RID_UNSIGNED, specbits)))
6982         type = complex_double_type_node;
6983       else if (type == integer_type_node)
6984         type = complex_integer_type_node;
6985       else if (type == float_type_node)
6986         type = complex_float_type_node;
6987       else if (type == double_type_node)
6988         type = complex_double_type_node;
6989       else if (type == long_double_type_node)
6990         type = complex_long_double_type_node;
6991       else
6992         type = build_complex_type (type);
6993     }
6994
6995   type_quals = TYPE_UNQUALIFIED;
6996   if (RIDBIT_SETP (RID_CONST, specbits))
6997     type_quals |= TYPE_QUAL_CONST;
6998   if (RIDBIT_SETP (RID_VOLATILE, specbits))
6999     type_quals |= TYPE_QUAL_VOLATILE;
7000   if (RIDBIT_SETP (RID_RESTRICT, specbits))
7001     type_quals |= TYPE_QUAL_RESTRICT;
7002   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7003     error ("qualifiers are not allowed on declaration of `operator %T'",
7004               ctor_return_type);
7005
7006   type_quals |= cp_type_quals (type);
7007   type = cp_build_qualified_type_real
7008     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7009                          ? tf_ignore_bad_quals : 0) | tf_error | tf_warning));
7010   /* We might have ignored or rejected some of the qualifiers.  */
7011   type_quals = cp_type_quals (type);
7012   
7013   staticp = 0;
7014   inlinep = !! RIDBIT_SETP (RID_INLINE, specbits);
7015   virtualp = RIDBIT_SETP (RID_VIRTUAL, specbits);
7016   RIDBIT_RESET (RID_VIRTUAL, specbits);
7017   explicitp = RIDBIT_SETP (RID_EXPLICIT, specbits) != 0;
7018   RIDBIT_RESET (RID_EXPLICIT, specbits);
7019
7020   if (RIDBIT_SETP (RID_STATIC, specbits))
7021     staticp = 1 + (decl_context == FIELD);
7022
7023   if (virtualp && staticp == 2)
7024     {
7025       error ("member `%D' cannot be declared both virtual and static",
7026                 dname);
7027       staticp = 0;
7028     }
7029   friendp = RIDBIT_SETP (RID_FRIEND, specbits);
7030   RIDBIT_RESET (RID_FRIEND, specbits);
7031
7032   if (dependant_name && !friendp)
7033     {
7034       error ("`%T::%D' is not a valid declarator", ctype, dependant_name);
7035       return void_type_node;
7036     }
7037   
7038   /* Warn if two storage classes are given. Default to `auto'.  */
7039
7040   if (RIDBIT_ANY_SET (specbits))
7041     {
7042       if (RIDBIT_SETP (RID_STATIC, specbits)) nclasses++;
7043       if (RIDBIT_SETP (RID_EXTERN, specbits) && !extern_langp) nclasses++;
7044       if (RIDBIT_SETP (RID_THREAD, specbits)) nclasses++;
7045       if (decl_context == PARM && nclasses > 0)
7046         error ("storage class specifiers invalid in parameter declarations");
7047       if (RIDBIT_SETP (RID_TYPEDEF, specbits))
7048         {
7049           if (decl_context == PARM)
7050             error ("typedef declaration invalid in parameter declaration");
7051           nclasses++;
7052         }
7053       if (RIDBIT_SETP (RID_AUTO, specbits)) nclasses++;
7054       if (RIDBIT_SETP (RID_REGISTER, specbits)) nclasses++;
7055       if (!nclasses && !friendp && extern_langp)
7056         nclasses++;
7057     }
7058
7059   /* Give error if `virtual' is used outside of class declaration.  */
7060   if (virtualp
7061       && (current_class_name == NULL_TREE || decl_context != FIELD))
7062     {
7063       error ("virtual outside class declaration");
7064       virtualp = 0;
7065     }
7066
7067   /* Static anonymous unions are dealt with here.  */
7068   if (staticp && decl_context == TYPENAME
7069       && TREE_CODE (declspecs) == TREE_LIST
7070       && ANON_AGGR_TYPE_P (TREE_VALUE (declspecs)))
7071     decl_context = FIELD;
7072
7073   /* Warn about storage classes that are invalid for certain
7074      kinds of declarations (parameters, typenames, etc.).  */
7075
7076   /* "static __thread" and "extern __thread" are allowed.  */
7077   if (nclasses == 2
7078       && RIDBIT_SETP (RID_THREAD, specbits)
7079       && (RIDBIT_SETP (RID_EXTERN, specbits)
7080           || RIDBIT_SETP (RID_STATIC, specbits)))
7081     nclasses = 1;
7082     
7083   if (nclasses > 1)
7084     error ("multiple storage classes in declaration of `%s'", name);
7085   else if (decl_context != NORMAL && nclasses > 0)
7086     {
7087       if ((decl_context == PARM || decl_context == CATCHPARM)
7088           && (RIDBIT_SETP (RID_REGISTER, specbits)
7089               || RIDBIT_SETP (RID_AUTO, specbits)))
7090         ;
7091       else if (RIDBIT_SETP (RID_TYPEDEF, specbits))
7092         ;
7093       else if (decl_context == FIELD
7094                /* C++ allows static class elements.  */
7095                && RIDBIT_SETP (RID_STATIC, specbits))
7096         /* C++ also allows inlines and signed and unsigned elements,
7097            but in those cases we don't come in here.  */
7098         ;
7099       else
7100         {
7101           if (decl_context == FIELD)
7102             {
7103               tree tmp = NULL_TREE;
7104               int op = 0;
7105
7106               if (declarator)
7107                 {
7108                   /* Avoid trying to get an operand off an identifier node.  */
7109                   if (TREE_CODE (declarator) == IDENTIFIER_NODE)
7110                     tmp = declarator;
7111                   else
7112                     tmp = TREE_OPERAND (declarator, 0);
7113                   op = IDENTIFIER_OPNAME_P (tmp);
7114                   if (IDENTIFIER_TYPENAME_P (tmp))
7115                     {
7116                       if (is_typename_at_global_scope (tmp))
7117                         name = IDENTIFIER_POINTER (tmp);
7118                       else
7119                         name = "<invalid operator>";
7120                     }
7121                 }
7122               error ("storage class specified for %s `%s'",
7123                      op ? "member operator" : "field",
7124                      name);
7125             }
7126           else
7127             {
7128               if (decl_context == PARM || decl_context == CATCHPARM)
7129                 error ("storage class specified for parameter `%s'", name);
7130               else
7131                 error ("storage class specified for typename");
7132             }
7133           RIDBIT_RESET (RID_REGISTER, specbits);
7134           RIDBIT_RESET (RID_AUTO, specbits);
7135           RIDBIT_RESET (RID_EXTERN, specbits);
7136           RIDBIT_RESET (RID_THREAD, specbits);
7137         }
7138     }
7139   else if (RIDBIT_SETP (RID_EXTERN, specbits) && initialized && !funcdef_flag)
7140     {
7141       if (toplevel_bindings_p ())
7142         {
7143           /* It's common practice (and completely valid) to have a const
7144              be initialized and declared extern.  */
7145           if (!(type_quals & TYPE_QUAL_CONST))
7146             warning ("`%s' initialized and declared `extern'", name);
7147         }
7148       else
7149         error ("`%s' has both `extern' and initializer", name);
7150     }
7151   else if (RIDBIT_SETP (RID_EXTERN, specbits) && funcdef_flag
7152            && ! toplevel_bindings_p ())
7153     error ("nested function `%s' declared `extern'", name);
7154   else if (toplevel_bindings_p ())
7155     {
7156       if (RIDBIT_SETP (RID_AUTO, specbits))
7157         error ("top-level declaration of `%s' specifies `auto'", name);
7158     }
7159   else if (RIDBIT_SETP (RID_THREAD, specbits)
7160            && !RIDBIT_SETP (RID_EXTERN, specbits)
7161            && !RIDBIT_SETP (RID_STATIC, specbits))
7162     {
7163       error ("function-scope `%s' implicitly auto and declared `__thread'",
7164              name);
7165       RIDBIT_RESET (RID_THREAD, specbits);
7166     }
7167
7168   if (nclasses > 0 && friendp)
7169     error ("storage class specifiers invalid in friend function declarations");
7170
7171   scope = get_scope_of_declarator (declarator);
7172
7173   /* Now figure out the structure of the declarator proper.
7174      Descend through it, creating more complex types, until we reach
7175      the declared identifier (or NULL_TREE, in an abstract declarator).  */
7176
7177   while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE
7178          && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
7179     {
7180       /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]),
7181          an INDIRECT_REF (for *...),
7182          a CALL_EXPR (for ...(...)),
7183          an identifier (for the name being declared)
7184          or a null pointer (for the place in an absolute declarator
7185          where the name was omitted).
7186          For the last two cases, we have just exited the loop.
7187
7188          For C++ it could also be
7189          a SCOPE_REF (for class :: ...).  In this case, we have converted
7190          sensible names to types, and those are the values we use to
7191          qualify the member name.
7192          an ADDR_EXPR (for &...),
7193          a BIT_NOT_EXPR (for destructors)
7194
7195          At this point, TYPE is the type of elements of an array,
7196          or for a function to return, or for a pointer to point to.
7197          After this sequence of ifs, TYPE is the type of the
7198          array or function or pointer, and DECLARATOR has had its
7199          outermost layer removed.  */
7200
7201       if (type == error_mark_node)
7202         {
7203           if (declarator == error_mark_node)
7204             return error_mark_node;
7205           else if (TREE_CODE (declarator) == SCOPE_REF)
7206             declarator = TREE_OPERAND (declarator, 1);
7207           else
7208             declarator = TREE_OPERAND (declarator, 0);
7209           continue;
7210         }
7211       if (quals != NULL_TREE
7212           && (declarator == NULL_TREE
7213               || TREE_CODE (declarator) != SCOPE_REF))
7214         {
7215           if (ctype == NULL_TREE && TREE_CODE (type) == METHOD_TYPE)
7216             ctype = TYPE_METHOD_BASETYPE (type);
7217           if (ctype != NULL_TREE)
7218             {
7219               tree dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7220               grok_method_quals (ctype, dummy, quals);
7221               type = TREE_TYPE (dummy);
7222               quals = NULL_TREE;
7223             }
7224         }
7225
7226       switch (TREE_CODE (declarator))
7227         {
7228         case TREE_LIST:
7229           {
7230             /* We encode a declarator with embedded attributes using
7231                a TREE_LIST.  */
7232             tree attrs = TREE_PURPOSE (declarator);
7233             tree inner_decl;
7234             int attr_flags;
7235
7236             declarator = TREE_VALUE (declarator);
7237             inner_decl = declarator;
7238             while (inner_decl != NULL_TREE
7239                    && TREE_CODE (inner_decl) == TREE_LIST)
7240               inner_decl = TREE_VALUE (inner_decl);
7241             attr_flags = 0;
7242             if (inner_decl == NULL_TREE
7243                 || TREE_CODE (inner_decl) == IDENTIFIER_NODE)
7244               attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7245             if (TREE_CODE (inner_decl) == CALL_EXPR)
7246               attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7247             if (TREE_CODE (inner_decl) == ARRAY_REF)
7248               attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7249             returned_attrs = decl_attributes (&type,
7250                                               chainon (returned_attrs, attrs),
7251                                               attr_flags);
7252           }
7253           break;
7254
7255         case ARRAY_REF:
7256           {
7257             tree size = TREE_OPERAND (declarator, 1);
7258             declarator = TREE_OPERAND (declarator, 0);
7259
7260             type = create_array_type_for_decl (dname, type, size);
7261
7262             if (declarator
7263                 && (TREE_CODE (declarator) == INDIRECT_REF
7264                     || TREE_CODE (declarator) == ADDR_EXPR))
7265               /* We can never complete an array type which is the target of a
7266                  pointer, so go ahead and lay it out.  */
7267               layout_type (type);
7268
7269             ctype = NULL_TREE;
7270           }
7271           break;
7272
7273         case CALL_EXPR:
7274           {
7275             tree arg_types;
7276             int funcdecl_p;
7277             tree inner_parms = CALL_DECLARATOR_PARMS (declarator);
7278             tree inner_decl = TREE_OPERAND (declarator, 0);
7279
7280             /* Declaring a function type.
7281                Make sure we have a valid type for the function to return.  */
7282
7283             /* We now know that the TYPE_QUALS don't apply to the
7284                decl, but to its return type.  */
7285             type_quals = TYPE_UNQUALIFIED;
7286
7287             /* Warn about some types functions can't return.  */
7288
7289             if (TREE_CODE (type) == FUNCTION_TYPE)
7290               {
7291                 error ("`%s' declared as function returning a function", name);
7292                 type = integer_type_node;
7293               }
7294             if (TREE_CODE (type) == ARRAY_TYPE)
7295               {
7296                 error ("`%s' declared as function returning an array", name);
7297                 type = integer_type_node;
7298               }
7299
7300             if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF)
7301               inner_decl = TREE_OPERAND (inner_decl, 1);
7302
7303             if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR)
7304               inner_decl = dname;
7305
7306             /* Pick up type qualifiers which should be applied to `this'.  */
7307             quals = CALL_DECLARATOR_QUALS (declarator);
7308
7309             /* Pick up the exception specifications.  */
7310             raises = CALL_DECLARATOR_EXCEPTION_SPEC (declarator);
7311
7312             /* Say it's a definition only for the CALL_EXPR
7313                closest to the identifier.  */
7314             funcdecl_p
7315               = inner_decl
7316               && (TREE_CODE (inner_decl) == IDENTIFIER_NODE
7317                   || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR
7318                   || TREE_CODE (inner_decl) == BIT_NOT_EXPR);
7319
7320             if (ctype == NULL_TREE
7321                 && decl_context == FIELD
7322                 && funcdecl_p
7323                 && (friendp == 0 || dname == current_class_name))
7324               ctype = current_class_type;
7325
7326             if (ctype && sfk == sfk_conversion)
7327               TYPE_HAS_CONVERSION (ctype) = 1;
7328             if (ctype && constructor_name_p (dname, ctype))
7329               {
7330                 /* We are within a class's scope. If our declarator name
7331                    is the same as the class name, and we are defining
7332                    a function, then it is a constructor/destructor, and
7333                    therefore returns a void type.  */
7334
7335                 if (flags == DTOR_FLAG)
7336                   {
7337                     /* ISO C++ 12.4/2.  A destructor may not be
7338                        declared const or volatile.  A destructor may
7339                        not be static.  */
7340                     if (staticp == 2)
7341                       error ("destructor cannot be static member function");
7342                     if (quals)
7343                       {
7344                         error ("destructors may not be `%E'",
7345                                   TREE_VALUE (quals));
7346                         quals = NULL_TREE;
7347                       }
7348                     if (decl_context == FIELD)
7349                       {
7350                         if (! member_function_or_else (ctype,
7351                                                        current_class_type,
7352                                                        flags))
7353                           return void_type_node;
7354                       }
7355                   }
7356                 else            /* It's a constructor.  */
7357                   {
7358                     if (explicitp == 1)
7359                       explicitp = 2;
7360                     /* ISO C++ 12.1.  A constructor may not be
7361                        declared const or volatile.  A constructor may
7362                        not be virtual.  A constructor may not be
7363                        static.  */
7364                     if (staticp == 2)
7365                       error ("constructor cannot be static member function");
7366                     if (virtualp)
7367                       {
7368                         pedwarn ("constructors cannot be declared virtual");
7369                         virtualp = 0;
7370                       }
7371                     if (quals)
7372                       {
7373                         error ("constructors may not be `%E'",
7374                                TREE_VALUE (quals));
7375                         quals = NULL_TREE;
7376                       }
7377                     {
7378                       RID_BIT_TYPE tmp_bits;
7379                       memcpy (&tmp_bits, &specbits, sizeof (RID_BIT_TYPE));
7380                       RIDBIT_RESET (RID_INLINE, tmp_bits);
7381                       RIDBIT_RESET (RID_STATIC, tmp_bits);
7382                       if (RIDBIT_ANY_SET (tmp_bits))
7383                         error ("return value type specifier for constructor ignored");
7384                     }
7385                     if (decl_context == FIELD)
7386                       {
7387                         if (! member_function_or_else (ctype,
7388                                                        current_class_type,
7389                                                        flags))
7390                           return void_type_node;
7391                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7392                         if (sfk != sfk_constructor)
7393                           return NULL_TREE;
7394                       }
7395                   }
7396                 if (decl_context == FIELD)
7397                   staticp = 0;
7398               }
7399             else if (friendp)
7400               {
7401                 if (initialized)
7402                   error ("can't initialize friend function `%s'", name);
7403                 if (virtualp)
7404                   {
7405                     /* Cannot be both friend and virtual.  */
7406                     error ("virtual functions cannot be friends");
7407                     RIDBIT_RESET (RID_FRIEND, specbits);
7408                     friendp = 0;
7409                   }
7410                 if (decl_context == NORMAL)
7411                   error ("friend declaration not in class definition");
7412                 if (current_function_decl && funcdef_flag)
7413                   error ("can't define friend function `%s' in a local class definition",
7414                             name);
7415               }
7416
7417             /* Construct the function type and go to the next
7418                inner layer of declarator.  */
7419
7420             declarator = TREE_OPERAND (declarator, 0);
7421
7422             arg_types = grokparms (inner_parms, &parms);
7423
7424             if (declarator && flags == DTOR_FLAG)
7425               {
7426                 /* A destructor declared in the body of a class will
7427                    be represented as a BIT_NOT_EXPR.  But, we just
7428                    want the underlying IDENTIFIER.  */
7429                 if (TREE_CODE (declarator) == BIT_NOT_EXPR)
7430                   declarator = TREE_OPERAND (declarator, 0);
7431
7432                 if (arg_types != void_list_node)
7433                   {
7434                     error ("destructors may not have parameters");
7435                     arg_types = void_list_node;
7436                     parms = NULL_TREE;
7437                   }
7438               }
7439
7440             /* ANSI says that `const int foo ();'
7441                does not make the function foo const.  */
7442             type = build_function_type (type, arg_types);
7443           }
7444           break;
7445
7446         case ADDR_EXPR:
7447         case INDIRECT_REF:
7448           /* Filter out pointers-to-references and references-to-references.
7449              We can get these if a TYPE_DECL is used.  */
7450
7451           if (TREE_CODE (type) == REFERENCE_TYPE)
7452             {
7453               error (TREE_CODE (declarator) == ADDR_EXPR
7454                      ? "cannot declare reference to `%#T'"
7455                      : "cannot declare pointer to `%#T'", type);
7456               type = TREE_TYPE (type);
7457             }
7458           else if (VOID_TYPE_P (type)
7459                    && (ctype || TREE_CODE (declarator) == ADDR_EXPR))
7460             error (ctype ? "cannot declare pointer to `%#T' member"
7461                      : "cannot declare reference to `%#T'", type);
7462
7463           /* Merge any constancy or volatility into the target type
7464              for the pointer.  */
7465
7466           /* We now know that the TYPE_QUALS don't apply to the decl,
7467              but to the target of the pointer.  */
7468           type_quals = TYPE_UNQUALIFIED;
7469
7470           if (TREE_CODE (declarator) == ADDR_EXPR)
7471             {
7472               if (!VOID_TYPE_P (type))
7473                 type = build_reference_type (type);
7474             }
7475           else if (TREE_CODE (type) == METHOD_TYPE)
7476             type = build_ptrmemfunc_type (build_pointer_type (type));
7477           else if (ctype)
7478             type = build_ptrmem_type (ctype, type);
7479           else
7480             type = build_pointer_type (type);
7481
7482           /* Process a list of type modifier keywords (such as
7483              const or volatile) that were given inside the `*' or `&'.  */
7484
7485           if (TREE_TYPE (declarator))
7486             {
7487               tree typemodlist;
7488               int erred = 0;
7489               int constp = 0;
7490               int volatilep = 0;
7491               int restrictp = 0;
7492               
7493               for (typemodlist = TREE_TYPE (declarator); typemodlist;
7494                    typemodlist = TREE_CHAIN (typemodlist))
7495                 {
7496                   tree qualifier = TREE_VALUE (typemodlist);
7497
7498                   if (qualifier == ridpointers[(int) RID_CONST])
7499                     {
7500                       constp++;
7501                       type_quals |= TYPE_QUAL_CONST;
7502                     }
7503                   else if (qualifier == ridpointers[(int) RID_VOLATILE])
7504                     {
7505                       volatilep++;
7506                       type_quals |= TYPE_QUAL_VOLATILE;
7507                     }
7508                   else if (qualifier == ridpointers[(int) RID_RESTRICT])
7509                     {
7510                       restrictp++;
7511                       type_quals |= TYPE_QUAL_RESTRICT;
7512                     }
7513                   else if (!erred)
7514                     {
7515                       erred = 1;
7516                       error ("invalid type modifier within pointer declarator");
7517                     }
7518                 }
7519               if (constp > 1)
7520                 pedwarn ("duplicate `const'");
7521               if (volatilep > 1)
7522                 pedwarn ("duplicate `volatile'");
7523               if (restrictp > 1)
7524                 pedwarn ("duplicate `restrict'");
7525               type = cp_build_qualified_type (type, type_quals);
7526               type_quals = cp_type_quals (type);
7527             }
7528           declarator = TREE_OPERAND (declarator, 0);
7529           ctype = NULL_TREE;
7530           break;
7531
7532         case SCOPE_REF:
7533           {
7534             /* We have converted type names to NULL_TREE if the
7535                name was bogus, or to a _TYPE node, if not.
7536
7537                The variable CTYPE holds the type we will ultimately
7538                resolve to.  The code here just needs to build
7539                up appropriate member types.  */
7540             tree sname = TREE_OPERAND (declarator, 1);
7541             tree t;
7542
7543             /* Destructors can have their visibilities changed as well.  */
7544             if (TREE_CODE (sname) == BIT_NOT_EXPR)
7545               sname = TREE_OPERAND (sname, 0);
7546
7547             if (TREE_OPERAND (declarator, 0) == NULL_TREE)
7548               {
7549                 /* We had a reference to a global decl, or
7550                    perhaps we were given a non-aggregate typedef,
7551                    in which case we cleared this out, and should just
7552                    keep going as though it wasn't there.  */
7553                 declarator = sname;
7554                 continue;
7555               }
7556             ctype = TREE_OPERAND (declarator, 0);
7557
7558             t = ctype;
7559             while (t != NULL_TREE && CLASS_TYPE_P (t))
7560               {
7561                 /* You're supposed to have one `template <...>'
7562                    for every template class, but you don't need one
7563                    for a full specialization.  For example:
7564
7565                      template <class T> struct S{};
7566                      template <> struct S<int> { void f(); };
7567                      void S<int>::f () {}
7568
7569                    is correct; there shouldn't be a `template <>' for
7570                    the definition of `S<int>::f'.  */
7571                 if (CLASSTYPE_TEMPLATE_INFO (t)
7572                     && (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
7573                         || uses_template_parms (CLASSTYPE_TI_ARGS (t)))
7574                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7575                   template_count += 1;
7576
7577                 t = TYPE_MAIN_DECL (t);
7578                 t = DECL_CONTEXT (t);
7579               }
7580
7581             if (sname == NULL_TREE)
7582               goto done_scoping;
7583
7584             if (TREE_CODE (sname) == IDENTIFIER_NODE)
7585               {
7586                 /* This is the `standard' use of the scoping operator:
7587                    basetype :: member .  */
7588
7589                 if (ctype == current_class_type)
7590                   {
7591                     /* class A {
7592                          void A::f ();
7593                        };
7594
7595                        Is this ill-formed?  */
7596
7597                     if (pedantic)
7598                       pedwarn ("extra qualification `%T::' on member `%s' ignored",
7599                                   ctype, name);
7600                   }
7601                 else if (TREE_CODE (type) == FUNCTION_TYPE)
7602                   {
7603                     if (NEW_DELETE_OPNAME_P (sname))
7604                       /* Overloaded operator new and operator delete
7605                          are always static functions.  */
7606                       ;
7607                     else if (current_class_type == NULL_TREE || friendp)
7608                       type 
7609                         = build_method_type_directly (ctype, 
7610                                                       TREE_TYPE (type),
7611                                                       TYPE_ARG_TYPES (type));
7612                     else
7613                       {
7614                         error ("cannot declare member function `%T::%s' within `%T'",
7615                                   ctype, name, current_class_type);
7616                         return error_mark_node;
7617                       }
7618                   }
7619                 else if (RIDBIT_SETP (RID_TYPEDEF, specbits)
7620                          || COMPLETE_TYPE_P (complete_type (ctype)))
7621                   {
7622                     /* Have to move this code elsewhere in this function.
7623                        this code is used for i.e., typedef int A::M; M *pm;
7624
7625                        It is?  How? jason 10/2/94 */
7626
7627                     if (current_class_type)
7628                       {
7629                         error ("cannot declare member `%T::%s' within `%T'",
7630                                   ctype, name, current_class_type);
7631                         return void_type_node;
7632                       }
7633                   }
7634                 else
7635                   {
7636                     cxx_incomplete_type_error (NULL_TREE, ctype);
7637                     return error_mark_node;
7638                   }
7639
7640                 declarator = sname;
7641               }
7642             else if (TREE_CODE (sname) == SCOPE_REF)
7643               abort ();
7644             else
7645               {
7646               done_scoping:
7647                 declarator = TREE_OPERAND (declarator, 1);
7648                 if (declarator && TREE_CODE (declarator) == CALL_EXPR)
7649                   /* In this case, we will deal with it later.  */
7650                   ;
7651                 else if (TREE_CODE (type) == FUNCTION_TYPE)
7652                   type = build_method_type_directly (ctype, 
7653                                                      TREE_TYPE (type),
7654                                                      TYPE_ARG_TYPES (type));
7655               }
7656           }
7657           break;
7658
7659         case BIT_NOT_EXPR:
7660           declarator = TREE_OPERAND (declarator, 0);
7661           break;
7662
7663         case BASELINK:
7664           declarator = BASELINK_FUNCTIONS (declarator);
7665           break;
7666
7667         case RECORD_TYPE:
7668         case UNION_TYPE:
7669         case ENUMERAL_TYPE:
7670           declarator = NULL_TREE;
7671           break;
7672
7673         case ERROR_MARK:
7674           declarator = NULL_TREE;
7675           break;
7676
7677         default:
7678           abort ();
7679         }
7680     }
7681
7682   if (returned_attrs)
7683     {
7684       if (attrlist)
7685         *attrlist = chainon (returned_attrs, *attrlist);
7686       else
7687         attrlist = &returned_attrs;
7688     }
7689
7690   /* Now TYPE has the actual type.  */
7691
7692   /* Did array size calculations overflow?  */
7693
7694   if (TREE_CODE (type) == ARRAY_TYPE
7695       && COMPLETE_TYPE_P (type)
7696       && TREE_OVERFLOW (TYPE_SIZE (type)))
7697     {
7698       error ("size of array `%s' is too large", name);
7699       /* If we proceed with the array type as it is, we'll eventually
7700          crash in tree_low_cst().  */
7701       type = error_mark_node;
7702     }
7703
7704   if ((decl_context == FIELD || decl_context == PARM)
7705       && !processing_template_decl 
7706       && variably_modified_type_p (type))
7707     {
7708       if (decl_context == FIELD)
7709         error ("data member may not have variably modified type `%T'", type);
7710       else
7711         error ("parameter may not have variably modified type `%T'", type);
7712       type = error_mark_node;
7713     }
7714
7715   if (explicitp == 1 || (explicitp && friendp))
7716     {
7717       /* [dcl.fct.spec] The explicit specifier shall only be used in
7718          declarations of constructors within a class definition.  */
7719       error ("only declarations of constructors can be `explicit'");
7720       explicitp = 0;
7721     }
7722
7723   if (RIDBIT_SETP (RID_MUTABLE, specbits))
7724     {
7725       if (decl_context != FIELD || friendp)
7726         {
7727           error ("non-member `%s' cannot be declared `mutable'", name);
7728           RIDBIT_RESET (RID_MUTABLE, specbits);
7729         }
7730       else if (decl_context == TYPENAME || RIDBIT_SETP (RID_TYPEDEF, specbits))
7731         {
7732           error ("non-object member `%s' cannot be declared `mutable'", name);
7733           RIDBIT_RESET (RID_MUTABLE, specbits);
7734         }
7735       else if (TREE_CODE (type) == FUNCTION_TYPE
7736                || TREE_CODE (type) == METHOD_TYPE)
7737         {
7738           error ("function `%s' cannot be declared `mutable'", name);
7739           RIDBIT_RESET (RID_MUTABLE, specbits);
7740         }
7741       else if (staticp)
7742         {
7743           error ("static `%s' cannot be declared `mutable'", name);
7744           RIDBIT_RESET (RID_MUTABLE, specbits);
7745         }
7746       else if (type_quals & TYPE_QUAL_CONST)
7747         {
7748           error ("const `%s' cannot be declared `mutable'", name);
7749           RIDBIT_RESET (RID_MUTABLE, specbits);
7750         }
7751     }
7752
7753   if (declarator == NULL_TREE
7754       || TREE_CODE (declarator) == ERROR_MARK
7755       || TREE_CODE (declarator) == IDENTIFIER_NODE
7756       || (TREE_CODE (declarator) == TEMPLATE_ID_EXPR
7757           && (TREE_CODE (type) == FUNCTION_TYPE
7758               || TREE_CODE (type) == METHOD_TYPE)))
7759     /* OK */;
7760   else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
7761     {
7762       error ("template-id `%D' used as a declarator", declarator);
7763       declarator = dname;
7764     }
7765   else
7766     /* Unexpected declarator format.  */
7767     abort ();
7768
7769   /* If this is declaring a typedef name, return a TYPE_DECL.  */
7770
7771   if (RIDBIT_SETP (RID_TYPEDEF, specbits) && decl_context != TYPENAME)
7772     {
7773       tree decl;
7774
7775       /* Note that the grammar rejects storage classes
7776          in typenames, fields or parameters.  */
7777       if (current_lang_name == lang_name_java)
7778         TYPE_FOR_JAVA (type) = 1;
7779
7780       if (decl_context == FIELD)
7781         {
7782           if (constructor_name_p (declarator, current_class_type))
7783             pedwarn ("ISO C++ forbids nested type `%D' with same name as enclosing class",
7784                         declarator);
7785           decl = build_lang_decl (TYPE_DECL, declarator, type);
7786         }
7787       else
7788         {
7789           decl = build_decl (TYPE_DECL, declarator, type);
7790           if (in_namespace || ctype)
7791             error ("%Jtypedef name may not be a nested-name-specifier", decl);
7792           if (!current_function_decl)
7793             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7794         }
7795       
7796       /* If the user declares "typedef struct {...} foo" then the
7797          struct will have an anonymous name.  Fill that name in now.
7798          Nothing can refer to it, so nothing needs know about the name
7799          change.  */
7800       if (type != error_mark_node
7801           && declarator
7802           && TYPE_NAME (type)
7803           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7804           && TYPE_ANONYMOUS_P (type)
7805           /* Don't do this if there are attributes.  */
7806           && (!attrlist || !*attrlist)
7807           && cp_type_quals (type) == TYPE_UNQUALIFIED)
7808         {
7809           tree oldname = TYPE_NAME (type);
7810           tree t;
7811
7812           /* Replace the anonymous name with the real name everywhere.  */
7813           lookup_tag_reverse (type, declarator);
7814           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7815             if (TYPE_NAME (t) == oldname)
7816               TYPE_NAME (t) = decl;
7817
7818           if (TYPE_LANG_SPECIFIC (type))
7819             TYPE_WAS_ANONYMOUS (type) = 1;
7820
7821           /* If this is a typedef within a template class, the nested
7822              type is a (non-primary) template.  The name for the
7823              template needs updating as well.  */
7824           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7825             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7826               = TYPE_IDENTIFIER (type);
7827
7828           /* FIXME remangle member functions; member functions of a
7829              type with external linkage have external linkage.  */
7830         }
7831
7832       if (quals)
7833         {
7834           if (ctype == NULL_TREE)
7835             {
7836               if (TREE_CODE (type) != METHOD_TYPE)
7837                 error ("%Jinvalid type qualifier for non-member function type",
7838                        decl);
7839               else
7840                 ctype = TYPE_METHOD_BASETYPE (type);
7841             }
7842           if (ctype != NULL_TREE)
7843             grok_method_quals (ctype, decl, quals);
7844         }
7845
7846       if (RIDBIT_SETP (RID_SIGNED, specbits)
7847           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7848         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7849
7850       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
7851                       inlinep, friendp, raises != NULL_TREE);
7852
7853       return decl;
7854     }
7855
7856   /* Detect the case of an array type of unspecified size
7857      which came, as such, direct from a typedef name.
7858      We must copy the type, so that the array's domain can be
7859      individually set by the object's initializer.  */
7860
7861   if (type && typedef_type
7862       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7863       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7864     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7865
7866   /* Detect where we're using a typedef of function type to declare a
7867      function. PARMS will not be set, so we must create it now.  */
7868   
7869   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7870     {
7871       tree decls = NULL_TREE;
7872       tree args;
7873
7874       for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7875         {
7876           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7877
7878           TREE_CHAIN (decl) = decls;
7879           decls = decl;
7880         }
7881       
7882       parms = nreverse (decls);
7883     }
7884
7885   /* If this is a type name (such as, in a cast or sizeof),
7886      compute the type and return it now.  */
7887
7888   if (decl_context == TYPENAME)
7889     {
7890       /* Note that the grammar rejects storage classes
7891          in typenames, fields or parameters.  */
7892       if (type_quals != TYPE_UNQUALIFIED)
7893         type_quals = TYPE_UNQUALIFIED;
7894
7895       /* Special case: "friend class foo" looks like a TYPENAME context.  */
7896       if (friendp)
7897         {
7898           if (type_quals != TYPE_UNQUALIFIED)
7899             {
7900               error ("type qualifiers specified for friend class declaration");
7901               type_quals = TYPE_UNQUALIFIED;
7902             }
7903           if (inlinep)
7904             {
7905               error ("`inline' specified for friend class declaration");
7906               inlinep = 0;
7907             }
7908
7909           if (!current_aggr)
7910             {
7911               /* Don't allow friend declaration without a class-key.  */
7912               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
7913                 pedwarn ("template parameters cannot be friends");
7914               else if (TREE_CODE (type) == TYPENAME_TYPE)
7915                 pedwarn ("friend declaration requires class-key, "
7916                          "i.e. `friend class %T::%D'",
7917                          TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
7918               else
7919                 pedwarn ("friend declaration requires class-key, "
7920                          "i.e. `friend %#T'",
7921                          type);
7922             }
7923
7924           /* Only try to do this stuff if we didn't already give up.  */
7925           if (type != integer_type_node)
7926             {
7927               /* A friendly class?  */
7928               if (current_class_type)
7929                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
7930                                    /*complain=*/true);
7931               else
7932                 error ("trying to make class `%T' a friend of global scope",
7933                           type);
7934
7935               type = void_type_node;
7936             }
7937         }
7938       else if (quals)
7939         {
7940           if (ctype == NULL_TREE)
7941             {
7942               if (TREE_CODE (type) != METHOD_TYPE)
7943                 error ("invalid qualifiers on non-member function type");
7944               else
7945                 ctype = TYPE_METHOD_BASETYPE (type);
7946             }
7947           if (ctype)
7948             {
7949               tree dummy = build_decl (TYPE_DECL, declarator, type);
7950               grok_method_quals (ctype, dummy, quals);
7951               type = TREE_TYPE (dummy);
7952             }
7953         }
7954
7955       return type;
7956     }
7957   else if (declarator == NULL_TREE && decl_context != PARM
7958            && decl_context != CATCHPARM
7959            && TREE_CODE (type) != UNION_TYPE
7960            && ! bitfield)
7961     {
7962       error ("abstract declarator `%T' used as declaration", type);
7963       declarator = make_anon_name ();
7964     }
7965
7966   /* `void' at top level (not within pointer)
7967      is allowed only in typedefs or type names.
7968      We don't complain about parms either, but that is because
7969      a better error message can be made later.  */
7970
7971   if (TREE_CODE (type) == VOID_TYPE && decl_context != PARM)
7972     {
7973       if (! declarator)
7974         error ("unnamed variable or field declared void");
7975       else if (TREE_CODE (declarator) == IDENTIFIER_NODE)
7976         {
7977           if (IDENTIFIER_OPNAME_P (declarator))
7978             abort ();
7979           else
7980             error ("variable or field `%s' declared void", name);
7981         }
7982       else
7983         error ("variable or field declared void");
7984       type = integer_type_node;
7985     }
7986
7987   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
7988      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
7989
7990   if (decl_context == PARM || decl_context == CATCHPARM)
7991     {
7992       if (ctype || in_namespace)
7993         error ("cannot use `::' in parameter declaration");
7994
7995       /* A parameter declared as an array of T is really a pointer to T.
7996          One declared as a function is really a pointer to a function.
7997          One declared as a member is really a pointer to member.  */
7998
7999       if (TREE_CODE (type) == ARRAY_TYPE)
8000         {
8001           /* Transfer const-ness of array into that of type pointed to.  */
8002           type = build_pointer_type (TREE_TYPE (type));
8003           type_quals = TYPE_UNQUALIFIED;
8004         }
8005       else if (TREE_CODE (type) == FUNCTION_TYPE)
8006         type = build_pointer_type (type);
8007     }
8008
8009   {
8010     tree decl;
8011
8012     if (decl_context == PARM)
8013       {
8014         decl = cp_build_parm_decl (declarator, type);
8015
8016         bad_specifiers (decl, "parameter", virtualp, quals != NULL_TREE,
8017                         inlinep, friendp, raises != NULL_TREE);
8018       }
8019     else if (decl_context == FIELD)
8020       {
8021         /* The C99 flexible array extension.  */
8022         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8023             && TYPE_DOMAIN (type) == NULL_TREE)
8024           {
8025             tree itype = compute_array_index_type (dname, integer_zero_node);
8026             type = build_cplus_array_type (TREE_TYPE (type), itype);
8027           }
8028
8029         if (type == error_mark_node)
8030           {
8031             /* Happens when declaring arrays of sizes which
8032                are error_mark_node, for example.  */
8033             decl = NULL_TREE;
8034           }
8035         else if (in_namespace && !friendp)
8036           {
8037             /* Something like struct S { int N::j; };  */
8038             error ("invalid use of `::'");
8039             decl = NULL_TREE;
8040           }
8041         else if (TREE_CODE (type) == FUNCTION_TYPE)
8042           {
8043             int publicp = 0;
8044             tree function_context;
8045
8046             /* We catch the others as conflicts with the builtin
8047                typedefs.  */
8048             if (friendp && declarator == ridpointers[(int) RID_SIGNED])
8049               {
8050                 error ("function `%D' cannot be declared friend",
8051                           declarator);
8052                 friendp = 0;
8053               }
8054
8055             if (friendp == 0)
8056               {
8057                 if (ctype == NULL_TREE)
8058                   ctype = current_class_type;
8059
8060                 if (ctype == NULL_TREE)
8061                   {
8062                     error ("can't make `%D' into a method -- not in a class",
8063                               declarator);
8064                     return void_type_node;
8065                   }
8066
8067                 /* ``A union may [ ... ] not [ have ] virtual functions.''
8068                    ARM 9.5 */
8069                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8070                   {
8071                     error ("function `%D' declared virtual inside a union",
8072                               declarator);
8073                     return void_type_node;
8074                   }
8075
8076                 if (NEW_DELETE_OPNAME_P (declarator))
8077                   {
8078                     if (virtualp)
8079                       {
8080                         error ("`%D' cannot be declared virtual, since it is always static",
8081                                   declarator);
8082                         virtualp = 0;
8083                       }
8084                   }
8085                 else if (staticp < 2)
8086                   type = build_method_type_directly (ctype, 
8087                                                      TREE_TYPE (type),
8088                                                      TYPE_ARG_TYPES (type));
8089               }
8090
8091             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
8092             function_context = (ctype != NULL_TREE) ?
8093               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8094             publicp = (! friendp || ! staticp)
8095               && function_context == NULL_TREE;
8096             decl = grokfndecl (ctype, type,
8097                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
8098                                ? declarator : dname,
8099                                parms,
8100                                declarator,
8101                                virtualp, flags, quals, raises,
8102                                friendp ? -1 : 0, friendp, publicp, inlinep,
8103                                funcdef_flag, template_count, in_namespace);
8104             if (decl == NULL_TREE)
8105               return decl;
8106 #if 0
8107             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
8108             /* The decl and setting of decl_attr is also turned off.  */
8109             decl = build_decl_attribute_variant (decl, decl_attr);
8110 #endif
8111
8112             /* [class.conv.ctor]
8113
8114                A constructor declared without the function-specifier
8115                explicit that can be called with a single parameter
8116                specifies a conversion from the type of its first
8117                parameter to the type of its class.  Such a constructor
8118                is called a converting constructor.  */
8119             if (explicitp == 2)
8120               DECL_NONCONVERTING_P (decl) = 1;
8121             else if (DECL_CONSTRUCTOR_P (decl))
8122               {
8123                 /* The constructor can be called with exactly one
8124                    parameter if there is at least one parameter, and
8125                    any subsequent parameters have default arguments.
8126                    Ignore any compiler-added parms.  */
8127                 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8128
8129                 if (arg_types == void_list_node
8130                     || (arg_types
8131                         && TREE_CHAIN (arg_types)
8132                         && TREE_CHAIN (arg_types) != void_list_node
8133                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8134                   DECL_NONCONVERTING_P (decl) = 1;
8135               }
8136           }
8137         else if (TREE_CODE (type) == METHOD_TYPE)
8138           {
8139             /* We only get here for friend declarations of
8140                members of other classes.  */
8141             /* All method decls are public, so tell grokfndecl to set
8142                TREE_PUBLIC, also.  */
8143             decl = grokfndecl (ctype, type,
8144                                TREE_CODE (declarator) != TEMPLATE_ID_EXPR
8145                                ? declarator : dname,
8146                                parms,
8147                                declarator,
8148                                virtualp, flags, quals, raises,
8149                                friendp ? -1 : 0, friendp, 1, 0, funcdef_flag,
8150                                template_count, in_namespace);
8151             if (decl == NULL_TREE)
8152               return NULL_TREE;
8153           }
8154         else if (!staticp && !dependent_type_p (type)
8155                  && !COMPLETE_TYPE_P (complete_type (type))
8156                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8157           {
8158             if (declarator)
8159               error ("field `%D' has incomplete type", declarator);
8160             else
8161               error ("name `%T' has incomplete type", type);
8162
8163             /* If we're instantiating a template, tell them which
8164                instantiation made the field's type be incomplete.  */
8165             if (current_class_type
8166                 && TYPE_NAME (current_class_type)
8167                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8168                 && declspecs && TREE_VALUE (declspecs)
8169                 && TREE_TYPE (TREE_VALUE (declspecs)) == type)
8170               error ("  in instantiation of template `%T'",
8171                         current_class_type);
8172
8173             type = error_mark_node;
8174             decl = NULL_TREE;
8175           }
8176         else
8177           {
8178             if (friendp)
8179               {
8180                 error ("`%E' is neither function nor member function; "
8181                        "cannot be declared friend", declarator);
8182                 friendp = 0;
8183               }
8184             decl = NULL_TREE;
8185           }
8186
8187         if (friendp)
8188           {
8189             /* Friends are treated specially.  */
8190             if (ctype == current_class_type)
8191               warning ("member functions are implicitly friends of their class");
8192             else if (decl && DECL_NAME (decl))
8193               {
8194                 if (template_class_depth (current_class_type) == 0)
8195                   {
8196                     decl = check_explicit_specialization
8197                       (declarator, decl, template_count,
8198                        2 * (funcdef_flag != 0) + 4);
8199                     if (decl == error_mark_node)
8200                       return error_mark_node;
8201                   }
8202                 
8203                 decl = do_friend (ctype, declarator, decl,
8204                                   *attrlist, flags, quals, funcdef_flag);
8205                 return decl;
8206               }
8207             else
8208               return void_type_node;
8209           }
8210
8211         /* Structure field.  It may not be a function, except for C++.  */
8212
8213         if (decl == NULL_TREE)
8214           {
8215             if (initialized)
8216               {
8217                 if (!staticp)
8218                   {
8219                     /* An attempt is being made to initialize a non-static
8220                        member.  But, from [class.mem]:
8221
8222                        4 A member-declarator can contain a
8223                        constant-initializer only if it declares a static
8224                        member (_class.static_) of integral or enumeration
8225                        type, see _class.static.data_.
8226
8227                        This used to be relatively common practice, but
8228                        the rest of the compiler does not correctly
8229                        handle the initialization unless the member is
8230                        static so we make it static below.  */
8231                     pedwarn ("ISO C++ forbids initialization of member `%D'",
8232                                 declarator);
8233                     pedwarn ("making `%D' static", declarator);
8234                     staticp = 1;
8235                   }
8236
8237                 if (uses_template_parms (type))
8238                   /* We'll check at instantiation time.  */
8239                   ;
8240                 else if (check_static_variable_definition (declarator,
8241                                                            type))
8242                   /* If we just return the declaration, crashes
8243                      will sometimes occur.  We therefore return
8244                      void_type_node, as if this was a friend
8245                      declaration, to cause callers to completely
8246                      ignore this declaration.  */
8247                   return void_type_node;
8248               }
8249
8250             if (staticp)
8251               {
8252                 /* C++ allows static class members.  All other work
8253                    for this is done by grokfield.  */
8254                 decl = build_lang_decl (VAR_DECL, declarator, type);
8255                 TREE_STATIC (decl) = 1;
8256                 /* In class context, 'static' means public access.  */
8257                 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl) = 1;
8258               }
8259             else
8260               {
8261                 decl = build_decl (FIELD_DECL, declarator, type);
8262                 DECL_NONADDRESSABLE_P (decl) = bitfield;
8263                 if (RIDBIT_SETP (RID_MUTABLE, specbits))
8264                   {
8265                     DECL_MUTABLE_P (decl) = 1;
8266                     RIDBIT_RESET (RID_MUTABLE, specbits);
8267                   }
8268               }
8269
8270             bad_specifiers (decl, "field", virtualp, quals != NULL_TREE,
8271                             inlinep, friendp, raises != NULL_TREE);
8272           }
8273       }
8274     else if (TREE_CODE (type) == FUNCTION_TYPE
8275              || TREE_CODE (type) == METHOD_TYPE)
8276       {
8277         tree original_name;
8278         int publicp = 0;
8279
8280         if (! declarator)
8281           return NULL_TREE;
8282
8283         if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
8284           original_name = dname;
8285         else
8286           original_name = declarator;
8287
8288         if (RIDBIT_SETP (RID_AUTO, specbits))
8289           error ("storage class `auto' invalid for function `%s'", name);
8290         else if (RIDBIT_SETP (RID_REGISTER, specbits))
8291           error ("storage class `register' invalid for function `%s'", name);
8292         else if (RIDBIT_SETP (RID_THREAD, specbits))
8293           error ("storage class `__thread' invalid for function `%s'", name);
8294
8295         /* Function declaration not at top level.
8296            Storage classes other than `extern' are not allowed
8297            and `extern' makes no difference.  */
8298         if (! toplevel_bindings_p ()
8299             && (RIDBIT_SETP (RID_STATIC, specbits)
8300                 || RIDBIT_SETP (RID_INLINE, specbits))
8301             && pedantic)
8302           {
8303             if (RIDBIT_SETP (RID_STATIC, specbits))
8304               pedwarn ("storage class `static' invalid for function `%s' declared out of global scope", name);
8305             else
8306               pedwarn ("storage class `inline' invalid for function `%s' declared out of global scope", name);
8307           }
8308
8309         if (ctype == NULL_TREE)
8310           {
8311             if (virtualp)
8312               {
8313                 error ("virtual non-class function `%s'", name);
8314                 virtualp = 0;
8315               }
8316           }
8317         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8318                  && !NEW_DELETE_OPNAME_P (original_name))
8319           type = build_method_type_directly (ctype, 
8320                                              TREE_TYPE (type),
8321                                              TYPE_ARG_TYPES (type));
8322
8323         /* Record presence of `static'.  */
8324         publicp = (ctype != NULL_TREE
8325                    || RIDBIT_SETP (RID_EXTERN, specbits)
8326                    || !RIDBIT_SETP (RID_STATIC, specbits));
8327
8328         decl = grokfndecl (ctype, type, original_name, parms, declarator,
8329                            virtualp, flags, quals, raises,
8330                            1, friendp,
8331                            publicp, inlinep, funcdef_flag,
8332                            template_count, in_namespace);
8333         if (decl == NULL_TREE)
8334           return NULL_TREE;
8335
8336         if (staticp == 1)
8337           {
8338             int invalid_static = 0;
8339
8340             /* Don't allow a static member function in a class, and forbid
8341                declaring main to be static.  */
8342             if (TREE_CODE (type) == METHOD_TYPE)
8343               {
8344                 pedwarn ("cannot declare member function `%D' to have static linkage", decl);
8345                 invalid_static = 1;
8346               }
8347             else if (current_function_decl)
8348               {
8349                 /* FIXME need arm citation */
8350                 error ("cannot declare static function inside another function");
8351                 invalid_static = 1;
8352               }
8353
8354             if (invalid_static)
8355               {
8356                 staticp = 0;
8357                 RIDBIT_RESET (RID_STATIC, specbits);
8358               }
8359           }
8360       }
8361     else
8362       {
8363         /* It's a variable.  */
8364
8365         /* An uninitialized decl with `extern' is a reference.  */
8366         decl = grokvardecl (type, declarator, &specbits,
8367                             initialized,
8368                             (type_quals & TYPE_QUAL_CONST) != 0,
8369                             ctype ? ctype : in_namespace);
8370         bad_specifiers (decl, "variable", virtualp, quals != NULL_TREE,
8371                         inlinep, friendp, raises != NULL_TREE);
8372
8373         if (ctype)
8374           {
8375             DECL_CONTEXT (decl) = ctype;
8376             if (staticp == 1)
8377               {
8378                 pedwarn ("`static' may not be used when defining (as opposed to declaring) a static data member");
8379                 staticp = 0;
8380                 RIDBIT_RESET (RID_STATIC, specbits);
8381               }
8382             if (RIDBIT_SETP (RID_REGISTER, specbits) && TREE_STATIC (decl))
8383               {
8384                 error ("static member `%D' declared `register'", decl);
8385                 RIDBIT_RESET (RID_REGISTER, specbits);
8386               }
8387             if (RIDBIT_SETP (RID_EXTERN, specbits) && pedantic)
8388               {
8389                 pedwarn ("cannot explicitly declare member `%#D' to have extern linkage",
8390                             decl);
8391                 RIDBIT_RESET (RID_EXTERN, specbits);
8392               }
8393           }
8394       }
8395
8396     my_friendly_assert (!RIDBIT_SETP (RID_MUTABLE, specbits), 19990927);
8397
8398     /* Record `register' declaration for warnings on &
8399        and in case doing stupid register allocation.  */
8400
8401     if (RIDBIT_SETP (RID_REGISTER, specbits))
8402       DECL_REGISTER (decl) = 1;
8403
8404     if (RIDBIT_SETP (RID_EXTERN, specbits))
8405       DECL_THIS_EXTERN (decl) = 1;
8406
8407     if (RIDBIT_SETP (RID_STATIC, specbits))
8408       DECL_THIS_STATIC (decl) = 1;
8409
8410     /* Record constancy and volatility.  There's no need to do this
8411        when processing a template; we'll do this for the instantiated
8412        declaration based on the type of DECL.  */
8413     if (!processing_template_decl)
8414       c_apply_type_quals_to_decl (type_quals, decl);
8415
8416     return decl;
8417   }
8418 }
8419 \f
8420 /* Subroutine of start_function.  Ensure that each of the parameter
8421    types (as listed in PARMS) is complete, as is required for a
8422    function definition.  */
8423
8424 static void
8425 require_complete_types_for_parms (tree parms)
8426 {
8427   for (; parms; parms = TREE_CHAIN (parms))
8428     {
8429       if (VOID_TYPE_P (TREE_TYPE (parms)))
8430         /* grokparms will have already issued an error.  */
8431         TREE_TYPE (parms) = error_mark_node;
8432       else if (complete_type_or_else (TREE_TYPE (parms), parms))
8433         {
8434           layout_decl (parms, 0);
8435           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8436         }
8437     }
8438 }
8439
8440 /* Returns nonzero if T is a local variable.  */
8441
8442 int
8443 local_variable_p (tree t)
8444 {
8445   if ((TREE_CODE (t) == VAR_DECL
8446        /* A VAR_DECL with a context that is a _TYPE is a static data
8447           member.  */
8448        && !TYPE_P (CP_DECL_CONTEXT (t))
8449        /* Any other non-local variable must be at namespace scope.  */
8450        && !DECL_NAMESPACE_SCOPE_P (t))
8451       || (TREE_CODE (t) == PARM_DECL))
8452     return 1;
8453
8454   return 0;
8455 }
8456
8457 /* Returns nonzero if T is an automatic local variable or a label.
8458    (These are the declarations that need to be remapped when the code
8459    containing them is duplicated.)  */
8460
8461 int
8462 nonstatic_local_decl_p (tree t)
8463 {
8464   return ((local_variable_p (t) && !TREE_STATIC (t))
8465           || TREE_CODE (t) == LABEL_DECL
8466           || TREE_CODE (t) == RESULT_DECL);
8467 }
8468
8469 /* Like local_variable_p, but suitable for use as a tree-walking
8470    function.  */
8471
8472 static tree
8473 local_variable_p_walkfn (tree* tp,
8474                          int* walk_subtrees ATTRIBUTE_UNUSED ,
8475                          void* data ATTRIBUTE_UNUSED )
8476 {
8477   return ((local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8478           ? *tp : NULL_TREE);
8479 }
8480
8481 /* Check that ARG, which is a default-argument expression for a
8482    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
8483    something goes wrong.  DECL may also be a _TYPE node, rather than a
8484    DECL, if there is no DECL available.  */
8485
8486 tree
8487 check_default_argument (tree decl, tree arg)
8488 {
8489   tree var;
8490   tree decl_type;
8491
8492   if (TREE_CODE (arg) == DEFAULT_ARG)
8493     /* We get a DEFAULT_ARG when looking at an in-class declaration
8494        with a default argument.  Ignore the argument for now; we'll
8495        deal with it after the class is complete.  */
8496     return arg;
8497
8498   if (processing_template_decl || uses_template_parms (arg))
8499     /* We don't do anything checking until instantiation-time.  Note
8500        that there may be uninstantiated arguments even for an
8501        instantiated function, since default arguments are not
8502        instantiated until they are needed.  */
8503     return arg;
8504
8505   if (TYPE_P (decl))
8506     {
8507       decl_type = decl;
8508       decl = NULL_TREE;
8509     }
8510   else
8511     decl_type = TREE_TYPE (decl);
8512
8513   if (arg == error_mark_node
8514       || decl == error_mark_node
8515       || TREE_TYPE (arg) == error_mark_node
8516       || decl_type == error_mark_node)
8517     /* Something already went wrong.  There's no need to check
8518        further.  */
8519     return error_mark_node;
8520
8521   /* [dcl.fct.default]
8522
8523      A default argument expression is implicitly converted to the
8524      parameter type.  */
8525   if (!TREE_TYPE (arg)
8526       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8527     {
8528       if (decl)
8529         error ("default argument for `%#D' has type `%T'",
8530                   decl, TREE_TYPE (arg));
8531       else
8532         error ("default argument for parameter of type `%T' has type `%T'",
8533                   decl_type, TREE_TYPE (arg));
8534
8535       return error_mark_node;
8536     }
8537
8538   /* [dcl.fct.default]
8539
8540      Local variables shall not be used in default argument
8541      expressions.
8542
8543      The keyword `this' shall not be used in a default argument of a
8544      member function.  */
8545   var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8546                                       NULL);
8547   if (var)
8548     {
8549       error ("default argument `%E' uses local variable `%D'",
8550                 arg, var);
8551       return error_mark_node;
8552     }
8553
8554   /* All is well.  */
8555   return arg;
8556 }
8557
8558 /* Decode the list of parameter types for a function type.
8559    Given the list of things declared inside the parens,
8560    return a list of types.
8561
8562    We determine whether ellipsis parms are used by PARMLIST_ELLIPSIS_P
8563    flag. If unset, we append void_list_node. A parmlist declared
8564    as `(void)' is accepted as the empty parmlist.
8565
8566    *PARMS is set to the chain of PARM_DECLs created.  */
8567
8568 static tree
8569 grokparms (tree first_parm, tree *parms)
8570 {
8571   tree result = NULL_TREE;
8572   tree decls = NULL_TREE;
8573   int ellipsis = !first_parm || PARMLIST_ELLIPSIS_P (first_parm);
8574   tree parm, chain;
8575   int any_error = 0;
8576
8577   my_friendly_assert (!first_parm || TREE_PARMLIST (first_parm), 20001115);
8578
8579   for (parm = first_parm; parm != NULL_TREE; parm = chain)
8580     {
8581       tree type = NULL_TREE;
8582       tree decl = TREE_VALUE (parm);
8583       tree init = TREE_PURPOSE (parm);
8584       tree specs, attrs;
8585
8586       chain = TREE_CHAIN (parm);
8587       /* @@ weak defense against parse errors.  */
8588       if (TREE_CODE (decl) != VOID_TYPE
8589           && TREE_CODE (decl) != TREE_LIST)
8590         {
8591           /* Give various messages as the need arises.  */
8592           if (TREE_CODE (decl) == STRING_CST)
8593             error ("invalid string constant `%E'", decl);
8594           else if (TREE_CODE (decl) == INTEGER_CST)
8595             error ("invalid integer constant in parameter list, did you forget to give parameter name?");
8596           continue;
8597         }
8598
8599       if (parm == void_list_node)
8600         break;
8601
8602       split_specs_attrs (TREE_PURPOSE (decl), &specs, &attrs);
8603       decl = grokdeclarator (TREE_VALUE (decl), specs,
8604                              PARM, init != NULL_TREE, &attrs);
8605       if (! decl || TREE_TYPE (decl) == error_mark_node)
8606         continue;
8607
8608       if (attrs)
8609         cplus_decl_attributes (&decl, attrs, 0);
8610
8611       type = TREE_TYPE (decl);
8612       if (VOID_TYPE_P (type))
8613         {
8614           if (same_type_p (type, void_type_node)
8615               && !DECL_NAME (decl) && !result && !chain && !ellipsis)
8616             /* this is a parmlist of `(void)', which is ok.  */
8617             break;
8618           cxx_incomplete_type_error (decl, type);
8619           /* It's not a good idea to actually create parameters of
8620              type `void'; other parts of the compiler assume that a
8621              void type terminates the parameter list.  */
8622           type = error_mark_node;
8623           TREE_TYPE (decl) = error_mark_node;
8624         }
8625
8626       if (type != error_mark_node)
8627         {
8628           /* Top-level qualifiers on the parameters are
8629              ignored for function types.  */
8630           type = cp_build_qualified_type (type, 0);
8631           if (TREE_CODE (type) == METHOD_TYPE)
8632             {
8633               error ("parameter `%D' invalidly declared method type", decl);
8634               type = build_pointer_type (type);
8635               TREE_TYPE (decl) = type;
8636             }
8637           else if (abstract_virtuals_error (decl, type))
8638             any_error = 1;  /* Seems like a good idea.  */
8639           else if (POINTER_TYPE_P (type))
8640             {
8641               /* [dcl.fct]/6, parameter types cannot contain pointers
8642                  (references) to arrays of unknown bound.  */
8643               tree t = TREE_TYPE (type);
8644               int ptr = TYPE_PTR_P (type);
8645
8646               while (1)
8647                 {
8648                   if (TYPE_PTR_P (t))
8649                     ptr = 1;
8650                   else if (TREE_CODE (t) != ARRAY_TYPE)
8651                     break;
8652                   else if (!TYPE_DOMAIN (t))
8653                     break;
8654                   t = TREE_TYPE (t);
8655                 }
8656               if (TREE_CODE (t) == ARRAY_TYPE)
8657                 error ("parameter `%D' includes %s to array of unknown bound `%T'",
8658                           decl, ptr ? "pointer" : "reference", t);
8659             }
8660
8661           if (!any_error && init)
8662             init = check_default_argument (decl, init);
8663           else
8664             init = NULL_TREE;
8665         }
8666
8667       TREE_CHAIN (decl) = decls;
8668       decls = decl;
8669       result = tree_cons (init, type, result);
8670     }
8671   decls = nreverse (decls);
8672   result = nreverse (result);
8673   if (!ellipsis)
8674     result = chainon (result, void_list_node);
8675   *parms = decls;
8676
8677   return result;
8678 }
8679
8680 \f
8681 /* D is a constructor or overloaded `operator='.
8682
8683    Let T be the class in which D is declared. Then, this function
8684    returns:
8685
8686    -1 if D's is an ill-formed constructor or copy assignment operator
8687       whose first parameter is of type `T'.
8688    0  if D is not a copy constructor or copy assignment
8689       operator.
8690    1  if D is a copy constructor or copy assignment operator whose
8691       first parameter is a reference to const qualified T.
8692    2  if D is a copy constructor or copy assignment operator whose
8693       first parameter is a reference to non-const qualified T.
8694
8695    This function can be used as a predicate. Positive values indicate
8696    a copy constructor and nonzero values indicate a copy assignment
8697    operator.  */
8698
8699 int
8700 copy_fn_p (tree d)
8701 {
8702   tree args;
8703   tree arg_type;
8704   int result = 1;
8705   
8706   my_friendly_assert (DECL_FUNCTION_MEMBER_P (d), 20011208);
8707
8708   if (DECL_TEMPLATE_INFO (d) && is_member_template (DECL_TI_TEMPLATE (d)))
8709     /* Instantiations of template member functions are never copy
8710        functions.  Note that member functions of templated classes are
8711        represented as template functions internally, and we must
8712        accept those as copy functions.  */
8713     return 0;
8714     
8715   args = FUNCTION_FIRST_USER_PARMTYPE (d);
8716   if (!args)
8717     return 0;
8718
8719   arg_type = TREE_VALUE (args);
8720
8721   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8722     {
8723       /* Pass by value copy assignment operator.  */
8724       result = -1;
8725     }
8726   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8727            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8728     {
8729       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8730         result = 2;
8731     }
8732   else
8733     return 0;
8734   
8735   args = TREE_CHAIN (args);
8736
8737   if (args && args != void_list_node && !TREE_PURPOSE (args))
8738     /* There are more non-optional args.  */
8739     return 0;
8740
8741   return result;
8742 }
8743
8744 /* Remember any special properties of member function DECL.  */
8745
8746 void grok_special_member_properties (tree decl)
8747 {
8748   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8749     ; /* Not special.  */
8750   else if (DECL_CONSTRUCTOR_P (decl))
8751     {
8752       int ctor = copy_fn_p (decl);
8753       
8754       if (ctor > 0)
8755         {
8756           /* [class.copy]
8757               
8758              A non-template constructor for class X is a copy
8759              constructor if its first parameter is of type X&, const
8760              X&, volatile X& or const volatile X&, and either there
8761              are no other parameters or else all other parameters have
8762              default arguments.  */
8763           TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8764           if (ctor > 1)
8765             TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8766         }
8767       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8768         TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8769     }
8770   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8771     {
8772       /* [class.copy]
8773           
8774          A non-template assignment operator for class X is a copy
8775          assignment operator if its parameter is of type X, X&, const
8776          X&, volatile X& or const volatile X&.  */
8777       
8778       int assop = copy_fn_p (decl);
8779       
8780       if (assop)
8781         {
8782           TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8783           if (assop != 1)
8784             TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8785           if (DECL_PURE_VIRTUAL_P (decl))
8786             TYPE_HAS_ABSTRACT_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8787         }
8788     }
8789 }
8790
8791 /* Check a constructor DECL has the correct form.  Complains
8792    if the class has a constructor of the form X(X).  */
8793
8794 int
8795 grok_ctor_properties (tree ctype, tree decl)
8796 {
8797   int ctor_parm = copy_fn_p (decl);
8798
8799   if (ctor_parm < 0)
8800     {
8801       /* [class.copy]
8802           
8803          A declaration of a constructor for a class X is ill-formed if
8804          its first parameter is of type (optionally cv-qualified) X
8805          and either there are no other parameters or else all other
8806          parameters have default arguments.
8807           
8808          We *don't* complain about member template instantiations that
8809          have this form, though; they can occur as we try to decide
8810          what constructor to use during overload resolution.  Since
8811          overload resolution will never prefer such a constructor to
8812          the non-template copy constructor (which is either explicitly
8813          or implicitly defined), there's no need to worry about their
8814          existence.  Theoretically, they should never even be
8815          instantiated, but that's hard to forestall.  */
8816       error ("invalid constructor; you probably meant `%T (const %T&)'",
8817                 ctype, ctype);
8818       return 0;
8819     }
8820   
8821   return 1;
8822 }
8823
8824 /* An operator with this code is unary, but can also be binary.  */
8825
8826 static int
8827 ambi_op_p (enum tree_code code)
8828 {
8829   return (code == INDIRECT_REF
8830           || code == ADDR_EXPR
8831           || code == CONVERT_EXPR
8832           || code == NEGATE_EXPR
8833           || code == PREINCREMENT_EXPR
8834           || code == PREDECREMENT_EXPR);
8835 }
8836
8837 /* An operator with this name can only be unary.  */
8838
8839 static int
8840 unary_op_p (enum tree_code code)
8841 {
8842   return (code == TRUTH_NOT_EXPR
8843           || code == BIT_NOT_EXPR
8844           || code == COMPONENT_REF
8845           || code == TYPE_EXPR);
8846 }
8847
8848 /* DECL is a declaration for an overloaded operator.  Returns true if
8849    the declaration is valid; false otherwise.  If COMPLAIN is true,
8850    errors are issued for invalid declarations.  */
8851
8852 bool
8853 grok_op_properties (tree decl, int friendp, bool complain)
8854 {
8855   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8856   tree argtype;
8857   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8858   tree name = DECL_NAME (decl);
8859   enum tree_code operator_code;
8860   int arity;
8861   bool ok;
8862
8863   /* Assume that the declaration is valid.  */
8864   ok = true;
8865
8866   /* Count the number of arguments.  */
8867   for (argtype = argtypes, arity = 0;
8868        argtype && argtype != void_list_node;
8869        argtype = TREE_CHAIN (argtype))
8870     ++arity;
8871
8872   if (current_class_type == NULL_TREE)
8873     friendp = 1;
8874
8875   if (DECL_CONV_FN_P (decl))
8876     operator_code = TYPE_EXPR;
8877   else
8878     do
8879       {
8880 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
8881         if (ansi_opname (CODE) == name)                         \
8882           {                                                     \
8883             operator_code = (CODE);                             \
8884             break;                                              \
8885           }                                                     \
8886         else if (ansi_assopname (CODE) == name)                 \
8887           {                                                     \
8888             operator_code = (CODE);                             \
8889             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
8890             break;                                              \
8891           }
8892
8893 #include "operators.def"
8894 #undef DEF_OPERATOR
8895
8896         abort ();
8897       }
8898     while (0);
8899   my_friendly_assert (operator_code != LAST_CPLUS_TREE_CODE, 20000526);
8900   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8901
8902   if (! friendp)
8903     {
8904       switch (operator_code)
8905         {
8906         case NEW_EXPR:
8907           TYPE_HAS_NEW_OPERATOR (current_class_type) = 1;
8908           break;
8909
8910         case DELETE_EXPR:
8911           TYPE_GETS_DELETE (current_class_type) |= 1;
8912           break;
8913
8914         case VEC_NEW_EXPR:
8915           TYPE_HAS_ARRAY_NEW_OPERATOR (current_class_type) = 1;
8916           break;
8917
8918         case VEC_DELETE_EXPR:
8919           TYPE_GETS_DELETE (current_class_type) |= 2;
8920           break;
8921
8922         default:
8923           break;
8924         }
8925     }
8926
8927   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8928     TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8929   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8930     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8931   else
8932     {
8933       /* An operator function must either be a non-static member function
8934          or have at least one parameter of a class, a reference to a class,
8935          an enumeration, or a reference to an enumeration.  13.4.0.6 */
8936       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8937         {
8938           if (operator_code == TYPE_EXPR
8939               || operator_code == CALL_EXPR
8940               || operator_code == COMPONENT_REF
8941               || operator_code == ARRAY_REF
8942               || operator_code == NOP_EXPR)
8943             error ("`%D' must be a nonstatic member function", decl);
8944           else
8945             {
8946               tree p;
8947
8948               if (DECL_STATIC_FUNCTION_P (decl))
8949                 error ("`%D' must be either a non-static member function or a non-member function", decl);
8950
8951               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8952                 {
8953                   tree arg = non_reference (TREE_VALUE (p));
8954                   /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8955                      because these checks are performed even on
8956                      template functions.  */
8957                   if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8958                     break;
8959                 }
8960
8961               if (!p || p == void_list_node)
8962                 {
8963                   if (!complain)
8964                     return false;
8965
8966                   error ("`%D' must have an argument of class or "
8967                          "enumerated type",
8968                          decl);
8969                   ok = false;
8970                 }
8971             }
8972         }
8973
8974       /* There are no restrictions on the arguments to an overloaded
8975          "operator ()".  */
8976       if (operator_code == CALL_EXPR)
8977         return ok;
8978
8979       if (IDENTIFIER_TYPENAME_P (name) && ! DECL_TEMPLATE_INFO (decl))
8980         {
8981           tree t = TREE_TYPE (name);
8982           if (! friendp)
8983             {
8984               int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8985               const char *what = 0;
8986
8987               if (ref)
8988                 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8989
8990               if (TREE_CODE (t) == VOID_TYPE)
8991                 what = "void";
8992               else if (t == current_class_type)
8993                 what = "the same type";
8994               /* Don't force t to be complete here.  */
8995               else if (IS_AGGR_TYPE (t)
8996                        && COMPLETE_TYPE_P (t)
8997                        && DERIVED_FROM_P (t, current_class_type))
8998                 what = "a base class";
8999
9000               if (what && warn_conversion)
9001                 warning ("conversion to %s%s will never use a type conversion operator",
9002                          ref ? "a reference to " : "", what);
9003             }
9004         }
9005       if (operator_code == COND_EXPR)
9006         {
9007           /* 13.4.0.3 */
9008           error ("ISO C++ prohibits overloading operator ?:");
9009         }
9010       else if (ambi_op_p (operator_code))
9011         {
9012           if (arity == 1)
9013             /* We pick the one-argument operator codes by default, so
9014                we don't have to change anything.  */
9015             ;
9016           else if (arity == 2)
9017             {
9018               /* If we thought this was a unary operator, we now know
9019                  it to be a binary operator.  */
9020               switch (operator_code)
9021                 {
9022                 case INDIRECT_REF:
9023                   operator_code = MULT_EXPR;
9024                   break;
9025
9026                 case ADDR_EXPR:
9027                   operator_code = BIT_AND_EXPR;
9028                   break;
9029
9030                 case CONVERT_EXPR:
9031                   operator_code = PLUS_EXPR;
9032                   break;
9033
9034                 case NEGATE_EXPR:
9035                   operator_code = MINUS_EXPR;
9036                   break;
9037
9038                 case PREINCREMENT_EXPR:
9039                   operator_code = POSTINCREMENT_EXPR;
9040                   break;
9041
9042                 case PREDECREMENT_EXPR:
9043                   operator_code = POSTDECREMENT_EXPR;
9044                   break;
9045
9046                 default:
9047                   abort ();
9048                 }
9049
9050               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9051
9052               if ((operator_code == POSTINCREMENT_EXPR
9053                    || operator_code == POSTDECREMENT_EXPR)
9054                   && ! processing_template_decl
9055                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9056                 {
9057                   if (methodp)
9058                     error ("postfix `%D' must take `int' as its argument",
9059                               decl);
9060                   else
9061                     error
9062                       ("postfix `%D' must take `int' as its second argument",
9063                        decl);
9064                 }
9065             }
9066           else
9067             {
9068               if (methodp)
9069                 error ("`%D' must take either zero or one argument", decl);
9070               else
9071                 error ("`%D' must take either one or two arguments", decl);
9072             }
9073
9074           /* More Effective C++ rule 6.  */
9075           if (warn_ecpp
9076               && (operator_code == POSTINCREMENT_EXPR
9077                   || operator_code == POSTDECREMENT_EXPR
9078                   || operator_code == PREINCREMENT_EXPR
9079                   || operator_code == PREDECREMENT_EXPR))
9080             {
9081               tree arg = TREE_VALUE (argtypes);
9082               tree ret = TREE_TYPE (TREE_TYPE (decl));
9083               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9084                 arg = TREE_TYPE (arg);
9085               arg = TYPE_MAIN_VARIANT (arg);
9086               if (operator_code == PREINCREMENT_EXPR
9087                   || operator_code == PREDECREMENT_EXPR)
9088                 {
9089                   if (TREE_CODE (ret) != REFERENCE_TYPE
9090                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9091                                        arg))
9092                     warning ("prefix `%D' should return `%T'", decl,
9093                                 build_reference_type (arg));
9094                 }
9095               else
9096                 {
9097                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9098                     warning ("postfix `%D' should return `%T'", decl, arg);
9099                 }
9100             }
9101         }
9102       else if (unary_op_p (operator_code))
9103         {
9104           if (arity != 1)
9105             {
9106               if (methodp)
9107                 error ("`%D' must take `void'", decl);
9108               else
9109                 error ("`%D' must take exactly one argument", decl);
9110             }
9111         }
9112       else /* if (binary_op_p (operator_code)) */
9113         {
9114           if (arity != 2)
9115             {
9116               if (methodp)
9117                 error ("`%D' must take exactly one argument", decl);
9118               else
9119                 error ("`%D' must take exactly two arguments", decl);
9120             }
9121
9122           /* More Effective C++ rule 7.  */
9123           if (warn_ecpp
9124               && (operator_code == TRUTH_ANDIF_EXPR
9125                   || operator_code == TRUTH_ORIF_EXPR
9126                   || operator_code == COMPOUND_EXPR))
9127             warning ("user-defined `%D' always evaluates both arguments",
9128                         decl);
9129         }
9130
9131       /* Effective C++ rule 23.  */
9132       if (warn_ecpp
9133           && arity == 2
9134           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9135           && (operator_code == PLUS_EXPR
9136               || operator_code == MINUS_EXPR
9137               || operator_code == TRUNC_DIV_EXPR
9138               || operator_code == MULT_EXPR
9139               || operator_code == TRUNC_MOD_EXPR)
9140           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9141         warning ("`%D' should return by value", decl);
9142
9143       /* [over.oper]/8 */
9144       for (; argtypes && argtypes != void_list_node;
9145           argtypes = TREE_CHAIN (argtypes))
9146         if (TREE_PURPOSE (argtypes))
9147           {
9148             TREE_PURPOSE (argtypes) = NULL_TREE;
9149             if (operator_code == POSTINCREMENT_EXPR
9150                 || operator_code == POSTDECREMENT_EXPR)
9151               {
9152                 if (pedantic)
9153                   pedwarn ("`%D' cannot have default arguments", decl);
9154               }
9155             else
9156               error ("`%D' cannot have default arguments", decl);
9157           }
9158
9159     }
9160
9161   return ok;
9162 }
9163 \f
9164 static const char *
9165 tag_name (enum tag_types code)
9166 {
9167   switch (code)
9168     {
9169     case record_type:
9170       return "struct";
9171     case class_type:
9172       return "class";
9173     case union_type:
9174       return "union ";
9175     case enum_type:
9176       return "enum";
9177     default:
9178       abort ();
9179     }
9180 }
9181
9182 /* Name lookup in an elaborated-type-specifier (after the keyword
9183    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
9184    elaborated-type-specifier is invalid, issue a diagnostic and return
9185    error_mark_node; otherwise, return the *_TYPE to which it referred.
9186    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
9187
9188 tree
9189 check_elaborated_type_specifier (enum tag_types tag_code,
9190                                  tree decl,
9191                                  bool allow_template_p)
9192 {
9193   tree type;
9194
9195   /* In the case of:
9196
9197        struct S { struct S *p; };
9198
9199      name lookup will find the TYPE_DECL for the implicit "S::S"
9200      typedef.  Adjust for that here.  */
9201   if (DECL_SELF_REFERENCE_P (decl))
9202     decl = TYPE_NAME (TREE_TYPE (decl));
9203
9204   type = TREE_TYPE (decl);
9205
9206   /*   [dcl.type.elab] 
9207
9208        If the identifier resolves to a typedef-name or a template
9209        type-parameter, the elaborated-type-specifier is ill-formed.
9210
9211      In other words, the only legitimate declaration to use in the
9212      elaborated type specifier is the implicit typedef created when
9213      the type is declared.  */
9214   if (!DECL_IMPLICIT_TYPEDEF_P (decl))
9215     {
9216       error ("using typedef-name `%D' after `%s'", decl, tag_name (tag_code));
9217       return IS_AGGR_TYPE (type) ? type : error_mark_node;
9218     }
9219     
9220   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9221     {
9222       error ("using template type parameter `%T' after `%s'",
9223              type, tag_name (tag_code));
9224       return error_mark_node;
9225     }
9226   else if (TREE_CODE (type) != RECORD_TYPE
9227            && TREE_CODE (type) != UNION_TYPE
9228            && tag_code != enum_type)
9229     {
9230       error ("`%T' referred to as `%s'", type, tag_name (tag_code));
9231       return error_mark_node;
9232     }
9233   else if (TREE_CODE (type) != ENUMERAL_TYPE
9234            && tag_code == enum_type)
9235     {
9236       error ("`%T' referred to as enum", type);
9237       return error_mark_node;
9238     }
9239   else if (!allow_template_p
9240            && TREE_CODE (type) == RECORD_TYPE
9241            && CLASSTYPE_IS_TEMPLATE (type))
9242     {
9243       /* If a class template appears as elaborated type specifier
9244          without a template header such as:
9245
9246            template <class T> class C {};
9247            void f(class C);             // No template header here
9248
9249          then the required template argument is missing.  */
9250
9251       error ("template argument required for `%s %T'",
9252              tag_name (tag_code),
9253              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9254       return error_mark_node;
9255     }
9256
9257   return type;
9258 }
9259
9260 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9261    Define the tag as a forward-reference if it is not defined.
9262
9263    If a declaration is given, process it here, and report an error if
9264    multiple declarations are not identical.
9265
9266    GLOBALIZE is false when this is also a definition.  Only look in
9267    the current frame for the name (since C++ allows new names in any
9268    scope.)
9269
9270    TEMPLATE_HEADER_P is true when this declaration is preceded by
9271    a set of template parameters.  */
9272
9273 tree
9274 xref_tag (enum tag_types tag_code, tree name,
9275           bool globalize, bool template_header_p)
9276 {
9277   enum tree_code code;
9278   tree t;
9279   struct cp_binding_level *b = current_binding_level;
9280   tree context = NULL_TREE;
9281
9282   timevar_push (TV_NAME_LOOKUP);
9283
9284   my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 0);
9285
9286   switch (tag_code)
9287     {
9288     case record_type:
9289     case class_type:
9290       code = RECORD_TYPE;
9291       break;
9292     case union_type:
9293       code = UNION_TYPE;
9294       break;
9295     case enum_type:
9296       code = ENUMERAL_TYPE;
9297       break;
9298     default:
9299       abort ();
9300     }
9301
9302   if (! globalize)
9303     {
9304       /* If we know we are defining this tag, only look it up in
9305          this scope and don't try to find it as a type.  */
9306       t = lookup_tag (code, name, b, 1);
9307     }
9308   else
9309     {
9310       tree decl = lookup_name (name, 2);
9311
9312       if (decl && DECL_CLASS_TEMPLATE_P (decl))
9313         decl = DECL_TEMPLATE_RESULT (decl);
9314
9315       if (decl && TREE_CODE (decl) == TYPE_DECL)
9316         {
9317           /* Two cases we need to consider when deciding if a class
9318              template is allowed as an elaborated type specifier:
9319              1. It is a self reference to its own class.
9320              2. It comes with a template header.
9321
9322              For example:
9323
9324                template <class T> class C {
9325                  class C *c1;           // DECL_SELF_REFERENCE_P is true
9326                  class D;
9327                };
9328                template <class U> class C; // template_header_p is true
9329                template <class T> class C<T>::D {
9330                  class C *c2;           // DECL_SELF_REFERENCE_P is true
9331                };  */
9332
9333           t = check_elaborated_type_specifier (tag_code,
9334                                                decl,
9335                                                template_header_p
9336                                                | DECL_SELF_REFERENCE_P (decl));
9337           if (t == error_mark_node)
9338             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9339         }
9340       else
9341         t = NULL_TREE;
9342
9343       if (t && current_class_type
9344           && template_class_depth (current_class_type)
9345           && template_header_p)
9346         {
9347           /* Since GLOBALIZE is nonzero, we are not looking at a
9348              definition of this tag.  Since, in addition, we are currently
9349              processing a (member) template declaration of a template
9350              class, we must be very careful; consider:
9351
9352                template <class X>
9353                struct S1
9354
9355                template <class U>
9356                struct S2
9357                { template <class V>
9358                friend struct S1; };
9359
9360              Here, the S2::S1 declaration should not be confused with the
9361              outer declaration.  In particular, the inner version should
9362              have a template parameter of level 2, not level 1.  This
9363              would be particularly important if the member declaration
9364              were instead:
9365
9366                template <class V = U> friend struct S1;
9367
9368              say, when we should tsubst into `U' when instantiating
9369              S2.  On the other hand, when presented with:
9370
9371                  template <class T>
9372                  struct S1 {
9373                    template <class U>
9374                    struct S2 {};
9375                    template <class U>
9376                    friend struct S2;
9377                  };
9378
9379               we must find the inner binding eventually.  We
9380               accomplish this by making sure that the new type we
9381               create to represent this declaration has the right
9382               TYPE_CONTEXT.  */
9383           context = TYPE_CONTEXT (t);
9384           t = NULL_TREE;
9385         }
9386     }
9387
9388   if (! t)
9389     {
9390       /* If no such tag is yet defined, create a forward-reference node
9391          and record it as the "definition".
9392          When a real declaration of this type is found,
9393          the forward-reference will be altered into a real type.  */
9394       if (code == ENUMERAL_TYPE)
9395         {
9396           error ("use of enum `%#D' without previous declaration", name);
9397           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9398         }
9399       else
9400         {
9401           t = make_aggr_type (code);
9402           TYPE_CONTEXT (t) = context;
9403           pushtag (name, t, globalize);
9404         }
9405     }
9406   else
9407     {
9408       if (!globalize && processing_template_decl && IS_AGGR_TYPE (t))
9409         redeclare_class_template (t, current_template_parms);
9410     }
9411
9412   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9413 }
9414
9415 tree
9416 xref_tag_from_type (tree old, tree id, int globalize)
9417 {
9418   enum tag_types tag_kind;
9419
9420   if (TREE_CODE (old) == RECORD_TYPE)
9421     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9422   else
9423     tag_kind  = union_type;
9424
9425   if (id == NULL_TREE)
9426     id = TYPE_IDENTIFIER (old);
9427
9428   return xref_tag (tag_kind, id, globalize, false);
9429 }
9430
9431 /* REF is a type (named NAME), for which we have just seen some
9432    baseclasses.  BASE_LIST is a list of those baseclasses; the
9433    TREE_PURPOSE is an access_* node, and the TREE_VALUE is the type of
9434    the base-class.  TREE_VIA_VIRTUAL indicates virtual
9435    inheritance. CODE_TYPE_NODE indicates whether REF is a class,
9436    struct, or union.  */
9437
9438 void
9439 xref_basetypes (tree ref, tree base_list)
9440 {
9441   /* In the declaration `A : X, Y, ... Z' we mark all the types
9442      (A, X, Y, ..., Z) so we can check for duplicates.  */
9443   tree *basep;
9444
9445   int i;
9446   enum tag_types tag_code;
9447
9448   if (ref == error_mark_node)
9449     return;
9450
9451   if (TREE_CODE (ref) == UNION_TYPE)
9452     {
9453       error ("derived union `%T' invalid", ref);
9454       return;
9455     }
9456
9457   tag_code = (CLASSTYPE_DECLARED_CLASS (ref) ? class_type : record_type);
9458
9459   /* First, make sure that any templates in base-classes are
9460      instantiated.  This ensures that if we call ourselves recursively
9461      we do not get confused about which classes are marked and which
9462      are not.  */
9463   basep = &base_list; 
9464   while (*basep) 
9465     {
9466       tree basetype = TREE_VALUE (*basep);
9467       if (!(processing_template_decl && uses_template_parms (basetype))
9468           && !complete_type_or_else (basetype, NULL))
9469         /* An incomplete type.  Remove it from the list.  */
9470         *basep = TREE_CHAIN (*basep);
9471       else
9472         basep = &TREE_CHAIN (*basep);
9473     }
9474
9475   SET_CLASSTYPE_MARKED (ref);
9476   i = list_length (base_list);
9477   if (i)
9478     {
9479       tree binfo = TYPE_BINFO (ref);
9480       tree binfos = make_tree_vec (i);
9481       tree accesses = make_tree_vec (i);
9482       
9483       BINFO_BASETYPES (binfo) = binfos;
9484       BINFO_BASEACCESSES (binfo) = accesses;
9485   
9486       for (i = 0; base_list; base_list = TREE_CHAIN (base_list))
9487         {
9488           tree access = TREE_PURPOSE (base_list);
9489           int via_virtual = TREE_VIA_VIRTUAL (base_list);
9490           tree basetype = TREE_VALUE (base_list);
9491           tree base_binfo;
9492           
9493           if (access == access_default_node)
9494             /* The base of a derived struct is public by default.  */
9495             access = (tag_code == class_type
9496                       ? access_private_node : access_public_node);
9497           
9498           if (basetype && TREE_CODE (basetype) == TYPE_DECL)
9499             basetype = TREE_TYPE (basetype);
9500           if (!basetype
9501               || (TREE_CODE (basetype) != RECORD_TYPE
9502                   && TREE_CODE (basetype) != TYPENAME_TYPE
9503                   && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9504                   && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM))
9505             {
9506               error ("base type `%T' fails to be a struct or class type",
9507                      basetype);
9508               continue;
9509             }
9510           
9511           if (CLASSTYPE_MARKED (basetype))
9512             {
9513               if (basetype == ref)
9514                 error ("recursive type `%T' undefined", basetype);
9515               else
9516                 error ("duplicate base type `%T' invalid", basetype);
9517               continue;
9518             }
9519           
9520           if (TYPE_FOR_JAVA (basetype)
9521               && (current_lang_depth () == 0))
9522             TYPE_FOR_JAVA (ref) = 1;
9523           
9524           if (CLASS_TYPE_P (basetype))
9525             {
9526               base_binfo = TYPE_BINFO (basetype);
9527               /* This flag will be in the binfo of the base type, we must
9528                  clear it after copying the base binfos.  */
9529               BINFO_DEPENDENT_BASE_P (base_binfo)
9530                 = dependent_type_p (basetype);
9531             }
9532           else
9533             base_binfo = make_binfo (size_zero_node, basetype,
9534                                      NULL_TREE, NULL_TREE);
9535           
9536           TREE_VEC_ELT (binfos, i) = base_binfo;
9537           TREE_VEC_ELT (accesses, i) = access;
9538           /* This flag will be in the binfo of the base type, we must
9539              clear it after copying the base binfos.  */
9540           TREE_VIA_VIRTUAL (base_binfo) = via_virtual;
9541           
9542           SET_CLASSTYPE_MARKED (basetype);
9543           
9544           /* We are free to modify these bits because they are meaningless
9545              at top level, and BASETYPE is a top-level type.  */
9546           if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
9547             {
9548               TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;
9549               /* Converting to a virtual base class requires looking
9550                  up the offset of the virtual base.  */
9551               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9552             }
9553           
9554           if (CLASS_TYPE_P (basetype))
9555             {
9556               TYPE_HAS_NEW_OPERATOR (ref)
9557                 |= TYPE_HAS_NEW_OPERATOR (basetype);
9558               TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9559                 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9560               TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9561               /* If the base-class uses multiple inheritance, so do we.  */
9562               TYPE_USES_MULTIPLE_INHERITANCE (ref)
9563                 |= TYPE_USES_MULTIPLE_INHERITANCE (basetype);
9564               /* Likewise, if converting to a base of the base may require
9565                  code, then we may need to generate code to convert to a
9566                  base as well.  */
9567               TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref)
9568                 |= TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (basetype);
9569             }
9570           i++;
9571         }
9572       if (i)
9573         TREE_VEC_LENGTH (accesses) = TREE_VEC_LENGTH (binfos) = i;
9574       else
9575         BINFO_BASEACCESSES (binfo) = BINFO_BASETYPES (binfo) = NULL_TREE;
9576       
9577       if (i > 1)
9578         {
9579           TYPE_USES_MULTIPLE_INHERITANCE (ref) = 1;
9580           /* If there is more than one non-empty they cannot be at the same
9581              address.  */
9582           TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (ref) = 1;
9583         }
9584     }
9585   
9586   /* Copy the base binfos, collect the virtual bases and set the
9587      inheritance order chain.  */
9588   copy_base_binfos (TYPE_BINFO (ref), ref, NULL_TREE);
9589   CLASSTYPE_VBASECLASSES (ref) = nreverse (CLASSTYPE_VBASECLASSES (ref));
9590
9591   if (TYPE_FOR_JAVA (ref))
9592     {
9593       if (TYPE_USES_MULTIPLE_INHERITANCE (ref))
9594         error ("Java class '%T' cannot have multiple bases", ref);
9595       if (CLASSTYPE_VBASECLASSES (ref))
9596         error ("Java class '%T' cannot have virtual bases", ref);
9597     }
9598
9599   /* Unmark all the types.  */
9600   while (i--)
9601     {
9602       tree basetype = BINFO_TYPE (BINFO_BASETYPE (TYPE_BINFO (ref), i));
9603       
9604       CLEAR_CLASSTYPE_MARKED (basetype);
9605       if (CLASS_TYPE_P (basetype))
9606         {
9607           TREE_VIA_VIRTUAL (TYPE_BINFO (basetype)) = 0;
9608           BINFO_DEPENDENT_BASE_P (TYPE_BINFO (basetype)) = 0;
9609         }
9610     }
9611   CLEAR_CLASSTYPE_MARKED (ref);
9612 }
9613
9614 \f
9615 /* Begin compiling the definition of an enumeration type.
9616    NAME is its name (or null if anonymous).
9617    Returns the type object, as yet incomplete.
9618    Also records info about it so that build_enumerator
9619    may be used to declare the individual values as they are read.  */
9620
9621 tree
9622 start_enum (tree name)
9623 {
9624   tree enumtype = NULL_TREE;
9625   struct cp_binding_level *b = current_binding_level;
9626
9627   /* If this is the real definition for a previous forward reference,
9628      fill in the contents in the same object that used to be the
9629      forward reference.  */
9630
9631   if (name != NULL_TREE)
9632     enumtype = lookup_tag (ENUMERAL_TYPE, name, b, 1);
9633
9634   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9635     {
9636       error ("multiple definition of `%#T'", enumtype);
9637       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9638       /* Clear out TYPE_VALUES, and start again.  */
9639       TYPE_VALUES (enumtype) = NULL_TREE;
9640     }
9641   else
9642     {
9643       enumtype = make_node (ENUMERAL_TYPE);
9644       pushtag (name, enumtype, 0);
9645     }
9646
9647   return enumtype;
9648 }
9649
9650 /* After processing and defining all the values of an enumeration type,
9651    install their decls in the enumeration type and finish it off.
9652    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
9653
9654 void
9655 finish_enum (tree enumtype)
9656 {
9657   tree values;
9658   tree decl;
9659   tree value;
9660   tree minnode;
9661   tree maxnode;
9662   tree t;
9663   bool unsignedp;
9664   int lowprec;
9665   int highprec; 
9666   int precision;
9667   integer_type_kind itk;
9668   tree underlying_type = NULL_TREE;
9669
9670   /* We built up the VALUES in reverse order.  */
9671   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9672
9673   /* For an enum defined in a template, just set the type of the values;
9674      all further processing is postponed until the template is
9675      instantiated.  We need to set the type so that tsubst of a CONST_DECL
9676      works.  */
9677   if (processing_template_decl)
9678     {
9679       for (values = TYPE_VALUES (enumtype); 
9680            values; 
9681            values = TREE_CHAIN (values))
9682         TREE_TYPE (TREE_VALUE (values)) = enumtype;
9683       if (at_function_scope_p ())
9684         add_stmt (build_min (TAG_DEFN, enumtype));
9685       return;
9686     }
9687
9688   /* Determine the minimum and maximum values of the enumerators.  */
9689   if (TYPE_VALUES (enumtype))
9690     {
9691       minnode = maxnode = NULL_TREE;
9692
9693       for (values = TYPE_VALUES (enumtype); 
9694            values; 
9695            values = TREE_CHAIN (values))
9696         {
9697           decl = TREE_VALUE (values);
9698
9699           /* [dcl.enum]: Following the closing brace of an enum-specifier,
9700              each enumerator has the type of its enumeration.  Prior to the
9701              closing brace, the type of each enumerator is the type of its
9702              initializing value.  */
9703           TREE_TYPE (decl) = enumtype;
9704
9705           /* Update the minimum and maximum values, if appropriate.  */
9706           value = DECL_INITIAL (decl);
9707           /* Figure out what the minimum and maximum values of the
9708              enumerators are.  */
9709           if (!minnode)
9710             minnode = maxnode = value;
9711           else if (tree_int_cst_lt (maxnode, value))
9712             maxnode = value;
9713           else if (tree_int_cst_lt (value, minnode))
9714             minnode = value;
9715
9716           /* Set the TREE_TYPE for the values as well.  That's so that when
9717              we call decl_constant_value we get an entity of the right type
9718              (but with the constant value).  But first make a copy so we
9719              don't clobber shared INTEGER_CSTs.  */
9720           if (TREE_TYPE (value) != enumtype)
9721             {
9722               value = DECL_INITIAL (decl) = copy_node (value);
9723               TREE_TYPE (value) = enumtype;
9724             }
9725         }
9726     }
9727   else
9728     /* [dcl.enum]
9729
9730        If the enumerator-list is empty, the underlying type is as if
9731        the enumeration had a single enumerator with value 0.  */
9732     minnode = maxnode = integer_zero_node;
9733
9734   /* Compute the number of bits require to represent all values of the
9735      enumeration.  We must do this before the type of MINNODE and
9736      MAXNODE are transformed, since min_precision relies on the
9737      TREE_TYPE of the value it is passed.  */
9738   unsignedp = tree_int_cst_sgn (minnode) >= 0;
9739   lowprec = min_precision (minnode, unsignedp);
9740   highprec = min_precision (maxnode, unsignedp);
9741   precision = MAX (lowprec, highprec);
9742
9743   /* Determine the underlying type of the enumeration.
9744
9745        [dcl.enum]
9746
9747        The underlying type of an enumeration is an integral type that
9748        can represent all the enumerator values defined in the
9749        enumeration.  It is implementation-defined which integral type is
9750        used as the underlying type for an enumeration except that the
9751        underlying type shall not be larger than int unless the value of
9752        an enumerator cannot fit in an int or unsigned int.  
9753
9754      We use "int" or an "unsigned int" as the underlying type, even if
9755      a smaller integral type would work, unless the user has
9756      explicitly requested that we use the smallest possible type.  */
9757   for (itk = (flag_short_enums ? itk_char : itk_int); 
9758        itk != itk_none; 
9759        itk++)
9760     {
9761       underlying_type = integer_types[itk];
9762       if (TYPE_PRECISION (underlying_type) >= precision
9763           && TYPE_UNSIGNED (underlying_type) == unsignedp)
9764         break;
9765     }
9766   if (itk == itk_none)
9767     {
9768       /* DR 377
9769
9770          IF no integral type can represent all the enumerator values, the
9771          enumeration is ill-formed.  */
9772       error ("no integral type can represent all of the enumerator values "
9773              "for `%T'", enumtype);
9774       precision = TYPE_PRECISION (long_long_integer_type_node);
9775       underlying_type = integer_types[itk_unsigned_long_long];
9776     }
9777
9778   /* Compute the minium and maximum values for the type.  
9779
9780      [dcl.enum]
9781
9782      For an enumeration where emin is the smallest enumerator and emax
9783      is the largest, the values of the enumeration are the values of the
9784      underlying type in the range bmin to bmax, where bmin and bmax are,
9785      respectively, the smallest and largest values of the smallest bit-
9786      field that can store emin and emax.  */
9787   TYPE_PRECISION (enumtype) = precision;
9788   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9789
9790   /* [dcl.enum]
9791      
9792      The value of sizeof() applied to an enumeration type, an object
9793      of an enumeration type, or an enumerator, is the value of sizeof()
9794      applied to the underlying type.  */
9795   TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9796   TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9797   TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9798   TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9799   TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9800   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9801
9802   /* Convert each of the enumerators to the type of the underlying
9803      type of the enumeration.  */
9804   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9805     {
9806       decl = TREE_VALUE (values);
9807       value = perform_implicit_conversion (underlying_type,
9808                                            DECL_INITIAL (decl));
9809       TREE_TYPE (value) = enumtype;
9810       DECL_INITIAL (decl) = value;
9811       TREE_VALUE (values) = value;
9812     }
9813
9814   /* Fix up all variant types of this enum type.  */
9815   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9816     {
9817       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9818       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9819       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9820       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9821       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9822       TYPE_MODE (t) = TYPE_MODE (enumtype);
9823       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9824       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9825       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9826       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9827     }
9828
9829   /* Finish debugging output for this type.  */
9830   rest_of_type_compilation (enumtype, namespace_bindings_p ());
9831 }
9832
9833 /* Build and install a CONST_DECL for an enumeration constant of the
9834    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9835    Assignment of sequential values by default is handled here.  */
9836
9837 void
9838 build_enumerator (tree name, tree value, tree enumtype)
9839 {
9840   tree decl;
9841   tree context;
9842   tree type;
9843
9844   /* Remove no-op casts from the value.  */
9845   if (value)
9846     STRIP_TYPE_NOPS (value);
9847
9848   if (! processing_template_decl)
9849     {
9850       /* Validate and default VALUE.  */
9851       if (value != NULL_TREE)
9852         {
9853           value = decl_constant_value (value);
9854
9855           if (TREE_CODE (value) == INTEGER_CST)
9856             {
9857               value = perform_integral_promotions (value);
9858               constant_expression_warning (value);
9859             }
9860           else
9861             {
9862               error ("enumerator value for `%D' not integer constant", name);
9863               value = NULL_TREE;
9864             }
9865         }
9866
9867       /* Default based on previous value.  */
9868       if (value == NULL_TREE)
9869         {
9870           tree prev_value;
9871
9872           if (TYPE_VALUES (enumtype))
9873             {
9874               /* The next value is the previous value ...  */
9875               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9876               /* ... plus one.  */
9877               value = cp_build_binary_op (PLUS_EXPR,
9878                                           prev_value,
9879                                           integer_one_node);
9880
9881               if (tree_int_cst_lt (value, prev_value))
9882                 error ("overflow in enumeration values at `%D'", name);
9883             }
9884           else
9885             value = integer_zero_node;
9886         }
9887
9888       /* Remove no-op casts from the value.  */
9889       STRIP_TYPE_NOPS (value);
9890     }
9891
9892   /* C++ associates enums with global, function, or class declarations.  */
9893   context = current_scope ();
9894   if (!context)
9895     context = current_namespace;
9896
9897   /* Build the actual enumeration constant.  Note that the enumeration
9898     constants have the type of their initializers until the
9899     enumeration is complete:
9900
9901       [ dcl.enum ]
9902
9903       Following the closing brace of an enum-specifier, each enumer-
9904       ator has the type of its enumeration.  Prior to the closing
9905       brace, the type of each enumerator is the type of its
9906       initializing value.
9907
9908     In finish_enum we will reset the type.  Of course, if we're
9909     processing a template, there may be no value.  */
9910   type = value ? TREE_TYPE (value) : NULL_TREE;
9911
9912   if (context && context == current_class_type)
9913     /* This enum declaration is local to the class.  We need the full
9914        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
9915     decl = build_lang_decl (CONST_DECL, name, type);
9916   else
9917     /* It's a global enum, or it's local to a function.  (Note local to
9918       a function could mean local to a class method.  */
9919     decl = build_decl (CONST_DECL, name, type);
9920
9921   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9922   TREE_CONSTANT (decl) = 1;
9923   TREE_INVARIANT (decl) = 1;
9924   TREE_READONLY (decl) = 1;
9925   DECL_INITIAL (decl) = value;
9926
9927   if (context && context == current_class_type)
9928     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9929        on the TYPE_FIELDS list for `S'.  (That's so that you can say
9930        things like `S::i' later.)  */
9931     finish_member_declaration (decl);
9932   else
9933     pushdecl (decl);
9934
9935   /* Add this enumeration constant to the list for this type.  */
9936   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9937 }
9938
9939 \f
9940 /* We're defining DECL.  Make sure that it's type is OK.  */
9941
9942 static void
9943 check_function_type (tree decl, tree current_function_parms)
9944 {
9945   tree fntype = TREE_TYPE (decl);
9946   tree return_type = complete_type (TREE_TYPE (fntype));
9947
9948   /* In a function definition, arg types must be complete.  */
9949   require_complete_types_for_parms (current_function_parms);
9950
9951   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9952     {
9953       error ("return type `%#T' is incomplete", TREE_TYPE (fntype));
9954
9955       /* Make it return void instead, but don't change the
9956          type of the DECL_RESULT, in case we have a named return value.  */
9957       if (TREE_CODE (fntype) == METHOD_TYPE)
9958         {
9959           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9960           TREE_TYPE (decl)
9961             = build_method_type_directly (ctype,
9962                                           void_type_node,
9963                                           FUNCTION_ARG_CHAIN (decl));
9964         }
9965       else
9966         TREE_TYPE (decl)
9967           = build_function_type (void_type_node,
9968                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
9969       TREE_TYPE (decl)
9970         = build_exception_variant (fntype,
9971                                    TYPE_RAISES_EXCEPTIONS (fntype));
9972     }
9973   else
9974     abstract_virtuals_error (decl, TREE_TYPE (fntype));
9975 }
9976
9977 /* Create the FUNCTION_DECL for a function definition.
9978    DECLSPECS and DECLARATOR are the parts of the declaration;
9979    they describe the function's name and the type it returns,
9980    but twisted together in a fashion that parallels the syntax of C.
9981
9982    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9983    DECLARATOR is really the DECL for the function we are about to
9984    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9985    indicating that the function is an inline defined in-class.
9986
9987    This function creates a binding context for the function body
9988    as well as setting up the FUNCTION_DECL in current_function_decl.
9989
9990    Returns 1 on success.  If the DECLARATOR is not suitable for a function
9991    (it defines a datum instead), we return 0, which tells
9992    yyparse to report a parse error.
9993
9994    For C++, we must first check whether that datum makes any sense.
9995    For example, "class A local_a(1,2);" means that variable local_a
9996    is an aggregate of type A, which should have a constructor
9997    applied to it with the argument list [1, 2].  */
9998
9999 int
10000 start_function (tree declspecs, tree declarator, tree attrs, int flags)
10001 {
10002   tree decl1;
10003   tree ctype = NULL_TREE;
10004   tree fntype;
10005   tree restype;
10006   int doing_friend = 0;
10007   struct cp_binding_level *bl;
10008   tree current_function_parms;
10009
10010   /* Sanity check.  */
10011   my_friendly_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE, 160);
10012   my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161);
10013
10014   /* This should only be done once on the top most decl.  */
10015   if (have_extern_spec)
10016     {
10017       declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs);
10018       have_extern_spec = false;
10019     }
10020
10021   if (flags & SF_PRE_PARSED)
10022     {
10023       decl1 = declarator;
10024
10025       fntype = TREE_TYPE (decl1);
10026       if (TREE_CODE (fntype) == METHOD_TYPE)
10027         ctype = TYPE_METHOD_BASETYPE (fntype);
10028
10029       /* ISO C++ 11.4/5.  A friend function defined in a class is in
10030          the (lexical) scope of the class in which it is defined.  */
10031       if (!ctype && DECL_FRIEND_P (decl1))
10032         {
10033           ctype = DECL_FRIEND_CONTEXT (decl1);
10034
10035           /* CTYPE could be null here if we're dealing with a template;
10036              for example, `inline friend float foo()' inside a template
10037              will have no CTYPE set.  */
10038           if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10039             ctype = NULL_TREE;
10040           else
10041             doing_friend = 1;
10042         }
10043     }
10044   else
10045     {
10046       decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10047       /* If the declarator is not suitable for a function definition,
10048          cause a syntax error.  */
10049       if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10050         return 0;
10051
10052       cplus_decl_attributes (&decl1, attrs, 0);
10053
10054       /* If #pragma weak was used, mark the decl weak now.  */
10055       if (global_scope_p (current_binding_level))
10056         maybe_apply_pragma_weak (decl1);
10057
10058       fntype = TREE_TYPE (decl1);
10059
10060       restype = TREE_TYPE (fntype);
10061
10062       if (TREE_CODE (fntype) == METHOD_TYPE)
10063         ctype = TYPE_METHOD_BASETYPE (fntype);
10064       else if (DECL_MAIN_P (decl1))
10065         {
10066           /* If this doesn't return integer_type, or a typedef to
10067              integer_type, complain.  */
10068           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl1)), integer_type_node))
10069             {
10070               if (pedantic || warn_return_type)
10071                 pedwarn ("return type for `main' changed to `int'");
10072               TREE_TYPE (decl1) = fntype = default_function_type;
10073             }
10074         }
10075     }
10076
10077   if (DECL_DECLARED_INLINE_P (decl1)
10078       && lookup_attribute ("noinline", attrs))
10079     warning ("%Jinline function '%D' given attribute noinline", decl1, decl1);
10080
10081   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10082     /* This is a constructor, we must ensure that any default args
10083        introduced by this definition are propagated to the clones
10084        now. The clones are used directly in overload resolution.  */
10085     adjust_clone_args (decl1);
10086
10087   /* Sometimes we don't notice that a function is a static member, and
10088      build a METHOD_TYPE for it.  Fix that up now.  */
10089   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10090       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10091     {
10092       revert_static_member_fn (decl1);
10093       ctype = NULL_TREE;
10094     }
10095
10096   /* Set up current_class_type, and enter the scope of the class, if
10097      appropriate.  */
10098   if (ctype)
10099     push_nested_class (ctype);
10100   else if (DECL_STATIC_FUNCTION_P (decl1))
10101     push_nested_class (DECL_CONTEXT (decl1));
10102
10103   /* Now that we have entered the scope of the class, we must restore
10104      the bindings for any template parameters surrounding DECL1, if it
10105      is an inline member template.  (Order is important; consider the
10106      case where a template parameter has the same name as a field of
10107      the class.)  It is not until after this point that
10108      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
10109   if (flags & SF_INCLASS_INLINE)
10110     maybe_begin_member_template_processing (decl1);
10111
10112   /* Effective C++ rule 15.  */
10113   if (warn_ecpp
10114       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10115       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10116     warning ("`operator=' should return a reference to `*this'");
10117
10118   /* Make the init_value nonzero so pushdecl knows this is not tentative.
10119      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
10120   if (!DECL_INITIAL (decl1))
10121     DECL_INITIAL (decl1) = error_mark_node;
10122
10123   /* This function exists in static storage.
10124      (This does not mean `static' in the C sense!)  */
10125   TREE_STATIC (decl1) = 1;
10126
10127   /* We must call push_template_decl after current_class_type is set
10128      up.  (If we are processing inline definitions after exiting a
10129      class scope, current_class_type will be NULL_TREE until set above
10130      by push_nested_class.)  */
10131   if (processing_template_decl)
10132     decl1 = push_template_decl (decl1);
10133
10134   /* We are now in the scope of the function being defined.  */
10135   current_function_decl = decl1;
10136
10137   /* Save the parm names or decls from this function's declarator
10138      where store_parm_decls will find them.  */
10139   current_function_parms = DECL_ARGUMENTS (decl1);
10140
10141   /* Make sure the parameter and return types are reasonable.  When
10142      you declare a function, these types can be incomplete, but they
10143      must be complete when you define the function.  */
10144   if (! processing_template_decl)
10145     check_function_type (decl1, current_function_parms);
10146
10147   /* Build the return declaration for the function.  */
10148   restype = TREE_TYPE (fntype);
10149   /* Promote the value to int before returning it.  */
10150   if (c_promoting_integer_type_p (restype))
10151     restype = type_promotes_to (restype);
10152   if (DECL_RESULT (decl1) == NULL_TREE)
10153     {
10154       DECL_RESULT (decl1)
10155         = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10156       c_apply_type_quals_to_decl (cp_type_quals (restype),
10157                                   DECL_RESULT (decl1));
10158     }
10159
10160   /* Initialize RTL machinery.  We cannot do this until
10161      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
10162      even when processing a template; this is how we get
10163      CFUN set up, and our per-function variables initialized.
10164      FIXME factor out the non-RTL stuff.  */
10165   bl = current_binding_level;
10166   allocate_struct_function (decl1);
10167   current_binding_level = bl;
10168
10169   /* Even though we're inside a function body, we still don't want to
10170      call expand_expr to calculate the size of a variable-sized array.
10171      We haven't necessarily assigned RTL to all variables yet, so it's
10172      not safe to try to expand expressions involving them.  */
10173   immediate_size_expand = 0;
10174   cfun->x_dont_save_pending_sizes_p = 1;
10175
10176   /* Start the statement-tree, start the tree now.  */
10177   begin_stmt_tree (&DECL_SAVED_TREE (decl1));
10178
10179   /* Let the user know we're compiling this function.  */
10180   announce_function (decl1);
10181
10182   /* Record the decl so that the function name is defined.
10183      If we already have a decl for this name, and it is a FUNCTION_DECL,
10184      use the old decl.  */
10185   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10186     {
10187       /* A specialization is not used to guide overload resolution.  */
10188       if (!DECL_FUNCTION_MEMBER_P (decl1)
10189           && !(DECL_USE_TEMPLATE (decl1) && 
10190                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10191         {
10192           tree olddecl = pushdecl (decl1);
10193
10194           if (olddecl == error_mark_node)
10195             /* If something went wrong when registering the declaration,
10196                use DECL1; we have to have a FUNCTION_DECL to use when
10197                parsing the body of the function.  */
10198             ;
10199           else
10200             /* Otherwise, OLDDECL is either a previous declaration of
10201                the same function or DECL1 itself.  */
10202             decl1 = olddecl;
10203         }
10204       else
10205         {
10206           /* We need to set the DECL_CONTEXT.  */
10207           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10208             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10209           /* And make sure we have enough default args.  */
10210           check_default_args (decl1);
10211         }
10212       fntype = TREE_TYPE (decl1);
10213     }
10214
10215   /* Reset these in case the call to pushdecl changed them.  */
10216   current_function_decl = decl1;
10217   cfun->decl = decl1;
10218
10219   /* If we are (erroneously) defining a function that we have already
10220      defined before, wipe out what we knew before.  */
10221   if (!DECL_PENDING_INLINE_P (decl1))
10222     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10223
10224   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10225     {
10226       /* We know that this was set up by `grokclassfn'.  We do not
10227          wait until `store_parm_decls', since evil parse errors may
10228          never get us to that point.  Here we keep the consistency
10229          between `current_class_type' and `current_class_ptr'.  */
10230       tree t = DECL_ARGUMENTS (decl1);
10231
10232       my_friendly_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL,
10233                           162);
10234       my_friendly_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE,
10235                           19990811);
10236
10237       cp_function_chain->x_current_class_ref
10238         = build_indirect_ref (t, NULL);
10239       cp_function_chain->x_current_class_ptr = t;
10240
10241       /* Constructors and destructors need to know whether they're "in
10242          charge" of initializing virtual base classes.  */
10243       t = TREE_CHAIN (t);
10244       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10245         {
10246           current_in_charge_parm = t;
10247           t = TREE_CHAIN (t);
10248         }
10249       if (DECL_HAS_VTT_PARM_P (decl1))
10250         {
10251           if (DECL_NAME (t) != vtt_parm_identifier)
10252             abort ();
10253           current_vtt_parm = t;
10254         }
10255     }
10256
10257   if (DECL_INTERFACE_KNOWN (decl1))
10258     {
10259       tree ctx = decl_function_context (decl1);
10260
10261       if (DECL_NOT_REALLY_EXTERN (decl1))
10262         DECL_EXTERNAL (decl1) = 0;
10263
10264       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10265           && TREE_PUBLIC (ctx))
10266         /* This is a function in a local class in an extern inline
10267            function.  */
10268         comdat_linkage (decl1);
10269     }
10270   /* If this function belongs to an interface, it is public.
10271      If it belongs to someone else's interface, it is also external.
10272      This only affects inlines and template instantiations.  */
10273   else if (interface_unknown == 0
10274            && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10275     {
10276       if (DECL_DECLARED_INLINE_P (decl1) 
10277           || DECL_TEMPLATE_INSTANTIATION (decl1)
10278           || processing_template_decl)
10279         {
10280           DECL_EXTERNAL (decl1)
10281             = (interface_only
10282                || (DECL_DECLARED_INLINE_P (decl1) 
10283                    && ! flag_implement_inlines
10284                    && !DECL_VINDEX (decl1)));
10285
10286           /* For WIN32 we also want to put these in linkonce sections.  */
10287           maybe_make_one_only (decl1);
10288         }
10289       else
10290         DECL_EXTERNAL (decl1) = 0;
10291       DECL_NOT_REALLY_EXTERN (decl1) = 0;
10292       DECL_INTERFACE_KNOWN (decl1) = 1;
10293     }
10294   else if (interface_unknown && interface_only
10295            && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10296     {
10297       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10298          interface, we will have interface_only set but not
10299          interface_known.  In that case, we don't want to use the normal
10300          heuristics because someone will supply a #pragma implementation
10301          elsewhere, and deducing it here would produce a conflict.  */
10302       comdat_linkage (decl1);
10303       DECL_EXTERNAL (decl1) = 0;
10304       DECL_INTERFACE_KNOWN (decl1) = 1;
10305       DECL_DEFER_OUTPUT (decl1) = 1;
10306     }
10307   else
10308     {
10309       /* This is a definition, not a reference.
10310          So clear DECL_EXTERNAL.  */
10311       DECL_EXTERNAL (decl1) = 0;
10312
10313       if ((DECL_DECLARED_INLINE_P (decl1) 
10314            || DECL_TEMPLATE_INSTANTIATION (decl1))
10315           && ! DECL_INTERFACE_KNOWN (decl1)
10316           /* Don't try to defer nested functions for now.  */
10317           && ! decl_function_context (decl1))
10318         DECL_DEFER_OUTPUT (decl1) = 1;
10319       else
10320         DECL_INTERFACE_KNOWN (decl1) = 1;
10321     }
10322
10323   begin_scope (sk_function_parms, decl1);
10324
10325   ++function_depth;
10326
10327   if (DECL_DESTRUCTOR_P (decl1))
10328     {
10329       dtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10330       DECL_CONTEXT (dtor_label) = current_function_decl;
10331     }
10332
10333   start_fname_decls ();
10334   
10335   store_parm_decls (current_function_parms);
10336
10337   return 1;
10338 }
10339 \f
10340 /* Store the parameter declarations into the current function declaration.
10341    This is called after parsing the parameter declarations, before
10342    digesting the body of the function.
10343
10344    Also install to binding contour return value identifier, if any.  */
10345
10346 static void
10347 store_parm_decls (tree current_function_parms)
10348 {
10349   tree fndecl = current_function_decl;
10350   tree parm;
10351
10352   /* This is a chain of any other decls that came in among the parm
10353      declarations.  If a parm is declared with  enum {foo, bar} x;
10354      then CONST_DECLs for foo and bar are put here.  */
10355   tree nonparms = NULL_TREE;
10356
10357   if (current_function_parms)
10358     {
10359       /* This case is when the function was defined with an ANSI prototype.
10360          The parms already have decls, so we need not do anything here
10361          except record them as in effect
10362          and complain if any redundant old-style parm decls were written.  */
10363
10364       tree specparms = current_function_parms;
10365       tree next;
10366
10367       /* Must clear this because it might contain TYPE_DECLs declared
10368              at class level.  */
10369       current_binding_level->names = NULL;
10370
10371       /* If we're doing semantic analysis, then we'll call pushdecl
10372              for each of these.  We must do them in reverse order so that
10373              they end in the correct forward order.  */
10374       specparms = nreverse (specparms);
10375
10376       for (parm = specparms; parm; parm = next)
10377         {
10378           next = TREE_CHAIN (parm);
10379           if (TREE_CODE (parm) == PARM_DECL)
10380             {
10381               if (DECL_NAME (parm) == NULL_TREE
10382                   || TREE_CODE (parm) != VOID_TYPE)
10383                 pushdecl (parm);
10384               else
10385                 error ("parameter `%D' declared void", parm);
10386             }
10387           else
10388             {
10389               /* If we find an enum constant or a type tag,
10390                  put it aside for the moment.  */
10391               TREE_CHAIN (parm) = NULL_TREE;
10392               nonparms = chainon (nonparms, parm);
10393             }
10394         }
10395
10396       /* Get the decls in their original chain order and record in the
10397          function.  This is all and only the PARM_DECLs that were
10398          pushed into scope by the loop above.  */
10399       DECL_ARGUMENTS (fndecl) = getdecls ();
10400     }
10401   else
10402     DECL_ARGUMENTS (fndecl) = NULL_TREE;
10403
10404   /* Now store the final chain of decls for the arguments
10405      as the decl-chain of the current lexical scope.
10406      Put the enumerators in as well, at the front so that
10407      DECL_ARGUMENTS is not modified.  */
10408   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10409
10410   /* Do the starting of the exception specifications, if we have any.  */
10411   if (flag_exceptions && !processing_template_decl
10412       && flag_enforce_eh_specs
10413       && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10414     current_eh_spec_block = begin_eh_spec_block ();
10415 }
10416
10417 \f
10418 /* We have finished doing semantic analysis on DECL, but have not yet
10419    generated RTL for its body.  Save away our current state, so that
10420    when we want to generate RTL later we know what to do.  */
10421
10422 static void
10423 save_function_data (tree decl)
10424 {
10425   struct language_function *f;
10426
10427   /* Save the language-specific per-function data so that we can
10428      get it back when we really expand this function.  */
10429   my_friendly_assert (!DECL_PENDING_INLINE_P (decl),
10430                       19990908);
10431
10432   /* Make a copy.  */
10433   f = ggc_alloc (sizeof (struct language_function));
10434   memcpy (f, cp_function_chain, sizeof (struct language_function));
10435   DECL_SAVED_FUNCTION_DATA (decl) = f;
10436
10437   /* Clear out the bits we don't need.  */
10438   f->base.x_stmt_tree.x_last_stmt = NULL_TREE;
10439   f->base.x_stmt_tree.x_last_expr_type = NULL_TREE;
10440   f->x_named_label_uses = NULL;
10441   f->bindings = NULL;
10442   f->x_local_names = NULL;
10443
10444   /* If we've already decided that we cannot inline this function, we
10445      must remember that fact when we actually go to expand the
10446      function.  */
10447   if (current_function_cannot_inline)
10448     {
10449       f->cannot_inline = current_function_cannot_inline;
10450       DECL_INLINE (decl) = 0;
10451     }
10452 }
10453
10454 /* Add a note to mark the beginning of the main body of the constructor.
10455    This is used to set up the data structures for the cleanup regions for
10456    fully-constructed bases and members.  */
10457
10458 static void
10459 begin_constructor_body (void)
10460 {
10461 }
10462
10463 /* Add a note to mark the end of the main body of the constructor.  This is
10464    used to end the cleanup regions for fully-constructed bases and
10465    members.  */
10466
10467 static void
10468 finish_constructor_body (void)
10469 {
10470 }
10471
10472 /* Do all the processing for the beginning of a destructor; set up the
10473    vtable pointers and cleanups for bases and members.  */
10474
10475 static void
10476 begin_destructor_body (void)
10477 {
10478   tree if_stmt;
10479   tree compound_stmt;
10480
10481   /* If the dtor is empty, and we know there is not any possible
10482      way we could use any vtable entries, before they are possibly
10483      set by a base class dtor, we don't have to setup the vtables,
10484      as we know that any base class dtor will set up any vtables
10485      it needs.  We avoid MI, because one base class dtor can do a
10486      virtual dispatch to an overridden function that would need to
10487      have a non-related vtable set up, we cannot avoid setting up
10488      vtables in that case.  We could change this to see if there
10489      is just one vtable.
10490
10491      ??? In the destructor for a class, the vtables are set
10492      appropriately for that class.  There will be no non-related
10493      vtables.  jason 2001-12-11.  */
10494   if_stmt = begin_if_stmt ();
10495
10496   /* If it is not safe to avoid setting up the vtables, then
10497      someone will change the condition to be boolean_true_node.  
10498      (Actually, for now, we do not have code to set the condition
10499      appropriately, so we just assume that we always need to
10500      initialize the vtables.)  */
10501   finish_if_stmt_cond (boolean_true_node, if_stmt);
10502
10503   compound_stmt = begin_compound_stmt (/*has_no_scope=*/false);
10504
10505   /* Make all virtual function table pointers in non-virtual base
10506      classes point to CURRENT_CLASS_TYPE's virtual function
10507      tables.  */
10508   initialize_vtbl_ptrs (current_class_ptr);
10509
10510   finish_compound_stmt (compound_stmt);
10511   finish_then_clause (if_stmt);
10512   finish_if_stmt ();
10513
10514   /* And insert cleanups for our bases and members so that they
10515      will be properly destroyed if we throw.  */
10516   push_base_cleanups ();
10517 }
10518
10519 /* At the end of every destructor we generate code to delete the object if
10520    necessary.  Do that now.  */
10521
10522 static void
10523 finish_destructor_body (void)
10524 {
10525   tree exprstmt;
10526
10527   /* Any return from a destructor will end up here; that way all base
10528      and member cleanups will be run when the function returns.  */
10529   add_stmt (build_stmt (LABEL_STMT, dtor_label));
10530
10531   /* In a virtual destructor, we must call delete.  */
10532   if (DECL_VIRTUAL_P (current_function_decl))
10533     {
10534       tree if_stmt;
10535       tree virtual_size = cxx_sizeof (current_class_type);
10536
10537       /* [class.dtor]
10538
10539       At the point of definition of a virtual destructor (including
10540       an implicit definition), non-placement operator delete shall
10541       be looked up in the scope of the destructor's class and if
10542       found shall be accessible and unambiguous.  */
10543       exprstmt = build_op_delete_call
10544         (DELETE_EXPR, current_class_ptr, virtual_size, 
10545          /*global_p=*/false, NULL_TREE);
10546
10547       if_stmt = begin_if_stmt ();
10548       finish_if_stmt_cond (build (BIT_AND_EXPR, integer_type_node,
10549                                   current_in_charge_parm,
10550                                   integer_one_node),
10551                            if_stmt);
10552       finish_expr_stmt (exprstmt);
10553       finish_then_clause (if_stmt);
10554       finish_if_stmt ();
10555     }
10556 }
10557
10558 /* Do the necessary processing for the beginning of a function body, which
10559    in this case includes member-initializers, but not the catch clauses of
10560    a function-try-block.  Currently, this means opening a binding level
10561    for the member-initializers (in a ctor) and member cleanups (in a dtor).
10562    In other functions, this isn't necessary, but it doesn't hurt.  */
10563
10564 tree
10565 begin_function_body (void)
10566 {
10567   tree stmt;
10568
10569   if (processing_template_decl)
10570     /* Do nothing now.  */;
10571   else
10572     /* Always keep the BLOCK node associated with the outermost pair of
10573        curly braces of a function.  These are needed for correct
10574        operation of dwarfout.c.  */
10575     keep_next_level (true);
10576
10577   stmt = begin_compound_stmt (/*has_no_scope=*/false);
10578   COMPOUND_STMT_BODY_BLOCK (stmt) = 1;
10579
10580   if (processing_template_decl)
10581     /* Do nothing now.  */;
10582   else if (DECL_CONSTRUCTOR_P (current_function_decl))
10583     begin_constructor_body ();
10584   else if (DECL_DESTRUCTOR_P (current_function_decl))
10585     begin_destructor_body ();
10586
10587   return stmt;
10588 }
10589
10590 /* Do the processing for the end of a function body.  Currently, this means
10591    closing out the cleanups for fully-constructed bases and members, and in
10592    the case of the destructor, deleting the object if desired.  Again, this
10593    is only meaningful for [cd]tors, since they are the only functions where
10594    there is a significant distinction between the main body and any
10595    function catch clauses.  Handling, say, main() return semantics here
10596    would be wrong, as flowing off the end of a function catch clause for
10597    main() would also need to return 0.  */
10598
10599 void
10600 finish_function_body (tree compstmt)
10601 {
10602   /* Close the block.  */
10603   finish_compound_stmt (compstmt);
10604
10605   if (processing_template_decl)
10606     /* Do nothing now.  */;
10607   else if (DECL_CONSTRUCTOR_P (current_function_decl))
10608     finish_constructor_body ();
10609   else if (DECL_DESTRUCTOR_P (current_function_decl))
10610     finish_destructor_body ();
10611 }  
10612
10613 /* Finish up a function declaration and compile that function
10614    all the way to assembler language output.  The free the storage
10615    for the function definition.
10616
10617    FLAGS is a bitwise or of the following values:
10618      2 - INCLASS_INLINE
10619        We just finished processing the body of an in-class inline
10620        function definition.  (This processing will have taken place
10621        after the class definition is complete.)  */
10622
10623 tree
10624 finish_function (int flags)
10625 {
10626   tree fndecl = current_function_decl;
10627   tree fntype, ctype = NULL_TREE;
10628   int inclass_inline = (flags & 2) != 0;
10629   int nested;
10630
10631   /* When we get some parse errors, we can end up without a
10632      current_function_decl, so cope.  */
10633   if (fndecl == NULL_TREE)
10634     return error_mark_node;
10635
10636   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10637       && DECL_VIRTUAL_P (fndecl)
10638       && !processing_template_decl)
10639     {
10640       tree fnclass = DECL_CONTEXT (fndecl);
10641       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10642         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10643     }
10644
10645   nested = function_depth > 1;
10646   fntype = TREE_TYPE (fndecl);
10647
10648   /*  TREE_READONLY (fndecl) = 1;
10649       This caused &foo to be of type ptr-to-const-function
10650       which then got a warning when stored in a ptr-to-function variable.  */
10651
10652   my_friendly_assert (building_stmt_tree (), 20000911);
10653   
10654   /* For a cloned function, we've already got all the code we need;
10655      there's no need to add any extra bits.  */
10656   if (!DECL_CLONED_FUNCTION_P (fndecl))
10657     {
10658       if (DECL_MAIN_P (current_function_decl))
10659         {
10660           /* Make it so that `main' always returns 0 by default.  */
10661 #if VMS_TARGET
10662           finish_return_stmt (integer_one_node);
10663 #else
10664           finish_return_stmt (integer_zero_node);
10665 #endif
10666         }
10667
10668       /* Finish dealing with exception specifiers.  */
10669       if (flag_exceptions && !processing_template_decl
10670           && flag_enforce_eh_specs
10671           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10672         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10673                               (TREE_TYPE (current_function_decl)),
10674                               current_eh_spec_block);
10675     }
10676
10677   finish_fname_decls ();
10678
10679   /* If we're saving up tree structure, tie off the function now.  */
10680   finish_stmt_tree (&DECL_SAVED_TREE (fndecl));
10681
10682   /* If this function can't throw any exceptions, remember that.  */
10683   if (!processing_template_decl
10684       && !cp_function_chain->can_throw
10685       && !flag_non_call_exceptions)
10686     TREE_NOTHROW (fndecl) = 1;
10687
10688   /* This must come after expand_function_end because cleanups might
10689      have declarations (from inline functions) that need to go into
10690      this function's blocks.  */
10691   
10692   /* If the current binding level isn't the outermost binding level
10693      for this function, either there is a bug, or we have experienced
10694      syntax errors and the statement tree is malformed.  */
10695   if (current_binding_level->kind != sk_function_parms)
10696     {
10697       /* Make sure we have already experienced errors.  */
10698       if (errorcount == 0)
10699         abort ();
10700
10701       /* Throw away the broken statement tree and extra binding
10702          levels.  */
10703       DECL_SAVED_TREE (fndecl) = build_stmt (COMPOUND_STMT, NULL_TREE);
10704
10705       while (current_binding_level->kind != sk_function_parms)
10706         {
10707           if (current_binding_level->kind == sk_class)
10708             pop_nested_class ();
10709           else
10710             poplevel (0, 0, 0);
10711         }
10712     }
10713   poplevel (1, 0, 1);
10714
10715   /* Statements should always be full-expressions at the outermost set
10716      of curly braces for a function.  */
10717   my_friendly_assert (stmts_are_full_exprs_p (), 19990831);
10718
10719   /* Set up the named return value optimization, if we can.  Candidate
10720      variables are selected in check_return_value.  */
10721   if (current_function_return_value)
10722     {
10723       tree r = current_function_return_value;
10724       tree outer;
10725
10726       if (r != error_mark_node
10727           /* This is only worth doing for fns that return in memory--and
10728              simpler, since we don't have to worry about promoted modes.  */
10729           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10730           /* Only allow this for variables declared in the outer scope of
10731              the function so we know that their lifetime always ends with a
10732              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
10733              we were to do this optimization in tree-ssa.  */
10734           /* Skip the artificial function body block.  */
10735           && (outer = BLOCK_SUBBLOCKS (BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl))),
10736               chain_member (r, BLOCK_VARS (outer))))
10737         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10738
10739       current_function_return_value = NULL_TREE;
10740     }
10741
10742   /* Remember that we were in class scope.  */
10743   if (current_class_name)
10744     ctype = current_class_type;
10745
10746   /* Must mark the RESULT_DECL as being in this function.  */
10747   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10748
10749   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10750      to the FUNCTION_DECL node itself.  */
10751   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10752
10753   /* Save away current state, if appropriate.  */
10754   if (!processing_template_decl)
10755     save_function_data (fndecl);
10756
10757   /* Complain if there's just no return statement.  */
10758   if (warn_return_type
10759       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10760       && !dependent_type_p (TREE_TYPE (fntype))
10761       && !current_function_returns_value && !current_function_returns_null
10762       /* Don't complain if we abort or throw.  */
10763       && !current_function_returns_abnormally
10764       && !DECL_NAME (DECL_RESULT (fndecl))
10765       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
10766          inline function, as we might never be compiled separately.  */
10767       && (DECL_INLINE (fndecl) || processing_template_decl))
10768     warning ("no return statement in function returning non-void");
10769
10770   /* Store the end of the function, so that we get good line number
10771      info for the epilogue.  */
10772   cfun->function_end_locus = input_location;
10773
10774   /* Genericize before inlining.  */
10775   if (!processing_template_decl)
10776     {
10777       c_genericize (fndecl);
10778
10779       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
10780       c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10781     }
10782
10783   /* We're leaving the context of this function, so zap cfun.  It's still in
10784      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
10785   cfun = NULL;
10786   current_function_decl = NULL;
10787
10788   /* If this is an in-class inline definition, we may have to pop the
10789      bindings for the template parameters that we added in
10790      maybe_begin_member_template_processing when start_function was
10791      called.  */
10792   if (inclass_inline)
10793     maybe_end_member_template_processing ();
10794
10795   /* Leave the scope of the class.  */
10796   if (ctype)
10797     pop_nested_class ();
10798
10799   --function_depth;
10800
10801   /* Clean up.  */
10802   if (! nested)
10803     /* Let the error reporting routines know that we're outside a
10804        function.  For a nested function, this value is used in
10805        cxx_pop_function_context and then reset via pop_function_context.  */
10806     current_function_decl = NULL_TREE;
10807
10808   return fndecl;
10809 }
10810 \f
10811 /* Create the FUNCTION_DECL for a function definition.
10812    DECLSPECS and DECLARATOR are the parts of the declaration;
10813    they describe the return type and the name of the function,
10814    but twisted together in a fashion that parallels the syntax of C.
10815
10816    This function creates a binding context for the function body
10817    as well as setting up the FUNCTION_DECL in current_function_decl.
10818
10819    Returns a FUNCTION_DECL on success.
10820
10821    If the DECLARATOR is not suitable for a function (it defines a datum
10822    instead), we return 0, which tells yyparse to report a parse error.
10823
10824    May return void_type_node indicating that this method is actually
10825    a friend.  See grokfield for more details.
10826
10827    Came here with a `.pushlevel' .
10828
10829    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10830    CHANGES TO CODE IN `grokfield'.  */
10831
10832 tree
10833 start_method (tree declspecs, tree declarator, tree attrlist)
10834 {
10835   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10836                                 &attrlist);
10837
10838   if (fndecl == error_mark_node)
10839     return error_mark_node;
10840
10841   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10842     {
10843       error ("invalid member function declaration");
10844       return error_mark_node;
10845     }
10846
10847   if (attrlist)
10848     cplus_decl_attributes (&fndecl, attrlist, 0);
10849
10850   /* Pass friends other than inline friend functions back.  */
10851   if (fndecl == void_type_node)
10852     return fndecl;
10853
10854   if (DECL_IN_AGGR_P (fndecl))
10855     {
10856       if (DECL_CONTEXT (fndecl)
10857           && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10858         error ("`%D' is already defined in class `%T'", fndecl,
10859                DECL_CONTEXT (fndecl));
10860       return void_type_node;
10861     }
10862
10863   check_template_shadow (fndecl);
10864
10865   DECL_DECLARED_INLINE_P (fndecl) = 1;
10866   if (flag_default_inline)
10867     DECL_INLINE (fndecl) = 1;
10868
10869   /* We process method specializations in finish_struct_1.  */
10870   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10871     {
10872       fndecl = push_template_decl (fndecl);
10873       if (fndecl == error_mark_node)
10874         return fndecl;
10875     }
10876
10877   if (! DECL_FRIEND_P (fndecl))
10878     {
10879       if (TREE_CHAIN (fndecl))
10880         {
10881           fndecl = copy_node (fndecl);
10882           TREE_CHAIN (fndecl) = NULL_TREE;
10883         }
10884       grok_special_member_properties (fndecl);
10885     }
10886
10887   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10888
10889   /* Make a place for the parms.  */
10890   begin_scope (sk_function_parms, fndecl);
10891
10892   DECL_IN_AGGR_P (fndecl) = 1;
10893   return fndecl;
10894 }
10895
10896 /* Go through the motions of finishing a function definition.
10897    We don't compile this method until after the whole class has
10898    been processed.
10899
10900    FINISH_METHOD must return something that looks as though it
10901    came from GROKFIELD (since we are defining a method, after all).
10902
10903    This is called after parsing the body of the function definition.
10904    STMTS is the chain of statements that makes up the function body.
10905
10906    DECL is the ..._DECL that `start_method' provided.  */
10907
10908 tree
10909 finish_method (tree decl)
10910 {
10911   tree fndecl = decl;
10912   tree old_initial;
10913
10914   tree link;
10915
10916   if (decl == void_type_node)
10917     return decl;
10918
10919   old_initial = DECL_INITIAL (fndecl);
10920
10921   /* Undo the level for the parms (from start_method).
10922      This is like poplevel, but it causes nothing to be
10923      saved.  Saving information here confuses symbol-table
10924      output routines.  Besides, this information will
10925      be correctly output when this method is actually
10926      compiled.  */
10927
10928   /* Clear out the meanings of the local variables of this level;
10929      also record in each decl which block it belongs to.  */
10930
10931   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10932     {
10933       if (DECL_NAME (link) != NULL_TREE)
10934         pop_binding (DECL_NAME (link), link);
10935       my_friendly_assert (TREE_CODE (link) != FUNCTION_DECL, 163);
10936       DECL_CONTEXT (link) = NULL_TREE;
10937     }
10938
10939   poplevel (0, 0, 0);
10940
10941   DECL_INITIAL (fndecl) = old_initial;
10942
10943   /* We used to check if the context of FNDECL was different from
10944      current_class_type as another way to get inside here.  This didn't work
10945      for String.cc in libg++.  */
10946   if (DECL_FRIEND_P (fndecl))
10947     {
10948       CLASSTYPE_INLINE_FRIENDS (current_class_type)
10949         = tree_cons (NULL_TREE, fndecl, CLASSTYPE_INLINE_FRIENDS (current_class_type));
10950       decl = void_type_node;
10951     }
10952
10953   return decl;
10954 }
10955 \f
10956
10957 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
10958    we can lay it out later, when and if its type becomes complete.  */
10959
10960 void
10961 maybe_register_incomplete_var (tree var)
10962 {
10963   my_friendly_assert (TREE_CODE (var) == VAR_DECL, 20020406);
10964
10965   /* Keep track of variables with incomplete types.  */
10966   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node 
10967       && DECL_EXTERNAL (var))
10968     {
10969       tree inner_type = TREE_TYPE (var);
10970       
10971       while (TREE_CODE (inner_type) == ARRAY_TYPE)
10972         inner_type = TREE_TYPE (inner_type);
10973       inner_type = TYPE_MAIN_VARIANT (inner_type);
10974       
10975       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
10976           /* RTTI TD entries are created while defining the type_info.  */
10977           || (TYPE_LANG_SPECIFIC (inner_type)
10978               && TYPE_BEING_DEFINED (inner_type)))
10979         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
10980     }
10981 }
10982
10983 /* Called when a class type (given by TYPE) is defined.  If there are
10984    any existing VAR_DECLs whose type hsa been completed by this
10985    declaration, update them now.  */
10986
10987 void
10988 complete_vars (tree type)
10989 {
10990   tree *list = &incomplete_vars;
10991
10992   my_friendly_assert (CLASS_TYPE_P (type), 20020406);
10993   while (*list) 
10994     {
10995       if (same_type_p (type, TREE_PURPOSE (*list)))
10996         {
10997           tree var = TREE_VALUE (*list);
10998           /* Complete the type of the variable.  The VAR_DECL itself
10999              will be laid out in expand_expr.  */
11000           complete_type (TREE_TYPE (var));
11001           /* Remove this entry from the list.  */
11002           *list = TREE_CHAIN (*list);
11003         }
11004       else
11005         list = &TREE_CHAIN (*list);
11006     }
11007 }
11008
11009 /* If DECL is of a type which needs a cleanup, build that cleanup
11010    here.  */
11011
11012 tree
11013 cxx_maybe_build_cleanup (tree decl)
11014 {
11015   tree type = TREE_TYPE (decl);
11016
11017   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11018     {
11019       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11020       tree rval;
11021
11022       if (TREE_CODE (type) == ARRAY_TYPE)
11023         rval = decl;
11024       else
11025         {
11026           cxx_mark_addressable (decl);
11027           rval = build_unary_op (ADDR_EXPR, decl, 0);
11028         }
11029
11030       /* Optimize for space over speed here.  */
11031       if (! TYPE_USES_VIRTUAL_BASECLASSES (type)
11032           || flag_expensive_optimizations)
11033         flags |= LOOKUP_NONVIRTUAL;
11034
11035       rval = build_delete (TREE_TYPE (rval), rval,
11036                            sfk_complete_destructor, flags, 0);
11037
11038       if (TYPE_USES_VIRTUAL_BASECLASSES (type)
11039           && ! TYPE_HAS_DESTRUCTOR (type))
11040         rval = build_compound_expr (rval, build_vbase_delete (type, decl));
11041
11042       return rval;
11043     }
11044   return NULL_TREE;
11045 }
11046 \f
11047 /* When a stmt has been parsed, this function is called.  */
11048
11049 void
11050 finish_stmt (void)
11051 {
11052   /* Always assume this statement was not an expression statement.  If
11053      it actually was an expression statement, its our callers
11054      responsibility to fix this up.  */
11055   last_expr_type = NULL_TREE;
11056 }
11057
11058 /* DECL was originally constructed as a non-static member function,
11059    but turned out to be static.  Update it accordingly.  */
11060
11061 void
11062 revert_static_member_fn (tree decl)
11063 {
11064   tree tmp;
11065   tree function = TREE_TYPE (decl);
11066   tree args = TYPE_ARG_TYPES (function);
11067
11068   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11069       != TYPE_UNQUALIFIED)
11070     error ("static member function `%#D' declared with type qualifiers",
11071               decl);
11072
11073   args = TREE_CHAIN (args);
11074   tmp = build_function_type (TREE_TYPE (function), args);
11075   tmp = build_qualified_type (tmp, cp_type_quals (function));
11076   tmp = build_exception_variant (tmp,
11077                                  TYPE_RAISES_EXCEPTIONS (function));
11078   TREE_TYPE (decl) = tmp;
11079   if (DECL_ARGUMENTS (decl))
11080     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11081   DECL_STATIC_FUNCTION_P (decl) = 1;
11082 }
11083
11084 /* Initialize the variables used during compilation of a C++
11085    function.  */
11086
11087 void
11088 cxx_push_function_context (struct function * f)
11089 {
11090   struct language_function *p
11091     = ggc_alloc_cleared (sizeof (struct language_function));
11092   f->language = p;
11093
11094   /* Whenever we start a new function, we destroy temporaries in the
11095      usual way.  */
11096   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11097
11098   if (f->decl)
11099     {
11100       tree fn = f->decl;
11101
11102       if (DECL_SAVED_FUNCTION_DATA (fn))
11103         {
11104           /* If we already parsed this function, and we're just expanding it
11105              now, restore saved state.  */
11106           *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11107
11108           /* If we decided that we didn't want to inline this function,
11109              make sure the back-end knows that.  */
11110           if (!current_function_cannot_inline)
11111             current_function_cannot_inline = cp_function_chain->cannot_inline;
11112
11113           /* We don't need the saved data anymore.  Unless this is an inline
11114              function; we need the named return value info for
11115              cp_copy_res_decl_for_inlining.  */
11116           if (! DECL_INLINE (fn))
11117             DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11118         }
11119     }
11120 }
11121
11122 /* Free the language-specific parts of F, now that we've finished
11123    compiling the function.  */
11124
11125 void
11126 cxx_pop_function_context (struct function * f)
11127 {
11128   f->language = 0;
11129 }
11130
11131 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11132    one of the language-independent trees.  */
11133
11134 enum cp_tree_node_structure_enum
11135 cp_tree_node_structure (union lang_tree_node * t)
11136 {
11137   switch (TREE_CODE (&t->generic))
11138     {
11139     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
11140     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
11141     case OVERLOAD:              return TS_CP_OVERLOAD;
11142     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
11143     case PTRMEM_CST:            return TS_CP_PTRMEM;
11144     case BASELINK:              return TS_CP_BASELINK;
11145     default:                    return TS_CP_GENERIC;
11146     }
11147 }
11148
11149 /* Build the void_list_node (void_type_node having been created).  */
11150 tree
11151 build_void_list_node (void)
11152 {
11153   tree t = build_tree_list (NULL_TREE, void_type_node);
11154   TREE_PARMLIST (t) = 1;
11155   return t;
11156 }
11157
11158 bool
11159 cp_missing_noreturn_ok_p (tree decl)
11160 {
11161   /* A missing noreturn is ok for the `main' function.  */
11162   return DECL_MAIN_P (decl);
11163 }
11164
11165 #include "gt-cp-decl.h"
11166 #include "gtype-cp.h"