OSDN Git Service

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