OSDN Git Service

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