OSDN Git Service

e2bd16527de8ec392f4a676390493cf07641de31
[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))
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         /* grokparms will have already issued an error.  */
8310         TREE_TYPE (parms) = error_mark_node;
8311       else if (complete_type_or_else (TREE_TYPE (parms), parms))
8312         {
8313           relayout_decl (parms);
8314           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8315         }
8316     }
8317 }
8318
8319 /* Returns nonzero if T is a local variable.  */
8320
8321 int
8322 local_variable_p (tree t)
8323 {
8324   if ((TREE_CODE (t) == VAR_DECL
8325        /* A VAR_DECL with a context that is a _TYPE is a static data
8326           member.  */
8327        && !TYPE_P (CP_DECL_CONTEXT (t))
8328        /* Any other non-local variable must be at namespace scope.  */
8329        && !DECL_NAMESPACE_SCOPE_P (t))
8330       || (TREE_CODE (t) == PARM_DECL))
8331     return 1;
8332
8333   return 0;
8334 }
8335
8336 /* Returns nonzero if T is an automatic local variable or a label.
8337    (These are the declarations that need to be remapped when the code
8338    containing them is duplicated.)  */
8339
8340 int
8341 nonstatic_local_decl_p (tree t)
8342 {
8343   return ((local_variable_p (t) && !TREE_STATIC (t))
8344           || TREE_CODE (t) == LABEL_DECL
8345           || TREE_CODE (t) == RESULT_DECL);
8346 }
8347
8348 /* Like local_variable_p, but suitable for use as a tree-walking
8349    function.  */
8350
8351 static tree
8352 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8353                          void *data ATTRIBUTE_UNUSED)
8354 {
8355   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8356     return *tp;
8357   else if (TYPE_P (*tp))
8358     *walk_subtrees = 0;
8359
8360   return NULL_TREE;
8361 }
8362
8363
8364 /* Check that ARG, which is a default-argument expression for a
8365    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
8366    something goes wrong.  DECL may also be a _TYPE node, rather than a
8367    DECL, if there is no DECL available.  */
8368
8369 tree
8370 check_default_argument (tree decl, tree arg)
8371 {
8372   tree var;
8373   tree decl_type;
8374
8375   if (TREE_CODE (arg) == DEFAULT_ARG)
8376     /* We get a DEFAULT_ARG when looking at an in-class declaration
8377        with a default argument.  Ignore the argument for now; we'll
8378        deal with it after the class is complete.  */
8379     return arg;
8380
8381   if (processing_template_decl || uses_template_parms (arg))
8382     /* We don't do anything checking until instantiation-time.  Note
8383        that there may be uninstantiated arguments even for an
8384        instantiated function, since default arguments are not
8385        instantiated until they are needed.  */
8386     return arg;
8387
8388   if (TYPE_P (decl))
8389     {
8390       decl_type = decl;
8391       decl = NULL_TREE;
8392     }
8393   else
8394     decl_type = TREE_TYPE (decl);
8395
8396   if (arg == error_mark_node
8397       || decl == error_mark_node
8398       || TREE_TYPE (arg) == error_mark_node
8399       || decl_type == error_mark_node)
8400     /* Something already went wrong.  There's no need to check
8401        further.  */
8402     return error_mark_node;
8403
8404   /* [dcl.fct.default]
8405
8406      A default argument expression is implicitly converted to the
8407      parameter type.  */
8408   if (!TREE_TYPE (arg)
8409       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg))
8410     {
8411       if (decl)
8412         error ("default argument for %q#D has type %qT",
8413                decl, TREE_TYPE (arg));
8414       else
8415         error ("default argument for parameter of type %qT has type %qT",
8416                decl_type, TREE_TYPE (arg));
8417
8418       return error_mark_node;
8419     }
8420
8421   /* [dcl.fct.default]
8422
8423      Local variables shall not be used in default argument
8424      expressions.
8425
8426      The keyword `this' shall not be used in a default argument of a
8427      member function.  */
8428   var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8429                                       NULL);
8430   if (var)
8431     {
8432       error ("default argument %qE uses local variable %qD", arg, var);
8433       return error_mark_node;
8434     }
8435
8436   /* All is well.  */
8437   return arg;
8438 }
8439
8440 /* Decode the list of parameter types for a function type.
8441    Given the list of things declared inside the parens,
8442    return a list of types.
8443
8444    If this parameter does not end with an ellipsis, we append
8445    void_list_node.
8446
8447    *PARMS is set to the chain of PARM_DECLs created.  */
8448
8449 static tree
8450 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8451 {
8452   tree result = NULL_TREE;
8453   tree decls = NULL_TREE;
8454   int ellipsis = !first_parm || first_parm->ellipsis_p;
8455   cp_parameter_declarator *parm;
8456   int any_error = 0;
8457
8458   for (parm = first_parm; parm != NULL; parm = parm->next)
8459     {
8460       tree type = NULL_TREE;
8461       tree init = parm->default_argument;
8462       tree attrs;
8463       tree decl;
8464
8465       if (parm == no_parameters)
8466         break;
8467
8468       attrs = parm->decl_specifiers.attributes;
8469       parm->decl_specifiers.attributes = NULL_TREE;
8470       decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8471                              PARM, init != NULL_TREE, &attrs);
8472       if (! decl || TREE_TYPE (decl) == error_mark_node)
8473         continue;
8474
8475       if (attrs)
8476         cplus_decl_attributes (&decl, attrs, 0);
8477
8478       type = TREE_TYPE (decl);
8479       if (VOID_TYPE_P (type))
8480         {
8481           if (same_type_p (type, void_type_node)
8482               && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8483             /* this is a parmlist of `(void)', which is ok.  */
8484             break;
8485           cxx_incomplete_type_error (decl, type);
8486           /* It's not a good idea to actually create parameters of
8487              type `void'; other parts of the compiler assume that a
8488              void type terminates the parameter list.  */
8489           type = error_mark_node;
8490           TREE_TYPE (decl) = error_mark_node;
8491         }
8492
8493       if (type != error_mark_node)
8494         {
8495           /* Top-level qualifiers on the parameters are
8496              ignored for function types.  */
8497           type = cp_build_qualified_type (type, 0);
8498           if (TREE_CODE (type) == METHOD_TYPE)
8499             {
8500               error ("parameter %qD invalidly declared method type", decl);
8501               type = build_pointer_type (type);
8502               TREE_TYPE (decl) = type;
8503             }
8504           else if (abstract_virtuals_error (decl, type))
8505             any_error = 1;  /* Seems like a good idea.  */
8506           else if (POINTER_TYPE_P (type))
8507             {
8508               /* [dcl.fct]/6, parameter types cannot contain pointers
8509                  (references) to arrays of unknown bound.  */
8510               tree t = TREE_TYPE (type);
8511               int ptr = TYPE_PTR_P (type);
8512
8513               while (1)
8514                 {
8515                   if (TYPE_PTR_P (t))
8516                     ptr = 1;
8517                   else if (TREE_CODE (t) != ARRAY_TYPE)
8518                     break;
8519                   else if (!TYPE_DOMAIN (t))
8520                     break;
8521                   t = TREE_TYPE (t);
8522                 }
8523               if (TREE_CODE (t) == ARRAY_TYPE)
8524                 error ("parameter %qD includes %s to array of unknown "
8525                        "bound %qT",
8526                        decl, ptr ? "pointer" : "reference", t);
8527             }
8528
8529           if (!any_error && init)
8530             init = check_default_argument (decl, init);
8531           else
8532             init = NULL_TREE;
8533         }
8534
8535       TREE_CHAIN (decl) = decls;
8536       decls = decl;
8537       result = tree_cons (init, type, result);
8538     }
8539   decls = nreverse (decls);
8540   result = nreverse (result);
8541   if (!ellipsis)
8542     result = chainon (result, void_list_node);
8543   *parms = decls;
8544
8545   return result;
8546 }
8547
8548 \f
8549 /* D is a constructor or overloaded `operator='.
8550
8551    Let T be the class in which D is declared. Then, this function
8552    returns:
8553
8554    -1 if D's is an ill-formed constructor or copy assignment operator
8555       whose first parameter is of type `T'.
8556    0  if D is not a copy constructor or copy assignment
8557       operator.
8558    1  if D is a copy constructor or copy assignment operator whose
8559       first parameter is a reference to const qualified T.
8560    2  if D is a copy constructor or copy assignment operator whose
8561       first parameter is a reference to non-const qualified T.
8562
8563    This function can be used as a predicate. Positive values indicate
8564    a copy constructor and nonzero values indicate a copy assignment
8565    operator.  */
8566
8567 int
8568 copy_fn_p (tree d)
8569 {
8570   tree args;
8571   tree arg_type;
8572   int result = 1;
8573
8574   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8575
8576   if (DECL_TEMPLATE_INFO (d)
8577       && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8578     /* Instantiations of template member functions are never copy
8579        functions.  Note that member functions of templated classes are
8580        represented as template functions internally, and we must
8581        accept those as copy functions.  */
8582     return 0;
8583
8584   args = FUNCTION_FIRST_USER_PARMTYPE (d);
8585   if (!args)
8586     return 0;
8587
8588   arg_type = TREE_VALUE (args);
8589
8590   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8591     {
8592       /* Pass by value copy assignment operator.  */
8593       result = -1;
8594     }
8595   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8596            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8597     {
8598       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8599         result = 2;
8600     }
8601   else
8602     return 0;
8603
8604   args = TREE_CHAIN (args);
8605
8606   if (args && args != void_list_node && !TREE_PURPOSE (args))
8607     /* There are more non-optional args.  */
8608     return 0;
8609
8610   return result;
8611 }
8612
8613 /* Remember any special properties of member function DECL.  */
8614
8615 void grok_special_member_properties (tree decl)
8616 {
8617   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P(decl))
8618     ; /* Not special.  */
8619   else if (DECL_CONSTRUCTOR_P (decl))
8620     {
8621       int ctor = copy_fn_p (decl);
8622
8623       if (ctor > 0)
8624         {
8625           /* [class.copy]
8626
8627              A non-template constructor for class X is a copy
8628              constructor if its first parameter is of type X&, const
8629              X&, volatile X& or const volatile X&, and either there
8630              are no other parameters or else all other parameters have
8631              default arguments.  */
8632           TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8633           if (ctor > 1)
8634             TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8635         }
8636       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8637         TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8638     }
8639   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8640     {
8641       /* [class.copy]
8642
8643          A non-template assignment operator for class X is a copy
8644          assignment operator if its parameter is of type X, X&, const
8645          X&, volatile X& or const volatile X&.  */
8646
8647       int assop = copy_fn_p (decl);
8648
8649       if (assop)
8650         {
8651           TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8652           if (assop != 1)
8653             TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8654         }
8655     }
8656 }
8657
8658 /* Check a constructor DECL has the correct form.  Complains
8659    if the class has a constructor of the form X(X).  */
8660
8661 int
8662 grok_ctor_properties (tree ctype, tree decl)
8663 {
8664   int ctor_parm = copy_fn_p (decl);
8665
8666   if (ctor_parm < 0)
8667     {
8668       /* [class.copy]
8669
8670          A declaration of a constructor for a class X is ill-formed if
8671          its first parameter is of type (optionally cv-qualified) X
8672          and either there are no other parameters or else all other
8673          parameters have default arguments.
8674
8675          We *don't* complain about member template instantiations that
8676          have this form, though; they can occur as we try to decide
8677          what constructor to use during overload resolution.  Since
8678          overload resolution will never prefer such a constructor to
8679          the non-template copy constructor (which is either explicitly
8680          or implicitly defined), there's no need to worry about their
8681          existence.  Theoretically, they should never even be
8682          instantiated, but that's hard to forestall.  */
8683       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8684                 ctype, ctype);
8685       return 0;
8686     }
8687
8688   return 1;
8689 }
8690
8691 /* An operator with this code is unary, but can also be binary.  */
8692
8693 static int
8694 ambi_op_p (enum tree_code code)
8695 {
8696   return (code == INDIRECT_REF
8697           || code == ADDR_EXPR
8698           || code == UNARY_PLUS_EXPR
8699           || code == NEGATE_EXPR
8700           || code == PREINCREMENT_EXPR
8701           || code == PREDECREMENT_EXPR);
8702 }
8703
8704 /* An operator with this name can only be unary.  */
8705
8706 static int
8707 unary_op_p (enum tree_code code)
8708 {
8709   return (code == TRUTH_NOT_EXPR
8710           || code == BIT_NOT_EXPR
8711           || code == COMPONENT_REF
8712           || code == TYPE_EXPR);
8713 }
8714
8715 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
8716    errors are issued for invalid declarations.  */
8717
8718 void
8719 grok_op_properties (tree decl, bool complain)
8720 {
8721   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8722   tree argtype;
8723   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8724   tree name = DECL_NAME (decl);
8725   enum tree_code operator_code;
8726   int arity;
8727   tree class_type;
8728
8729   /* Count the number of arguments.  */
8730   for (argtype = argtypes, arity = 0;
8731        argtype && argtype != void_list_node;
8732        argtype = TREE_CHAIN (argtype))
8733     ++arity;
8734
8735   class_type = DECL_CONTEXT (decl);
8736   if (class_type && !CLASS_TYPE_P (class_type))
8737     class_type = NULL_TREE;
8738
8739   if (DECL_CONV_FN_P (decl))
8740     operator_code = TYPE_EXPR;
8741   else
8742     do
8743       {
8744 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
8745         if (ansi_opname (CODE) == name)                         \
8746           {                                                     \
8747             operator_code = (CODE);                             \
8748             break;                                              \
8749           }                                                     \
8750         else if (ansi_assopname (CODE) == name)                 \
8751           {                                                     \
8752             operator_code = (CODE);                             \
8753             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
8754             break;                                              \
8755           }
8756
8757 #include "operators.def"
8758 #undef DEF_OPERATOR
8759
8760         gcc_unreachable ();
8761       }
8762     while (0);
8763   gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
8764   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8765
8766   if (class_type)
8767     switch (operator_code)
8768       {
8769       case NEW_EXPR:
8770         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
8771         break;
8772
8773       case DELETE_EXPR:
8774         TYPE_GETS_DELETE (class_type) |= 1;
8775         break;
8776
8777       case VEC_NEW_EXPR:
8778         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
8779         break;
8780
8781       case VEC_DELETE_EXPR:
8782         TYPE_GETS_DELETE (class_type) |= 2;
8783         break;
8784
8785       default:
8786         break;
8787       }
8788
8789     /* [basic.std.dynamic.allocation]/1:
8790
8791        A program is ill-formed if an allocation function is declared
8792        in a namespace scope other than global scope or declared static
8793        in global scope.
8794
8795        The same also holds true for deallocation functions.  */
8796   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
8797       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8798     {
8799       if (DECL_NAMESPACE_SCOPE_P (decl))
8800         {
8801           if (CP_DECL_CONTEXT (decl) != global_namespace)
8802             error ("%qD may not be declared within a namespace", decl);
8803           else if (!TREE_PUBLIC (decl))
8804             error ("%qD may not be declared as static", decl);
8805         }
8806     }
8807
8808   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
8809     TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
8810   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
8811     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
8812   else
8813     {
8814       /* An operator function must either be a non-static member function
8815          or have at least one parameter of a class, a reference to a class,
8816          an enumeration, or a reference to an enumeration.  13.4.0.6 */
8817       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
8818         {
8819           if (operator_code == TYPE_EXPR
8820               || operator_code == CALL_EXPR
8821               || operator_code == COMPONENT_REF
8822               || operator_code == ARRAY_REF
8823               || operator_code == NOP_EXPR)
8824             {
8825               error ("%qD must be a nonstatic member function", decl);
8826               return;
8827             }
8828           else
8829             {
8830               tree p;
8831
8832               if (DECL_STATIC_FUNCTION_P (decl))
8833                 {
8834                   error ("%qD must be either a non-static member "
8835                          "function or a non-member function", decl);
8836                   return;
8837                 }
8838
8839               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
8840                 {
8841                   tree arg = non_reference (TREE_VALUE (p));
8842                   /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
8843                      because these checks are performed even on
8844                      template functions.  */
8845                   if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
8846                     break;
8847                 }
8848
8849               if (!p || p == void_list_node)
8850                 {
8851                   if (!complain)
8852                     return;
8853
8854                   error ("%qD must have an argument of class or "
8855                          "enumerated type",
8856                          decl);
8857                 }
8858             }
8859         }
8860
8861       /* There are no restrictions on the arguments to an overloaded
8862          "operator ()".  */
8863       if (operator_code == CALL_EXPR)
8864         return;
8865
8866       /* Warn about conversion operators that will never be used.  */
8867       if (IDENTIFIER_TYPENAME_P (name)
8868           && ! DECL_TEMPLATE_INFO (decl)
8869           && warn_conversion
8870           /* Warn only declaring the function; there is no need to
8871              warn again about out-of-class definitions.  */
8872           && class_type == current_class_type)
8873         {
8874           tree t = TREE_TYPE (name);
8875           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
8876           const char *what = 0;
8877
8878           if (ref)
8879             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
8880
8881           if (TREE_CODE (t) == VOID_TYPE)
8882             what = "void";
8883           else if (class_type)
8884             {
8885               if (t == class_type)
8886                 what = "the same type";
8887               /* Don't force t to be complete here.  */
8888               else if (IS_AGGR_TYPE (t)
8889                        && COMPLETE_TYPE_P (t)
8890                        && DERIVED_FROM_P (t, class_type))
8891                 what = "a base class";
8892             }
8893
8894           if (what)
8895             warning (0, "conversion to %s%s will never use a type "
8896                      "conversion operator",
8897                      ref ? "a reference to " : "", what);
8898         }
8899       if (operator_code == COND_EXPR)
8900         {
8901           /* 13.4.0.3 */
8902           error ("ISO C++ prohibits overloading operator ?:");
8903         }
8904       else if (ambi_op_p (operator_code))
8905         {
8906           if (arity == 1)
8907             /* We pick the one-argument operator codes by default, so
8908                we don't have to change anything.  */
8909             ;
8910           else if (arity == 2)
8911             {
8912               /* If we thought this was a unary operator, we now know
8913                  it to be a binary operator.  */
8914               switch (operator_code)
8915                 {
8916                 case INDIRECT_REF:
8917                   operator_code = MULT_EXPR;
8918                   break;
8919
8920                 case ADDR_EXPR:
8921                   operator_code = BIT_AND_EXPR;
8922                   break;
8923
8924                 case UNARY_PLUS_EXPR:
8925                   operator_code = PLUS_EXPR;
8926                   break;
8927
8928                 case NEGATE_EXPR:
8929                   operator_code = MINUS_EXPR;
8930                   break;
8931
8932                 case PREINCREMENT_EXPR:
8933                   operator_code = POSTINCREMENT_EXPR;
8934                   break;
8935
8936                 case PREDECREMENT_EXPR:
8937                   operator_code = POSTDECREMENT_EXPR;
8938                   break;
8939
8940                 default:
8941                   gcc_unreachable ();
8942                 }
8943
8944               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8945
8946               if ((operator_code == POSTINCREMENT_EXPR
8947                    || operator_code == POSTDECREMENT_EXPR)
8948                   && ! processing_template_decl
8949                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
8950                 {
8951                   if (methodp)
8952                     error ("postfix %qD must take %<int%> as its argument",
8953                               decl);
8954                   else
8955                     error
8956                       ("postfix %qD must take %<int%> as its second argument",
8957                        decl);
8958                 }
8959             }
8960           else
8961             {
8962               if (methodp)
8963                 error ("%qD must take either zero or one argument", decl);
8964               else
8965                 error ("%qD must take either one or two arguments", decl);
8966             }
8967
8968           /* More Effective C++ rule 6.  */
8969           if (warn_ecpp
8970               && (operator_code == POSTINCREMENT_EXPR
8971                   || operator_code == POSTDECREMENT_EXPR
8972                   || operator_code == PREINCREMENT_EXPR
8973                   || operator_code == PREDECREMENT_EXPR))
8974             {
8975               tree arg = TREE_VALUE (argtypes);
8976               tree ret = TREE_TYPE (TREE_TYPE (decl));
8977               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
8978                 arg = TREE_TYPE (arg);
8979               arg = TYPE_MAIN_VARIANT (arg);
8980               if (operator_code == PREINCREMENT_EXPR
8981                   || operator_code == PREDECREMENT_EXPR)
8982                 {
8983                   if (TREE_CODE (ret) != REFERENCE_TYPE
8984                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
8985                                        arg))
8986                     warning (0, "prefix %qD should return %qT", decl,
8987                              build_reference_type (arg));
8988                 }
8989               else
8990                 {
8991                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
8992                     warning (0, "postfix %qD should return %qT", decl, arg);
8993                 }
8994             }
8995         }
8996       else if (unary_op_p (operator_code))
8997         {
8998           if (arity != 1)
8999             {
9000               if (methodp)
9001                 error ("%qD must take %<void%>", decl);
9002               else
9003                 error ("%qD must take exactly one argument", decl);
9004             }
9005         }
9006       else /* if (binary_op_p (operator_code)) */
9007         {
9008           if (arity != 2)
9009             {
9010               if (methodp)
9011                 error ("%qD must take exactly one argument", decl);
9012               else
9013                 error ("%qD must take exactly two arguments", decl);
9014             }
9015
9016           /* More Effective C++ rule 7.  */
9017           if (warn_ecpp
9018               && (operator_code == TRUTH_ANDIF_EXPR
9019                   || operator_code == TRUTH_ORIF_EXPR
9020                   || operator_code == COMPOUND_EXPR))
9021             warning (0, "user-defined %qD always evaluates both arguments",
9022                      decl);
9023         }
9024
9025       /* Effective C++ rule 23.  */
9026       if (warn_ecpp
9027           && arity == 2
9028           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9029           && (operator_code == PLUS_EXPR
9030               || operator_code == MINUS_EXPR
9031               || operator_code == TRUNC_DIV_EXPR
9032               || operator_code == MULT_EXPR
9033               || operator_code == TRUNC_MOD_EXPR)
9034           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9035         warning (0, "%qD should return by value", decl);
9036
9037       /* [over.oper]/8 */
9038       for (; argtypes && argtypes != void_list_node;
9039           argtypes = TREE_CHAIN (argtypes))
9040         if (TREE_PURPOSE (argtypes))
9041           {
9042             TREE_PURPOSE (argtypes) = NULL_TREE;
9043             if (operator_code == POSTINCREMENT_EXPR
9044                 || operator_code == POSTDECREMENT_EXPR)
9045               {
9046                 if (pedantic)
9047                   pedwarn ("%qD cannot have default arguments", decl);
9048               }
9049             else
9050               error ("%qD cannot have default arguments", decl);
9051           }
9052
9053     }
9054
9055 }
9056 \f
9057 /* Return a string giving the keyword associate with CODE.  */
9058
9059 static const char *
9060 tag_name (enum tag_types code)
9061 {
9062   switch (code)
9063     {
9064     case record_type:
9065       return "struct";
9066     case class_type:
9067       return "class";
9068     case union_type:
9069       return "union";
9070     case enum_type:
9071       return "enum";
9072     case typename_type:
9073       return "typename";
9074     default:
9075       gcc_unreachable ();
9076     }
9077 }
9078
9079 /* Name lookup in an elaborated-type-specifier (after the keyword
9080    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
9081    elaborated-type-specifier is invalid, issue a diagnostic and return
9082    error_mark_node; otherwise, return the *_TYPE to which it referred.
9083    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
9084
9085 tree
9086 check_elaborated_type_specifier (enum tag_types tag_code,
9087                                  tree decl,
9088                                  bool allow_template_p)
9089 {
9090   tree type;
9091
9092   /* In the case of:
9093
9094        struct S { struct S *p; };
9095
9096      name lookup will find the TYPE_DECL for the implicit "S::S"
9097      typedef.  Adjust for that here.  */
9098   if (DECL_SELF_REFERENCE_P (decl))
9099     decl = TYPE_NAME (TREE_TYPE (decl));
9100
9101   type = TREE_TYPE (decl);
9102
9103   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9104      is false for this case as well.  */
9105   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9106     {
9107       error ("using template type parameter %qT after %qs",
9108              type, tag_name (tag_code));
9109       return error_mark_node;
9110     }
9111   /*   [dcl.type.elab]
9112
9113        If the identifier resolves to a typedef-name or a template
9114        type-parameter, the elaborated-type-specifier is ill-formed.
9115
9116      In other words, the only legitimate declaration to use in the
9117      elaborated type specifier is the implicit typedef created when
9118      the type is declared.  */
9119   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9120            && tag_code != typename_type)
9121     {
9122       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9123       error ("%q+D has a previous declaration here", decl);
9124       return error_mark_node;
9125     }
9126   else if (TREE_CODE (type) != RECORD_TYPE
9127            && TREE_CODE (type) != UNION_TYPE
9128            && tag_code != enum_type
9129            && tag_code != typename_type)
9130     {
9131       error ("%qT referred to as %qs", type, tag_name (tag_code));
9132       error ("%q+T has a previous declaration here", type);
9133       return error_mark_node;
9134     }
9135   else if (TREE_CODE (type) != ENUMERAL_TYPE
9136            && tag_code == enum_type
9137            && tag_code != typename_type)
9138     {
9139       error ("%qT referred to as enum", type);
9140       error ("%q+T has a previous declaration here", type);
9141       return error_mark_node;
9142     }
9143   else if (!allow_template_p
9144            && TREE_CODE (type) == RECORD_TYPE
9145            && CLASSTYPE_IS_TEMPLATE (type))
9146     {
9147       /* If a class template appears as elaborated type specifier
9148          without a template header such as:
9149
9150            template <class T> class C {};
9151            void f(class C);             // No template header here
9152
9153          then the required template argument is missing.  */
9154       error ("template argument required for %<%s %T%>",
9155              tag_name (tag_code),
9156              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9157       return error_mark_node;
9158     }
9159
9160   return type;
9161 }
9162
9163 /* Lookup NAME in elaborate type specifier in scope according to
9164    SCOPE and issue diagnostics if necessary.
9165    Return *_TYPE node upon success, NULL_TREE when the NAME is not
9166    found, and ERROR_MARK_NODE for type error.  */
9167
9168 static tree
9169 lookup_and_check_tag (enum tag_types tag_code, tree name,
9170                       tag_scope scope, bool template_header_p)
9171 {
9172   tree t;
9173   tree decl;
9174   if (scope == ts_global)
9175     {
9176       /* First try ordinary name lookup, ignoring hidden class name
9177          injected via friend declaration.  */
9178       decl = lookup_name (name, 2);
9179       /* If that fails, the name will be placed in the smallest
9180          non-class, non-function-prototype scope according to 3.3.1/5.
9181          We may already have a hidden name declared as friend in this
9182          scope.  So lookup again but not ignoring hidden name.
9183          If we find one, that name will be made visible rather than
9184          creating a new tag.  */
9185       if (!decl)
9186         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9187     }
9188   else
9189     decl = lookup_type_scope (name, scope);
9190
9191   if (decl && DECL_CLASS_TEMPLATE_P (decl))
9192     decl = DECL_TEMPLATE_RESULT (decl);
9193
9194   if (decl && TREE_CODE (decl) == TYPE_DECL)
9195     {
9196       /* Look for invalid nested type:
9197            class C {
9198              class C {};
9199            };  */
9200       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9201         {
9202           error ("%qD has the same name as the class in which it is "
9203                  "declared",
9204                  decl);
9205           return error_mark_node;
9206         }
9207
9208       /* Two cases we need to consider when deciding if a class
9209          template is allowed as an elaborated type specifier:
9210          1. It is a self reference to its own class.
9211          2. It comes with a template header.
9212
9213          For example:
9214
9215            template <class T> class C {
9216              class C *c1;               // DECL_SELF_REFERENCE_P is true
9217              class D;
9218            };
9219            template <class U> class C; // template_header_p is true
9220            template <class T> class C<T>::D {
9221              class C *c2;               // DECL_SELF_REFERENCE_P is true
9222            };  */
9223
9224       t = check_elaborated_type_specifier (tag_code,
9225                                            decl,
9226                                            template_header_p
9227                                            | DECL_SELF_REFERENCE_P (decl));
9228       return t;
9229     }
9230   else
9231     return NULL_TREE;
9232 }
9233
9234 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9235    Define the tag as a forward-reference if it is not defined.
9236
9237    If a declaration is given, process it here, and report an error if
9238    multiple declarations are not identical.
9239
9240    SCOPE is TS_CURRENT when this is also a definition.  Only look in
9241    the current frame for the name (since C++ allows new names in any
9242    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9243    declaration.  Only look beginning from the current scope outward up
9244    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
9245
9246    TEMPLATE_HEADER_P is true when this declaration is preceded by
9247    a set of template parameters.  */
9248
9249 tree
9250 xref_tag (enum tag_types tag_code, tree name,
9251           tag_scope scope, bool template_header_p)
9252 {
9253   enum tree_code code;
9254   tree t;
9255   tree context = NULL_TREE;
9256
9257   timevar_push (TV_NAME_LOOKUP);
9258
9259   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9260
9261   switch (tag_code)
9262     {
9263     case record_type:
9264     case class_type:
9265       code = RECORD_TYPE;
9266       break;
9267     case union_type:
9268       code = UNION_TYPE;
9269       break;
9270     case enum_type:
9271       code = ENUMERAL_TYPE;
9272       break;
9273     default:
9274       gcc_unreachable ();
9275     }
9276
9277   /* In case of anonymous name, xref_tag is only called to
9278      make type node and push name.  Name lookup is not required.  */
9279   if (ANON_AGGRNAME_P (name))
9280     t = NULL_TREE;
9281   else
9282     t = lookup_and_check_tag  (tag_code, name,
9283                                scope, template_header_p);
9284
9285   if (t == error_mark_node)
9286     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9287
9288   if (scope != ts_current && t && current_class_type
9289       && template_class_depth (current_class_type)
9290       && template_header_p)
9291     {
9292       /* Since SCOPE is not TS_CURRENT, we are not looking at a
9293          definition of this tag.  Since, in addition, we are currently
9294          processing a (member) template declaration of a template
9295          class, we must be very careful; consider:
9296
9297            template <class X>
9298            struct S1
9299
9300            template <class U>
9301            struct S2
9302            { template <class V>
9303            friend struct S1; };
9304
9305          Here, the S2::S1 declaration should not be confused with the
9306          outer declaration.  In particular, the inner version should
9307          have a template parameter of level 2, not level 1.  This
9308          would be particularly important if the member declaration
9309          were instead:
9310
9311            template <class V = U> friend struct S1;
9312
9313          say, when we should tsubst into `U' when instantiating
9314          S2.  On the other hand, when presented with:
9315
9316            template <class T>
9317            struct S1 {
9318              template <class U>
9319              struct S2 {};
9320              template <class U>
9321              friend struct S2;
9322            };
9323
9324          we must find the inner binding eventually.  We
9325          accomplish this by making sure that the new type we
9326          create to represent this declaration has the right
9327          TYPE_CONTEXT.  */
9328       context = TYPE_CONTEXT (t);
9329       t = NULL_TREE;
9330     }
9331
9332   if (! t)
9333     {
9334       /* If no such tag is yet defined, create a forward-reference node
9335          and record it as the "definition".
9336          When a real declaration of this type is found,
9337          the forward-reference will be altered into a real type.  */
9338       if (code == ENUMERAL_TYPE)
9339         {
9340           error ("use of enum %q#D without previous declaration", name);
9341           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9342         }
9343       else
9344         {
9345           t = make_aggr_type (code);
9346           TYPE_CONTEXT (t) = context;
9347           t = pushtag (name, t, scope);
9348         }
9349     }
9350   else
9351     {
9352       if (template_header_p && IS_AGGR_TYPE (t))
9353         redeclare_class_template (t, current_template_parms);
9354       else if (!processing_template_decl
9355                && CLASS_TYPE_P (t)
9356                && CLASSTYPE_IS_TEMPLATE (t))
9357         {
9358           error ("redeclaration of %qT as a non-template", t);
9359           t = error_mark_node;
9360         }
9361
9362       /* Make injected friend class visible.  */
9363       if (scope != ts_within_enclosing_non_class
9364           && hidden_name_p (TYPE_NAME (t)))
9365         {
9366           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9367           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9368
9369           if (TYPE_TEMPLATE_INFO (t))
9370             {
9371               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9372               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9373             }
9374         }
9375     }
9376
9377   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9378 }
9379
9380 tree
9381 xref_tag_from_type (tree old, tree id, tag_scope scope)
9382 {
9383   enum tag_types tag_kind;
9384
9385   if (TREE_CODE (old) == RECORD_TYPE)
9386     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9387   else
9388     tag_kind  = union_type;
9389
9390   if (id == NULL_TREE)
9391     id = TYPE_IDENTIFIER (old);
9392
9393   return xref_tag (tag_kind, id, scope, false);
9394 }
9395
9396 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9397    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
9398    access_* node, and the TREE_VALUE is the type of the base-class.
9399    Non-NULL TREE_TYPE indicates virtual inheritance.  */
9400
9401 void
9402 xref_basetypes (tree ref, tree base_list)
9403 {
9404   tree *basep;
9405   tree binfo, base_binfo;
9406   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
9407   unsigned max_bases = 0;  /* Maximum direct bases.  */
9408   int i;
9409   tree default_access;
9410   tree igo_prev; /* Track Inheritance Graph Order.  */
9411
9412   if (ref == error_mark_node)
9413     return;
9414
9415   /* The base of a derived class is private by default, all others are
9416      public.  */
9417   default_access = (TREE_CODE (ref) == RECORD_TYPE
9418                     && CLASSTYPE_DECLARED_CLASS (ref)
9419                     ? access_private_node : access_public_node);
9420
9421   /* First, make sure that any templates in base-classes are
9422      instantiated.  This ensures that if we call ourselves recursively
9423      we do not get confused about which classes are marked and which
9424      are not.  */
9425   basep = &base_list;
9426   while (*basep)
9427     {
9428       tree basetype = TREE_VALUE (*basep);
9429
9430       if (!(processing_template_decl && uses_template_parms (basetype))
9431           && !complete_type_or_else (basetype, NULL))
9432         /* An incomplete type.  Remove it from the list.  */
9433         *basep = TREE_CHAIN (*basep);
9434       else
9435         {
9436           max_bases++;
9437           if (TREE_TYPE (*basep))
9438             max_vbases++;
9439           if (CLASS_TYPE_P (basetype))
9440             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9441           basep = &TREE_CHAIN (*basep);
9442         }
9443     }
9444
9445   TYPE_MARKED_P (ref) = 1;
9446
9447   /* The binfo slot should be empty, unless this is an (ill-formed)
9448      redefinition.  */
9449   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9450   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9451
9452   binfo = make_tree_binfo (max_bases);
9453
9454   TYPE_BINFO (ref) = binfo;
9455   BINFO_OFFSET (binfo) = size_zero_node;
9456   BINFO_TYPE (binfo) = ref;
9457
9458   if (max_bases)
9459     {
9460       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9461       /* An aggregate cannot have baseclasses.  */
9462       CLASSTYPE_NON_AGGREGATE (ref) = 1;
9463
9464       if (TREE_CODE (ref) == UNION_TYPE)
9465         error ("derived union %qT invalid", ref);
9466     }
9467
9468   if (max_bases > 1)
9469     {
9470       if (TYPE_FOR_JAVA (ref))
9471         error ("Java class %qT cannot have multiple bases", ref);
9472     }
9473
9474   if (max_vbases)
9475     {
9476       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9477
9478       if (TYPE_FOR_JAVA (ref))
9479         error ("Java class %qT cannot have virtual bases", ref);
9480     }
9481
9482   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9483     {
9484       tree access = TREE_PURPOSE (base_list);
9485       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9486       tree basetype = TREE_VALUE (base_list);
9487
9488       if (access == access_default_node)
9489         access = default_access;
9490
9491       if (TREE_CODE (basetype) == TYPE_DECL)
9492         basetype = TREE_TYPE (basetype);
9493       if (TREE_CODE (basetype) != RECORD_TYPE
9494           && TREE_CODE (basetype) != TYPENAME_TYPE
9495           && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9496           && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9497         {
9498           error ("base type %qT fails to be a struct or class type",
9499                  basetype);
9500           continue;
9501         }
9502
9503       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9504         TYPE_FOR_JAVA (ref) = 1;
9505
9506       base_binfo = NULL_TREE;
9507       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9508         {
9509           base_binfo = TYPE_BINFO (basetype);
9510           /* The original basetype could have been a typedef'd type.  */
9511           basetype = BINFO_TYPE (base_binfo);
9512
9513           /* Inherit flags from the base.  */
9514           TYPE_HAS_NEW_OPERATOR (ref)
9515             |= TYPE_HAS_NEW_OPERATOR (basetype);
9516           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9517             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9518           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9519           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9520           CLASSTYPE_DIAMOND_SHAPED_P (ref)
9521             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9522           CLASSTYPE_REPEATED_BASE_P (ref)
9523             |= CLASSTYPE_REPEATED_BASE_P (basetype);
9524         }
9525
9526       /* We must do this test after we've seen through a typedef
9527          type.  */
9528       if (TYPE_MARKED_P (basetype))
9529         {
9530           if (basetype == ref)
9531             error ("recursive type %qT undefined", basetype);
9532           else
9533             error ("duplicate base type %qT invalid", basetype);
9534           continue;
9535         }
9536       TYPE_MARKED_P (basetype) = 1;
9537
9538       base_binfo = copy_binfo (base_binfo, basetype, ref,
9539                                &igo_prev, via_virtual);
9540       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9541         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9542
9543       BINFO_BASE_APPEND (binfo, base_binfo);
9544       BINFO_BASE_ACCESS_APPEND (binfo, access);
9545     }
9546
9547   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9548     /* If we have space in the vbase vector, we must have shared at
9549        least one of them, and are therefore diamond shaped.  */
9550     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9551
9552   /* Unmark all the types.  */
9553   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9554     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9555   TYPE_MARKED_P (ref) = 0;
9556
9557   /* Now see if we have a repeated base type.  */
9558   if (!CLASSTYPE_REPEATED_BASE_P (ref))
9559     {
9560       for (base_binfo = binfo; base_binfo;
9561            base_binfo = TREE_CHAIN (base_binfo))
9562         {
9563           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9564             {
9565               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9566               break;
9567             }
9568           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9569         }
9570       for (base_binfo = binfo; base_binfo;
9571            base_binfo = TREE_CHAIN (base_binfo))
9572         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9573           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9574         else
9575           break;
9576     }
9577 }
9578
9579 \f
9580 /* Begin compiling the definition of an enumeration type.
9581    NAME is its name.
9582    Returns the type object, as yet incomplete.
9583    Also records info about it so that build_enumerator
9584    may be used to declare the individual values as they are read.  */
9585
9586 tree
9587 start_enum (tree name)
9588 {
9589   tree enumtype;
9590
9591   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9592
9593   /* If this is the real definition for a previous forward reference,
9594      fill in the contents in the same object that used to be the
9595      forward reference.  */
9596
9597   enumtype = lookup_and_check_tag (enum_type, name,
9598                                    /*tag_scope=*/ts_current,
9599                                    /*template_header_p=*/false);
9600
9601   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9602     {
9603       error ("multiple definition of %q#T", enumtype);
9604       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9605       /* Clear out TYPE_VALUES, and start again.  */
9606       TYPE_VALUES (enumtype) = NULL_TREE;
9607     }
9608   else
9609     {
9610       /* In case of error, make a dummy enum to allow parsing to
9611          continue.  */
9612       if (enumtype == error_mark_node)
9613         name = make_anon_name ();
9614
9615       enumtype = make_node (ENUMERAL_TYPE);
9616       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9617     }
9618
9619   return enumtype;
9620 }
9621
9622 /* After processing and defining all the values of an enumeration type,
9623    install their decls in the enumeration type and finish it off.
9624    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
9625
9626 void
9627 finish_enum (tree enumtype)
9628 {
9629   tree values;
9630   tree decl;
9631   tree value;
9632   tree minnode;
9633   tree maxnode;
9634   tree t;
9635   bool unsignedp;
9636   bool use_short_enum;
9637   int lowprec;
9638   int highprec;
9639   int precision;
9640   integer_type_kind itk;
9641   tree underlying_type = NULL_TREE;
9642
9643   /* We built up the VALUES in reverse order.  */
9644   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9645
9646   /* For an enum defined in a template, just set the type of the values;
9647      all further processing is postponed until the template is
9648      instantiated.  We need to set the type so that tsubst of a CONST_DECL
9649      works.  */
9650   if (processing_template_decl)
9651     {
9652       for (values = TYPE_VALUES (enumtype);
9653            values;
9654            values = TREE_CHAIN (values))
9655         TREE_TYPE (TREE_VALUE (values)) = enumtype;
9656       if (at_function_scope_p ())
9657         add_stmt (build_min (TAG_DEFN, enumtype));
9658       return;
9659     }
9660
9661   /* Determine the minimum and maximum values of the enumerators.  */
9662   if (TYPE_VALUES (enumtype))
9663     {
9664       minnode = maxnode = NULL_TREE;
9665
9666       for (values = TYPE_VALUES (enumtype);
9667            values;
9668            values = TREE_CHAIN (values))
9669         {
9670           decl = TREE_VALUE (values);
9671
9672           /* [dcl.enum]: Following the closing brace of an enum-specifier,
9673              each enumerator has the type of its enumeration.  Prior to the
9674              closing brace, the type of each enumerator is the type of its
9675              initializing value.  */
9676           TREE_TYPE (decl) = enumtype;
9677
9678           /* Update the minimum and maximum values, if appropriate.  */
9679           value = DECL_INITIAL (decl);
9680           /* Figure out what the minimum and maximum values of the
9681              enumerators are.  */
9682           if (!minnode)
9683             minnode = maxnode = value;
9684           else if (tree_int_cst_lt (maxnode, value))
9685             maxnode = value;
9686           else if (tree_int_cst_lt (value, minnode))
9687             minnode = value;
9688         }
9689     }
9690   else
9691     /* [dcl.enum]
9692
9693        If the enumerator-list is empty, the underlying type is as if
9694        the enumeration had a single enumerator with value 0.  */
9695     minnode = maxnode = integer_zero_node;
9696
9697   /* Compute the number of bits require to represent all values of the
9698      enumeration.  We must do this before the type of MINNODE and
9699      MAXNODE are transformed, since min_precision relies on the
9700      TREE_TYPE of the value it is passed.  */
9701   unsignedp = tree_int_cst_sgn (minnode) >= 0;
9702   lowprec = min_precision (minnode, unsignedp);
9703   highprec = min_precision (maxnode, unsignedp);
9704   precision = MAX (lowprec, highprec);
9705
9706   /* Determine the underlying type of the enumeration.
9707
9708        [dcl.enum]
9709
9710        The underlying type of an enumeration is an integral type that
9711        can represent all the enumerator values defined in the
9712        enumeration.  It is implementation-defined which integral type is
9713        used as the underlying type for an enumeration except that the
9714        underlying type shall not be larger than int unless the value of
9715        an enumerator cannot fit in an int or unsigned int.
9716
9717      We use "int" or an "unsigned int" as the underlying type, even if
9718      a smaller integral type would work, unless the user has
9719      explicitly requested that we use the smallest possible type.  The
9720      user can request that for all enumerations with a command line
9721      flag, or for just one enumeration with an attribute.  */
9722
9723   use_short_enum = flag_short_enums
9724     || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9725
9726   for (itk = (use_short_enum ? itk_char : itk_int);
9727        itk != itk_none;
9728        itk++)
9729     {
9730       underlying_type = integer_types[itk];
9731       if (TYPE_PRECISION (underlying_type) >= precision
9732           && TYPE_UNSIGNED (underlying_type) == unsignedp)
9733         break;
9734     }
9735   if (itk == itk_none)
9736     {
9737       /* DR 377
9738
9739          IF no integral type can represent all the enumerator values, the
9740          enumeration is ill-formed.  */
9741       error ("no integral type can represent all of the enumerator values "
9742              "for %qT", enumtype);
9743       precision = TYPE_PRECISION (long_long_integer_type_node);
9744       underlying_type = integer_types[itk_unsigned_long_long];
9745     }
9746
9747   /* Compute the minium and maximum values for the type.
9748
9749      [dcl.enum]
9750
9751      For an enumeration where emin is the smallest enumerator and emax
9752      is the largest, the values of the enumeration are the values of the
9753      underlying type in the range bmin to bmax, where bmin and bmax are,
9754      respectively, the smallest and largest values of the smallest bit-
9755      field that can store emin and emax.  */
9756
9757   /* The middle-end currently assumes that types with TYPE_PRECISION
9758      narrower than their underlying type are suitably zero or sign
9759      extended to fill their mode.  g++ doesn't make these guarantees.
9760      Until the middle-end can represent such paradoxical types, we
9761      set the TYPE_PRECISION to the width of the underlying type.  */
9762   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
9763
9764   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
9765
9766   /* [dcl.enum]
9767
9768      The value of sizeof() applied to an enumeration type, an object
9769      of an enumeration type, or an enumerator, is the value of sizeof()
9770      applied to the underlying type.  */
9771   TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
9772   TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
9773   TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
9774   TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
9775   TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
9776   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
9777
9778   /* Convert each of the enumerators to the type of the underlying
9779      type of the enumeration.  */
9780   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
9781     {
9782       decl = TREE_VALUE (values);
9783       value = perform_implicit_conversion (underlying_type,
9784                                            DECL_INITIAL (decl));
9785
9786       /* Do not clobber shared ints.  */
9787       value = copy_node (value);
9788
9789       TREE_TYPE (value) = enumtype;
9790       DECL_INITIAL (decl) = value;
9791       TREE_VALUE (values) = value;
9792     }
9793
9794   /* Fix up all variant types of this enum type.  */
9795   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
9796     {
9797       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
9798       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
9799       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
9800       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
9801       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
9802       TYPE_MODE (t) = TYPE_MODE (enumtype);
9803       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
9804       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
9805       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
9806       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
9807     }
9808
9809   /* Finish debugging output for this type.  */
9810   rest_of_type_compilation (enumtype, namespace_bindings_p ());
9811 }
9812
9813 /* Build and install a CONST_DECL for an enumeration constant of the
9814    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
9815    Assignment of sequential values by default is handled here.  */
9816
9817 void
9818 build_enumerator (tree name, tree value, tree enumtype)
9819 {
9820   tree decl;
9821   tree context;
9822   tree type;
9823
9824   /* If the VALUE was erroneous, pretend it wasn't there; that will
9825      result in the enum being assigned the next value in sequence.  */
9826   if (value == error_mark_node)
9827     value = NULL_TREE;
9828
9829   /* Remove no-op casts from the value.  */
9830   if (value)
9831     STRIP_TYPE_NOPS (value);
9832
9833   if (! processing_template_decl)
9834     {
9835       /* Validate and default VALUE.  */
9836       if (value != NULL_TREE)
9837         {
9838           value = integral_constant_value (value);
9839
9840           if (TREE_CODE (value) == INTEGER_CST)
9841             {
9842               value = perform_integral_promotions (value);
9843               constant_expression_warning (value);
9844             }
9845           else
9846             {
9847               error ("enumerator value for %qD not integer constant", name);
9848               value = NULL_TREE;
9849             }
9850         }
9851
9852       /* Default based on previous value.  */
9853       if (value == NULL_TREE)
9854         {
9855           if (TYPE_VALUES (enumtype))
9856             {
9857               HOST_WIDE_INT hi;
9858               unsigned HOST_WIDE_INT lo;
9859               tree prev_value;
9860               bool overflowed;
9861
9862               /* The next value is the previous value plus one.  We can
9863                  safely assume that the previous value is an INTEGER_CST.
9864                  add_double doesn't know the type of the target expression,
9865                  so we must check with int_fits_type_p as well.  */
9866               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
9867               overflowed = add_double (TREE_INT_CST_LOW (prev_value),
9868                                        TREE_INT_CST_HIGH (prev_value),
9869                                        1, 0, &lo, &hi);
9870               value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
9871               overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
9872
9873               if (overflowed)
9874                 error ("overflow in enumeration values at %qD", name);
9875             }
9876           else
9877             value = integer_zero_node;
9878         }
9879
9880       /* Remove no-op casts from the value.  */
9881       STRIP_TYPE_NOPS (value);
9882     }
9883
9884   /* C++ associates enums with global, function, or class declarations.  */
9885   context = current_scope ();
9886
9887   /* Build the actual enumeration constant.  Note that the enumeration
9888     constants have the type of their initializers until the
9889     enumeration is complete:
9890
9891       [ dcl.enum ]
9892
9893       Following the closing brace of an enum-specifier, each enumer-
9894       ator has the type of its enumeration.  Prior to the closing
9895       brace, the type of each enumerator is the type of its
9896       initializing value.
9897
9898     In finish_enum we will reset the type.  Of course, if we're
9899     processing a template, there may be no value.  */
9900   type = value ? TREE_TYPE (value) : NULL_TREE;
9901
9902   if (context && context == current_class_type)
9903     /* This enum declaration is local to the class.  We need the full
9904        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
9905     decl = build_lang_decl (CONST_DECL, name, type);
9906   else
9907     /* It's a global enum, or it's local to a function.  (Note local to
9908       a function could mean local to a class method.  */
9909     decl = build_decl (CONST_DECL, name, type);
9910
9911   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
9912   TREE_CONSTANT (decl) = 1;
9913   TREE_INVARIANT (decl) = 1;
9914   TREE_READONLY (decl) = 1;
9915   DECL_INITIAL (decl) = value;
9916
9917   if (context && context == current_class_type)
9918     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
9919        on the TYPE_FIELDS list for `S'.  (That's so that you can say
9920        things like `S::i' later.)  */
9921     finish_member_declaration (decl);
9922   else
9923     pushdecl (decl);
9924
9925   /* Add this enumeration constant to the list for this type.  */
9926   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
9927 }
9928
9929 \f
9930 /* We're defining DECL.  Make sure that it's type is OK.  */
9931
9932 static void
9933 check_function_type (tree decl, tree current_function_parms)
9934 {
9935   tree fntype = TREE_TYPE (decl);
9936   tree return_type = complete_type (TREE_TYPE (fntype));
9937
9938   /* In a function definition, arg types must be complete.  */
9939   require_complete_types_for_parms (current_function_parms);
9940
9941   if (dependent_type_p (return_type))
9942     return;
9943   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
9944     {
9945       error ("return type %q#T is incomplete", TREE_TYPE (fntype));
9946
9947       /* Make it return void instead, but don't change the
9948          type of the DECL_RESULT, in case we have a named return value.  */
9949       if (TREE_CODE (fntype) == METHOD_TYPE)
9950         {
9951           tree ctype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype)));
9952           TREE_TYPE (decl)
9953             = build_method_type_directly (ctype,
9954                                           void_type_node,
9955                                           FUNCTION_ARG_CHAIN (decl));
9956         }
9957       else
9958         TREE_TYPE (decl)
9959           = build_function_type (void_type_node,
9960                                  TYPE_ARG_TYPES (TREE_TYPE (decl)));
9961       TREE_TYPE (decl)
9962         = build_exception_variant (fntype,
9963                                    TYPE_RAISES_EXCEPTIONS (fntype));
9964     }
9965   else
9966     abstract_virtuals_error (decl, TREE_TYPE (fntype));
9967 }
9968
9969 /* Create the FUNCTION_DECL for a function definition.
9970    DECLSPECS and DECLARATOR are the parts of the declaration;
9971    they describe the function's name and the type it returns,
9972    but twisted together in a fashion that parallels the syntax of C.
9973
9974    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
9975    DECLARATOR is really the DECL for the function we are about to
9976    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
9977    indicating that the function is an inline defined in-class.
9978
9979    This function creates a binding context for the function body
9980    as well as setting up the FUNCTION_DECL in current_function_decl.
9981
9982    For C++, we must first check whether that datum makes any sense.
9983    For example, "class A local_a(1,2);" means that variable local_a
9984    is an aggregate of type A, which should have a constructor
9985    applied to it with the argument list [1, 2].  */
9986
9987 void
9988 start_preparsed_function (tree decl1, tree attrs, int flags)
9989 {
9990   tree ctype = NULL_TREE;
9991   tree fntype;
9992   tree restype;
9993   int doing_friend = 0;
9994   struct cp_binding_level *bl;
9995   tree current_function_parms;
9996   struct c_fileinfo *finfo
9997     = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
9998
9999   /* Sanity check.  */
10000   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10001   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10002
10003   fntype = TREE_TYPE (decl1);
10004   if (TREE_CODE (fntype) == METHOD_TYPE)
10005     ctype = TYPE_METHOD_BASETYPE (fntype);
10006
10007   /* ISO C++ 11.4/5.  A friend function defined in a class is in
10008      the (lexical) scope of the class in which it is defined.  */
10009   if (!ctype && DECL_FRIEND_P (decl1))
10010     {
10011       ctype = DECL_FRIEND_CONTEXT (decl1);
10012
10013       /* CTYPE could be null here if we're dealing with a template;
10014          for example, `inline friend float foo()' inside a template
10015          will have no CTYPE set.  */
10016       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10017         ctype = NULL_TREE;
10018       else
10019         doing_friend = 1;
10020     }
10021
10022   if (DECL_DECLARED_INLINE_P (decl1)
10023       && lookup_attribute ("noinline", attrs))
10024     warning (0, "inline function %q+D given attribute noinline", decl1);
10025
10026   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10027     /* This is a constructor, we must ensure that any default args
10028        introduced by this definition are propagated to the clones
10029        now. The clones are used directly in overload resolution.  */
10030     adjust_clone_args (decl1);
10031
10032   /* Sometimes we don't notice that a function is a static member, and
10033      build a METHOD_TYPE for it.  Fix that up now.  */
10034   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10035       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10036     {
10037       revert_static_member_fn (decl1);
10038       ctype = NULL_TREE;
10039     }
10040
10041   /* Set up current_class_type, and enter the scope of the class, if
10042      appropriate.  */
10043   if (ctype)
10044     push_nested_class (ctype);
10045   else if (DECL_STATIC_FUNCTION_P (decl1))
10046     push_nested_class (DECL_CONTEXT (decl1));
10047
10048   /* Now that we have entered the scope of the class, we must restore
10049      the bindings for any template parameters surrounding DECL1, if it
10050      is an inline member template.  (Order is important; consider the
10051      case where a template parameter has the same name as a field of
10052      the class.)  It is not until after this point that
10053      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
10054   if (flags & SF_INCLASS_INLINE)
10055     maybe_begin_member_template_processing (decl1);
10056
10057   /* Effective C++ rule 15.  */
10058   if (warn_ecpp
10059       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10060       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10061     warning (0, "%<operator=%> should return a reference to %<*this%>");
10062
10063   /* Make the init_value nonzero so pushdecl knows this is not tentative.
10064      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
10065   if (!DECL_INITIAL (decl1))
10066     DECL_INITIAL (decl1) = error_mark_node;
10067
10068   /* This function exists in static storage.
10069      (This does not mean `static' in the C sense!)  */
10070   TREE_STATIC (decl1) = 1;
10071
10072   /* We must call push_template_decl after current_class_type is set
10073      up.  (If we are processing inline definitions after exiting a
10074      class scope, current_class_type will be NULL_TREE until set above
10075      by push_nested_class.)  */
10076   if (processing_template_decl)
10077     {
10078       /* FIXME: Handle error_mark_node more gracefully.  */
10079       tree newdecl1 = push_template_decl (decl1);
10080       if (newdecl1 != error_mark_node)
10081         decl1 = newdecl1;
10082     }
10083
10084   /* We are now in the scope of the function being defined.  */
10085   current_function_decl = decl1;
10086
10087   /* Save the parm names or decls from this function's declarator
10088      where store_parm_decls will find them.  */
10089   current_function_parms = DECL_ARGUMENTS (decl1);
10090
10091   /* Make sure the parameter and return types are reasonable.  When
10092      you declare a function, these types can be incomplete, but they
10093      must be complete when you define the function.  */
10094   check_function_type (decl1, current_function_parms);
10095
10096   /* Build the return declaration for the function.  */
10097   restype = TREE_TYPE (fntype);
10098   /* Promote the value to int before returning it.  */
10099   if (c_promoting_integer_type_p (restype))
10100     restype = type_promotes_to (restype);
10101   if (DECL_RESULT (decl1) == NULL_TREE)
10102     {
10103       tree resdecl;
10104
10105       resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10106       DECL_ARTIFICIAL (resdecl) = 1;
10107       DECL_IGNORED_P (resdecl) = 1;
10108       DECL_RESULT (decl1) = resdecl;
10109
10110       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10111     }
10112
10113   /* Initialize RTL machinery.  We cannot do this until
10114      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
10115      even when processing a template; this is how we get
10116      CFUN set up, and our per-function variables initialized.
10117      FIXME factor out the non-RTL stuff.  */
10118   bl = current_binding_level;
10119   allocate_struct_function (decl1);
10120   current_binding_level = bl;
10121
10122   /* Even though we're inside a function body, we still don't want to
10123      call expand_expr to calculate the size of a variable-sized array.
10124      We haven't necessarily assigned RTL to all variables yet, so it's
10125      not safe to try to expand expressions involving them.  */
10126   cfun->x_dont_save_pending_sizes_p = 1;
10127
10128   /* Start the statement-tree, start the tree now.  */
10129   DECL_SAVED_TREE (decl1) = push_stmt_list ();
10130
10131   /* Let the user know we're compiling this function.  */
10132   announce_function (decl1);
10133
10134   /* Record the decl so that the function name is defined.
10135      If we already have a decl for this name, and it is a FUNCTION_DECL,
10136      use the old decl.  */
10137   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10138     {
10139       /* A specialization is not used to guide overload resolution.  */
10140       if (!DECL_FUNCTION_MEMBER_P (decl1)
10141           && !(DECL_USE_TEMPLATE (decl1) &&
10142                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10143         {
10144           tree olddecl = pushdecl (decl1);
10145
10146           if (olddecl == error_mark_node)
10147             /* If something went wrong when registering the declaration,
10148                use DECL1; we have to have a FUNCTION_DECL to use when
10149                parsing the body of the function.  */
10150             ;
10151           else
10152             /* Otherwise, OLDDECL is either a previous declaration of
10153                the same function or DECL1 itself.  */
10154             decl1 = olddecl;
10155         }
10156       else
10157         {
10158           /* We need to set the DECL_CONTEXT.  */
10159           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10160             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10161           /* And make sure we have enough default args.  */
10162           check_default_args (decl1);
10163         }
10164       fntype = TREE_TYPE (decl1);
10165     }
10166
10167   /* Determine the ELF visibility attribute for the function.  We must
10168      not do this before calling "pushdecl", as we must allow
10169      "duplicate_decls" to merge any attributes appropriately.  */
10170   if (!DECL_CLONED_FUNCTION_P (decl1))
10171     determine_visibility (decl1);
10172
10173   /* Reset these in case the call to pushdecl changed them.  */
10174   current_function_decl = decl1;
10175   cfun->decl = decl1;
10176
10177   /* If we are (erroneously) defining a function that we have already
10178      defined before, wipe out what we knew before.  */
10179   if (!DECL_PENDING_INLINE_P (decl1))
10180     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10181
10182   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10183     {
10184       /* We know that this was set up by `grokclassfn'.  We do not
10185          wait until `store_parm_decls', since evil parse errors may
10186          never get us to that point.  Here we keep the consistency
10187          between `current_class_type' and `current_class_ptr'.  */
10188       tree t = DECL_ARGUMENTS (decl1);
10189
10190       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10191       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10192
10193       cp_function_chain->x_current_class_ref
10194         = build_indirect_ref (t, NULL);
10195       cp_function_chain->x_current_class_ptr = t;
10196
10197       /* Constructors and destructors need to know whether they're "in
10198          charge" of initializing virtual base classes.  */
10199       t = TREE_CHAIN (t);
10200       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10201         {
10202           current_in_charge_parm = t;
10203           t = TREE_CHAIN (t);
10204         }
10205       if (DECL_HAS_VTT_PARM_P (decl1))
10206         {
10207           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10208           current_vtt_parm = t;
10209         }
10210     }
10211
10212   if (DECL_INTERFACE_KNOWN (decl1))
10213     {
10214       tree ctx = decl_function_context (decl1);
10215
10216       if (DECL_NOT_REALLY_EXTERN (decl1))
10217         DECL_EXTERNAL (decl1) = 0;
10218
10219       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10220           && TREE_PUBLIC (ctx))
10221         /* This is a function in a local class in an extern inline
10222            function.  */
10223         comdat_linkage (decl1);
10224     }
10225   /* If this function belongs to an interface, it is public.
10226      If it belongs to someone else's interface, it is also external.
10227      This only affects inlines and template instantiations.  */
10228   else if (finfo->interface_unknown == 0
10229            && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10230     {
10231       if (DECL_DECLARED_INLINE_P (decl1)
10232           || DECL_TEMPLATE_INSTANTIATION (decl1)
10233           || processing_template_decl)
10234         {
10235           DECL_EXTERNAL (decl1)
10236             = (finfo->interface_only
10237                || (DECL_DECLARED_INLINE_P (decl1)
10238                    && ! flag_implement_inlines
10239                    && !DECL_VINDEX (decl1)));
10240
10241           /* For WIN32 we also want to put these in linkonce sections.  */
10242           maybe_make_one_only (decl1);
10243         }
10244       else
10245         DECL_EXTERNAL (decl1) = 0;
10246       DECL_NOT_REALLY_EXTERN (decl1) = 0;
10247       DECL_INTERFACE_KNOWN (decl1) = 1;
10248       /* If this function is in an interface implemented in this file,
10249          make sure that the backend knows to emit this function
10250          here.  */
10251       if (!DECL_EXTERNAL (decl1))
10252         mark_needed (decl1);
10253     }
10254   else if (finfo->interface_unknown && finfo->interface_only
10255            && ! DECL_TEMPLATE_INSTANTIATION (decl1))
10256     {
10257       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10258          interface, we will have both finfo->interface_unknown and
10259          finfo->interface_only set.  In that case, we don't want to
10260          use the normal heuristics because someone will supply a
10261          #pragma implementation elsewhere, and deducing it here would
10262          produce a conflict.  */
10263       comdat_linkage (decl1);
10264       DECL_EXTERNAL (decl1) = 0;
10265       DECL_INTERFACE_KNOWN (decl1) = 1;
10266       DECL_DEFER_OUTPUT (decl1) = 1;
10267     }
10268   else
10269     {
10270       /* This is a definition, not a reference.
10271          So clear DECL_EXTERNAL.  */
10272       DECL_EXTERNAL (decl1) = 0;
10273
10274       if ((DECL_DECLARED_INLINE_P (decl1)
10275            || DECL_TEMPLATE_INSTANTIATION (decl1))
10276           && ! DECL_INTERFACE_KNOWN (decl1)
10277           /* Don't try to defer nested functions for now.  */
10278           && ! decl_function_context (decl1))
10279         DECL_DEFER_OUTPUT (decl1) = 1;
10280       else
10281         DECL_INTERFACE_KNOWN (decl1) = 1;
10282     }
10283
10284   begin_scope (sk_function_parms, decl1);
10285
10286   ++function_depth;
10287
10288   if (DECL_DESTRUCTOR_P (decl1)
10289       || (DECL_CONSTRUCTOR_P (decl1)
10290           && targetm.cxx.cdtor_returns_this ()))
10291     {
10292       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10293       DECL_CONTEXT (cdtor_label) = current_function_decl;
10294     }
10295
10296   start_fname_decls ();
10297
10298   store_parm_decls (current_function_parms);
10299 }
10300
10301
10302 /* Like start_preparsed_function, except that instead of a
10303    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10304
10305    Returns 1 on success.  If the DECLARATOR is not suitable for a function
10306    (it defines a datum instead), we return 0, which tells
10307    yyparse to report a parse error.  */
10308
10309 int
10310 start_function (cp_decl_specifier_seq *declspecs,
10311                 const cp_declarator *declarator,
10312                 tree attrs)
10313 {
10314   tree decl1;
10315
10316   if (have_extern_spec)
10317     {
10318       declspecs->storage_class = sc_extern;
10319       /* This should only be done once on the outermost decl.  */
10320       have_extern_spec = false;
10321     }
10322
10323   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10324   /* If the declarator is not suitable for a function definition,
10325      cause a syntax error.  */
10326   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10327     return 0;
10328
10329   /* If #pragma weak was used, mark the decl weak now.  */
10330   if (global_scope_p (current_binding_level))
10331     maybe_apply_pragma_weak (decl1);
10332
10333   if (DECL_MAIN_P (decl1))
10334     /* main must return int.  grokfndecl should have corrected it
10335        (and issued a diagnostic) if the user got it wrong.  */
10336     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10337                              integer_type_node));
10338
10339   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10340
10341   return 1;
10342 }
10343 \f
10344 /* Store the parameter declarations into the current function declaration.
10345    This is called after parsing the parameter declarations, before
10346    digesting the body of the function.
10347
10348    Also install to binding contour return value identifier, if any.  */
10349
10350 static void
10351 store_parm_decls (tree current_function_parms)
10352 {
10353   tree fndecl = current_function_decl;
10354   tree parm;
10355
10356   /* This is a chain of any other decls that came in among the parm
10357      declarations.  If a parm is declared with  enum {foo, bar} x;
10358      then CONST_DECLs for foo and bar are put here.  */
10359   tree nonparms = NULL_TREE;
10360
10361   if (current_function_parms)
10362     {
10363       /* This case is when the function was defined with an ANSI prototype.
10364          The parms already have decls, so we need not do anything here
10365          except record them as in effect
10366          and complain if any redundant old-style parm decls were written.  */
10367
10368       tree specparms = current_function_parms;
10369       tree next;
10370
10371       /* Must clear this because it might contain TYPE_DECLs declared
10372              at class level.  */
10373       current_binding_level->names = NULL;
10374
10375       /* If we're doing semantic analysis, then we'll call pushdecl
10376              for each of these.  We must do them in reverse order so that
10377              they end in the correct forward order.  */
10378       specparms = nreverse (specparms);
10379
10380       for (parm = specparms; parm; parm = next)
10381         {
10382           next = TREE_CHAIN (parm);
10383           if (TREE_CODE (parm) == PARM_DECL)
10384             {
10385               if (DECL_NAME (parm) == NULL_TREE
10386                   || TREE_CODE (parm) != VOID_TYPE)
10387                 pushdecl (parm);
10388               else
10389                 error ("parameter %qD declared void", parm);
10390             }
10391           else
10392             {
10393               /* If we find an enum constant or a type tag,
10394                  put it aside for the moment.  */
10395               TREE_CHAIN (parm) = NULL_TREE;
10396               nonparms = chainon (nonparms, parm);
10397             }
10398         }
10399
10400       /* Get the decls in their original chain order and record in the
10401          function.  This is all and only the PARM_DECLs that were
10402          pushed into scope by the loop above.  */
10403       DECL_ARGUMENTS (fndecl) = getdecls ();
10404     }
10405   else
10406     DECL_ARGUMENTS (fndecl) = NULL_TREE;
10407
10408   /* Now store the final chain of decls for the arguments
10409      as the decl-chain of the current lexical scope.
10410      Put the enumerators in as well, at the front so that
10411      DECL_ARGUMENTS is not modified.  */
10412   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10413
10414   /* For a cloned function, we've already got all the code we need;
10415      there's no need to add any extra bits.  */
10416   if (!DECL_CLONED_FUNCTION_P (fndecl))
10417     {
10418       /* Do the starting of the exception specifications, if we have any.  */
10419       if (flag_exceptions && !processing_template_decl
10420           && flag_enforce_eh_specs
10421           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10422         current_eh_spec_block = begin_eh_spec_block ();
10423     }
10424 }
10425
10426 \f
10427 /* We have finished doing semantic analysis on DECL, but have not yet
10428    generated RTL for its body.  Save away our current state, so that
10429    when we want to generate RTL later we know what to do.  */
10430
10431 static void
10432 save_function_data (tree decl)
10433 {
10434   struct language_function *f;
10435
10436   /* Save the language-specific per-function data so that we can
10437      get it back when we really expand this function.  */
10438   gcc_assert (!DECL_PENDING_INLINE_P (decl));
10439
10440   /* Make a copy.  */
10441   f = GGC_NEW (struct language_function);
10442   memcpy (f, cp_function_chain, sizeof (struct language_function));
10443   DECL_SAVED_FUNCTION_DATA (decl) = f;
10444
10445   /* Clear out the bits we don't need.  */
10446   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10447   f->x_named_label_uses = NULL;
10448   f->bindings = NULL;
10449   f->x_local_names = NULL;
10450 }
10451
10452
10453 /* Set the return value of the constructor (if present).  */
10454
10455 static void
10456 finish_constructor_body (void)
10457 {
10458   tree val;
10459   tree exprstmt;
10460
10461   if (targetm.cxx.cdtor_returns_this ())
10462     {
10463       /* Any return from a constructor will end up here.  */
10464       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10465
10466       val = DECL_ARGUMENTS (current_function_decl);
10467       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10468                     DECL_RESULT (current_function_decl), val);
10469       /* Return the address of the object.  */
10470       exprstmt = build_stmt (RETURN_EXPR, val);
10471       add_stmt (exprstmt);
10472     }
10473 }
10474
10475 /* Do all the processing for the beginning of a destructor; set up the
10476    vtable pointers and cleanups for bases and members.  */
10477
10478 static void
10479 begin_destructor_body (void)
10480 {
10481   tree if_stmt;
10482   tree compound_stmt;
10483
10484   /* If the dtor is empty, and we know there is not any possible
10485      way we could use any vtable entries, before they are possibly
10486      set by a base class dtor, we don't have to setup the vtables,
10487      as we know that any base class dtor will set up any vtables
10488      it needs.  We avoid MI, because one base class dtor can do a
10489      virtual dispatch to an overridden function that would need to
10490      have a non-related vtable set up, we cannot avoid setting up
10491      vtables in that case.  We could change this to see if there
10492      is just one vtable.
10493
10494      ??? In the destructor for a class, the vtables are set
10495      appropriately for that class.  There will be no non-related
10496      vtables.  jason 2001-12-11.  */
10497   if_stmt = begin_if_stmt ();
10498
10499   /* If it is not safe to avoid setting up the vtables, then
10500      someone will change the condition to be boolean_true_node.
10501      (Actually, for now, we do not have code to set the condition
10502      appropriately, so we just assume that we always need to
10503      initialize the vtables.)  */
10504   finish_if_stmt_cond (boolean_true_node, if_stmt);
10505
10506   compound_stmt = begin_compound_stmt (0);
10507
10508   /* Make all virtual function table pointers in non-virtual base
10509      classes point to CURRENT_CLASS_TYPE's virtual function
10510      tables.  */
10511   initialize_vtbl_ptrs (current_class_ptr);
10512
10513   finish_compound_stmt (compound_stmt);
10514   finish_then_clause (if_stmt);
10515   finish_if_stmt (if_stmt);
10516
10517   /* And insert cleanups for our bases and members so that they
10518      will be properly destroyed if we throw.  */
10519   push_base_cleanups ();
10520 }
10521
10522 /* At the end of every destructor we generate code to delete the object if
10523    necessary.  Do that now.  */
10524
10525 static void
10526 finish_destructor_body (void)
10527 {
10528   tree exprstmt;
10529
10530   /* Any return from a destructor will end up here; that way all base
10531      and member cleanups will be run when the function returns.  */
10532   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10533
10534   /* In a virtual destructor, we must call delete.  */
10535   if (DECL_VIRTUAL_P (current_function_decl))
10536     {
10537       tree if_stmt;
10538       tree virtual_size = cxx_sizeof (current_class_type);
10539
10540       /* [class.dtor]
10541
10542       At the point of definition of a virtual destructor (including
10543       an implicit definition), non-placement operator delete shall
10544       be looked up in the scope of the destructor's class and if
10545       found shall be accessible and unambiguous.  */
10546       exprstmt = build_op_delete_call
10547         (DELETE_EXPR, current_class_ptr, virtual_size,
10548          /*global_p=*/false, NULL_TREE);
10549
10550       if_stmt = begin_if_stmt ();
10551       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10552                                    current_in_charge_parm,
10553                                    integer_one_node),
10554                            if_stmt);
10555       finish_expr_stmt (exprstmt);
10556       finish_then_clause (if_stmt);
10557       finish_if_stmt (if_stmt);
10558     }
10559
10560   if (targetm.cxx.cdtor_returns_this ())
10561     {
10562       tree val;
10563
10564       val = DECL_ARGUMENTS (current_function_decl);
10565       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10566                     DECL_RESULT (current_function_decl), val);
10567       /* Return the address of the object.  */
10568       exprstmt = build_stmt (RETURN_EXPR, val);
10569       add_stmt (exprstmt);
10570     }
10571 }
10572
10573 /* Do the necessary processing for the beginning of a function body, which
10574    in this case includes member-initializers, but not the catch clauses of
10575    a function-try-block.  Currently, this means opening a binding level
10576    for the member-initializers (in a ctor) and member cleanups (in a dtor).
10577    In other functions, this isn't necessary, but it doesn't hurt.  */
10578
10579 tree
10580 begin_function_body (void)
10581 {
10582   tree stmt;
10583
10584   if (processing_template_decl)
10585     /* Do nothing now.  */;
10586   else
10587     /* Always keep the BLOCK node associated with the outermost pair of
10588        curly braces of a function.  These are needed for correct
10589        operation of dwarfout.c.  */
10590     keep_next_level (true);
10591
10592   stmt = begin_compound_stmt (BCS_FN_BODY);
10593
10594   if (processing_template_decl)
10595     /* Do nothing now.  */;
10596   else if (DECL_DESTRUCTOR_P (current_function_decl))
10597     begin_destructor_body ();
10598
10599   return stmt;
10600 }
10601
10602 /* Do the processing for the end of a function body.  Currently, this means
10603    closing out the cleanups for fully-constructed bases and members, and in
10604    the case of the destructor, deleting the object if desired.  Again, this
10605    is only meaningful for [cd]tors, since they are the only functions where
10606    there is a significant distinction between the main body and any
10607    function catch clauses.  Handling, say, main() return semantics here
10608    would be wrong, as flowing off the end of a function catch clause for
10609    main() would also need to return 0.  */
10610
10611 void
10612 finish_function_body (tree compstmt)
10613 {
10614   /* Close the block.  */
10615   finish_compound_stmt (compstmt);
10616
10617   if (processing_template_decl)
10618     /* Do nothing now.  */;
10619   else if (DECL_CONSTRUCTOR_P (current_function_decl))
10620     finish_constructor_body ();
10621   else if (DECL_DESTRUCTOR_P (current_function_decl))
10622     finish_destructor_body ();
10623 }
10624
10625 /* Finish up a function declaration and compile that function
10626    all the way to assembler language output.  The free the storage
10627    for the function definition.
10628
10629    FLAGS is a bitwise or of the following values:
10630      2 - INCLASS_INLINE
10631        We just finished processing the body of an in-class inline
10632        function definition.  (This processing will have taken place
10633        after the class definition is complete.)  */
10634
10635 tree
10636 finish_function (int flags)
10637 {
10638   tree fndecl = current_function_decl;
10639   tree fntype, ctype = NULL_TREE;
10640   int inclass_inline = (flags & 2) != 0;
10641   int nested;
10642
10643   /* When we get some parse errors, we can end up without a
10644      current_function_decl, so cope.  */
10645   if (fndecl == NULL_TREE)
10646     return error_mark_node;
10647
10648   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10649       && DECL_VIRTUAL_P (fndecl)
10650       && !processing_template_decl)
10651     {
10652       tree fnclass = DECL_CONTEXT (fndecl);
10653       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10654         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10655     }
10656
10657   nested = function_depth > 1;
10658   fntype = TREE_TYPE (fndecl);
10659
10660   /*  TREE_READONLY (fndecl) = 1;
10661       This caused &foo to be of type ptr-to-const-function
10662       which then got a warning when stored in a ptr-to-function variable.  */
10663
10664   gcc_assert (building_stmt_tree ());
10665
10666   /* For a cloned function, we've already got all the code we need;
10667      there's no need to add any extra bits.  */
10668   if (!DECL_CLONED_FUNCTION_P (fndecl))
10669     {
10670       if (DECL_MAIN_P (current_function_decl))
10671         {
10672           tree stmt;
10673
10674           /* Make it so that `main' always returns 0 by default (or
10675              1 for VMS).  */
10676 #if VMS_TARGET
10677           stmt = finish_return_stmt (integer_one_node);
10678 #else
10679           stmt = finish_return_stmt (integer_zero_node);
10680 #endif
10681           /* Hack.  We don't want the middle-end to warn that this
10682              return is unreachable, so put the statement on the
10683              special line 0.  */
10684 #ifdef USE_MAPPED_LOCATION
10685           SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10686 #else
10687           annotate_with_file_line (stmt, input_filename, 0);
10688 #endif
10689         }
10690
10691       /* Finish dealing with exception specifiers.  */
10692       if (flag_exceptions && !processing_template_decl
10693           && flag_enforce_eh_specs
10694           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl)))
10695         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10696                               (TREE_TYPE (current_function_decl)),
10697                               current_eh_spec_block);
10698     }
10699
10700   /* If we're saving up tree structure, tie off the function now.  */
10701   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10702
10703   finish_fname_decls ();
10704
10705   /* If this function can't throw any exceptions, remember that.  */
10706   if (!processing_template_decl
10707       && !cp_function_chain->can_throw
10708       && !flag_non_call_exceptions)
10709     TREE_NOTHROW (fndecl) = 1;
10710
10711   /* This must come after expand_function_end because cleanups might
10712      have declarations (from inline functions) that need to go into
10713      this function's blocks.  */
10714
10715   /* If the current binding level isn't the outermost binding level
10716      for this function, either there is a bug, or we have experienced
10717      syntax errors and the statement tree is malformed.  */
10718   if (current_binding_level->kind != sk_function_parms)
10719     {
10720       /* Make sure we have already experienced errors.  */
10721       gcc_assert (errorcount);
10722
10723       /* Throw away the broken statement tree and extra binding
10724          levels.  */
10725       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10726
10727       while (current_binding_level->kind != sk_function_parms)
10728         {
10729           if (current_binding_level->kind == sk_class)
10730             pop_nested_class ();
10731           else
10732             poplevel (0, 0, 0);
10733         }
10734     }
10735   poplevel (1, 0, 1);
10736
10737   /* Statements should always be full-expressions at the outermost set
10738      of curly braces for a function.  */
10739   gcc_assert (stmts_are_full_exprs_p ());
10740
10741   /* Set up the named return value optimization, if we can.  Candidate
10742      variables are selected in check_return_value.  */
10743   if (current_function_return_value)
10744     {
10745       tree r = current_function_return_value;
10746       tree outer;
10747
10748       if (r != error_mark_node
10749           /* This is only worth doing for fns that return in memory--and
10750              simpler, since we don't have to worry about promoted modes.  */
10751           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
10752           /* Only allow this for variables declared in the outer scope of
10753              the function so we know that their lifetime always ends with a
10754              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
10755              we were to do this optimization in tree-ssa.  */
10756           && (outer = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl)))
10757           /* Skip the artificial function body block.  */
10758           && (outer = BLOCK_SUBBLOCKS (outer))
10759           && chain_member (r, BLOCK_VARS (outer)))
10760         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
10761
10762       current_function_return_value = NULL_TREE;
10763     }
10764
10765   /* Remember that we were in class scope.  */
10766   if (current_class_name)
10767     ctype = current_class_type;
10768
10769   /* Must mark the RESULT_DECL as being in this function.  */
10770   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
10771
10772   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
10773      to the FUNCTION_DECL node itself.  */
10774   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
10775
10776   /* Save away current state, if appropriate.  */
10777   if (!processing_template_decl)
10778     save_function_data (fndecl);
10779
10780   /* Complain if there's just no return statement.  */
10781   if (warn_return_type
10782       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
10783       && !dependent_type_p (TREE_TYPE (fntype))
10784       && !current_function_returns_value && !current_function_returns_null
10785       /* Don't complain if we abort or throw.  */
10786       && !current_function_returns_abnormally
10787       && !DECL_NAME (DECL_RESULT (fndecl))
10788       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
10789          inline function, as we might never be compiled separately.  */
10790       && (DECL_INLINE (fndecl) || processing_template_decl)
10791       /* Structor return values (if any) are set by the compiler.  */
10792       && !DECL_CONSTRUCTOR_P (fndecl)
10793       && !DECL_DESTRUCTOR_P (fndecl))
10794     warning (0, "no return statement in function returning non-void");
10795
10796   /* Store the end of the function, so that we get good line number
10797      info for the epilogue.  */
10798   cfun->function_end_locus = input_location;
10799
10800   /* Genericize before inlining.  */
10801   if (!processing_template_decl)
10802     {
10803       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
10804       cp_genericize (fndecl);
10805       /* Clear out the bits we don't need.  */
10806       f->x_current_class_ptr = NULL;
10807       f->x_current_class_ref = NULL;
10808       f->x_eh_spec_block = NULL;
10809       f->x_in_charge_parm = NULL;
10810       f->x_vtt_parm = NULL;
10811       f->x_return_value = NULL;
10812       f->bindings = NULL;
10813
10814       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
10815       c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
10816     }
10817   /* Clear out the bits we don't need.  */
10818   local_names = NULL;
10819   named_label_uses = NULL;
10820
10821   /* We're leaving the context of this function, so zap cfun.  It's still in
10822      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
10823   cfun = NULL;
10824   current_function_decl = NULL;
10825
10826   /* If this is an in-class inline definition, we may have to pop the
10827      bindings for the template parameters that we added in
10828      maybe_begin_member_template_processing when start_function was
10829      called.  */
10830   if (inclass_inline)
10831     maybe_end_member_template_processing ();
10832
10833   /* Leave the scope of the class.  */
10834   if (ctype)
10835     pop_nested_class ();
10836
10837   --function_depth;
10838
10839   /* Clean up.  */
10840   if (! nested)
10841     /* Let the error reporting routines know that we're outside a
10842        function.  For a nested function, this value is used in
10843        cxx_pop_function_context and then reset via pop_function_context.  */
10844     current_function_decl = NULL_TREE;
10845
10846   return fndecl;
10847 }
10848 \f
10849 /* Create the FUNCTION_DECL for a function definition.
10850    DECLSPECS and DECLARATOR are the parts of the declaration;
10851    they describe the return type and the name of the function,
10852    but twisted together in a fashion that parallels the syntax of C.
10853
10854    This function creates a binding context for the function body
10855    as well as setting up the FUNCTION_DECL in current_function_decl.
10856
10857    Returns a FUNCTION_DECL on success.
10858
10859    If the DECLARATOR is not suitable for a function (it defines a datum
10860    instead), we return 0, which tells yyparse to report a parse error.
10861
10862    May return void_type_node indicating that this method is actually
10863    a friend.  See grokfield for more details.
10864
10865    Came here with a `.pushlevel' .
10866
10867    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
10868    CHANGES TO CODE IN `grokfield'.  */
10869
10870 tree
10871 start_method (cp_decl_specifier_seq *declspecs,
10872               const cp_declarator *declarator, tree attrlist)
10873 {
10874   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
10875                                 &attrlist);
10876
10877   if (fndecl == error_mark_node)
10878     return error_mark_node;
10879
10880   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
10881     {
10882       error ("invalid member function declaration");
10883       return error_mark_node;
10884     }
10885
10886   if (attrlist)
10887     cplus_decl_attributes (&fndecl, attrlist, 0);
10888
10889   /* Pass friends other than inline friend functions back.  */
10890   if (fndecl == void_type_node)
10891     return fndecl;
10892
10893   if (DECL_IN_AGGR_P (fndecl))
10894     {
10895       if (DECL_CONTEXT (fndecl)
10896           && TREE_CODE( DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
10897         error ("%qD is already defined in class %qT", fndecl,
10898                DECL_CONTEXT (fndecl));
10899       return void_type_node;
10900     }
10901
10902   check_template_shadow (fndecl);
10903
10904   DECL_DECLARED_INLINE_P (fndecl) = 1;
10905   if (flag_default_inline)
10906     DECL_INLINE (fndecl) = 1;
10907
10908   /* We process method specializations in finish_struct_1.  */
10909   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
10910     {
10911       fndecl = push_template_decl (fndecl);
10912       if (fndecl == error_mark_node)
10913         return fndecl;
10914     }
10915
10916   if (! DECL_FRIEND_P (fndecl))
10917     {
10918       if (TREE_CHAIN (fndecl))
10919         {
10920           fndecl = copy_node (fndecl);
10921           TREE_CHAIN (fndecl) = NULL_TREE;
10922         }
10923       grok_special_member_properties (fndecl);
10924     }
10925
10926   cp_finish_decl (fndecl, NULL_TREE, NULL_TREE, 0);
10927
10928   /* Make a place for the parms.  */
10929   begin_scope (sk_function_parms, fndecl);
10930
10931   DECL_IN_AGGR_P (fndecl) = 1;
10932   return fndecl;
10933 }
10934
10935 /* Go through the motions of finishing a function definition.
10936    We don't compile this method until after the whole class has
10937    been processed.
10938
10939    FINISH_METHOD must return something that looks as though it
10940    came from GROKFIELD (since we are defining a method, after all).
10941
10942    This is called after parsing the body of the function definition.
10943    STMTS is the chain of statements that makes up the function body.
10944
10945    DECL is the ..._DECL that `start_method' provided.  */
10946
10947 tree
10948 finish_method (tree decl)
10949 {
10950   tree fndecl = decl;
10951   tree old_initial;
10952
10953   tree link;
10954
10955   if (decl == void_type_node)
10956     return decl;
10957
10958   old_initial = DECL_INITIAL (fndecl);
10959
10960   /* Undo the level for the parms (from start_method).
10961      This is like poplevel, but it causes nothing to be
10962      saved.  Saving information here confuses symbol-table
10963      output routines.  Besides, this information will
10964      be correctly output when this method is actually
10965      compiled.  */
10966
10967   /* Clear out the meanings of the local variables of this level;
10968      also record in each decl which block it belongs to.  */
10969
10970   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
10971     {
10972       if (DECL_NAME (link) != NULL_TREE)
10973         pop_binding (DECL_NAME (link), link);
10974       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
10975       DECL_CONTEXT (link) = NULL_TREE;
10976     }
10977
10978   poplevel (0, 0, 0);
10979
10980   DECL_INITIAL (fndecl) = old_initial;
10981
10982   /* We used to check if the context of FNDECL was different from
10983      current_class_type as another way to get inside here.  This didn't work
10984      for String.cc in libg++.  */
10985   if (DECL_FRIEND_P (fndecl))
10986     {
10987       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
10988                      fndecl);
10989       decl = void_type_node;
10990     }
10991
10992   return decl;
10993 }
10994 \f
10995
10996 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
10997    we can lay it out later, when and if its type becomes complete.  */
10998
10999 void
11000 maybe_register_incomplete_var (tree var)
11001 {
11002   gcc_assert (TREE_CODE (var) == VAR_DECL);
11003
11004   /* Keep track of variables with incomplete types.  */
11005   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11006       && DECL_EXTERNAL (var))
11007     {
11008       tree inner_type = TREE_TYPE (var);
11009
11010       while (TREE_CODE (inner_type) == ARRAY_TYPE)
11011         inner_type = TREE_TYPE (inner_type);
11012       inner_type = TYPE_MAIN_VARIANT (inner_type);
11013
11014       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11015           /* RTTI TD entries are created while defining the type_info.  */
11016           || (TYPE_LANG_SPECIFIC (inner_type)
11017               && TYPE_BEING_DEFINED (inner_type)))
11018         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11019     }
11020 }
11021
11022 /* Called when a class type (given by TYPE) is defined.  If there are
11023    any existing VAR_DECLs whose type hsa been completed by this
11024    declaration, update them now.  */
11025
11026 void
11027 complete_vars (tree type)
11028 {
11029   tree *list = &incomplete_vars;
11030
11031   gcc_assert (CLASS_TYPE_P (type));
11032   while (*list)
11033     {
11034       if (same_type_p (type, TREE_PURPOSE (*list)))
11035         {
11036           tree var = TREE_VALUE (*list);
11037           tree type = TREE_TYPE (var);
11038           /* Complete the type of the variable.  The VAR_DECL itself
11039              will be laid out in expand_expr.  */
11040           complete_type (type);
11041           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11042           /* Remove this entry from the list.  */
11043           *list = TREE_CHAIN (*list);
11044         }
11045       else
11046         list = &TREE_CHAIN (*list);
11047     }
11048
11049   /* Check for pending declarations which may have abstract type.  */
11050   complete_type_check_abstract (type);
11051 }
11052
11053 /* If DECL is of a type which needs a cleanup, build that cleanup
11054    here.  */
11055
11056 tree
11057 cxx_maybe_build_cleanup (tree decl)
11058 {
11059   tree type = TREE_TYPE (decl);
11060
11061   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11062     {
11063       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11064       tree rval;
11065       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11066                          && CLASSTYPE_VBASECLASSES (type));
11067
11068       if (TREE_CODE (type) == ARRAY_TYPE)
11069         rval = decl;
11070       else
11071         {
11072           cxx_mark_addressable (decl);
11073           rval = build_unary_op (ADDR_EXPR, decl, 0);
11074         }
11075
11076       /* Optimize for space over speed here.  */
11077       if (!has_vbases || flag_expensive_optimizations)
11078         flags |= LOOKUP_NONVIRTUAL;
11079
11080       rval = build_delete (TREE_TYPE (rval), rval,
11081                            sfk_complete_destructor, flags, 0);
11082
11083       return rval;
11084     }
11085   return NULL_TREE;
11086 }
11087 \f
11088 /* When a stmt has been parsed, this function is called.  */
11089
11090 void
11091 finish_stmt (void)
11092 {
11093 }
11094
11095 /* DECL was originally constructed as a non-static member function,
11096    but turned out to be static.  Update it accordingly.  */
11097
11098 void
11099 revert_static_member_fn (tree decl)
11100 {
11101   tree tmp;
11102   tree function = TREE_TYPE (decl);
11103   tree args = TYPE_ARG_TYPES (function);
11104
11105   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11106       != TYPE_UNQUALIFIED)
11107     error ("static member function %q#D declared with type qualifiers", decl);
11108
11109   args = TREE_CHAIN (args);
11110   tmp = build_function_type (TREE_TYPE (function), args);
11111   tmp = build_qualified_type (tmp, cp_type_quals (function));
11112   tmp = build_exception_variant (tmp,
11113                                  TYPE_RAISES_EXCEPTIONS (function));
11114   TREE_TYPE (decl) = tmp;
11115   if (DECL_ARGUMENTS (decl))
11116     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11117   DECL_STATIC_FUNCTION_P (decl) = 1;
11118 }
11119
11120 /* Initialize the variables used during compilation of a C++
11121    function.  */
11122
11123 void
11124 cxx_push_function_context (struct function * f)
11125 {
11126   struct language_function *p = GGC_CNEW (struct language_function);
11127   f->language = p;
11128
11129   /* Whenever we start a new function, we destroy temporaries in the
11130      usual way.  */
11131   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11132
11133   if (f->decl)
11134     {
11135       tree fn = f->decl;
11136
11137       if (DECL_SAVED_FUNCTION_DATA (fn))
11138         {
11139           /* If we already parsed this function, and we're just expanding it
11140              now, restore saved state.  */
11141           *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11142
11143           /* We don't need the saved data anymore.  Unless this is an inline
11144              function; we need the named return value info for
11145              declare_return_variable.  */
11146           if (! DECL_INLINE (fn))
11147             DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11148         }
11149     }
11150 }
11151
11152 /* Free the language-specific parts of F, now that we've finished
11153    compiling the function.  */
11154
11155 void
11156 cxx_pop_function_context (struct function * f)
11157 {
11158   f->language = 0;
11159 }
11160
11161 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11162    one of the language-independent trees.  */
11163
11164 enum cp_tree_node_structure_enum
11165 cp_tree_node_structure (union lang_tree_node * t)
11166 {
11167   switch (TREE_CODE (&t->generic))
11168     {
11169     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
11170     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
11171     case OVERLOAD:              return TS_CP_OVERLOAD;
11172     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
11173     case TINST_LEVEL:           return TS_CP_TINST_LEVEL;
11174     case PTRMEM_CST:            return TS_CP_PTRMEM;
11175     case BASELINK:              return TS_CP_BASELINK;
11176     default:                    return TS_CP_GENERIC;
11177     }
11178 }
11179
11180 /* Build the void_list_node (void_type_node having been created).  */
11181 tree
11182 build_void_list_node (void)
11183 {
11184   tree t = build_tree_list (NULL_TREE, void_type_node);
11185   return t;
11186 }
11187
11188 bool
11189 cp_missing_noreturn_ok_p (tree decl)
11190 {
11191   /* A missing noreturn is ok for the `main' function.  */
11192   return DECL_MAIN_P (decl);
11193 }
11194
11195 /* Return the COMDAT group into which DECL should be placed.  */
11196
11197 const char *
11198 cxx_comdat_group (tree decl)
11199 {
11200   tree name;
11201
11202   /* Virtual tables, construction virtual tables, and virtual table
11203      tables all go in a single COMDAT group, named after the primary
11204      virtual table.  */
11205   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11206     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11207   /* For all other DECLs, the COMDAT group is the mangled name of the
11208      declaration itself.  */
11209   else
11210     {
11211       while (DECL_THUNK_P (decl))
11212         {
11213           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11214              into the same section as the target function.  In that case
11215              we must return target's name.  */
11216           tree target = THUNK_TARGET (decl);
11217           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11218               && DECL_SECTION_NAME (target) != NULL
11219               && DECL_ONE_ONLY (target))
11220             decl = target;
11221           else
11222             break;
11223         }
11224       name = DECL_ASSEMBLER_NAME (decl);
11225     }
11226
11227   return IDENTIFIER_POINTER (name);
11228 }
11229
11230 #include "gt-cp-decl.h"