OSDN Git Service

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