OSDN Git Service

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