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