OSDN Git Service

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