OSDN Git Service

* parser.c (cp_parser_init_declarator): Initialise
[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         }
5182       /* If the variable has an array type, lay out the type, even if
5183          there is no initializer.  It is valid to index through the
5184          array, and we must get TYPE_ALIGN set correctly on the array
5185          type.  */
5186       else if (TREE_CODE (type) == ARRAY_TYPE)
5187         layout_type (type);
5188     }
5189
5190   /* Add this declaration to the statement-tree.  This needs to happen
5191      after the call to check_initializer so that the DECL_EXPR for a
5192      reference temp is added before the DECL_EXPR for the reference itself.  */
5193   if (at_function_scope_p ())
5194     add_decl_expr (decl);
5195
5196   if (TREE_CODE (decl) == VAR_DECL)
5197     layout_var_decl (decl);
5198
5199   /* Output the assembler code and/or RTL code for variables and functions,
5200      unless the type is an undefined structure or union.
5201      If not, it will get done when the type is completed.  */
5202   if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
5203     {
5204       if (TREE_CODE (decl) == VAR_DECL)
5205         maybe_commonize_var (decl);
5206
5207       make_rtl_for_nonlocal_decl (decl, init, asmspec);
5208
5209       /* Check for abstractness of the type. Notice that there is no
5210          need to strip array types here since the check for those types
5211          is already done within create_array_type_for_decl.  */
5212       if (TREE_CODE (type) == FUNCTION_TYPE
5213           || TREE_CODE (type) == METHOD_TYPE)
5214         abstract_virtuals_error (decl, TREE_TYPE (type));
5215       else
5216         abstract_virtuals_error (decl, type);
5217
5218       if (TREE_CODE (decl) == FUNCTION_DECL
5219           || TREE_TYPE (decl) == error_mark_node)
5220         /* No initialization required.  */
5221         ;
5222       else if (DECL_EXTERNAL (decl)
5223                && ! (DECL_LANG_SPECIFIC (decl)
5224                      && DECL_NOT_REALLY_EXTERN (decl)))
5225         {
5226           if (init)
5227             DECL_INITIAL (decl) = init;
5228         }
5229       else
5230         {
5231           /* A variable definition.  */
5232           if (DECL_FUNCTION_SCOPE_P (decl))
5233             {
5234               /* Initialize the local variable.  */
5235               if (processing_template_decl)
5236                 {
5237                   if (init || DECL_INITIAL (decl) == error_mark_node)
5238                     DECL_INITIAL (decl) = init;
5239                 }
5240               else if (!TREE_STATIC (decl))
5241                 initialize_local_var (decl, init);
5242             }
5243
5244           /* The variable is being defined, so determine its visibility.
5245              This needs to happen after the linkage is set. */
5246           determine_visibility (decl);
5247
5248           /* If a variable is defined, and then a subsequent
5249              definition with external linkage is encountered, we will
5250              get here twice for the same variable.  We want to avoid
5251              calling expand_static_init more than once.  For variables
5252              that are not static data members, we can call
5253              expand_static_init only when we actually process the
5254              initializer.  It is not legal to redeclare a static data
5255              member, so this issue does not arise in that case.  */
5256           if (var_definition_p && TREE_STATIC (decl))
5257             expand_static_init (decl, init);
5258         }
5259     }
5260
5261   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5262      reference, insert it in the statement-tree now.  */
5263   if (cleanup)
5264     push_cleanup (decl, cleanup, false);
5265
5266  finish_end:
5267
5268   if (was_readonly)
5269     TREE_READONLY (decl) = 1;
5270
5271   /* If this was marked 'used', be sure it will be output.  */
5272   if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5273     mark_decl_referenced (decl);
5274 }
5275
5276 /* This is here for a midend callback from c-common.c.  */
5277
5278 void
5279 finish_decl (tree decl, tree init, tree asmspec_tree)
5280 {
5281   cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5282 }
5283
5284 /* Returns a declaration for a VAR_DECL as if:
5285
5286      extern "C" TYPE NAME;
5287
5288    had been seen.  Used to create compiler-generated global
5289    variables.  */
5290
5291 static tree
5292 declare_global_var (tree name, tree type)
5293 {
5294   tree decl;
5295
5296   push_to_top_level ();
5297   decl = build_decl (VAR_DECL, name, type);
5298   TREE_PUBLIC (decl) = 1;
5299   DECL_EXTERNAL (decl) = 1;
5300   DECL_ARTIFICIAL (decl) = 1;
5301   /* If the user has explicitly declared this variable (perhaps
5302      because the code we are compiling is part of a low-level runtime
5303      library), then it is possible that our declaration will be merged
5304      with theirs by pushdecl.  */
5305   decl = pushdecl (decl);
5306   finish_decl (decl, NULL_TREE, NULL_TREE);
5307   pop_from_top_level ();
5308
5309   return decl;
5310 }
5311
5312 /* Returns a pointer to the `atexit' function.  Note that if
5313    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5314    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
5315
5316 static tree
5317 get_atexit_node (void)
5318 {
5319   tree atexit_fndecl;
5320   tree arg_types;
5321   tree fn_type;
5322   tree fn_ptr_type;
5323   const char *name;
5324   bool use_aeabi_atexit;
5325
5326   if (atexit_node)
5327     return atexit_node;
5328
5329   if (flag_use_cxa_atexit)
5330     {
5331       /* The declaration for `__cxa_atexit' is:
5332
5333            int __cxa_atexit (void (*)(void *), void *, void *)
5334
5335          We build up the argument types and then then function type
5336          itself.  */
5337
5338       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5339       /* First, build the pointer-to-function type for the first
5340          argument.  */
5341       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5342       fn_type = build_function_type (void_type_node, arg_types);
5343       fn_ptr_type = build_pointer_type (fn_type);
5344       /* Then, build the rest of the argument types.  */
5345       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5346       if (use_aeabi_atexit)
5347         {
5348           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5349           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5350         }
5351       else
5352         {
5353           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5354           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5355         }
5356       /* And the final __cxa_atexit type.  */
5357       fn_type = build_function_type (integer_type_node, arg_types);
5358       fn_ptr_type = build_pointer_type (fn_type);
5359       if (use_aeabi_atexit)
5360         name = "__aeabi_atexit";
5361       else
5362         name = "__cxa_atexit";
5363     }
5364   else
5365     {
5366       /* The declaration for `atexit' is:
5367
5368            int atexit (void (*)());
5369
5370          We build up the argument types and then then function type
5371          itself.  */
5372       fn_type = build_function_type (void_type_node, void_list_node);
5373       fn_ptr_type = build_pointer_type (fn_type);
5374       arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
5375       /* Build the final atexit type.  */
5376       fn_type = build_function_type (integer_type_node, arg_types);
5377       name = "atexit";
5378     }
5379
5380   /* Now, build the function declaration.  */
5381   push_lang_context (lang_name_c);
5382   atexit_fndecl = build_library_fn_ptr (name, fn_type);
5383   mark_used (atexit_fndecl);
5384   pop_lang_context ();
5385   atexit_node = decay_conversion (atexit_fndecl);
5386
5387   return atexit_node;
5388 }
5389
5390 /* Returns the __dso_handle VAR_DECL.  */
5391
5392 static tree
5393 get_dso_handle_node (void)
5394 {
5395   if (dso_handle_node)
5396     return dso_handle_node;
5397
5398   /* Declare the variable.  */
5399   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
5400                                         ptr_type_node);
5401
5402   return dso_handle_node;
5403 }
5404
5405 /* Begin a new function with internal linkage whose job will be simply
5406    to destroy some particular variable.  */
5407
5408 static GTY(()) int start_cleanup_cnt;
5409
5410 static tree
5411 start_cleanup_fn (void)
5412 {
5413   char name[32];
5414   tree parmtypes;
5415   tree fntype;
5416   tree fndecl;
5417
5418   push_to_top_level ();
5419
5420   /* No need to mangle this.  */
5421   push_lang_context (lang_name_c);
5422
5423   /* Build the parameter-types.  */
5424   parmtypes = void_list_node;
5425   /* Functions passed to __cxa_atexit take an additional parameter.
5426      We'll just ignore it.  After we implement the new calling
5427      convention for destructors, we can eliminate the use of
5428      additional cleanup functions entirely in the -fnew-abi case.  */
5429   if (flag_use_cxa_atexit)
5430     parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5431   /* Build the function type itself.  */
5432   fntype = build_function_type (void_type_node, parmtypes);
5433   /* Build the name of the function.  */
5434   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5435   /* Build the function declaration.  */
5436   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5437   /* It's a function with internal linkage, generated by the
5438      compiler.  */
5439   TREE_PUBLIC (fndecl) = 0;
5440   DECL_ARTIFICIAL (fndecl) = 1;
5441   /* Make the function `inline' so that it is only emitted if it is
5442      actually needed.  It is unlikely that it will be inlined, since
5443      it is only called via a function pointer, but we avoid unnecessary
5444      emissions this way.  */
5445   DECL_INLINE (fndecl) = 1;
5446   DECL_DECLARED_INLINE_P (fndecl) = 1;
5447   DECL_INTERFACE_KNOWN (fndecl) = 1;
5448   /* Build the parameter.  */
5449   if (flag_use_cxa_atexit)
5450     {
5451       tree parmdecl;
5452
5453       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5454       DECL_CONTEXT (parmdecl) = fndecl;
5455       TREE_USED (parmdecl) = 1;
5456       DECL_ARGUMENTS (fndecl) = parmdecl;
5457     }
5458
5459   pushdecl (fndecl);
5460   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5461
5462   pop_lang_context ();
5463
5464   return current_function_decl;
5465 }
5466
5467 /* Finish the cleanup function begun by start_cleanup_fn.  */
5468
5469 static void
5470 end_cleanup_fn (void)
5471 {
5472   expand_or_defer_fn (finish_function (0));
5473
5474   pop_from_top_level ();
5475 }
5476
5477 /* Generate code to handle the destruction of DECL, an object with
5478    static storage duration.  */
5479
5480 tree
5481 register_dtor_fn (tree decl)
5482 {
5483   tree cleanup;
5484   tree compound_stmt;
5485   tree args;
5486   tree fcall;
5487
5488   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5489     return void_zero_node;
5490
5491   /* Call build_cleanup before we enter the anonymous function so that
5492      any access checks will be done relative to the current scope,
5493      rather than the scope of the anonymous function.  */
5494   build_cleanup (decl);
5495
5496   /* Now start the function.  */
5497   cleanup = start_cleanup_fn ();
5498
5499   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
5500      to the original function, rather than the anonymous one.  That
5501      will make the back-end think that nested functions are in use,
5502      which causes confusion.  */
5503
5504   push_deferring_access_checks (dk_no_check);
5505   fcall = build_cleanup (decl);
5506   pop_deferring_access_checks ();
5507
5508   /* Create the body of the anonymous function.  */
5509   compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5510   finish_expr_stmt (fcall);
5511   finish_compound_stmt (compound_stmt);
5512   end_cleanup_fn ();
5513
5514   /* Call atexit with the cleanup function.  */
5515   cxx_mark_addressable (cleanup);
5516   mark_used (cleanup);
5517   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5518   if (flag_use_cxa_atexit)
5519     {
5520       args = tree_cons (NULL_TREE,
5521                         build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5522                         NULL_TREE);
5523       if (targetm.cxx.use_aeabi_atexit ())
5524         {
5525           args = tree_cons (NULL_TREE, cleanup, args);
5526           args = tree_cons (NULL_TREE, null_pointer_node, args);
5527         }
5528       else
5529         {
5530           args = tree_cons (NULL_TREE, null_pointer_node, args);
5531           args = tree_cons (NULL_TREE, cleanup, args);
5532         }
5533     }
5534   else
5535     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5536   return build_function_call (get_atexit_node (), args);
5537 }
5538
5539 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
5540    is its initializer.  Generate code to handle the construction
5541    and destruction of DECL.  */
5542
5543 static void
5544 expand_static_init (tree decl, tree init)
5545 {
5546   gcc_assert (TREE_CODE (decl) == VAR_DECL);
5547   gcc_assert (TREE_STATIC (decl));
5548
5549   /* Some variables require no initialization.  */
5550   if (!init
5551       && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5552       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5553     return;
5554
5555   if (DECL_FUNCTION_SCOPE_P (decl))
5556     {
5557       /* Emit code to perform this initialization but once.  */
5558       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5559       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5560       tree guard, guard_addr, guard_addr_list;
5561       tree acquire_fn, release_fn, abort_fn;
5562       tree flag, begin;
5563
5564       /* Emit code to perform this initialization but once.  This code
5565          looks like:
5566
5567            static <type> guard;
5568            if (!guard.first_byte) {
5569              if (__cxa_guard_acquire (&guard)) {
5570                bool flag = false;
5571                try {
5572                  // Do initialization.
5573                  flag = true; __cxa_guard_release (&guard);
5574                  // Register variable for destruction at end of program.
5575                } catch {
5576                  if (!flag) __cxa_guard_abort (&guard);
5577                }
5578            }
5579
5580          Note that the `flag' variable is only set to 1 *after* the
5581          initialization is complete.  This ensures that an exception,
5582          thrown during the construction, will cause the variable to
5583          reinitialized when we pass through this code again, as per:
5584
5585            [stmt.dcl]
5586
5587            If the initialization exits by throwing an exception, the
5588            initialization is not complete, so it will be tried again
5589            the next time control enters the declaration.
5590
5591          This process should be thread-safe, too; multiple threads
5592          should not be able to initialize the variable more than
5593          once.  */
5594
5595       /* Create the guard variable.  */
5596       guard = get_guard (decl);
5597
5598       /* This optimization isn't safe on targets with relaxed memory
5599          consistency.  On such targets we force synchronization in
5600          __cxa_guard_acquire.  */
5601       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5602         {
5603           /* Begin the conditional initialization.  */
5604           if_stmt = begin_if_stmt ();
5605           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5606           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5607         }
5608
5609       if (flag_threadsafe_statics)
5610         {
5611           guard_addr = build_address (guard);
5612           guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5613
5614           acquire_fn = get_identifier ("__cxa_guard_acquire");
5615           release_fn = get_identifier ("__cxa_guard_release");
5616           abort_fn = get_identifier ("__cxa_guard_abort");
5617           if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5618             {
5619               tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5620                                          void_list_node);
5621               tree vfntype = build_function_type (void_type_node, argtypes);
5622               acquire_fn = push_library_fn
5623                 (acquire_fn, build_function_type (integer_type_node, argtypes));
5624               release_fn = push_library_fn (release_fn, vfntype);
5625               abort_fn = push_library_fn (abort_fn, vfntype);
5626             }
5627           else
5628             {
5629               release_fn = identifier_global_value (release_fn);
5630               abort_fn = identifier_global_value (abort_fn);
5631             }
5632
5633           inner_if_stmt = begin_if_stmt ();
5634           finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5635                                inner_if_stmt);
5636
5637           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5638           begin = get_target_expr (boolean_false_node);
5639           flag = TARGET_EXPR_SLOT (begin);
5640
5641           TARGET_EXPR_CLEANUP (begin)
5642             = build3 (COND_EXPR, void_type_node, flag,
5643                       void_zero_node,
5644                       build_call (abort_fn, guard_addr_list));
5645           CLEANUP_EH_ONLY (begin) = 1;
5646
5647           /* Do the initialization itself.  */
5648           init = add_stmt_to_compound (begin, init);
5649           init = add_stmt_to_compound
5650             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5651           init = add_stmt_to_compound
5652             (init, build_call (release_fn, guard_addr_list));
5653         }
5654       else
5655         init = add_stmt_to_compound (init, set_guard (guard));
5656
5657       /* Use atexit to register a function for destroying this static
5658          variable.  */
5659       init = add_stmt_to_compound (init, register_dtor_fn (decl));
5660
5661       finish_expr_stmt (init);
5662
5663       if (flag_threadsafe_statics)
5664         {
5665           finish_compound_stmt (inner_then_clause);
5666           finish_then_clause (inner_if_stmt);
5667           finish_if_stmt (inner_if_stmt);
5668         }
5669
5670       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5671         {
5672           finish_compound_stmt (then_clause);
5673           finish_then_clause (if_stmt);
5674           finish_if_stmt (if_stmt);
5675         }
5676     }
5677   else
5678     static_aggregates = tree_cons (init, decl, static_aggregates);
5679 }
5680
5681 \f
5682 /* Make TYPE a complete type based on INITIAL_VALUE.
5683    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5684    2 if there was no information (in which case assume 0 if DO_DEFAULT),
5685    3 if the initializer list is empty (in pedantic mode). */
5686
5687 int
5688 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5689 {
5690   int failure;
5691   tree type, elt_type;
5692
5693   if (initial_value)
5694     {
5695       /* An array of character type can be initialized from a
5696          brace-enclosed string constant.
5697
5698          FIXME: this code is duplicated from reshape_init. Probably
5699          we should just call reshape_init here?  */
5700       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5701           && TREE_CODE (initial_value) == CONSTRUCTOR
5702           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
5703         {
5704           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
5705           tree value = VEC_index (constructor_elt, v, 0)->value;
5706
5707           if (TREE_CODE (value) == STRING_CST
5708               && VEC_length (constructor_elt, v) == 1)
5709             initial_value = value;
5710         }
5711     }
5712
5713   failure = complete_array_type (ptype, initial_value, do_default);
5714
5715   /* We can create the array before the element type is complete, which
5716      means that we didn't have these two bits set in the original type
5717      either.  In completing the type, we are expected to propagate these
5718      bits.  See also complete_type which does the same thing for arrays
5719      of fixed size.  */
5720   type = *ptype;
5721   if (TYPE_DOMAIN (type))
5722     {
5723       elt_type = TREE_TYPE (type);
5724       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5725       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5726         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5727     }
5728
5729   return failure;
5730 }
5731 \f
5732 /* Return zero if something is declared to be a member of type
5733    CTYPE when in the context of CUR_TYPE.  STRING is the error
5734    message to print in that case.  Otherwise, quietly return 1.  */
5735
5736 static int
5737 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5738 {
5739   if (ctype && ctype != cur_type)
5740     {
5741       if (flags == DTOR_FLAG)
5742         error ("destructor for alien class %qT cannot be a member", ctype);
5743       else
5744         error ("constructor for alien class %qT cannot be a member", ctype);
5745       return 0;
5746     }
5747   return 1;
5748 }
5749 \f
5750 /* Subroutine of `grokdeclarator'.  */
5751
5752 /* Generate errors possibly applicable for a given set of specifiers.
5753    This is for ARM $7.1.2.  */
5754
5755 static void
5756 bad_specifiers (tree object,
5757                 const char* type,
5758                 int virtualp,
5759                 int quals,
5760                 int inlinep,
5761                 int friendp,
5762                 int raises)
5763 {
5764   if (virtualp)
5765     error ("%qD declared as a %<virtual%> %s", object, type);
5766   if (inlinep)
5767     error ("%qD declared as an %<inline%> %s", object, type);
5768   if (quals)
5769     error ("%<const%> and %<volatile%> function specifiers on "
5770            "%qD invalid in %s declaration",
5771            object, type);
5772   if (friendp)
5773     error ("%q+D declared as a friend", object);
5774   if (raises
5775       && (TREE_CODE (object) == TYPE_DECL
5776           || (!TYPE_PTRFN_P (TREE_TYPE (object))
5777               && !TYPE_REFFN_P (TREE_TYPE (object))
5778               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5779     error ("%q+D declared with an exception specification", object);
5780 }
5781
5782 /* DECL is a member function or static data member and is presently
5783    being defined.  Check that the definition is taking place in a
5784    valid namespace.  */
5785
5786 static void
5787 check_class_member_definition_namespace (tree decl)
5788 {
5789   /* These checks only apply to member functions and static data
5790      members.  */
5791   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5792               || TREE_CODE (decl) == VAR_DECL);
5793   /* We check for problems with specializations in pt.c in
5794      check_specialization_namespace, where we can issue better
5795      diagnostics.  */
5796   if (processing_specialization)
5797     return;
5798   /* There are no restrictions on the placement of
5799      explicit instantiations.  */
5800   if (processing_explicit_instantiation)
5801     return;
5802   /* [class.mfct]
5803
5804      A member function definition that appears outside of the
5805      class definition shall appear in a namespace scope enclosing
5806      the class definition.
5807
5808      [class.static.data]
5809
5810      The definition for a static data member shall appear in a
5811      namespace scope enclosing the member's class definition.  */
5812   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
5813     pedwarn ("definition of %qD is not in namespace enclosing %qT",
5814              decl, DECL_CONTEXT (decl));
5815 }
5816
5817 /* CTYPE is class type, or null if non-class.
5818    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5819    or METHOD_TYPE.
5820    DECLARATOR is the function's name.
5821    PARMS is a chain of PARM_DECLs for the function.
5822    VIRTUALP is truthvalue of whether the function is virtual or not.
5823    FLAGS are to be passed through to `grokclassfn'.
5824    QUALS are qualifiers indicating whether the function is `const'
5825    or `volatile'.
5826    RAISES is a list of exceptions that this function can raise.
5827    CHECK is 1 if we must find this method in CTYPE, 0 if we should
5828    not look, and -1 if we should not call `grokclassfn' at all.
5829
5830    SFK is the kind of special function (if any) for the new function.
5831
5832    Returns `NULL_TREE' if something goes wrong, after issuing
5833    applicable error messages.  */
5834
5835 static tree
5836 grokfndecl (tree ctype,
5837             tree type,
5838             tree declarator,
5839             tree parms,
5840             tree orig_declarator,
5841             int virtualp,
5842             enum overload_flags flags,
5843             cp_cv_quals quals,
5844             tree raises,
5845             int check,
5846             int friendp,
5847             int publicp,
5848             int inlinep,
5849             special_function_kind sfk,
5850             bool funcdef_flag,
5851             int template_count,
5852             tree in_namespace,
5853             tree* attrlist)
5854 {
5855   tree decl;
5856   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5857   tree t;
5858
5859   if (raises)
5860     type = build_exception_variant (type, raises);
5861
5862   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5863   DECL_ARGUMENTS (decl) = parms;
5864   /* Propagate volatile out from type to decl.  */
5865   if (TYPE_VOLATILE (type))
5866     TREE_THIS_VOLATILE (decl) = 1;
5867
5868   if (friendp
5869       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5870     {
5871       if (funcdef_flag)
5872         error
5873           ("defining explicit specialization %qD in friend declaration",
5874            orig_declarator);
5875       else
5876         {
5877           tree fns = TREE_OPERAND (orig_declarator, 0);
5878           tree args = TREE_OPERAND (orig_declarator, 1);
5879
5880           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5881             {
5882               /* Something like `template <class T> friend void f<T>()'.  */
5883               error ("invalid use of template-id %qD in declaration "
5884                      "of primary template",
5885                      orig_declarator);
5886               return NULL_TREE;
5887             }
5888
5889
5890           /* A friend declaration of the form friend void f<>().  Record
5891              the information in the TEMPLATE_ID_EXPR.  */
5892           SET_DECL_IMPLICIT_INSTANTIATION (decl);
5893
5894           if (TREE_CODE (fns) == COMPONENT_REF)
5895             {
5896               /* Due to bison parser ickiness, we will have already looked
5897                  up an operator_name or PFUNCNAME within the current class
5898                  (see template_id in parse.y). If the current class contains
5899                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
5900
5901               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5902                           == current_class_type);
5903               fns = TREE_OPERAND (fns, 1);
5904             }
5905           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5906                       || TREE_CODE (fns) == OVERLOAD);
5907           DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5908
5909           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5910             if (TREE_PURPOSE (t)
5911                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5912             {
5913               error ("default arguments are not allowed in declaration "
5914                      "of friend template specialization %qD",
5915                      decl);
5916               return NULL_TREE;
5917             }
5918
5919           if (inlinep)
5920             {
5921               error ("%<inline%> is not allowed in declaration of friend "
5922                      "template specialization %qD",
5923                      decl);
5924               return NULL_TREE;
5925             }
5926         }
5927     }
5928
5929   /* If this decl has namespace scope, set that up.  */
5930   if (in_namespace)
5931     set_decl_namespace (decl, in_namespace, friendp);
5932   else if (!ctype)
5933     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5934
5935   /* `main' and builtins have implicit 'C' linkage.  */
5936   if ((MAIN_NAME_P (declarator)
5937        || (IDENTIFIER_LENGTH (declarator) > 10
5938            && IDENTIFIER_POINTER (declarator)[0] == '_'
5939            && IDENTIFIER_POINTER (declarator)[1] == '_'
5940            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5941       && current_lang_name == lang_name_cplusplus
5942       && ctype == NULL_TREE
5943       /* NULL_TREE means global namespace.  */
5944       && DECL_CONTEXT (decl) == NULL_TREE)
5945     SET_DECL_LANGUAGE (decl, lang_c);
5946
5947   /* Should probably propagate const out from type to decl I bet (mrs).  */
5948   if (staticp)
5949     {
5950       DECL_STATIC_FUNCTION_P (decl) = 1;
5951       DECL_CONTEXT (decl) = ctype;
5952     }
5953
5954   if (ctype)
5955     {
5956       DECL_CONTEXT (decl) = ctype;
5957       if (funcdef_flag)
5958         check_class_member_definition_namespace (decl);
5959     }
5960
5961   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
5962     {
5963       if (processing_template_decl)
5964         error ("cannot declare %<::main%> to be a template");
5965       if (inlinep)
5966         error ("cannot declare %<::main%> to be inline");
5967       if (!publicp)
5968         error ("cannot declare %<::main%> to be static");
5969       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
5970                         integer_type_node))
5971         {
5972           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
5973           tree newtype;
5974           error ("%<::main%> must return %<int%>");
5975           newtype =  build_function_type (integer_type_node,
5976                                           oldtypeargs);
5977           TREE_TYPE (decl) = newtype;
5978         }
5979       inlinep = 0;
5980       publicp = 1;
5981     }
5982
5983   /* Members of anonymous types and local classes have no linkage; make
5984      them internal.  If a typedef is made later, this will be changed.  */
5985   if (ctype && (TYPE_ANONYMOUS_P (ctype)
5986                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
5987     publicp = 0;
5988
5989   if (publicp)
5990     {
5991       /* [basic.link]: A name with no linkage (notably, the name of a class
5992          or enumeration declared in a local scope) shall not be used to
5993          declare an entity with linkage.
5994
5995          Only check this for public decls for now.  See core 319, 389.  */
5996       t = no_linkage_check (TREE_TYPE (decl),
5997                             /*relaxed_p=*/false);
5998       if (t)
5999         {
6000           if (TYPE_ANONYMOUS_P (t))
6001             {
6002               if (DECL_EXTERN_C_P (decl))
6003                 /* Allow this; it's pretty common in C.  */;
6004               else
6005                 {
6006                   pedwarn ("non-local function %q#D uses anonymous type",
6007                               decl);
6008                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6009                     pedwarn ("%q+#D does not refer to the unqualified "
6010                              "type, so it is not used for linkage",
6011                              TYPE_NAME (t));
6012                 }
6013             }
6014           else
6015             pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6016         }
6017     }
6018
6019   TREE_PUBLIC (decl) = publicp;
6020   if (! publicp)
6021     {
6022       DECL_INTERFACE_KNOWN (decl) = 1;
6023       DECL_NOT_REALLY_EXTERN (decl) = 1;
6024     }
6025
6026   /* If the declaration was declared inline, mark it as such.  */
6027   if (inlinep)
6028     DECL_DECLARED_INLINE_P (decl) = 1;
6029   /* We inline functions that are explicitly declared inline, or, when
6030      the user explicitly asks us to, all functions.  */
6031   if (DECL_DECLARED_INLINE_P (decl)
6032       || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6033     DECL_INLINE (decl) = 1;
6034
6035   DECL_EXTERNAL (decl) = 1;
6036   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6037     {
6038       error ("%smember function %qD cannot have cv-qualifier",
6039              (ctype ? "static " : "non-"), decl);
6040       quals = TYPE_UNQUALIFIED;
6041     }
6042
6043   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl)))
6044     grok_op_properties (decl, /*complain=*/true);
6045
6046   if (ctype && decl_function_context (decl))
6047     DECL_NO_STATIC_CHAIN (decl) = 1;
6048
6049   if (funcdef_flag)
6050     /* Make the init_value nonzero so pushdecl knows this is not
6051        tentative.  error_mark_node is replaced later with the BLOCK.  */
6052     DECL_INITIAL (decl) = error_mark_node;
6053
6054   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6055     TREE_NOTHROW (decl) = 1;
6056
6057   /* Caller will do the rest of this.  */
6058   if (check < 0)
6059     return decl;
6060
6061   if (ctype != NULL_TREE)
6062     {
6063       if (sfk == sfk_constructor)
6064         DECL_CONSTRUCTOR_P (decl) = 1;
6065
6066       grokclassfn (ctype, decl, flags, quals);
6067     }
6068
6069   decl = check_explicit_specialization (orig_declarator, decl,
6070                                         template_count,
6071                                         2 * funcdef_flag +
6072                                         4 * (friendp != 0));
6073   if (decl == error_mark_node)
6074     return NULL_TREE;
6075
6076   if (attrlist)
6077     {
6078       cplus_decl_attributes (&decl, *attrlist, 0);
6079       *attrlist = NULL_TREE;
6080     }
6081
6082   if (ctype != NULL_TREE
6083       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6084       && check)
6085     {
6086       tree old_decl;
6087
6088       old_decl = check_classfn (ctype, decl,
6089                                 (processing_template_decl
6090                                  > template_class_depth (ctype))
6091                                 ? current_template_parms
6092                                 : NULL_TREE);
6093       if (old_decl)
6094         {
6095           tree ok;
6096           tree pushed_scope;
6097
6098           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6099             /* Because grokfndecl is always supposed to return a
6100                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6101                here.  We depend on our callers to figure out that its
6102                really a template that's being returned.  */
6103             old_decl = DECL_TEMPLATE_RESULT (old_decl);
6104
6105           if (DECL_STATIC_FUNCTION_P (old_decl)
6106               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6107             /* Remove the `this' parm added by grokclassfn.
6108                XXX Isn't this done in start_function, too?  */
6109             revert_static_member_fn (decl);
6110           if (DECL_ARTIFICIAL (old_decl))
6111             error ("definition of implicitly-declared %qD", old_decl);
6112
6113           /* Since we've smashed OLD_DECL to its
6114              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
6115           if (TREE_CODE (decl) == TEMPLATE_DECL)
6116             decl = DECL_TEMPLATE_RESULT (decl);
6117
6118           /* Attempt to merge the declarations.  This can fail, in
6119              the case of some invalid specialization declarations.  */
6120           pushed_scope = push_scope (ctype);
6121           ok = duplicate_decls (decl, old_decl, friendp);
6122           if (pushed_scope)
6123             pop_scope (pushed_scope);
6124           if (!ok)
6125             {
6126               error ("no %q#D member function declared in class %qT",
6127                      decl, ctype);
6128               return NULL_TREE;
6129             }
6130           return old_decl;
6131         }
6132     }
6133
6134   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6135     return NULL_TREE;
6136
6137   if (ctype == NULL_TREE || check)
6138     return decl;
6139
6140   if (virtualp)
6141     DECL_VIRTUAL_P (decl) = 1;
6142
6143   return decl;
6144 }
6145
6146 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
6147    the linkage that DECL will receive in the object file.  */
6148
6149 static void
6150 set_linkage_for_static_data_member (tree decl)
6151 {
6152   /* A static data member always has static storage duration and
6153      external linkage.  Note that static data members are forbidden in
6154      local classes -- the only situation in which a class has
6155      non-external linkage.  */
6156   TREE_PUBLIC (decl) = 1;
6157   TREE_STATIC (decl) = 1;
6158   /* For non-template classes, static data members are always put
6159      out in exactly those files where they are defined, just as
6160      with ordinary namespace-scope variables.  */
6161   if (!processing_template_decl)
6162     DECL_INTERFACE_KNOWN (decl) = 1;
6163 }
6164
6165 /* Create a VAR_DECL named NAME with the indicated TYPE.
6166
6167    If SCOPE is non-NULL, it is the class type or namespace containing
6168    the variable.  If SCOPE is NULL, the variable should is created in
6169    the innermost enclosings scope.  */
6170
6171 static tree
6172 grokvardecl (tree type,
6173              tree name,
6174              const cp_decl_specifier_seq *declspecs,
6175              int initialized,
6176              int constp,
6177              tree scope)
6178 {
6179   tree decl;
6180   tree explicit_scope;
6181
6182   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6183
6184   /* Compute the scope in which to place the variable, but remember
6185      whether or not that scope was explicitly specified by the user.   */
6186   explicit_scope = scope;
6187   if (!scope)
6188     {
6189       /* An explicit "extern" specifier indicates a namespace-scope
6190          variable.  */
6191       if (declspecs->storage_class == sc_extern)
6192         scope = current_namespace;
6193       else if (!at_function_scope_p ())
6194         scope = current_scope ();
6195     }
6196
6197   if (scope
6198       && (/* If the variable is a namespace-scope variable declared in a
6199              template, we need DECL_LANG_SPECIFIC.  */
6200           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6201           /* Similarly for namespace-scope variables with language linkage
6202              other than C++.  */
6203           || (TREE_CODE (scope) == NAMESPACE_DECL
6204               && current_lang_name != lang_name_cplusplus)
6205           /* Similarly for static data members.  */
6206           || TYPE_P (scope)))
6207     decl = build_lang_decl (VAR_DECL, name, type);
6208   else
6209     decl = build_decl (VAR_DECL, name, type);
6210
6211   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6212     set_decl_namespace (decl, explicit_scope, 0);
6213   else
6214     DECL_CONTEXT (decl) = scope;
6215
6216   if (declspecs->storage_class == sc_extern)
6217     {
6218       DECL_THIS_EXTERN (decl) = 1;
6219       DECL_EXTERNAL (decl) = !initialized;
6220     }
6221
6222   if (DECL_CLASS_SCOPE_P (decl))
6223     {
6224       set_linkage_for_static_data_member (decl);
6225       /* This function is only called with out-of-class definitions.  */
6226       DECL_EXTERNAL (decl) = 0;
6227       check_class_member_definition_namespace (decl);
6228     }
6229   /* At top level, either `static' or no s.c. makes a definition
6230      (perhaps tentative), and absence of `static' makes it public.  */
6231   else if (toplevel_bindings_p ())
6232     {
6233       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6234                             && (DECL_THIS_EXTERN (decl) || ! constp));
6235       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6236     }
6237   /* Not at top level, only `static' makes a static definition.  */
6238   else
6239     {
6240       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6241       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6242     }
6243
6244   if (declspecs->specs[(int)ds_thread])
6245     {
6246       if (targetm.have_tls)
6247         DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6248       else
6249         /* A mere warning is sure to result in improper semantics
6250            at runtime.  Don't bother to allow this to compile.  */
6251         error ("thread-local storage not supported for this target");
6252     }
6253
6254   if (TREE_PUBLIC (decl))
6255     {
6256       /* [basic.link]: A name with no linkage (notably, the name of a class
6257          or enumeration declared in a local scope) shall not be used to
6258          declare an entity with linkage.
6259
6260          Only check this for public decls for now.  */
6261       tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6262       if (t)
6263         {
6264           if (TYPE_ANONYMOUS_P (t))
6265             {
6266               if (DECL_EXTERN_C_P (decl))
6267                 /* Allow this; it's pretty common in C.  */
6268                   ;
6269               else
6270                 {
6271                   /* DRs 132, 319 and 389 seem to indicate types with
6272                      no linkage can only be used to declare extern "C"
6273                      entities.  Since it's not always an error in the
6274                      ISO C++ 90 Standard, we only issue a warning.  */
6275                   warning (0, "non-local variable %q#D uses anonymous type",
6276                            decl);
6277                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6278                     warning (0, "%q+#D does not refer to the unqualified "
6279                              "type, so it is not used for linkage",
6280                              TYPE_NAME (t));
6281                 }
6282             }
6283           else
6284             warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6285         }
6286     }
6287   else
6288     DECL_INTERFACE_KNOWN (decl) = 1;
6289
6290   return decl;
6291 }
6292
6293 /* Create and return a canonical pointer to member function type, for
6294    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
6295
6296 tree
6297 build_ptrmemfunc_type (tree type)
6298 {
6299   tree field, fields;
6300   tree t;
6301   tree unqualified_variant = NULL_TREE;
6302
6303   if (type == error_mark_node)
6304     return type;
6305
6306   /* If a canonical type already exists for this type, use it.  We use
6307      this method instead of type_hash_canon, because it only does a
6308      simple equality check on the list of field members.  */
6309
6310   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6311     return t;
6312
6313   /* Make sure that we always have the unqualified pointer-to-member
6314      type first.  */
6315   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6316     unqualified_variant
6317       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6318
6319   t = make_aggr_type (RECORD_TYPE);
6320   xref_basetypes (t, NULL_TREE);
6321
6322   /* Let the front-end know this is a pointer to member function...  */
6323   TYPE_PTRMEMFUNC_FLAG (t) = 1;
6324   /* ... and not really an aggregate.  */
6325   SET_IS_AGGR_TYPE (t, 0);
6326
6327   field = build_decl (FIELD_DECL, pfn_identifier, type);
6328   fields = field;
6329
6330   field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6331   TREE_CHAIN (field) = fields;
6332   fields = field;
6333
6334   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6335
6336   /* Zap out the name so that the back-end will give us the debugging
6337      information for this anonymous RECORD_TYPE.  */
6338   TYPE_NAME (t) = NULL_TREE;
6339
6340   /* If this is not the unqualified form of this pointer-to-member
6341      type, set the TYPE_MAIN_VARIANT for this type to be the
6342      unqualified type.  Since they are actually RECORD_TYPEs that are
6343      not variants of each other, we must do this manually.  */
6344   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6345     {
6346       t = build_qualified_type (t, cp_type_quals (type));
6347       TYPE_MAIN_VARIANT (t) = unqualified_variant;
6348       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6349       TYPE_NEXT_VARIANT (unqualified_variant) = t;
6350     }
6351
6352   /* Cache this pointer-to-member type so that we can find it again
6353      later.  */
6354   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6355
6356   return t;
6357 }
6358
6359 /* Create and return a pointer to data member type.  */
6360
6361 tree
6362 build_ptrmem_type (tree class_type, tree member_type)
6363 {
6364   if (TREE_CODE (member_type) == METHOD_TYPE)
6365     {
6366       tree arg_types;
6367
6368       arg_types = TYPE_ARG_TYPES (member_type);
6369       class_type = (cp_build_qualified_type
6370                     (class_type,
6371                      cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6372       member_type
6373         = build_method_type_directly (class_type,
6374                                       TREE_TYPE (member_type),
6375                                       TREE_CHAIN (arg_types));
6376       return build_ptrmemfunc_type (build_pointer_type (member_type));
6377     }
6378   else
6379     {
6380       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6381       return build_offset_type (class_type, member_type);
6382     }
6383 }
6384
6385 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6386    Check to see that the definition is valid.  Issue appropriate error
6387    messages.  Return 1 if the definition is particularly bad, or 0
6388    otherwise.  */
6389
6390 int
6391 check_static_variable_definition (tree decl, tree type)
6392 {
6393   /* Motion 10 at San Diego: If a static const integral data member is
6394      initialized with an integral constant expression, the initializer
6395      may appear either in the declaration (within the class), or in
6396      the definition, but not both.  If it appears in the class, the
6397      member is a member constant.  The file-scope definition is always
6398      required.  */
6399   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6400     {
6401       error ("invalid in-class initialization of static data member "
6402              "of non-integral type %qT",
6403              type);
6404       /* If we just return the declaration, crashes will sometimes
6405          occur.  We therefore return void_type_node, as if this were a
6406          friend declaration, to cause callers to completely ignore
6407          this declaration.  */
6408       return 1;
6409     }
6410   else if (!CP_TYPE_CONST_P (type))
6411     error ("ISO C++ forbids in-class initialization of non-const "
6412            "static member %qD",
6413            decl);
6414   else if (pedantic && !INTEGRAL_TYPE_P (type))
6415     pedwarn ("ISO C++ forbids initialization of member constant "
6416              "%qD of non-integral type %qT", decl, type);
6417
6418   return 0;
6419 }
6420
6421 /* Given the SIZE (i.e., number of elements) in an array, compute an
6422    appropriate index type for the array.  If non-NULL, NAME is the
6423    name of the thing being declared.  */
6424
6425 tree
6426 compute_array_index_type (tree name, tree size)
6427 {
6428   tree type;
6429   tree itype;
6430
6431   if (error_operand_p (size))
6432     return error_mark_node;
6433
6434   type = TREE_TYPE (size);
6435   /* The array bound must be an integer type.  */
6436   if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6437     {
6438       if (name)
6439         error ("size of array %qD has non-integral type %qT", name, type);
6440       else
6441         error ("size of array has non-integral type %qT", type);
6442       size = integer_one_node;
6443       type = TREE_TYPE (size);
6444     }
6445
6446   if (abi_version_at_least (2)
6447       /* We should only handle value dependent expressions specially.  */
6448       ? value_dependent_expression_p (size)
6449       /* But for abi-1, we handled all instances in templates. This
6450          effects the manglings produced.  */
6451       : processing_template_decl)
6452     return build_index_type (build_min (MINUS_EXPR, sizetype,
6453                                         size, integer_one_node));
6454
6455   /* The size might be the result of a cast.  */
6456   STRIP_TYPE_NOPS (size);
6457
6458   /* It might be a const variable or enumeration constant.  */
6459   size = integral_constant_value (size);
6460
6461   /* Normally, the array-bound will be a constant.  */
6462   if (TREE_CODE (size) == INTEGER_CST)
6463     {
6464       /* Check to see if the array bound overflowed.  Make that an
6465          error, no matter how generous we're being.  */
6466       int old_flag_pedantic_errors = flag_pedantic_errors;
6467       int old_pedantic = pedantic;
6468       pedantic = flag_pedantic_errors = 1;
6469       constant_expression_warning (size);
6470       pedantic = old_pedantic;
6471       flag_pedantic_errors = old_flag_pedantic_errors;
6472
6473       /* An array must have a positive number of elements.  */
6474       if (INT_CST_LT (size, integer_zero_node))
6475         {
6476           if (name)
6477             error ("size of array %qD is negative", name);
6478           else
6479             error ("size of array is negative");
6480           size = integer_one_node;
6481         }
6482       /* As an extension we allow zero-sized arrays.  We always allow
6483          them in system headers because glibc uses them.  */
6484       else if (integer_zerop (size) && pedantic && !in_system_header)
6485         {
6486           if (name)
6487             pedwarn ("ISO C++ forbids zero-size array %qD", name);
6488           else
6489             pedwarn ("ISO C++ forbids zero-size array");
6490         }
6491     }
6492   else if (TREE_CONSTANT (size))
6493     {
6494       /* `(int) &fn' is not a valid array bound.  */
6495       if (name)
6496         error ("size of array %qD is not an integral constant-expression",
6497                name);
6498       else
6499         error ("size of array is not an integral constant-expression");
6500       size = integer_one_node;
6501     }
6502   else if (pedantic)
6503     {
6504       if (name)
6505         pedwarn ("ISO C++ forbids variable-size array %qD", name);
6506       else
6507         pedwarn ("ISO C++ forbids variable-size array");
6508     }
6509
6510   if (processing_template_decl && !TREE_CONSTANT (size))
6511     /* A variable sized array.  */
6512     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6513   else
6514     {
6515       HOST_WIDE_INT saved_processing_template_decl;
6516
6517       /* Compute the index of the largest element in the array.  It is
6518          one less than the number of elements in the array.  We save
6519          and restore PROCESSING_TEMPLATE_DECL so that computations in
6520          cp_build_binary_op will be appropriately folded.  */
6521       saved_processing_template_decl = processing_template_decl;
6522       processing_template_decl = 0;
6523       itype = cp_build_binary_op (MINUS_EXPR,
6524                                   cp_convert (ssizetype, size),
6525                                   cp_convert (ssizetype, integer_one_node));
6526       itype = fold (itype);
6527       processing_template_decl = saved_processing_template_decl;
6528
6529       if (!TREE_CONSTANT (itype))
6530         /* A variable sized array.  */
6531         itype = variable_size (itype);
6532       /* Make sure that there was no overflow when creating to a signed
6533          index type.  (For example, on a 32-bit machine, an array with
6534          size 2^32 - 1 is too big.)  */
6535       else if (TREE_CODE (itype) == INTEGER_CST
6536                && TREE_OVERFLOW (itype))
6537         {
6538           error ("overflow in array dimension");
6539           TREE_OVERFLOW (itype) = 0;
6540         }
6541     }
6542
6543   /* Create and return the appropriate index type.  */
6544   return build_index_type (itype);
6545 }
6546
6547 /* Returns the scope (if any) in which the entity declared by
6548    DECLARATOR will be located.  If the entity was declared with an
6549    unqualified name, NULL_TREE is returned.  */
6550
6551 tree
6552 get_scope_of_declarator (const cp_declarator *declarator)
6553 {
6554   while (declarator && declarator->kind != cdk_id)
6555     declarator = declarator->declarator;
6556
6557   /* If the declarator-id is a SCOPE_REF, the scope in which the
6558      declaration occurs is the first operand.  */
6559   if (declarator
6560       && declarator->u.id.qualifying_scope)
6561     return declarator->u.id.qualifying_scope;
6562
6563   /* Otherwise, the declarator is not a qualified name; the entity will
6564      be declared in the current scope.  */
6565   return NULL_TREE;
6566 }
6567
6568 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6569    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
6570    with this type.  */
6571
6572 static tree
6573 create_array_type_for_decl (tree name, tree type, tree size)
6574 {
6575   tree itype = NULL_TREE;
6576   const char* error_msg;
6577
6578   /* If things have already gone awry, bail now.  */
6579   if (type == error_mark_node || size == error_mark_node)
6580     return error_mark_node;
6581
6582   /* Assume that everything will go OK.  */
6583   error_msg = NULL;
6584
6585   /* There are some types which cannot be array elements.  */
6586   switch (TREE_CODE (type))
6587     {
6588     case VOID_TYPE:
6589       error_msg = "array of void";
6590       break;
6591
6592     case FUNCTION_TYPE:
6593       error_msg = "array of functions";
6594       break;
6595
6596     case REFERENCE_TYPE:
6597       error_msg = "array of references";
6598       break;
6599
6600     case METHOD_TYPE:
6601       error_msg = "array of function members";
6602       break;
6603
6604     default:
6605       break;
6606     }
6607
6608   /* If something went wrong, issue an error-message and return.  */
6609   if (error_msg)
6610     {
6611       if (name)
6612         error ("declaration of %qD as %s", name, error_msg);
6613       else
6614         error ("creating %s", error_msg);
6615
6616       return error_mark_node;
6617     }
6618
6619   /* [dcl.array]
6620
6621      The constant expressions that specify the bounds of the arrays
6622      can be omitted only for the first member of the sequence.  */
6623   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6624     {
6625       if (name)
6626         error ("declaration of %qD as multidimensional array must "
6627                "have bounds for all dimensions except the first",
6628                name);
6629       else
6630         error ("multidimensional array must have bounds for all "
6631                "dimensions except the first");
6632
6633       return error_mark_node;
6634     }
6635
6636   /* Figure out the index type for the array.  */
6637   if (size)
6638     itype = compute_array_index_type (name, size);
6639
6640   /* [dcl.array]
6641      T is called the array element type; this type shall not be [...] an
6642      abstract class type.  */
6643   abstract_virtuals_error (name, type);
6644
6645   return build_cplus_array_type (type, itype);
6646 }
6647
6648 /* Check that it's OK to declare a function with the indicated TYPE.
6649    SFK indicates the kind of special function (if any) that this
6650    function is.  OPTYPE is the type given in a conversion operator
6651    declaration, or the class type for a constructor/destructor.
6652    Returns the actual return type of the function; that
6653    may be different than TYPE if an error occurs, or for certain
6654    special functions.  */
6655
6656 static tree
6657 check_special_function_return_type (special_function_kind sfk,
6658                                     tree type,
6659                                     tree optype)
6660 {
6661   switch (sfk)
6662     {
6663     case sfk_constructor:
6664       if (type)
6665         error ("return type specification for constructor invalid");
6666
6667       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6668         type = build_pointer_type (optype);
6669       else
6670         type = void_type_node;
6671       break;
6672
6673     case sfk_destructor:
6674       if (type)
6675         error ("return type specification for destructor invalid");
6676       /* We can't use the proper return type here because we run into
6677          problems with ambiguous bases and covariant returns.
6678          Java classes are left unchanged because (void *) isn't a valid
6679          Java type, and we don't want to change the Java ABI.  */
6680       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6681         type = build_pointer_type (void_type_node);
6682       else
6683         type = void_type_node;
6684       break;
6685
6686     case sfk_conversion:
6687       if (type && !same_type_p (type, optype))
6688         error ("operator %qT declared to return %qT", optype, type);
6689       else if (type)
6690         pedwarn ("return type specified for %<operator %T%>",  optype);
6691       type = optype;
6692       break;
6693
6694     default:
6695       gcc_unreachable ();
6696     }
6697
6698   return type;
6699 }
6700
6701 /* A variable or data member (whose unqualified name is IDENTIFIER)
6702    has been declared with the indicated TYPE.  If the TYPE is not
6703    acceptable, issue an error message and return a type to use for
6704    error-recovery purposes.  */
6705
6706 tree
6707 check_var_type (tree identifier, tree type)
6708 {
6709   if (VOID_TYPE_P (type))
6710     {
6711       if (!identifier)
6712         error ("unnamed variable or field declared void");
6713       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6714         {
6715           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6716           error ("variable or field %qE declared void", identifier);
6717         }
6718       else
6719         error ("variable or field declared void");
6720       type = integer_type_node;
6721     }
6722
6723   return type;
6724 }
6725
6726 /* Given declspecs and a declarator (abstract or otherwise), determine
6727    the name and type of the object declared and construct a DECL node
6728    for it.
6729
6730    DECLSPECS is a chain of tree_list nodes whose value fields
6731     are the storage classes and type specifiers.
6732
6733    DECL_CONTEXT says which syntactic context this declaration is in:
6734      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6735      FUNCDEF for a function definition.  Like NORMAL but a few different
6736       error messages in each case.  Return value may be zero meaning
6737       this definition is too screwy to try to parse.
6738      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
6739       handle member functions (which have FIELD context).
6740       Return value may be zero meaning this definition is too screwy to
6741       try to parse.
6742      PARM for a parameter declaration (either within a function prototype
6743       or before a function body).  Make a PARM_DECL, or return void_type_node.
6744      CATCHPARM for a parameter declaration before a catch clause.
6745      TYPENAME if for a typename (in a cast or sizeof).
6746       Don't make a DECL node; just return the ..._TYPE node.
6747      FIELD for a struct or union field; make a FIELD_DECL.
6748      BITFIELD for a field with specified width.
6749    INITIALIZED is 1 if the decl has an initializer.
6750
6751    ATTRLIST is a pointer to the list of attributes, which may be NULL
6752    if there are none; *ATTRLIST may be modified if attributes from inside
6753    the declarator should be applied to the declaration.
6754
6755    When this function is called, scoping variables (such as
6756    CURRENT_CLASS_TYPE) should reflect the scope in which the
6757    declaration occurs, not the scope in which the new declaration will
6758    be placed.  For example, on:
6759
6760      void S::f() { ... }
6761
6762    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6763    should not be `S'.  */
6764
6765 tree
6766 grokdeclarator (const cp_declarator *declarator,
6767                 const cp_decl_specifier_seq *declspecs,
6768                 enum decl_context decl_context,
6769                 int initialized,
6770                 tree* attrlist)
6771 {
6772   tree type = NULL_TREE;
6773   int longlong = 0;
6774   int type_quals;
6775   int virtualp, explicitp, friendp, inlinep, staticp;
6776   int explicit_int = 0;
6777   int explicit_char = 0;
6778   int defaulted_int = 0;
6779   tree dependant_name = NULL_TREE;
6780
6781   tree typedef_decl = NULL_TREE;
6782   const char *name = NULL;
6783   tree typedef_type = NULL_TREE;
6784   /* True if this declarator is a function definition.  */
6785   bool funcdef_flag = false;
6786   cp_declarator_kind innermost_code = cdk_error;
6787   int bitfield = 0;
6788 #if 0
6789   /* See the code below that used this.  */
6790   tree decl_attr = NULL_TREE;
6791 #endif
6792
6793   /* Keep track of what sort of function is being processed
6794      so that we can warn about default return values, or explicit
6795      return values which do not match prescribed defaults.  */
6796   special_function_kind sfk = sfk_none;
6797
6798   tree dname = NULL_TREE;
6799   tree ctor_return_type = NULL_TREE;
6800   enum overload_flags flags = NO_SPECIAL;
6801   cp_cv_quals quals = TYPE_UNQUALIFIED;
6802   tree raises = NULL_TREE;
6803   int template_count = 0;
6804   tree returned_attrs = NULL_TREE;
6805   tree parms = NULL_TREE;
6806   const cp_declarator *id_declarator;
6807   /* The unqualified name of the declarator; either an
6808      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
6809   tree unqualified_id;
6810   /* The class type, if any, in which this entity is located,
6811      or NULL_TREE if none.  Note that this value may be different from
6812      the current class type; for example if an attempt is made to declare
6813      "A::f" inside "B", this value will be "A".  */
6814   tree ctype = current_class_type;
6815   /* The NAMESPACE_DECL for the namespace in which this entity is
6816      located.  If an unqualified name is used to declare the entity,
6817      this value will be NULL_TREE, even if the entity is located at
6818      namespace scope.  */
6819   tree in_namespace = NULL_TREE;
6820   cp_storage_class storage_class;
6821   bool unsigned_p, signed_p, short_p, long_p, thread_p;
6822   bool type_was_error_mark_node = false;
6823
6824   signed_p = declspecs->specs[(int)ds_signed];
6825   unsigned_p = declspecs->specs[(int)ds_unsigned];
6826   short_p = declspecs->specs[(int)ds_short];
6827   long_p = declspecs->specs[(int)ds_long];
6828   longlong = declspecs->specs[(int)ds_long] >= 2;
6829   thread_p = declspecs->specs[(int)ds_thread];
6830
6831   if (decl_context == FUNCDEF)
6832     funcdef_flag = true, decl_context = NORMAL;
6833   else if (decl_context == MEMFUNCDEF)
6834     funcdef_flag = true, decl_context = FIELD;
6835   else if (decl_context == BITFIELD)
6836     bitfield = 1, decl_context = FIELD;
6837
6838   /* Look inside a declarator for the name being declared
6839      and get it as a string, for an error message.  */
6840   for (id_declarator = declarator;
6841        id_declarator;
6842        id_declarator = id_declarator->declarator)
6843     {
6844       if (id_declarator->kind != cdk_id)
6845         innermost_code = id_declarator->kind;
6846
6847       switch (id_declarator->kind)
6848         {
6849         case cdk_function:
6850           if (id_declarator->declarator
6851               && id_declarator->declarator->kind == cdk_id)
6852             {
6853               sfk = id_declarator->declarator->u.id.sfk;
6854               if (sfk == sfk_destructor)
6855                 flags = DTOR_FLAG;
6856             }
6857           break;
6858
6859         case cdk_id:
6860           {
6861             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6862             tree decl = id_declarator->u.id.unqualified_name;
6863             if (!decl)
6864               break;
6865             if (qualifying_scope)
6866               {
6867                 if (TYPE_P (qualifying_scope))
6868                   {
6869                     ctype = qualifying_scope;
6870                     if (innermost_code != cdk_function
6871                         && current_class_type
6872                         && !UNIQUELY_DERIVED_FROM_P (ctype,
6873                                                      current_class_type))
6874                       {
6875                         error ("type %qT is not derived from type %qT",
6876                                ctype, current_class_type);
6877                         return error_mark_node;
6878                       }
6879                   }
6880                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6881                   in_namespace = qualifying_scope;
6882               }
6883             switch (TREE_CODE (decl))
6884               {
6885               case BIT_NOT_EXPR:
6886                 {
6887                   tree type;
6888
6889                   if (innermost_code != cdk_function)
6890                     {
6891                       error ("declaration of %qD as non-function", decl);
6892                       return error_mark_node;
6893                     }
6894                   else if (!qualifying_scope
6895                            && !(current_class_type && at_class_scope_p ()))
6896                     {
6897                       error ("declaration of %qD as non-member", decl);
6898                       return error_mark_node;
6899                     }
6900
6901                   type = TREE_OPERAND (decl, 0);
6902                   name = IDENTIFIER_POINTER (constructor_name (type));
6903                   dname = decl;
6904                 }
6905                 break;
6906
6907               case TEMPLATE_ID_EXPR:
6908                 {
6909                   tree fns = TREE_OPERAND (decl, 0);
6910
6911                   dname = fns;
6912                   if (TREE_CODE (dname) == COMPONENT_REF)
6913                     dname = TREE_OPERAND (dname, 1);
6914                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
6915                     {
6916                       gcc_assert (is_overloaded_fn (dname));
6917                       dname = DECL_NAME (get_first_fn (dname));
6918                     }
6919                 }
6920                 /* Fall through.  */
6921
6922               case IDENTIFIER_NODE:
6923                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
6924                   dname = decl;
6925
6926                 if (C_IS_RESERVED_WORD (dname))
6927                   {
6928                     error ("declarator-id missing; using reserved word %qD",
6929                            dname);
6930                     name = IDENTIFIER_POINTER (dname);
6931                   }
6932                 else if (!IDENTIFIER_TYPENAME_P (dname))
6933                   name = IDENTIFIER_POINTER (dname);
6934                 else
6935                   {
6936                     gcc_assert (flags == NO_SPECIAL);
6937                     flags = TYPENAME_FLAG;
6938                     ctor_return_type = TREE_TYPE (dname);
6939                     sfk = sfk_conversion;
6940                     if (is_typename_at_global_scope (dname))
6941                       name = IDENTIFIER_POINTER (dname);
6942                     else
6943                       name = "<invalid operator>";
6944                   }
6945                 break;
6946
6947               default:
6948                 gcc_unreachable ();
6949               }
6950             break;
6951
6952           case cdk_array:
6953           case cdk_pointer:
6954           case cdk_reference:
6955           case cdk_ptrmem:
6956             break;
6957
6958           case cdk_error:
6959             break;
6960
6961           default:
6962             gcc_unreachable ();
6963           }
6964         }
6965       if (id_declarator->kind == cdk_id)
6966         break;
6967     }
6968
6969   /* A function definition's declarator must have the form of
6970      a function declarator.  */
6971
6972   if (funcdef_flag && innermost_code != cdk_function)
6973     return NULL_TREE;
6974
6975   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
6976       && innermost_code != cdk_function
6977       && ! (ctype && !declspecs->any_specifiers_p))
6978     {
6979       error ("declaration of %qD as non-function", dname);
6980       return error_mark_node;
6981     }
6982
6983   /* Anything declared one level down from the top level
6984      must be one of the parameters of a function
6985      (because the body is at least two levels down).  */
6986
6987   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
6988      by not allowing C++ class definitions to specify their parameters
6989      with xdecls (must be spec.d in the parmlist).
6990
6991      Since we now wait to push a class scope until we are sure that
6992      we are in a legitimate method context, we must set oldcname
6993      explicitly (since current_class_name is not yet alive).
6994
6995      We also want to avoid calling this a PARM if it is in a namespace.  */
6996
6997   if (decl_context == NORMAL && !toplevel_bindings_p ())
6998     {
6999       struct cp_binding_level *b = current_binding_level;
7000       current_binding_level = b->level_chain;
7001       if (current_binding_level != 0 && toplevel_bindings_p ())
7002         decl_context = PARM;
7003       current_binding_level = b;
7004     }
7005
7006   if (name == NULL)
7007     name = decl_context == PARM ? "parameter" : "type name";
7008
7009   /* If there were multiple types specified in the decl-specifier-seq,
7010      issue an error message.  */
7011   if (declspecs->multiple_types_p)
7012     error ("two or more data types in declaration of %qs", name);
7013   /* Extract the basic type from the decl-specifier-seq.  */
7014   type = declspecs->type;
7015   if (type == error_mark_node)
7016     {
7017       type = NULL_TREE;
7018       type_was_error_mark_node = true;
7019     }
7020   /* If the entire declaration is itself tagged as deprecated then
7021      suppress reports of deprecated items.  */
7022   if (type && TREE_DEPRECATED (type)
7023       && deprecated_state != DEPRECATED_SUPPRESS)
7024     warn_deprecated_use (type);
7025   if (type && TREE_CODE (type) == TYPE_DECL)
7026     {
7027       typedef_decl = type;
7028       type = TREE_TYPE (typedef_decl);
7029     }
7030   /* No type at all: default to `int', and set DEFAULTED_INT
7031      because it was not a user-defined typedef.  */
7032   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7033     {
7034       /* These imply 'int'.  */
7035       type = integer_type_node;
7036       defaulted_int = 1;
7037     }
7038   /* Gather flags.  */
7039   explicit_int = declspecs->explicit_int_p;
7040   explicit_char = declspecs->explicit_char_p;
7041
7042 #if 0
7043   /* See the code below that used this.  */
7044   if (typedef_decl)
7045     decl_attr = DECL_ATTRIBUTES (typedef_decl);
7046 #endif
7047   typedef_type = type;
7048
7049
7050   if (sfk != sfk_conversion)
7051     ctor_return_type = ctype;
7052
7053   if (sfk != sfk_none)
7054     type = check_special_function_return_type (sfk, type,
7055                                                ctor_return_type);
7056   else if (type == NULL_TREE)
7057     {
7058       int is_main;
7059
7060       explicit_int = -1;
7061
7062       /* We handle `main' specially here, because 'main () { }' is so
7063          common.  With no options, it is allowed.  With -Wreturn-type,
7064          it is a warning.  It is only an error with -pedantic-errors.  */
7065       is_main = (funcdef_flag
7066                  && dname && MAIN_NAME_P (dname)
7067                  && ctype == NULL_TREE
7068                  && in_namespace == NULL_TREE
7069                  && current_namespace == global_namespace);
7070
7071       if (type_was_error_mark_node)
7072         /* We've already issued an error, don't complain more.  */;
7073       else if (in_system_header || flag_ms_extensions)
7074         /* Allow it, sigh.  */;
7075       else if (pedantic || ! is_main)
7076         pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
7077       else if (warn_return_type)
7078         warning (0, "ISO C++ forbids declaration of %qs with no type", name);
7079
7080       type = integer_type_node;
7081     }
7082
7083   ctype = NULL_TREE;
7084
7085   /* Now process the modifiers that were specified
7086      and check for invalid combinations.  */
7087
7088   /* Long double is a special combination.  */
7089   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7090     {
7091       long_p = false;
7092       type = build_qualified_type (long_double_type_node,
7093                                    cp_type_quals (type));
7094     }
7095
7096   /* Check all other uses of type modifiers.  */
7097
7098   if (unsigned_p || signed_p || long_p || short_p)
7099     {
7100       int ok = 0;
7101
7102       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7103         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7104       else if (signed_p && unsigned_p)
7105         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7106       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7107         error ("%<long long%> invalid for %qs", name);
7108       else if (long_p && TREE_CODE (type) == REAL_TYPE)
7109         error ("%<long%> invalid for %qs", name);
7110       else if (short_p && TREE_CODE (type) == REAL_TYPE)
7111         error ("%<short%> invalid for %qs", name);
7112       else if ((long_p || short_p) && explicit_char)
7113         error ("%<long%> or %<short%> specified with char for %qs", name);
7114       else if (long_p && short_p)
7115         error ("%<long%> and %<short%> specified together for %qs", name);
7116       else
7117         {
7118           ok = 1;
7119           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7120             {
7121               pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7122                        name);
7123               if (flag_pedantic_errors)
7124                 ok = 0;
7125             }
7126         }
7127
7128       /* Discard the type modifiers if they are invalid.  */
7129       if (! ok)
7130         {
7131           unsigned_p = false;
7132           signed_p = false;
7133           long_p = false;
7134           short_p = false;
7135           longlong = 0;
7136         }
7137     }
7138
7139   /* Decide whether an integer type is signed or not.
7140      Optionally treat bitfields as signed by default.  */
7141   if (unsigned_p
7142       /* [class.bit]
7143
7144          It is implementation-defined whether a plain (neither
7145          explicitly signed or unsigned) char, short, int, or long
7146          bit-field is signed or unsigned.
7147
7148          Naturally, we extend this to long long as well.  Note that
7149          this does not include wchar_t.  */
7150       || (bitfield && !flag_signed_bitfields
7151           && !signed_p
7152           /* A typedef for plain `int' without `signed' can be
7153              controlled just like plain `int', but a typedef for
7154              `signed int' cannot be so controlled.  */
7155           && !(typedef_decl
7156                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7157           && TREE_CODE (type) == INTEGER_TYPE
7158           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7159     {
7160       if (longlong)
7161         type = long_long_unsigned_type_node;
7162       else if (long_p)
7163         type = long_unsigned_type_node;
7164       else if (short_p)
7165         type = short_unsigned_type_node;
7166       else if (type == char_type_node)
7167         type = unsigned_char_type_node;
7168       else if (typedef_decl)
7169         type = c_common_unsigned_type (type);
7170       else
7171         type = unsigned_type_node;
7172     }
7173   else if (signed_p && type == char_type_node)
7174     type = signed_char_type_node;
7175   else if (longlong)
7176     type = long_long_integer_type_node;
7177   else if (long_p)
7178     type = long_integer_type_node;
7179   else if (short_p)
7180     type = short_integer_type_node;
7181
7182   if (declspecs->specs[(int)ds_complex])
7183     {
7184       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7185         error ("complex invalid for %qs", name);
7186       /* If we just have "complex", it is equivalent to
7187          "complex double", but if any modifiers at all are specified it is
7188          the complex form of TYPE.  E.g, "complex short" is
7189          "complex short int".  */
7190
7191       else if (defaulted_int && ! longlong
7192                && ! (long_p || short_p || signed_p || unsigned_p))
7193         type = complex_double_type_node;
7194       else if (type == integer_type_node)
7195         type = complex_integer_type_node;
7196       else if (type == float_type_node)
7197         type = complex_float_type_node;
7198       else if (type == double_type_node)
7199         type = complex_double_type_node;
7200       else if (type == long_double_type_node)
7201         type = complex_long_double_type_node;
7202       else
7203         type = build_complex_type (type);
7204     }
7205
7206   type_quals = TYPE_UNQUALIFIED;
7207   if (declspecs->specs[(int)ds_const])
7208     type_quals |= TYPE_QUAL_CONST;
7209   if (declspecs->specs[(int)ds_volatile])
7210     type_quals |= TYPE_QUAL_VOLATILE;
7211   if (declspecs->specs[(int)ds_restrict])
7212     type_quals |= TYPE_QUAL_RESTRICT;
7213   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7214     error ("qualifiers are not allowed on declaration of %<operator %T%>",
7215            ctor_return_type);
7216
7217   if (TREE_CODE (type) == FUNCTION_TYPE
7218       && type_quals != TYPE_UNQUALIFIED)
7219     {
7220       /* This was an error in C++98 (cv-qualifiers cannot be added to
7221          a function type), but DR 295 makes the code well-formed by
7222          dropping the extra qualifiers. */
7223       if (pedantic)
7224         {
7225           tree bad_type = build_qualified_type (type, type_quals);
7226           pedwarn ("ignoring %qV qualifiers added to function type %qT",
7227                    bad_type, type);
7228         }
7229       type_quals = TYPE_UNQUALIFIED;
7230     }
7231   type_quals |= cp_type_quals (type);
7232   type = cp_build_qualified_type_real
7233     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7234                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
7235   /* We might have ignored or rejected some of the qualifiers.  */
7236   type_quals = cp_type_quals (type);
7237
7238   staticp = 0;
7239   inlinep = !! declspecs->specs[(int)ds_inline];
7240   virtualp = !! declspecs->specs[(int)ds_virtual];
7241   explicitp = !! declspecs->specs[(int)ds_explicit];
7242
7243   storage_class = declspecs->storage_class;
7244   if (storage_class == sc_static)
7245     staticp = 1 + (decl_context == FIELD);
7246
7247   if (virtualp && staticp == 2)
7248     {
7249       error ("member %qD cannot be declared both virtual and static", dname);
7250       storage_class = sc_none;
7251       staticp = 0;
7252     }
7253   friendp = !! declspecs->specs[(int)ds_friend];
7254
7255   if (dependant_name && !friendp)
7256     {
7257       error ("%<%T::%D%> is not a valid declarator", ctype, dependant_name);
7258       return void_type_node;
7259     }
7260
7261   /* Issue errors about use of storage classes for parameters.  */
7262   if (decl_context == PARM)
7263     {
7264       if (declspecs->specs[(int)ds_typedef])
7265         error ("typedef declaration invalid in parameter declaration");
7266       else if (storage_class == sc_static
7267                || storage_class == sc_extern
7268                || thread_p)
7269         error ("storage class specifiers invalid in parameter declarations");
7270     }
7271
7272   /* Give error if `virtual' is used outside of class declaration.  */
7273   if (virtualp
7274       && (current_class_name == NULL_TREE || decl_context != FIELD))
7275     {
7276       error ("virtual outside class declaration");
7277       virtualp = 0;
7278     }
7279
7280   /* Static anonymous unions are dealt with here.  */
7281   if (staticp && decl_context == TYPENAME
7282       && declspecs->type
7283       && ANON_AGGR_TYPE_P (declspecs->type))
7284     decl_context = FIELD;
7285
7286   /* Warn about storage classes that are invalid for certain
7287      kinds of declarations (parameters, typenames, etc.).  */
7288   if (declspecs->multiple_storage_classes_p)
7289     {
7290       error ("multiple storage classes in declaration of %qs", name);
7291       storage_class = sc_none;
7292     }
7293   else if (thread_p
7294            && ((storage_class
7295                 && storage_class != sc_extern
7296                 && storage_class != sc_static)
7297                || declspecs->specs[(int)ds_typedef]))
7298     {
7299       error ("multiple storage classes in declaration of %qs", name);
7300       thread_p = false;
7301     }
7302   else if (decl_context != NORMAL
7303            && ((storage_class != sc_none
7304                 && storage_class != sc_mutable)
7305                || thread_p))
7306     {
7307       if ((decl_context == PARM || decl_context == CATCHPARM)
7308           && (storage_class == sc_register
7309               || storage_class == sc_auto))
7310         ;
7311       else if (declspecs->specs[(int)ds_typedef])
7312         ;
7313       else if (decl_context == FIELD
7314                /* C++ allows static class elements.  */
7315                && storage_class == sc_static)
7316         /* C++ also allows inlines and signed and unsigned elements,
7317            but in those cases we don't come in here.  */
7318         ;
7319       else
7320         {
7321           if (decl_context == FIELD)
7322             error ("storage class specified for %qs", name);
7323           else
7324             {
7325               if (decl_context == PARM || decl_context == CATCHPARM)
7326                 error ("storage class specified for parameter %qs", name);
7327               else
7328                 error ("storage class specified for typename");
7329             }
7330           if (storage_class == sc_register
7331               || storage_class == sc_auto
7332               || storage_class == sc_extern
7333               || thread_p)
7334             storage_class = sc_none;
7335         }
7336     }
7337   else if (storage_class == sc_extern && initialized
7338            && !funcdef_flag)
7339     {
7340       if (toplevel_bindings_p ())
7341         {
7342           /* It's common practice (and completely valid) to have a const
7343              be initialized and declared extern.  */
7344           if (!(type_quals & TYPE_QUAL_CONST))
7345             warning (0, "%qs initialized and declared %<extern%>", name);
7346         }
7347       else
7348         error ("%qs has both %<extern%> and initializer", name);
7349     }
7350   else if (storage_class == sc_extern && funcdef_flag
7351            && ! toplevel_bindings_p ())
7352     error ("nested function %qs declared %<extern%>", name);
7353   else if (toplevel_bindings_p ())
7354     {
7355       if (storage_class == sc_auto)
7356         error ("top-level declaration of %qs specifies %<auto%>", name);
7357     }
7358   else if (thread_p
7359            && storage_class != sc_extern
7360            && storage_class != sc_static)
7361     {
7362       error ("function-scope %qs implicitly auto and declared %<__thread%>",
7363              name);
7364       thread_p = false;
7365     }
7366
7367   if (storage_class && friendp)
7368     error ("storage class specifiers invalid in friend function declarations");
7369
7370   if (!id_declarator)
7371     unqualified_id = NULL_TREE;
7372   else
7373     {
7374       unqualified_id = id_declarator->u.id.unqualified_name;
7375       switch (TREE_CODE (unqualified_id))
7376         {
7377         case BIT_NOT_EXPR:
7378           unqualified_id
7379             = constructor_name (TREE_OPERAND (unqualified_id, 0));
7380           break;
7381
7382         case IDENTIFIER_NODE:
7383         case TEMPLATE_ID_EXPR:
7384           break;
7385
7386         default:
7387           gcc_unreachable ();
7388         }
7389     }
7390
7391   /* Determine the type of the entity declared by recurring on the
7392      declarator.  */
7393   for (; declarator; declarator = declarator->declarator)
7394     {
7395       const cp_declarator *inner_declarator;
7396       tree attrs;
7397
7398       if (type == error_mark_node)
7399         return error_mark_node;
7400
7401       attrs = declarator->attributes;
7402       if (attrs)
7403         {
7404           int attr_flags;
7405
7406           attr_flags = 0;
7407           if (declarator == NULL || declarator->kind == cdk_id)
7408             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7409           if (declarator->kind == cdk_function)
7410             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7411           if (declarator->kind == cdk_array)
7412             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7413           returned_attrs = decl_attributes (&type,
7414                                             chainon (returned_attrs, attrs),
7415                                             attr_flags);
7416         }
7417
7418       if (declarator->kind == cdk_id)
7419         break;
7420
7421       inner_declarator = declarator->declarator;
7422
7423       switch (declarator->kind)
7424         {
7425         case cdk_array:
7426           type = create_array_type_for_decl (dname, type,
7427                                              declarator->u.array.bounds);
7428           break;
7429
7430         case cdk_function:
7431           {
7432             tree arg_types;
7433             int funcdecl_p;
7434
7435             /* Declaring a function type.
7436                Make sure we have a valid type for the function to return.  */
7437
7438             /* We now know that the TYPE_QUALS don't apply to the
7439                decl, but to its return type.  */
7440             type_quals = TYPE_UNQUALIFIED;
7441
7442             /* Warn about some types functions can't return.  */
7443
7444             if (TREE_CODE (type) == FUNCTION_TYPE)
7445               {
7446                 error ("%qs declared as function returning a function", name);
7447                 type = integer_type_node;
7448               }
7449             if (TREE_CODE (type) == ARRAY_TYPE)
7450               {
7451                 error ("%qs declared as function returning an array", name);
7452                 type = integer_type_node;
7453               }
7454
7455             /* Pick up type qualifiers which should be applied to `this'.  */
7456             quals = declarator->u.function.qualifiers;
7457
7458             /* Pick up the exception specifications.  */
7459             raises = declarator->u.function.exception_specification;
7460
7461             /* Say it's a definition only for the CALL_EXPR
7462                closest to the identifier.  */
7463             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7464
7465             if (ctype == NULL_TREE
7466                 && decl_context == FIELD
7467                 && funcdecl_p
7468                 && (friendp == 0 || dname == current_class_name))
7469               ctype = current_class_type;
7470
7471             if (ctype && (sfk == sfk_constructor
7472                           || sfk == sfk_destructor))
7473               {
7474                 /* We are within a class's scope. If our declarator name
7475                    is the same as the class name, and we are defining
7476                    a function, then it is a constructor/destructor, and
7477                    therefore returns a void type.  */
7478
7479                 if (flags == DTOR_FLAG)
7480                   {
7481                     /* ISO C++ 12.4/2.  A destructor may not be
7482                        declared const or volatile.  A destructor may
7483                        not be static.  */
7484                     if (staticp == 2)
7485                       error ("destructor cannot be static member function");
7486                     if (quals)
7487                       {
7488                         error ("destructors may not be cv-qualified");
7489                         quals = TYPE_UNQUALIFIED;
7490                       }
7491                     if (decl_context == FIELD)
7492                       {
7493                         if (! member_function_or_else (ctype,
7494                                                        current_class_type,
7495                                                        flags))
7496                           return void_type_node;
7497                       }
7498                   }
7499                 else /* It's a constructor.  */
7500                   {
7501                     if (explicitp == 1)
7502                       explicitp = 2;
7503                     /* ISO C++ 12.1.  A constructor may not be
7504                        declared const or volatile.  A constructor may
7505                        not be virtual.  A constructor may not be
7506                        static.  */
7507                     if (staticp == 2)
7508                       error ("constructor cannot be static member function");
7509                     if (virtualp)
7510                       {
7511                         pedwarn ("constructors cannot be declared virtual");
7512                         virtualp = 0;
7513                       }
7514                     if (quals)
7515                       {
7516                         error ("constructors may not be cv-qualified");
7517                         quals = TYPE_UNQUALIFIED;
7518                       }
7519                     if (decl_context == FIELD)
7520                       {
7521                         if (! member_function_or_else (ctype,
7522                                                        current_class_type,
7523                                                        flags))
7524                           return void_type_node;
7525                         TYPE_HAS_CONSTRUCTOR (ctype) = 1;
7526                         if (sfk != sfk_constructor)
7527                           return NULL_TREE;
7528                       }
7529                   }
7530                 if (decl_context == FIELD)
7531                   staticp = 0;
7532               }
7533             else if (friendp)
7534               {
7535                 if (initialized)
7536                   error ("can't initialize friend function %qs", name);
7537                 if (virtualp)
7538                   {
7539                     /* Cannot be both friend and virtual.  */
7540                     error ("virtual functions cannot be friends");
7541                     friendp = 0;
7542                   }
7543                 if (decl_context == NORMAL)
7544                   error ("friend declaration not in class definition");
7545                 if (current_function_decl && funcdef_flag)
7546                   error ("can't define friend function %qs in a local "
7547                          "class definition",
7548                          name);
7549               }
7550
7551             arg_types = grokparms (declarator->u.function.parameters,
7552                                    &parms);
7553
7554             if (inner_declarator
7555                 && inner_declarator->kind == cdk_id
7556                 && inner_declarator->u.id.sfk == sfk_destructor
7557                 && arg_types != void_list_node)
7558               {
7559                 error ("destructors may not have parameters");
7560                 arg_types = void_list_node;
7561                 parms = NULL_TREE;
7562               }
7563
7564             type = build_function_type (type, arg_types);
7565             type = cp_build_qualified_type (type, quals);
7566           }
7567           break;
7568
7569         case cdk_pointer:
7570         case cdk_reference:
7571         case cdk_ptrmem:
7572           /* Filter out pointers-to-references and references-to-references.
7573              We can get these if a TYPE_DECL is used.  */
7574
7575           if (TREE_CODE (type) == REFERENCE_TYPE)
7576             {
7577               error (declarator->kind == cdk_reference
7578                      ? "cannot declare reference to %q#T"
7579                      : "cannot declare pointer to %q#T", type);
7580               type = TREE_TYPE (type);
7581             }
7582           else if (VOID_TYPE_P (type))
7583             {
7584               if (declarator->kind == cdk_reference)
7585                 error ("cannot declare reference to %q#T", type);
7586               else if (declarator->kind == cdk_ptrmem)
7587                 error ("cannot declare pointer to %q#T member", type);
7588             }
7589
7590           /* We now know that the TYPE_QUALS don't apply to the decl,
7591              but to the target of the pointer.  */
7592           type_quals = TYPE_UNQUALIFIED;
7593
7594           if (declarator->kind == cdk_ptrmem
7595               && (TREE_CODE (type) == FUNCTION_TYPE
7596                   || (quals && TREE_CODE (type) == METHOD_TYPE)))
7597             {
7598               tree dummy;
7599
7600               /* If the type is a FUNCTION_TYPE, pick up the
7601                  qualifiers from that function type. No other
7602                  qualifiers may be supplied. */
7603               if (TREE_CODE (type) == FUNCTION_TYPE)
7604                 quals = cp_type_quals (type);
7605
7606               dummy = build_decl (TYPE_DECL, NULL_TREE, type);
7607               grok_method_quals (declarator->u.pointer.class_type,
7608                                  dummy, quals);
7609               type = TREE_TYPE (dummy);
7610               quals = TYPE_UNQUALIFIED;
7611             }
7612
7613           if (declarator->kind == cdk_reference)
7614             {
7615               if (!VOID_TYPE_P (type))
7616                 type = build_reference_type (type);
7617             }
7618           else if (TREE_CODE (type) == METHOD_TYPE)
7619             type = build_ptrmemfunc_type (build_pointer_type (type));
7620           else if (declarator->kind == cdk_ptrmem)
7621             {
7622               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
7623                           != NAMESPACE_DECL);
7624               if (declarator->u.pointer.class_type == error_mark_node)
7625                 /* We will already have complained.  */
7626                 type = error_mark_node;
7627               else
7628                 type = build_ptrmem_type (declarator->u.pointer.class_type,
7629                                           type);
7630             }
7631           else
7632             type = build_pointer_type (type);
7633
7634           /* Process a list of type modifier keywords (such as
7635              const or volatile) that were given inside the `*' or `&'.  */
7636
7637           if (declarator->u.pointer.qualifiers)
7638             {
7639               type
7640                 = cp_build_qualified_type (type,
7641                                            declarator->u.pointer.qualifiers);
7642               type_quals = cp_type_quals (type);
7643             }
7644           ctype = NULL_TREE;
7645           break;
7646
7647         case cdk_error:
7648           break;
7649
7650         default:
7651           gcc_unreachable ();
7652         }
7653     }
7654
7655   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7656       && TREE_CODE (type) != FUNCTION_TYPE
7657       && TREE_CODE (type) != METHOD_TYPE)
7658     {
7659       error ("template-id %qD used as a declarator",
7660              unqualified_id);
7661       unqualified_id = dname;
7662     }
7663
7664   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7665      qualified with a class-name, turn it into a METHOD_TYPE, unless
7666      we know that the function is static.  We take advantage of this
7667      opportunity to do other processing that pertains to entities
7668      explicitly declared to be class members.  Note that if DECLARATOR
7669      is non-NULL, we know it is a cdk_id declarator; otherwise, we
7670      would not have exited the loop above.  */
7671   if (declarator
7672       && declarator->u.id.qualifying_scope
7673       && TYPE_P (declarator->u.id.qualifying_scope))
7674     {
7675       tree t;
7676
7677       ctype = declarator->u.id.qualifying_scope;
7678       ctype = TYPE_MAIN_VARIANT (ctype);
7679       t = ctype;
7680       while (t != NULL_TREE && CLASS_TYPE_P (t))
7681         {
7682           /* You're supposed to have one `template <...>' for every
7683              template class, but you don't need one for a full
7684              specialization.  For example:
7685
7686                template <class T> struct S{};
7687                template <> struct S<int> { void f(); };
7688                void S<int>::f () {}
7689
7690              is correct; there shouldn't be a `template <>' for the
7691              definition of `S<int>::f'.  */
7692           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7693               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7694             /* T is an explicit (not partial) specialization.  All
7695                containing classes must therefore also be explicitly
7696                specialized.  */
7697             break;
7698           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7699               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7700             template_count += 1;
7701
7702           t = TYPE_MAIN_DECL (t);
7703           t = DECL_CONTEXT (t);
7704         }
7705
7706       if (ctype == current_class_type)
7707         {
7708           if (friendp)
7709             pedwarn ("member functions are implicitly friends of their class");
7710           else
7711             pedwarn ("extra qualification %<%T::%> on member %qs",
7712                      ctype, name);
7713         }
7714       else if (TREE_CODE (type) == FUNCTION_TYPE)
7715         {
7716           tree sname = declarator->u.id.unqualified_name;
7717
7718           if (current_class_type
7719               && (!friendp || funcdef_flag))
7720             {
7721               error (funcdef_flag
7722                      ? "cannot define member function %<%T::%s%> within %<%T%>"
7723                      : "cannot declare member function %<%T::%s%> within %<%T%>",
7724                      ctype, name, current_class_type);
7725               return error_mark_node;
7726             }
7727
7728           if (TREE_CODE (sname) == IDENTIFIER_NODE
7729               && NEW_DELETE_OPNAME_P (sname))
7730             /* Overloaded operator new and operator delete
7731                are always static functions.  */
7732             ;
7733           else
7734             type = build_method_type_directly (ctype,
7735                                                TREE_TYPE (type),
7736                                                TYPE_ARG_TYPES (type));
7737         }
7738       else if (declspecs->specs[(int)ds_typedef]
7739                || COMPLETE_TYPE_P (complete_type (ctype)))
7740         {
7741           /* Have to move this code elsewhere in this function.
7742              this code is used for i.e., typedef int A::M; M *pm;
7743
7744              It is?  How? jason 10/2/94 */
7745
7746           if (current_class_type)
7747             {
7748               error ("cannot declare member %<%T::%s%> within %qT",
7749                      ctype, name, current_class_type);
7750               return void_type_node;
7751             }
7752         }
7753       else
7754         {
7755           cxx_incomplete_type_error (NULL_TREE, ctype);
7756           return error_mark_node;
7757         }
7758     }
7759
7760   /* Now TYPE has the actual type.  */
7761
7762   if (returned_attrs)
7763     {
7764       if (attrlist)
7765         *attrlist = chainon (returned_attrs, *attrlist);
7766       else
7767         attrlist = &returned_attrs;
7768     }
7769
7770   /* Did array size calculations overflow?  */
7771
7772   if (TREE_CODE (type) == ARRAY_TYPE
7773       && COMPLETE_TYPE_P (type)
7774       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7775       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7776     {
7777       error ("size of array %qs is too large", name);
7778       /* If we proceed with the array type as it is, we'll eventually
7779          crash in tree_low_cst().  */
7780       type = error_mark_node;
7781     }
7782
7783   if ((decl_context == FIELD || decl_context == PARM)
7784       && !processing_template_decl
7785       && variably_modified_type_p (type, NULL_TREE))
7786     {
7787       if (decl_context == FIELD)
7788         error ("data member may not have variably modified type %qT", type);
7789       else
7790         error ("parameter may not have variably modified type %qT", type);
7791       type = error_mark_node;
7792     }
7793
7794   if (explicitp == 1 || (explicitp && friendp))
7795     {
7796       /* [dcl.fct.spec] The explicit specifier shall only be used in
7797          declarations of constructors within a class definition.  */
7798       error ("only declarations of constructors can be %<explicit%>");
7799       explicitp = 0;
7800     }
7801
7802   if (storage_class == sc_mutable)
7803     {
7804       if (decl_context != FIELD || friendp)
7805         {
7806           error ("non-member %qs cannot be declared %<mutable%>", name);
7807           storage_class = sc_none;
7808         }
7809       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7810         {
7811           error ("non-object member %qs cannot be declared %<mutable%>", name);
7812           storage_class = sc_none;
7813         }
7814       else if (TREE_CODE (type) == FUNCTION_TYPE
7815                || TREE_CODE (type) == METHOD_TYPE)
7816         {
7817           error ("function %qs cannot be declared %<mutable%>", name);
7818           storage_class = sc_none;
7819         }
7820       else if (staticp)
7821         {
7822           error ("static %qs cannot be declared %<mutable%>", name);
7823           storage_class = sc_none;
7824         }
7825       else if (type_quals & TYPE_QUAL_CONST)
7826         {
7827           error ("const %qs cannot be declared %<mutable%>", name);
7828           storage_class = sc_none;
7829         }
7830     }
7831
7832   /* If this is declaring a typedef name, return a TYPE_DECL.  */
7833   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7834     {
7835       tree decl;
7836
7837       /* Note that the grammar rejects storage classes
7838          in typenames, fields or parameters.  */
7839       if (current_lang_name == lang_name_java)
7840         TYPE_FOR_JAVA (type) = 1;
7841
7842       if (decl_context == FIELD)
7843         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7844       else
7845         decl = build_decl (TYPE_DECL, unqualified_id, type);
7846       if (id_declarator && declarator->u.id.qualifying_scope)
7847         error ("%Jtypedef name may not be a nested-name-specifier", decl);
7848
7849       if (decl_context != FIELD)
7850         {
7851           if (!current_function_decl)
7852             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7853           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7854                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7855                        (current_function_decl)))
7856             /* The TYPE_DECL is "abstract" because there will be
7857                clones of this constructor/destructor, and there will
7858                be copies of this TYPE_DECL generated in those
7859                clones.  */
7860             DECL_ABSTRACT (decl) = 1;
7861         }
7862       else if (constructor_name_p (unqualified_id, current_class_type))
7863         pedwarn ("ISO C++ forbids nested type %qD with same name "
7864                  "as enclosing class",
7865                  unqualified_id);
7866
7867       /* If the user declares "typedef struct {...} foo" then the
7868          struct will have an anonymous name.  Fill that name in now.
7869          Nothing can refer to it, so nothing needs know about the name
7870          change.  */
7871       if (type != error_mark_node
7872           && unqualified_id
7873           && TYPE_NAME (type)
7874           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7875           && TYPE_ANONYMOUS_P (type)
7876           /* Don't do this if there are attributes.  */
7877           && (!attrlist || !*attrlist)
7878           && cp_type_quals (type) == TYPE_UNQUALIFIED)
7879         {
7880           tree oldname = TYPE_NAME (type);
7881           tree t;
7882
7883           /* Replace the anonymous name with the real name everywhere.  */
7884           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7885             if (TYPE_NAME (t) == oldname)
7886               TYPE_NAME (t) = decl;
7887
7888           if (TYPE_LANG_SPECIFIC (type))
7889             TYPE_WAS_ANONYMOUS (type) = 1;
7890
7891           /* If this is a typedef within a template class, the nested
7892              type is a (non-primary) template.  The name for the
7893              template needs updating as well.  */
7894           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7895             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7896               = TYPE_IDENTIFIER (type);
7897
7898           /* FIXME remangle member functions; member functions of a
7899              type with external linkage have external linkage.  */
7900         }
7901
7902       if (quals)
7903         {
7904           if (ctype == NULL_TREE)
7905             {
7906               if (TREE_CODE (type) == METHOD_TYPE)
7907                 ctype = TYPE_METHOD_BASETYPE (type);
7908               /* Any qualifiers on a function type typedef have
7909                  already been dealt with. */
7910               else if (TREE_CODE (type) == FUNCTION_TYPE)
7911                 quals = TYPE_UNQUALIFIED;
7912             }
7913           if (ctype != NULL_TREE)
7914             grok_method_quals (ctype, decl, quals);
7915         }
7916
7917       if (signed_p
7918           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
7919         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
7920
7921       bad_specifiers (decl, "type", virtualp, quals != TYPE_UNQUALIFIED,
7922                       inlinep, friendp, raises != NULL_TREE);
7923
7924       return decl;
7925     }
7926
7927   /* Detect the case of an array type of unspecified size
7928      which came, as such, direct from a typedef name.
7929      We must copy the type, so that the array's domain can be
7930      individually set by the object's initializer.  */
7931
7932   if (type && typedef_type
7933       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
7934       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
7935     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
7936
7937   /* Detect where we're using a typedef of function type to declare a
7938      function. PARMS will not be set, so we must create it now.  */
7939
7940   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
7941     {
7942       tree decls = NULL_TREE;
7943       tree args;
7944
7945       for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
7946         {
7947           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
7948
7949           TREE_CHAIN (decl) = decls;
7950           decls = decl;
7951         }
7952
7953       parms = nreverse (decls);
7954
7955       if (decl_context != TYPENAME)
7956         {
7957           /* A cv-qualifier-seq shall only be part of the function type
7958              for a non-static member function. [8.3.5/4 dcl.fct] */
7959           if (cp_type_quals (type) != TYPE_UNQUALIFIED
7960               && (current_class_type == NULL_TREE || staticp) )
7961             {
7962               error ("qualified function types cannot be used to declare %s functions",
7963                      (staticp? "static member" : "free"));
7964               type = TYPE_MAIN_VARIANT (type);
7965             }
7966
7967           /* The qualifiers on the function type become the qualifiers on
7968              the non-static member function. */
7969           quals |= cp_type_quals (type);
7970         }
7971     }
7972
7973   /* If this is a type name (such as, in a cast or sizeof),
7974      compute the type and return it now.  */
7975
7976   if (decl_context == TYPENAME)
7977     {
7978       /* Note that the grammar rejects storage classes
7979          in typenames, fields or parameters.  */
7980       if (type_quals != TYPE_UNQUALIFIED)
7981         type_quals = TYPE_UNQUALIFIED;
7982
7983       /* Special case: "friend class foo" looks like a TYPENAME context.  */
7984       if (friendp)
7985         {
7986           if (type_quals != TYPE_UNQUALIFIED)
7987             {
7988               error ("type qualifiers specified for friend class declaration");
7989               type_quals = TYPE_UNQUALIFIED;
7990             }
7991           if (inlinep)
7992             {
7993               error ("%<inline%> specified for friend class declaration");
7994               inlinep = 0;
7995             }
7996
7997           if (!current_aggr)
7998             {
7999               /* Don't allow friend declaration without a class-key.  */
8000               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8001                 pedwarn ("template parameters cannot be friends");
8002               else if (TREE_CODE (type) == TYPENAME_TYPE)
8003                 pedwarn ("friend declaration requires class-key, "
8004                          "i.e. %<friend class %T::%D%>",
8005                          TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8006               else
8007                 pedwarn ("friend declaration requires class-key, "
8008                          "i.e. %<friend %#T%>",
8009                          type);
8010             }
8011
8012           /* Only try to do this stuff if we didn't already give up.  */
8013           if (type != integer_type_node)
8014             {
8015               /* A friendly class?  */
8016               if (current_class_type)
8017                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8018                                    /*complain=*/true);
8019               else
8020                 error ("trying to make class %qT a friend of global scope",
8021                        type);
8022
8023               type = void_type_node;
8024             }
8025         }
8026       else if (quals)
8027         {
8028           if (ctype == NULL_TREE)
8029             {
8030               if (TREE_CODE (type) != METHOD_TYPE)
8031                 error ("invalid qualifiers on non-member function type");
8032               else
8033                 ctype = TYPE_METHOD_BASETYPE (type);
8034             }
8035           if (ctype)
8036             {
8037               tree dummy = build_decl (TYPE_DECL, unqualified_id, type);
8038               grok_method_quals (ctype, dummy, quals);
8039               type = TREE_TYPE (dummy);
8040             }
8041         }
8042
8043       return type;
8044     }
8045   else if (unqualified_id == NULL_TREE && decl_context != PARM
8046            && decl_context != CATCHPARM
8047            && TREE_CODE (type) != UNION_TYPE
8048            && ! bitfield)
8049     {
8050       error ("abstract declarator %qT used as declaration", type);
8051       return error_mark_node;
8052     }
8053
8054   /* Only functions may be declared using an operator-function-id.  */
8055   if (unqualified_id
8056       && IDENTIFIER_OPNAME_P (unqualified_id)
8057       && TREE_CODE (type) != FUNCTION_TYPE
8058       && TREE_CODE (type) != METHOD_TYPE)
8059     {
8060       error ("declaration of %qD as non-function", unqualified_id);
8061       return error_mark_node;
8062     }
8063
8064   /* We don't check parameter types here because we can emit a better
8065      error message later.  */
8066   if (decl_context != PARM)
8067     type = check_var_type (unqualified_id, type);
8068
8069   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8070      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
8071
8072   if (decl_context == PARM || decl_context == CATCHPARM)
8073     {
8074       if (ctype || in_namespace)
8075         error ("cannot use %<::%> in parameter declaration");
8076
8077       /* A parameter declared as an array of T is really a pointer to T.
8078          One declared as a function is really a pointer to a function.
8079          One declared as a member is really a pointer to member.  */
8080
8081       if (TREE_CODE (type) == ARRAY_TYPE)
8082         {
8083           /* Transfer const-ness of array into that of type pointed to.  */
8084           type = build_pointer_type (TREE_TYPE (type));
8085           type_quals = TYPE_UNQUALIFIED;
8086         }
8087       else if (TREE_CODE (type) == FUNCTION_TYPE)
8088         type = build_pointer_type (type);
8089     }
8090
8091   {
8092     tree decl;
8093
8094     if (decl_context == PARM)
8095       {
8096         decl = cp_build_parm_decl (unqualified_id, type);
8097
8098         bad_specifiers (decl, "parameter", virtualp, quals != TYPE_UNQUALIFIED,
8099                         inlinep, friendp, raises != NULL_TREE);
8100       }
8101     else if (decl_context == FIELD)
8102       {
8103         /* The C99 flexible array extension.  */
8104         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8105             && TYPE_DOMAIN (type) == NULL_TREE)
8106           {
8107             tree itype = compute_array_index_type (dname, integer_zero_node);
8108             type = build_cplus_array_type (TREE_TYPE (type), itype);
8109           }
8110
8111         if (type == error_mark_node)
8112           {
8113             /* Happens when declaring arrays of sizes which
8114                are error_mark_node, for example.  */
8115             decl = NULL_TREE;
8116           }
8117         else if (in_namespace && !friendp)
8118           {
8119             /* Something like struct S { int N::j; };  */
8120             error ("invalid use of %<::%>");
8121             decl = NULL_TREE;
8122           }
8123         else if (TREE_CODE (type) == FUNCTION_TYPE)
8124           {
8125             int publicp = 0;
8126             tree function_context;
8127
8128             if (friendp == 0)
8129               {
8130                 if (ctype == NULL_TREE)
8131                   ctype = current_class_type;
8132
8133                 if (ctype == NULL_TREE)
8134                   {
8135                     error ("can't make %qD into a method -- not in a class",
8136                            unqualified_id);
8137                     return void_type_node;
8138                   }
8139
8140                 /* ``A union may [ ... ] not [ have ] virtual functions.''
8141                    ARM 9.5 */
8142                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8143                   {
8144                     error ("function %qD declared virtual inside a union",
8145                            unqualified_id);
8146                     return void_type_node;
8147                   }
8148
8149                 if (NEW_DELETE_OPNAME_P (unqualified_id))
8150                   {
8151                     if (virtualp)
8152                       {
8153                         error ("%qD cannot be declared virtual, since it "
8154                                "is always static",
8155                                unqualified_id);
8156                         virtualp = 0;
8157                       }
8158                   }
8159                 else if (staticp < 2)
8160                   type = build_method_type_directly (ctype,
8161                                                      TREE_TYPE (type),
8162                                                      TYPE_ARG_TYPES (type));
8163               }
8164
8165             /* Check that the name used for a destructor makes sense.  */
8166             if (sfk == sfk_destructor)
8167               {
8168                 if (!ctype)
8169                   {
8170                     gcc_assert (friendp);
8171                     error ("expected qualified name in friend declaration "
8172                            "for destructor %qD",
8173                            id_declarator->u.id.unqualified_name);
8174                     return error_mark_node;
8175                   }
8176
8177                 if (!same_type_p (TREE_OPERAND
8178                                   (id_declarator->u.id.unqualified_name, 0),
8179                                   ctype))
8180                   {
8181                     error ("declaration of %qD as member of %qT",
8182                            id_declarator->u.id.unqualified_name, ctype);
8183                     return error_mark_node;
8184                   }
8185               }
8186
8187             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
8188             function_context = (ctype != NULL_TREE) ?
8189               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8190             publicp = (! friendp || ! staticp)
8191               && function_context == NULL_TREE;
8192             decl = grokfndecl (ctype, type,
8193                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8194                                ? unqualified_id : dname,
8195                                parms,
8196                                unqualified_id,
8197                                virtualp, flags, quals, raises,
8198                                friendp ? -1 : 0, friendp, publicp, inlinep,
8199                                sfk,
8200                                funcdef_flag, template_count, in_namespace, attrlist);
8201             if (decl == NULL_TREE)
8202               return decl;
8203 #if 0
8204             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
8205             /* The decl and setting of decl_attr is also turned off.  */
8206             decl = build_decl_attribute_variant (decl, decl_attr);
8207 #endif
8208
8209             /* [class.conv.ctor]
8210
8211                A constructor declared without the function-specifier
8212                explicit that can be called with a single parameter
8213                specifies a conversion from the type of its first
8214                parameter to the type of its class.  Such a constructor
8215                is called a converting constructor.  */
8216             if (explicitp == 2)
8217               DECL_NONCONVERTING_P (decl) = 1;
8218             else if (DECL_CONSTRUCTOR_P (decl))
8219               {
8220                 /* The constructor can be called with exactly one
8221                    parameter if there is at least one parameter, and
8222                    any subsequent parameters have default arguments.
8223                    Ignore any compiler-added parms.  */
8224                 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8225
8226                 if (arg_types == void_list_node
8227                     || (arg_types
8228                         && TREE_CHAIN (arg_types)
8229                         && TREE_CHAIN (arg_types) != void_list_node
8230                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8231                   DECL_NONCONVERTING_P (decl) = 1;
8232               }
8233           }
8234         else if (TREE_CODE (type) == METHOD_TYPE)
8235           {
8236             /* We only get here for friend declarations of
8237                members of other classes.  */
8238             /* All method decls are public, so tell grokfndecl to set
8239                TREE_PUBLIC, also.  */
8240             decl = grokfndecl (ctype, type,
8241                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8242                                ? unqualified_id : dname,
8243                                parms,
8244                                unqualified_id,
8245                                virtualp, flags, quals, raises,
8246                                friendp ? -1 : 0, friendp, 1, 0, sfk,
8247                                funcdef_flag, template_count, in_namespace,
8248                                attrlist);
8249             if (decl == NULL_TREE)
8250               return NULL_TREE;
8251           }
8252         else if (!staticp && !dependent_type_p (type)
8253                  && !COMPLETE_TYPE_P (complete_type (type))
8254                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8255           {
8256             if (unqualified_id)
8257               error ("field %qD has incomplete type", unqualified_id);
8258             else
8259               error ("name %qT has incomplete type", type);
8260
8261             /* If we're instantiating a template, tell them which
8262                instantiation made the field's type be incomplete.  */
8263             if (current_class_type
8264                 && TYPE_NAME (current_class_type)
8265                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8266                 && declspecs->type
8267                 && declspecs->type == type)
8268               error ("  in instantiation of template %qT",
8269                      current_class_type);
8270
8271             type = error_mark_node;
8272             decl = NULL_TREE;
8273           }
8274         else
8275           {
8276             if (friendp)
8277               {
8278                 error ("%qE is neither function nor member function; "
8279                        "cannot be declared friend", unqualified_id);
8280                 friendp = 0;
8281               }
8282             decl = NULL_TREE;
8283           }
8284
8285         if (friendp)
8286           {
8287             /* Friends are treated specially.  */
8288             if (ctype == current_class_type)
8289               ;  /* We already issued a pedwarn.  */
8290             else if (decl && DECL_NAME (decl))
8291               {
8292                 if (template_class_depth (current_class_type) == 0)
8293                   {
8294                     decl = check_explicit_specialization
8295                       (unqualified_id, decl, template_count,
8296                        2 * funcdef_flag + 4);
8297                     if (decl == error_mark_node)
8298                       return error_mark_node;
8299                   }
8300
8301                 decl = do_friend (ctype, unqualified_id, decl,
8302                                   *attrlist, flags, quals, funcdef_flag);
8303                 return decl;
8304               }
8305             else
8306               return void_type_node;
8307           }
8308
8309         /* Structure field.  It may not be a function, except for C++.  */
8310
8311         if (decl == NULL_TREE)
8312           {
8313             if (initialized)
8314               {
8315                 if (!staticp)
8316                   {
8317                     /* An attempt is being made to initialize a non-static
8318                        member.  But, from [class.mem]:
8319
8320                        4 A member-declarator can contain a
8321                        constant-initializer only if it declares a static
8322                        member (_class.static_) of integral or enumeration
8323                        type, see _class.static.data_.
8324
8325                        This used to be relatively common practice, but
8326                        the rest of the compiler does not correctly
8327                        handle the initialization unless the member is
8328                        static so we make it static below.  */
8329                     pedwarn ("ISO C++ forbids initialization of member %qD",
8330                              unqualified_id);
8331                     pedwarn ("making %qD static", unqualified_id);
8332                     staticp = 1;
8333                   }
8334
8335                 if (uses_template_parms (type))
8336                   /* We'll check at instantiation time.  */
8337                   ;
8338                 else if (check_static_variable_definition (unqualified_id,
8339                                                            type))
8340                   /* If we just return the declaration, crashes
8341                      will sometimes occur.  We therefore return
8342                      void_type_node, as if this was a friend
8343                      declaration, to cause callers to completely
8344                      ignore this declaration.  */
8345                   return void_type_node;
8346               }
8347
8348             if (staticp)
8349               {
8350                 /* C++ allows static class members.  All other work
8351                    for this is done by grokfield.  */
8352                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8353                 set_linkage_for_static_data_member (decl);
8354                 /* Even if there is an in-class initialization, DECL
8355                    is considered undefined until an out-of-class
8356                    definition is provided.  */
8357                 DECL_EXTERNAL (decl) = 1;
8358
8359                 if (thread_p)
8360                   {
8361                     if (targetm.have_tls)
8362                       DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8363                     else
8364                       /* A mere warning is sure to result in improper
8365                          semantics at runtime.  Don't bother to allow this to
8366                          compile.  */
8367                       error ("thread-local storage not supported for this target");
8368                   }
8369               }
8370             else
8371               {
8372                 decl = build_decl (FIELD_DECL, unqualified_id, type);
8373                 DECL_NONADDRESSABLE_P (decl) = bitfield;
8374                 if (storage_class == sc_mutable)
8375                   {
8376                     DECL_MUTABLE_P (decl) = 1;
8377                     storage_class = sc_none;
8378                   }
8379               }
8380
8381             bad_specifiers (decl, "field", virtualp, quals != TYPE_UNQUALIFIED,
8382                             inlinep, friendp, raises != NULL_TREE);
8383           }
8384       }
8385     else if (TREE_CODE (type) == FUNCTION_TYPE
8386              || TREE_CODE (type) == METHOD_TYPE)
8387       {
8388         tree original_name;
8389         int publicp = 0;
8390
8391         if (!unqualified_id)
8392           return NULL_TREE;
8393
8394         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8395           original_name = dname;
8396         else
8397           original_name = unqualified_id;
8398
8399         if (storage_class == sc_auto)
8400           error ("storage class %<auto%> invalid for function %qs", name);
8401         else if (storage_class == sc_register)
8402           error ("storage class %<register%> invalid for function %qs", name);
8403         else if (thread_p)
8404           error ("storage class %<__thread%> invalid for function %qs", name);
8405
8406         /* Function declaration not at top level.
8407            Storage classes other than `extern' are not allowed
8408            and `extern' makes no difference.  */
8409         if (! toplevel_bindings_p ()
8410             && (storage_class == sc_static
8411                 || declspecs->specs[(int)ds_inline])
8412             && pedantic)
8413           {
8414             if (storage_class == sc_static)
8415               pedwarn ("%<static%> specified invalid for function %qs "
8416                        "declared out of global scope", name);
8417             else
8418               pedwarn ("%<inline%> specifier invalid for function %qs "
8419                        "declared out of global scope", name);
8420           }
8421
8422         if (ctype == NULL_TREE)
8423           {
8424             if (virtualp)
8425               {
8426                 error ("virtual non-class function %qs", name);
8427                 virtualp = 0;
8428               }
8429           }
8430         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8431                  && !NEW_DELETE_OPNAME_P (original_name))
8432           type = build_method_type_directly (ctype,
8433                                              TREE_TYPE (type),
8434                                              TYPE_ARG_TYPES (type));
8435
8436         /* Record presence of `static'.  */
8437         publicp = (ctype != NULL_TREE
8438                    || storage_class == sc_extern
8439                    || storage_class != sc_static);
8440
8441         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8442                            virtualp, flags, quals, raises,
8443                            1, friendp,
8444                            publicp, inlinep, sfk, funcdef_flag,
8445                            template_count, in_namespace, attrlist);
8446         if (decl == NULL_TREE)
8447           return NULL_TREE;
8448
8449         if (staticp == 1)
8450           {
8451             int invalid_static = 0;
8452
8453             /* Don't allow a static member function in a class, and forbid
8454                declaring main to be static.  */
8455             if (TREE_CODE (type) == METHOD_TYPE)
8456               {
8457                 pedwarn ("cannot declare member function %qD to have "
8458                          "static linkage", decl);
8459                 invalid_static = 1;
8460               }
8461             else if (current_function_decl)
8462               {
8463                 /* FIXME need arm citation */
8464                 error ("cannot declare static function inside another function");
8465                 invalid_static = 1;
8466               }
8467
8468             if (invalid_static)
8469               {
8470                 staticp = 0;
8471                 storage_class = sc_none;
8472               }
8473           }
8474       }
8475     else
8476       {
8477         /* It's a variable.  */
8478
8479         /* An uninitialized decl with `extern' is a reference.  */
8480         decl = grokvardecl (type, unqualified_id,
8481                             declspecs,
8482                             initialized,
8483                             (type_quals & TYPE_QUAL_CONST) != 0,
8484                             ctype ? ctype : in_namespace);
8485         bad_specifiers (decl, "variable", virtualp, quals != TYPE_UNQUALIFIED,
8486                         inlinep, friendp, raises != NULL_TREE);
8487
8488         if (ctype)
8489           {
8490             DECL_CONTEXT (decl) = ctype;
8491             if (staticp == 1)
8492               {
8493                 pedwarn ("%<static%> may not be used when defining "
8494                          "(as opposed to declaring) a static data member");
8495                 staticp = 0;
8496                 storage_class = sc_none;
8497               }
8498             if (storage_class == sc_register && TREE_STATIC (decl))
8499               {
8500                 error ("static member %qD declared %<register%>", decl);
8501                 storage_class = sc_none;
8502               }
8503             if (storage_class == sc_extern && pedantic)
8504               {
8505                 pedwarn ("cannot explicitly declare member %q#D to have "
8506                          "extern linkage",
8507                          decl);
8508                 storage_class = sc_none;
8509               }
8510           }
8511       }
8512
8513     /* Record `register' declaration for warnings on &
8514        and in case doing stupid register allocation.  */
8515
8516     if (storage_class == sc_register)
8517       DECL_REGISTER (decl) = 1;
8518     else if (storage_class == sc_extern)
8519       DECL_THIS_EXTERN (decl) = 1;
8520     else if (storage_class == sc_static)
8521       DECL_THIS_STATIC (decl) = 1;
8522
8523     /* Record constancy and volatility.  There's no need to do this
8524        when processing a template; we'll do this for the instantiated
8525        declaration based on the type of DECL.  */
8526     if (!processing_template_decl)
8527       cp_apply_type_quals_to_decl (type_quals, decl);
8528
8529     return decl;
8530   }
8531 }
8532 \f
8533 /* Subroutine of start_function.  Ensure that each of the parameter
8534    types (as listed in PARMS) is complete, as is required for a
8535    function definition.  */
8536
8537 static void
8538 require_complete_types_for_parms (tree parms)
8539 {
8540   for (; parms; parms = TREE_CHAIN (parms))
8541     {
8542       if (dependent_type_p (TREE_TYPE (parms)))
8543         continue;
8544       if (!VOID_TYPE_P (TREE_TYPE (parms))
8545           && complete_type_or_else (TREE_TYPE (parms), parms))
8546         {
8547           relayout_decl (parms);
8548           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8549         }
8550       else
8551         /* grokparms or complete_type_or_else will have already issued
8552            an error.  */
8553         TREE_TYPE (parms) = error_mark_node;
8554     }
8555 }
8556
8557 /* Returns nonzero if T is a local variable.  */
8558
8559 int
8560 local_variable_p (tree t)
8561 {
8562   if ((TREE_CODE (t) == VAR_DECL
8563        /* A VAR_DECL with a context that is a _TYPE is a static data
8564           member.  */
8565        && !TYPE_P (CP_DECL_CONTEXT (t))
8566        /* Any other non-local variable must be at namespace scope.  */
8567        && !DECL_NAMESPACE_SCOPE_P (t))
8568       || (TREE_CODE (t) == PARM_DECL))
8569     return 1;
8570
8571   return 0;
8572 }
8573
8574 /* Returns nonzero if T is an automatic local variable or a label.
8575    (These are the declarations that need to be remapped when the code
8576    containing them is duplicated.)  */
8577
8578 int
8579 nonstatic_local_decl_p (tree t)
8580 {
8581   return ((local_variable_p (t) && !TREE_STATIC (t))
8582           || TREE_CODE (t) == LABEL_DECL
8583           || TREE_CODE (t) == RESULT_DECL);
8584 }
8585
8586 /* Like local_variable_p, but suitable for use as a tree-walking
8587    function.  */
8588
8589 static tree
8590 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8591                          void *data ATTRIBUTE_UNUSED)
8592 {
8593   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8594     return *tp;
8595   else if (TYPE_P (*tp))
8596     *walk_subtrees = 0;
8597
8598   return NULL_TREE;
8599 }
8600
8601
8602 /* Check that ARG, which is a default-argument expression for a
8603    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
8604    something goes wrong.  DECL may also be a _TYPE node, rather than a
8605    DECL, if there is no DECL available.  */
8606
8607 tree
8608 check_default_argument (tree decl, tree arg)
8609 {
8610   tree var;
8611   tree decl_type;
8612
8613   if (TREE_CODE (arg) == DEFAULT_ARG)
8614     /* We get a DEFAULT_ARG when looking at an in-class declaration
8615        with a default argument.  Ignore the argument for now; we'll
8616        deal with it after the class is complete.  */
8617     return arg;
8618
8619   if (TYPE_P (decl))
8620     {
8621       decl_type = decl;
8622       decl = NULL_TREE;
8623     }
8624   else
8625     decl_type = TREE_TYPE (decl);
8626
8627   if (arg == error_mark_node
8628       || decl == error_mark_node
8629       || TREE_TYPE (arg) == error_mark_node
8630       || decl_type == error_mark_node)
8631     /* Something already went wrong.  There's no need to check
8632        further.  */
8633     return error_mark_node;
8634
8635   /* [dcl.fct.default]
8636
8637      A default argument expression is implicitly converted to the
8638      parameter type.  */
8639   if (!TREE_TYPE (arg)
8640       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8641     {
8642       if (decl)
8643         error ("default argument for %q#D has type %qT",
8644                decl, TREE_TYPE (arg));
8645       else
8646         error ("default argument for parameter of type %qT has type %qT",
8647                decl_type, TREE_TYPE (arg));
8648
8649       return error_mark_node;
8650     }
8651
8652   /* [dcl.fct.default]
8653
8654      Local variables shall not be used in default argument
8655      expressions.
8656
8657      The keyword `this' shall not be used in a default argument of a
8658      member function.  */
8659   var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8660                                       NULL);
8661   if (var)
8662     {
8663       error ("default argument %qE uses local variable %qD", arg, var);
8664       return error_mark_node;
8665     }
8666
8667   /* All is well.  */
8668   return arg;
8669 }
8670
8671 /* Decode the list of parameter types for a function type.
8672    Given the list of things declared inside the parens,
8673    return a list of types.
8674
8675    If this parameter does not end with an ellipsis, we append
8676    void_list_node.
8677
8678    *PARMS is set to the chain of PARM_DECLs created.  */
8679
8680 static tree
8681 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8682 {
8683   tree result = NULL_TREE;
8684   tree decls = NULL_TREE;
8685   int ellipsis = !first_parm || first_parm->ellipsis_p;
8686   cp_parameter_declarator *parm;
8687   int any_error = 0;
8688
8689   for (parm = first_parm; parm != NULL; parm = parm->next)
8690     {
8691       tree type = NULL_TREE;
8692       tree init = parm->default_argument;
8693       tree attrs;
8694       tree decl;
8695
8696       if (parm == no_parameters)
8697         break;
8698
8699       attrs = parm->decl_specifiers.attributes;
8700       parm->decl_specifiers.attributes = NULL_TREE;
8701       decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8702                              PARM, init != NULL_TREE, &attrs);
8703       if (! decl || TREE_TYPE (decl) == error_mark_node)
8704         continue;
8705
8706       if (attrs)
8707         cplus_decl_attributes (&decl, attrs, 0);
8708
8709       type = TREE_TYPE (decl);
8710       if (VOID_TYPE_P (type))
8711         {
8712           if (same_type_p (type, void_type_node)
8713               && DECL_SELF_REFERENCE_P (type)
8714               && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8715             /* this is a parmlist of `(void)', which is ok.  */
8716             break;
8717           cxx_incomplete_type_error (decl, type);
8718           /* It's not a good idea to actually create parameters of
8719              type `void'; other parts of the compiler assume that a
8720              void type terminates the parameter list.  */
8721           type = error_mark_node;
8722           TREE_TYPE (decl) = error_mark_node;
8723         }
8724
8725       if (type != error_mark_node)
8726         {
8727           /* Top-level qualifiers on the parameters are
8728              ignored for function types.  */
8729           type = cp_build_qualified_type (type, 0);
8730           if (TREE_CODE (type) == METHOD_TYPE)
8731             {
8732               error ("parameter %qD invalidly declared method type", decl);
8733               type = build_pointer_type (type);
8734               TREE_TYPE (decl) = type;
8735             }
8736           else if (abstract_virtuals_error (decl, type))
8737             any_error = 1;  /* Seems like a good idea.  */
8738           else if (POINTER_TYPE_P (type))
8739             {
8740               /* [dcl.fct]/6, parameter types cannot contain pointers
8741                  (references) to arrays of unknown bound.  */
8742               tree t = TREE_TYPE (type);
8743               int ptr = TYPE_PTR_P (type);
8744
8745               while (1)
8746                 {
8747                   if (TYPE_PTR_P (t))
8748                     ptr = 1;
8749                   else if (TREE_CODE (t) != ARRAY_TYPE)
8750                     break;
8751                   else if (!TYPE_DOMAIN (t))
8752                     break;
8753                   t = TREE_TYPE (t);
8754                 }
8755               if (TREE_CODE (t) == ARRAY_TYPE)
8756                 error ("parameter %qD includes %s to array of unknown "
8757                        "bound %qT",
8758                        decl, ptr ? "pointer" : "reference", t);
8759             }
8760
8761           if (any_error)
8762             init = NULL_TREE;
8763           else if (init && !processing_template_decl)
8764             init = check_default_argument (decl, init);
8765         }
8766
8767       TREE_CHAIN (decl) = decls;
8768       decls = decl;
8769       result = tree_cons (init, type, result);
8770     }
8771   decls = nreverse (decls);
8772   result = nreverse (result);
8773   if (!ellipsis)
8774     result = chainon (result, void_list_node);
8775   *parms = decls;
8776
8777   return result;
8778 }
8779
8780 \f
8781 /* D is a constructor or overloaded `operator='.
8782
8783    Let T be the class in which D is declared. Then, this function
8784    returns:
8785
8786    -1 if D's is an ill-formed constructor or copy assignment operator
8787       whose first parameter is of type `T'.
8788    0  if D is not a copy constructor or copy assignment
8789       operator.
8790    1  if D is a copy constructor or copy assignment operator whose
8791       first parameter is a reference to const qualified T.
8792    2  if D is a copy constructor or copy assignment operator whose
8793       first parameter is a reference to non-const qualified T.
8794
8795    This function can be used as a predicate. Positive values indicate
8796    a copy constructor and nonzero values indicate a copy assignment
8797    operator.  */
8798
8799 int
8800 copy_fn_p (tree d)
8801 {
8802   tree args;
8803   tree arg_type;
8804   int result = 1;
8805
8806   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8807
8808   if (DECL_TEMPLATE_INFO (d)
8809       && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))
8810     /* Instantiations of template member functions are never copy
8811        functions.  Note that member functions of templated classes are
8812        represented as template functions internally, and we must
8813        accept those as copy functions.  */
8814     return 0;
8815
8816   args = FUNCTION_FIRST_USER_PARMTYPE (d);
8817   if (!args)
8818     return 0;
8819
8820   arg_type = TREE_VALUE (args);
8821
8822   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8823     {
8824       /* Pass by value copy assignment operator.  */
8825       result = -1;
8826     }
8827   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8828            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8829     {
8830       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8831         result = 2;
8832     }
8833   else
8834     return 0;
8835
8836   args = TREE_CHAIN (args);
8837
8838   if (args && args != void_list_node && !TREE_PURPOSE (args))
8839     /* There are more non-optional args.  */
8840     return 0;
8841
8842   return result;
8843 }
8844
8845 /* Remember any special properties of member function DECL.  */
8846
8847 void grok_special_member_properties (tree decl)
8848 {
8849   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
8850     ; /* Not special.  */
8851   else if (DECL_CONSTRUCTOR_P (decl))
8852     {
8853       int ctor = copy_fn_p (decl);
8854
8855       if (ctor > 0)
8856         {
8857           /* [class.copy]
8858
8859              A non-template constructor for class X is a copy
8860              constructor if its first parameter is of type X&, const
8861              X&, volatile X& or const volatile X&, and either there
8862              are no other parameters or else all other parameters have
8863              default arguments.  */
8864           TYPE_HAS_INIT_REF (DECL_CONTEXT (decl)) = 1;
8865           if (ctor > 1)
8866             TYPE_HAS_CONST_INIT_REF (DECL_CONTEXT (decl)) = 1;
8867         }
8868       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8869         TYPE_HAS_DEFAULT_CONSTRUCTOR (DECL_CONTEXT (decl)) = 1;
8870     }
8871   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8872     {
8873       /* [class.copy]
8874
8875          A non-template assignment operator for class X is a copy
8876          assignment operator if its parameter is of type X, X&, const
8877          X&, volatile X& or const volatile X&.  */
8878
8879       int assop = copy_fn_p (decl);
8880
8881       if (assop)
8882         {
8883           TYPE_HAS_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8884           if (assop != 1)
8885             TYPE_HAS_CONST_ASSIGN_REF (DECL_CONTEXT (decl)) = 1;
8886         }
8887     }
8888 }
8889
8890 /* Check a constructor DECL has the correct form.  Complains
8891    if the class has a constructor of the form X(X).  */
8892
8893 int
8894 grok_ctor_properties (tree ctype, tree decl)
8895 {
8896   int ctor_parm = copy_fn_p (decl);
8897
8898   if (ctor_parm < 0)
8899     {
8900       /* [class.copy]
8901
8902          A declaration of a constructor for a class X is ill-formed if
8903          its first parameter is of type (optionally cv-qualified) X
8904          and either there are no other parameters or else all other
8905          parameters have default arguments.
8906
8907          We *don't* complain about member template instantiations that
8908          have this form, though; they can occur as we try to decide
8909          what constructor to use during overload resolution.  Since
8910          overload resolution will never prefer such a constructor to
8911          the non-template copy constructor (which is either explicitly
8912          or implicitly defined), there's no need to worry about their
8913          existence.  Theoretically, they should never even be
8914          instantiated, but that's hard to forestall.  */
8915       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
8916                 ctype, ctype);
8917       return 0;
8918     }
8919
8920   return 1;
8921 }
8922
8923 /* An operator with this code is unary, but can also be binary.  */
8924
8925 static int
8926 ambi_op_p (enum tree_code code)
8927 {
8928   return (code == INDIRECT_REF
8929           || code == ADDR_EXPR
8930           || code == UNARY_PLUS_EXPR
8931           || code == NEGATE_EXPR
8932           || code == PREINCREMENT_EXPR
8933           || code == PREDECREMENT_EXPR);
8934 }
8935
8936 /* An operator with this name can only be unary.  */
8937
8938 static int
8939 unary_op_p (enum tree_code code)
8940 {
8941   return (code == TRUTH_NOT_EXPR
8942           || code == BIT_NOT_EXPR
8943           || code == COMPONENT_REF
8944           || code == TYPE_EXPR);
8945 }
8946
8947 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
8948    errors are issued for invalid declarations.  */
8949
8950 void
8951 grok_op_properties (tree decl, bool complain)
8952 {
8953   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
8954   tree argtype;
8955   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
8956   tree name = DECL_NAME (decl);
8957   enum tree_code operator_code;
8958   int arity;
8959   bool ellipsis_p;
8960   tree class_type;
8961
8962   /* Count the number of arguments and check for ellipsis.  */
8963   for (argtype = argtypes, arity = 0;
8964        argtype && argtype != void_list_node;
8965        argtype = TREE_CHAIN (argtype))
8966     ++arity;
8967   ellipsis_p = !argtype;
8968
8969   class_type = DECL_CONTEXT (decl);
8970   if (class_type && !CLASS_TYPE_P (class_type))
8971     class_type = NULL_TREE;
8972
8973   if (DECL_CONV_FN_P (decl))
8974     operator_code = TYPE_EXPR;
8975   else
8976     do
8977       {
8978 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
8979         if (ansi_opname (CODE) == name)                         \
8980           {                                                     \
8981             operator_code = (CODE);                             \
8982             break;                                              \
8983           }                                                     \
8984         else if (ansi_assopname (CODE) == name)                 \
8985           {                                                     \
8986             operator_code = (CODE);                             \
8987             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
8988             break;                                              \
8989           }
8990
8991 #include "operators.def"
8992 #undef DEF_OPERATOR
8993
8994         gcc_unreachable ();
8995       }
8996     while (0);
8997   gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
8998   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
8999
9000   if (class_type)
9001     switch (operator_code)
9002       {
9003       case NEW_EXPR:
9004         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9005         break;
9006
9007       case DELETE_EXPR:
9008         TYPE_GETS_DELETE (class_type) |= 1;
9009         break;
9010
9011       case VEC_NEW_EXPR:
9012         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9013         break;
9014
9015       case VEC_DELETE_EXPR:
9016         TYPE_GETS_DELETE (class_type) |= 2;
9017         break;
9018
9019       default:
9020         break;
9021       }
9022
9023     /* [basic.std.dynamic.allocation]/1:
9024
9025        A program is ill-formed if an allocation function is declared
9026        in a namespace scope other than global scope or declared static
9027        in global scope.
9028
9029        The same also holds true for deallocation functions.  */
9030   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9031       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9032     {
9033       if (DECL_NAMESPACE_SCOPE_P (decl))
9034         {
9035           if (CP_DECL_CONTEXT (decl) != global_namespace)
9036             error ("%qD may not be declared within a namespace", decl);
9037           else if (!TREE_PUBLIC (decl))
9038             error ("%qD may not be declared as static", decl);
9039         }
9040     }
9041
9042   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9043     TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9044   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9045     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9046   else
9047     {
9048       /* An operator function must either be a non-static member function
9049          or have at least one parameter of a class, a reference to a class,
9050          an enumeration, or a reference to an enumeration.  13.4.0.6 */
9051       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9052         {
9053           if (operator_code == TYPE_EXPR
9054               || operator_code == CALL_EXPR
9055               || operator_code == COMPONENT_REF
9056               || operator_code == ARRAY_REF
9057               || operator_code == NOP_EXPR)
9058             {
9059               error ("%qD must be a nonstatic member function", decl);
9060               return;
9061             }
9062           else
9063             {
9064               tree p;
9065
9066               if (DECL_STATIC_FUNCTION_P (decl))
9067                 {
9068                   error ("%qD must be either a non-static member "
9069                          "function or a non-member function", decl);
9070                   return;
9071                 }
9072
9073               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9074                 {
9075                   tree arg = non_reference (TREE_VALUE (p));
9076                   /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9077                      because these checks are performed even on
9078                      template functions.  */
9079                   if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9080                     break;
9081                 }
9082
9083               if (!p || p == void_list_node)
9084                 {
9085                   if (!complain)
9086                     return;
9087
9088                   error ("%qD must have an argument of class or "
9089                          "enumerated type",
9090                          decl);
9091                 }
9092             }
9093         }
9094
9095       /* There are no restrictions on the arguments to an overloaded
9096          "operator ()".  */
9097       if (operator_code == CALL_EXPR)
9098         return;
9099
9100       /* Warn about conversion operators that will never be used.  */
9101       if (IDENTIFIER_TYPENAME_P (name)
9102           && ! DECL_TEMPLATE_INFO (decl)
9103           && warn_conversion
9104           /* Warn only declaring the function; there is no need to
9105              warn again about out-of-class definitions.  */
9106           && class_type == current_class_type)
9107         {
9108           tree t = TREE_TYPE (name);
9109           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9110           const char *what = 0;
9111
9112           if (ref)
9113             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9114
9115           if (TREE_CODE (t) == VOID_TYPE)
9116             what = "void";
9117           else if (class_type)
9118             {
9119               if (t == class_type)
9120                 what = "the same type";
9121               /* Don't force t to be complete here.  */
9122               else if (IS_AGGR_TYPE (t)
9123                        && COMPLETE_TYPE_P (t)
9124                        && DERIVED_FROM_P (t, class_type))
9125                 what = "a base class";
9126             }
9127
9128           if (what)
9129             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9130                      "conversion operator",
9131                      ref ? "a reference to " : "", what);
9132         }
9133
9134       if (operator_code == COND_EXPR)
9135         {
9136           /* 13.4.0.3 */
9137           error ("ISO C++ prohibits overloading operator ?:");
9138         }
9139       else if (ellipsis_p)
9140         error ("%qD must not have variable number of arguments", decl);
9141       else if (ambi_op_p (operator_code))
9142         {
9143           if (arity == 1)
9144             /* We pick the one-argument operator codes by default, so
9145                we don't have to change anything.  */
9146             ;
9147           else if (arity == 2)
9148             {
9149               /* If we thought this was a unary operator, we now know
9150                  it to be a binary operator.  */
9151               switch (operator_code)
9152                 {
9153                 case INDIRECT_REF:
9154                   operator_code = MULT_EXPR;
9155                   break;
9156
9157                 case ADDR_EXPR:
9158                   operator_code = BIT_AND_EXPR;
9159                   break;
9160
9161                 case UNARY_PLUS_EXPR:
9162                   operator_code = PLUS_EXPR;
9163                   break;
9164
9165                 case NEGATE_EXPR:
9166                   operator_code = MINUS_EXPR;
9167                   break;
9168
9169                 case PREINCREMENT_EXPR:
9170                   operator_code = POSTINCREMENT_EXPR;
9171                   break;
9172
9173                 case PREDECREMENT_EXPR:
9174                   operator_code = POSTDECREMENT_EXPR;
9175                   break;
9176
9177                 default:
9178                   gcc_unreachable ();
9179                 }
9180
9181               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9182
9183               if ((operator_code == POSTINCREMENT_EXPR
9184                    || operator_code == POSTDECREMENT_EXPR)
9185                   && ! processing_template_decl
9186                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9187                 {
9188                   if (methodp)
9189                     error ("postfix %qD must take %<int%> as its argument",
9190                               decl);
9191                   else
9192                     error
9193                       ("postfix %qD must take %<int%> as its second argument",
9194                        decl);
9195                 }
9196             }
9197           else
9198             {
9199               if (methodp)
9200                 error ("%qD must take either zero or one argument", decl);
9201               else
9202                 error ("%qD must take either one or two arguments", decl);
9203             }
9204
9205           /* More Effective C++ rule 6.  */
9206           if (warn_ecpp
9207               && (operator_code == POSTINCREMENT_EXPR
9208                   || operator_code == POSTDECREMENT_EXPR
9209                   || operator_code == PREINCREMENT_EXPR
9210                   || operator_code == PREDECREMENT_EXPR))
9211             {
9212               tree arg = TREE_VALUE (argtypes);
9213               tree ret = TREE_TYPE (TREE_TYPE (decl));
9214               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9215                 arg = TREE_TYPE (arg);
9216               arg = TYPE_MAIN_VARIANT (arg);
9217               if (operator_code == PREINCREMENT_EXPR
9218                   || operator_code == PREDECREMENT_EXPR)
9219                 {
9220                   if (TREE_CODE (ret) != REFERENCE_TYPE
9221                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9222                                        arg))
9223                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9224                              build_reference_type (arg));
9225                 }
9226               else
9227                 {
9228                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9229                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
9230                 }
9231             }
9232         }
9233       else if (unary_op_p (operator_code))
9234         {
9235           if (arity != 1)
9236             {
9237               if (methodp)
9238                 error ("%qD must take %<void%>", decl);
9239               else
9240                 error ("%qD must take exactly one argument", decl);
9241             }
9242         }
9243       else /* if (binary_op_p (operator_code)) */
9244         {
9245           if (arity != 2)
9246             {
9247               if (methodp)
9248                 error ("%qD must take exactly one argument", decl);
9249               else
9250                 error ("%qD must take exactly two arguments", decl);
9251             }
9252
9253           /* More Effective C++ rule 7.  */
9254           if (warn_ecpp
9255               && (operator_code == TRUTH_ANDIF_EXPR
9256                   || operator_code == TRUTH_ORIF_EXPR
9257                   || operator_code == COMPOUND_EXPR))
9258             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
9259                      decl);
9260         }
9261
9262       /* Effective C++ rule 23.  */
9263       if (warn_ecpp
9264           && arity == 2
9265           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9266           && (operator_code == PLUS_EXPR
9267               || operator_code == MINUS_EXPR
9268               || operator_code == TRUNC_DIV_EXPR
9269               || operator_code == MULT_EXPR
9270               || operator_code == TRUNC_MOD_EXPR)
9271           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9272         warning (OPT_Weffc__, "%qD should return by value", decl);
9273
9274       /* [over.oper]/8 */
9275       for (; argtypes && argtypes != void_list_node;
9276           argtypes = TREE_CHAIN (argtypes))
9277         if (TREE_PURPOSE (argtypes))
9278           {
9279             TREE_PURPOSE (argtypes) = NULL_TREE;
9280             if (operator_code == POSTINCREMENT_EXPR
9281                 || operator_code == POSTDECREMENT_EXPR)
9282               {
9283                 if (pedantic)
9284                   pedwarn ("%qD cannot have default arguments", decl);
9285               }
9286             else
9287               error ("%qD cannot have default arguments", decl);
9288           }
9289
9290     }
9291
9292 }
9293 \f
9294 /* Return a string giving the keyword associate with CODE.  */
9295
9296 static const char *
9297 tag_name (enum tag_types code)
9298 {
9299   switch (code)
9300     {
9301     case record_type:
9302       return "struct";
9303     case class_type:
9304       return "class";
9305     case union_type:
9306       return "union";
9307     case enum_type:
9308       return "enum";
9309     case typename_type:
9310       return "typename";
9311     default:
9312       gcc_unreachable ();
9313     }
9314 }
9315
9316 /* Name lookup in an elaborated-type-specifier (after the keyword
9317    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
9318    elaborated-type-specifier is invalid, issue a diagnostic and return
9319    error_mark_node; otherwise, return the *_TYPE to which it referred.
9320    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
9321
9322 tree
9323 check_elaborated_type_specifier (enum tag_types tag_code,
9324                                  tree decl,
9325                                  bool allow_template_p)
9326 {
9327   tree type;
9328
9329   /* In the case of:
9330
9331        struct S { struct S *p; };
9332
9333      name lookup will find the TYPE_DECL for the implicit "S::S"
9334      typedef.  Adjust for that here.  */
9335   if (DECL_SELF_REFERENCE_P (decl))
9336     decl = TYPE_NAME (TREE_TYPE (decl));
9337
9338   type = TREE_TYPE (decl);
9339
9340   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9341      is false for this case as well.  */
9342   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9343     {
9344       error ("using template type parameter %qT after %qs",
9345              type, tag_name (tag_code));
9346       return error_mark_node;
9347     }
9348   /*   [dcl.type.elab]
9349
9350        If the identifier resolves to a typedef-name or a template
9351        type-parameter, the elaborated-type-specifier is ill-formed.
9352
9353      In other words, the only legitimate declaration to use in the
9354      elaborated type specifier is the implicit typedef created when
9355      the type is declared.  */
9356   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9357            && tag_code != typename_type)
9358     {
9359       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9360       error ("%q+D has a previous declaration here", decl);
9361       return error_mark_node;
9362     }
9363   else if (TREE_CODE (type) != RECORD_TYPE
9364            && TREE_CODE (type) != UNION_TYPE
9365            && tag_code != enum_type
9366            && tag_code != typename_type)
9367     {
9368       error ("%qT referred to as %qs", type, tag_name (tag_code));
9369       error ("%q+T has a previous declaration here", type);
9370       return error_mark_node;
9371     }
9372   else if (TREE_CODE (type) != ENUMERAL_TYPE
9373            && tag_code == enum_type)
9374     {
9375       error ("%qT referred to as enum", type);
9376       error ("%q+T has a previous declaration here", type);
9377       return error_mark_node;
9378     }
9379   else if (!allow_template_p
9380            && TREE_CODE (type) == RECORD_TYPE
9381            && CLASSTYPE_IS_TEMPLATE (type))
9382     {
9383       /* If a class template appears as elaborated type specifier
9384          without a template header such as:
9385
9386            template <class T> class C {};
9387            void f(class C);             // No template header here
9388
9389          then the required template argument is missing.  */
9390       error ("template argument required for %<%s %T%>",
9391              tag_name (tag_code),
9392              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9393       return error_mark_node;
9394     }
9395
9396   return type;
9397 }
9398
9399 /* Lookup NAME in elaborate type specifier in scope according to
9400    SCOPE and issue diagnostics if necessary.
9401    Return *_TYPE node upon success, NULL_TREE when the NAME is not
9402    found, and ERROR_MARK_NODE for type error.  */
9403
9404 static tree
9405 lookup_and_check_tag (enum tag_types tag_code, tree name,
9406                       tag_scope scope, bool template_header_p)
9407 {
9408   tree t;
9409   tree decl;
9410   if (scope == ts_global)
9411     {
9412       /* First try ordinary name lookup, ignoring hidden class name
9413          injected via friend declaration.  */
9414       decl = lookup_name_prefer_type (name, 2);
9415       /* If that fails, the name will be placed in the smallest
9416          non-class, non-function-prototype scope according to 3.3.1/5.
9417          We may already have a hidden name declared as friend in this
9418          scope.  So lookup again but not ignoring hidden name.
9419          If we find one, that name will be made visible rather than
9420          creating a new tag.  */
9421       if (!decl)
9422         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9423     }
9424   else
9425     decl = lookup_type_scope (name, scope);
9426
9427   if (decl && DECL_CLASS_TEMPLATE_P (decl))
9428     decl = DECL_TEMPLATE_RESULT (decl);
9429
9430   if (decl && TREE_CODE (decl) == TYPE_DECL)
9431     {
9432       /* Look for invalid nested type:
9433            class C {
9434              class C {};
9435            };  */
9436       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9437         {
9438           error ("%qD has the same name as the class in which it is "
9439                  "declared",
9440                  decl);
9441           return error_mark_node;
9442         }
9443
9444       /* Two cases we need to consider when deciding if a class
9445          template is allowed as an elaborated type specifier:
9446          1. It is a self reference to its own class.
9447          2. It comes with a template header.
9448
9449          For example:
9450
9451            template <class T> class C {
9452              class C *c1;               // DECL_SELF_REFERENCE_P is true
9453              class D;
9454            };
9455            template <class U> class C; // template_header_p is true
9456            template <class T> class C<T>::D {
9457              class C *c2;               // DECL_SELF_REFERENCE_P is true
9458            };  */
9459
9460       t = check_elaborated_type_specifier (tag_code,
9461                                            decl,
9462                                            template_header_p
9463                                            | DECL_SELF_REFERENCE_P (decl));
9464       return t;
9465     }
9466   else
9467     return NULL_TREE;
9468 }
9469
9470 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9471    Define the tag as a forward-reference if it is not defined.
9472
9473    If a declaration is given, process it here, and report an error if
9474    multiple declarations are not identical.
9475
9476    SCOPE is TS_CURRENT when this is also a definition.  Only look in
9477    the current frame for the name (since C++ allows new names in any
9478    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9479    declaration.  Only look beginning from the current scope outward up
9480    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
9481
9482    TEMPLATE_HEADER_P is true when this declaration is preceded by
9483    a set of template parameters.  */
9484
9485 tree
9486 xref_tag (enum tag_types tag_code, tree name,
9487           tag_scope scope, bool template_header_p)
9488 {
9489   enum tree_code code;
9490   tree t;
9491   tree context = NULL_TREE;
9492
9493   timevar_push (TV_NAME_LOOKUP);
9494
9495   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9496
9497   switch (tag_code)
9498     {
9499     case record_type:
9500     case class_type:
9501       code = RECORD_TYPE;
9502       break;
9503     case union_type:
9504       code = UNION_TYPE;
9505       break;
9506     case enum_type:
9507       code = ENUMERAL_TYPE;
9508       break;
9509     default:
9510       gcc_unreachable ();
9511     }
9512
9513   /* In case of anonymous name, xref_tag is only called to
9514      make type node and push name.  Name lookup is not required.  */
9515   if (ANON_AGGRNAME_P (name))
9516     t = NULL_TREE;
9517   else
9518     t = lookup_and_check_tag  (tag_code, name,
9519                                scope, template_header_p);
9520
9521   if (t == error_mark_node)
9522     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9523
9524   if (scope != ts_current && t && current_class_type
9525       && template_class_depth (current_class_type)
9526       && template_header_p)
9527     {
9528       /* Since SCOPE is not TS_CURRENT, we are not looking at a
9529          definition of this tag.  Since, in addition, we are currently
9530          processing a (member) template declaration of a template
9531          class, we must be very careful; consider:
9532
9533            template <class X>
9534            struct S1
9535
9536            template <class U>
9537            struct S2
9538            { template <class V>
9539            friend struct S1; };
9540
9541          Here, the S2::S1 declaration should not be confused with the
9542          outer declaration.  In particular, the inner version should
9543          have a template parameter of level 2, not level 1.  This
9544          would be particularly important if the member declaration
9545          were instead:
9546
9547            template <class V = U> friend struct S1;
9548
9549          say, when we should tsubst into `U' when instantiating
9550          S2.  On the other hand, when presented with:
9551
9552            template <class T>
9553            struct S1 {
9554              template <class U>
9555              struct S2 {};
9556              template <class U>
9557              friend struct S2;
9558            };
9559
9560          we must find the inner binding eventually.  We
9561          accomplish this by making sure that the new type we
9562          create to represent this declaration has the right
9563          TYPE_CONTEXT.  */
9564       context = TYPE_CONTEXT (t);
9565       t = NULL_TREE;
9566     }
9567
9568   if (! t)
9569     {
9570       /* If no such tag is yet defined, create a forward-reference node
9571          and record it as the "definition".
9572          When a real declaration of this type is found,
9573          the forward-reference will be altered into a real type.  */
9574       if (code == ENUMERAL_TYPE)
9575         {
9576           error ("use of enum %q#D without previous declaration", name);
9577           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9578         }
9579       else
9580         {
9581           t = make_aggr_type (code);
9582           TYPE_CONTEXT (t) = context;
9583           t = pushtag (name, t, scope);
9584         }
9585     }
9586   else
9587     {
9588       if (template_header_p && IS_AGGR_TYPE (t))
9589         redeclare_class_template (t, current_template_parms);
9590       else if (!processing_template_decl
9591                && CLASS_TYPE_P (t)
9592                && CLASSTYPE_IS_TEMPLATE (t))
9593         {
9594           error ("redeclaration of %qT as a non-template", t);
9595           t = error_mark_node;
9596         }
9597
9598       /* Make injected friend class visible.  */
9599       if (scope != ts_within_enclosing_non_class
9600           && hidden_name_p (TYPE_NAME (t)))
9601         {
9602           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9603           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9604
9605           if (TYPE_TEMPLATE_INFO (t))
9606             {
9607               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9608               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9609             }
9610         }
9611     }
9612
9613   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9614 }
9615
9616 tree
9617 xref_tag_from_type (tree old, tree id, tag_scope scope)
9618 {
9619   enum tag_types tag_kind;
9620
9621   if (TREE_CODE (old) == RECORD_TYPE)
9622     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9623   else
9624     tag_kind  = union_type;
9625
9626   if (id == NULL_TREE)
9627     id = TYPE_IDENTIFIER (old);
9628
9629   return xref_tag (tag_kind, id, scope, false);
9630 }
9631
9632 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9633    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
9634    access_* node, and the TREE_VALUE is the type of the base-class.
9635    Non-NULL TREE_TYPE indicates virtual inheritance.  */
9636
9637 void
9638 xref_basetypes (tree ref, tree base_list)
9639 {
9640   tree *basep;
9641   tree binfo, base_binfo;
9642   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
9643   unsigned max_bases = 0;  /* Maximum direct bases.  */
9644   int i;
9645   tree default_access;
9646   tree igo_prev; /* Track Inheritance Graph Order.  */
9647
9648   if (ref == error_mark_node)
9649     return;
9650
9651   /* The base of a derived class is private by default, all others are
9652      public.  */
9653   default_access = (TREE_CODE (ref) == RECORD_TYPE
9654                     && CLASSTYPE_DECLARED_CLASS (ref)
9655                     ? access_private_node : access_public_node);
9656
9657   /* First, make sure that any templates in base-classes are
9658      instantiated.  This ensures that if we call ourselves recursively
9659      we do not get confused about which classes are marked and which
9660      are not.  */
9661   basep = &base_list;
9662   while (*basep)
9663     {
9664       tree basetype = TREE_VALUE (*basep);
9665
9666       if (!(processing_template_decl && uses_template_parms (basetype))
9667           && !complete_type_or_else (basetype, NULL))
9668         /* An incomplete type.  Remove it from the list.  */
9669         *basep = TREE_CHAIN (*basep);
9670       else
9671         {
9672           max_bases++;
9673           if (TREE_TYPE (*basep))
9674             max_vbases++;
9675           if (CLASS_TYPE_P (basetype))
9676             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9677           basep = &TREE_CHAIN (*basep);
9678         }
9679     }
9680
9681   TYPE_MARKED_P (ref) = 1;
9682
9683   /* The binfo slot should be empty, unless this is an (ill-formed)
9684      redefinition.  */
9685   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9686   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9687
9688   binfo = make_tree_binfo (max_bases);
9689
9690   TYPE_BINFO (ref) = binfo;
9691   BINFO_OFFSET (binfo) = size_zero_node;
9692   BINFO_TYPE (binfo) = ref;
9693
9694   if (max_bases)
9695     {
9696       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9697       /* An aggregate cannot have baseclasses.  */
9698       CLASSTYPE_NON_AGGREGATE (ref) = 1;
9699
9700       if (TREE_CODE (ref) == UNION_TYPE)
9701         error ("derived union %qT invalid", ref);
9702     }
9703
9704   if (max_bases > 1)
9705     {
9706       if (TYPE_FOR_JAVA (ref))
9707         error ("Java class %qT cannot have multiple bases", ref);
9708     }
9709
9710   if (max_vbases)
9711     {
9712       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9713
9714       if (TYPE_FOR_JAVA (ref))
9715         error ("Java class %qT cannot have virtual bases", ref);
9716     }
9717
9718   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9719     {
9720       tree access = TREE_PURPOSE (base_list);
9721       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9722       tree basetype = TREE_VALUE (base_list);
9723
9724       if (access == access_default_node)
9725         access = default_access;
9726
9727       if (TREE_CODE (basetype) == TYPE_DECL)
9728         basetype = TREE_TYPE (basetype);
9729       if (TREE_CODE (basetype) != RECORD_TYPE
9730           && TREE_CODE (basetype) != TYPENAME_TYPE
9731           && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9732           && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9733         {
9734           error ("base type %qT fails to be a struct or class type",
9735                  basetype);
9736           continue;
9737         }
9738
9739       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9740         TYPE_FOR_JAVA (ref) = 1;
9741
9742       base_binfo = NULL_TREE;
9743       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9744         {
9745           base_binfo = TYPE_BINFO (basetype);
9746           /* The original basetype could have been a typedef'd type.  */
9747           basetype = BINFO_TYPE (base_binfo);
9748
9749           /* Inherit flags from the base.  */
9750           TYPE_HAS_NEW_OPERATOR (ref)
9751             |= TYPE_HAS_NEW_OPERATOR (basetype);
9752           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9753             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9754           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9755           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9756           CLASSTYPE_DIAMOND_SHAPED_P (ref)
9757             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9758           CLASSTYPE_REPEATED_BASE_P (ref)
9759             |= CLASSTYPE_REPEATED_BASE_P (basetype);
9760         }
9761
9762       /* We must do this test after we've seen through a typedef
9763          type.  */
9764       if (TYPE_MARKED_P (basetype))
9765         {
9766           if (basetype == ref)
9767             error ("recursive type %qT undefined", basetype);
9768           else
9769             error ("duplicate base type %qT invalid", basetype);
9770           continue;
9771         }
9772       TYPE_MARKED_P (basetype) = 1;
9773
9774       base_binfo = copy_binfo (base_binfo, basetype, ref,
9775                                &igo_prev, via_virtual);
9776       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9777         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9778
9779       BINFO_BASE_APPEND (binfo, base_binfo);
9780       BINFO_BASE_ACCESS_APPEND (binfo, access);
9781     }
9782
9783   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9784     /* If we have space in the vbase vector, we must have shared at
9785        least one of them, and are therefore diamond shaped.  */
9786     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9787
9788   /* Unmark all the types.  */
9789   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9790     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9791   TYPE_MARKED_P (ref) = 0;
9792
9793   /* Now see if we have a repeated base type.  */
9794   if (!CLASSTYPE_REPEATED_BASE_P (ref))
9795     {
9796       for (base_binfo = binfo; base_binfo;
9797            base_binfo = TREE_CHAIN (base_binfo))
9798         {
9799           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9800             {
9801               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9802               break;
9803             }
9804           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9805         }
9806       for (base_binfo = binfo; base_binfo;
9807            base_binfo = TREE_CHAIN (base_binfo))
9808         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9809           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9810         else
9811           break;
9812     }
9813 }
9814
9815 \f
9816 /* Begin compiling the definition of an enumeration type.
9817    NAME is its name.
9818    Returns the type object, as yet incomplete.
9819    Also records info about it so that build_enumerator
9820    may be used to declare the individual values as they are read.  */
9821
9822 tree
9823 start_enum (tree name)
9824 {
9825   tree enumtype;
9826
9827   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9828
9829   /* If this is the real definition for a previous forward reference,
9830      fill in the contents in the same object that used to be the
9831      forward reference.  */
9832
9833   enumtype = lookup_and_check_tag (enum_type, name,
9834                                    /*tag_scope=*/ts_current,
9835                                    /*template_header_p=*/false);
9836
9837   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9838     {
9839       error ("multiple definition of %q#T", enumtype);
9840       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9841       /* Clear out TYPE_VALUES, and start again.  */
9842       TYPE_VALUES (enumtype) = NULL_TREE;
9843     }
9844   else
9845     {
9846       /* In case of error, make a dummy enum to allow parsing to
9847          continue.  */
9848       if (enumtype == error_mark_node)
9849         name = make_anon_name ();
9850
9851       enumtype = make_node (ENUMERAL_TYPE);
9852       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9853     }
9854
9855   return enumtype;
9856 }
9857
9858 /* After processing and defining all the values of an enumeration type,
9859    install their decls in the enumeration type and finish it off.
9860    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
9861
9862 void
9863 finish_enum (tree enumtype)
9864 {
9865   tree values;
9866   tree decl;
9867   tree value;
9868   tree minnode;
9869   tree maxnode;
9870   tree t;
9871   bool unsignedp;
9872   bool use_short_enum;
9873   int lowprec;
9874   int highprec;
9875   int precision;
9876   integer_type_kind itk;
9877   tree underlying_type = NULL_TREE;
9878
9879   /* We built up the VALUES in reverse order.  */
9880   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
9881
9882   /* For an enum defined in a template, just set the type of the values;
9883      all further processing is postponed until the template is
9884      instantiated.  We need to set the type so that tsubst of a CONST_DECL
9885      works.  */
9886   if (processing_template_decl)
9887     {
9888       for (values = TYPE_VALUES (enumtype);
9889            values;
9890            values = TREE_CHAIN (values))
9891         TREE_TYPE (TREE_VALUE (values)) = enumtype;
9892       if (at_function_scope_p ())
9893         add_stmt (build_min (TAG_DEFN, enumtype));
9894       return;
9895     }
9896
9897   /* Determine the minimum and maximum values of the enumerators.  */
9898   if (TYPE_VALUES (enumtype))
9899     {
9900       minnode = maxnode = NULL_TREE;
9901
9902       for (values = TYPE_VALUES (enumtype);
9903            values;
9904            values = TREE_CHAIN (values))
9905         {
9906           decl = TREE_VALUE (values);
9907
9908           /* [dcl.enum]: Following the closing brace of an enum-specifier,
9909              each enumerator has the type of its enumeration.  Prior to the
9910              closing brace, the type of each enumerator is the type of its
9911              initializing value.  */
9912           TREE_TYPE (decl) = enumtype;
9913
9914           /* Update the minimum and maximum values, if appropriate.  */
9915           value = DECL_INITIAL (decl);
9916           if (value == error_mark_node)
9917             value = integer_zero_node;
9918           /* Figure out what the minimum and maximum values of the
9919              enumerators are.  */
9920           if (!minnode)
9921             minnode = maxnode = value;
9922           else if (tree_int_cst_lt (maxnode, value))
9923             maxnode = value;
9924           else if (tree_int_cst_lt (value, minnode))
9925             minnode = value;
9926         }
9927     }
9928   else
9929     /* [dcl.enum]
9930
9931        If the enumerator-list is empty, the underlying type is as if
9932        the enumeration had a single enumerator with value 0.  */
9933     minnode = maxnode = integer_zero_node;
9934
9935   /* Compute the number of bits require to represent all values of the
9936      enumeration.  We must do this before the type of MINNODE and
9937      MAXNODE are transformed, since min_precision relies on the
9938      TREE_TYPE of the value it is passed.  */
9939   unsignedp = tree_int_cst_sgn (minnode) >= 0;
9940   lowprec = min_precision (minnode, unsignedp);
9941   highprec = min_precision (maxnode, unsignedp);
9942   precision = MAX (lowprec, highprec);
9943
9944   /* Determine the underlying type of the enumeration.
9945
9946        [dcl.enum]
9947
9948        The underlying type of an enumeration is an integral type that
9949        can represent all the enumerator values defined in the
9950        enumeration.  It is implementation-defined which integral type is
9951        used as the underlying type for an enumeration except that the
9952        underlying type shall not be larger than int unless the value of
9953        an enumerator cannot fit in an int or unsigned int.
9954
9955      We use "int" or an "unsigned int" as the underlying type, even if
9956      a smaller integral type would work, unless the user has
9957      explicitly requested that we use the smallest possible type.  The
9958      user can request that for all enumerations with a command line
9959      flag, or for just one enumeration with an attribute.  */
9960
9961   use_short_enum = flag_short_enums
9962     || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
9963
9964   for (itk = (use_short_enum ? itk_char : itk_int);
9965        itk != itk_none;
9966        itk++)
9967     {
9968       underlying_type = integer_types[itk];
9969       if (TYPE_PRECISION (underlying_type) >= precision
9970           && TYPE_UNSIGNED (underlying_type) == unsignedp)
9971         break;
9972     }
9973   if (itk == itk_none)
9974     {
9975       /* DR 377
9976
9977          IF no integral type can represent all the enumerator values, the
9978          enumeration is ill-formed.  */
9979       error ("no integral type can represent all of the enumerator values "
9980              "for %qT", enumtype);
9981       precision = TYPE_PRECISION (long_long_integer_type_node);
9982       underlying_type = integer_types[itk_unsigned_long_long];
9983     }
9984
9985   /* Compute the minium and maximum values for the type.
9986
9987      [dcl.enum]
9988
9989      For an enumeration where emin is the smallest enumerator and emax
9990      is the largest, the values of the enumeration are the values of the
9991      underlying type in the range bmin to bmax, where bmin and bmax are,
9992      respectively, the smallest and largest values of the smallest bit-
9993      field that can store emin and emax.  */
9994
9995   /* The middle-end currently assumes that types with TYPE_PRECISION
9996      narrower than their underlying type are suitably zero or sign
9997      extended to fill their mode.  g++ doesn't make these guarantees.
9998      Until the middle-end can represent such paradoxical types, we
9999      set the TYPE_PRECISION to the width of the underlying type.  */
10000   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10001
10002   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10003
10004   /* [dcl.enum]
10005
10006      The value of sizeof() applied to an enumeration type, an object
10007      of an enumeration type, or an enumerator, is the value of sizeof()
10008      applied to the underlying type.  */
10009   TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10010   TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10011   TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10012   TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10013   TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10014   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10015
10016   /* Convert each of the enumerators to the type of the underlying
10017      type of the enumeration.  */
10018   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10019     {
10020       location_t saved_location;
10021
10022       decl = TREE_VALUE (values);
10023       saved_location = input_location;
10024       input_location = DECL_SOURCE_LOCATION (decl);
10025       value = perform_implicit_conversion (underlying_type,
10026                                            DECL_INITIAL (decl));
10027       input_location = saved_location;
10028
10029       /* Do not clobber shared ints.  */
10030       value = copy_node (value);
10031
10032       TREE_TYPE (value) = enumtype;
10033       DECL_INITIAL (decl) = value;
10034       TREE_VALUE (values) = value;
10035     }
10036
10037   /* Fix up all variant types of this enum type.  */
10038   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10039     {
10040       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10041       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10042       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10043       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10044       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10045       TYPE_MODE (t) = TYPE_MODE (enumtype);
10046       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10047       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10048       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10049       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10050     }
10051
10052   /* Finish debugging output for this type.  */
10053   rest_of_type_compilation (enumtype, namespace_bindings_p ());
10054 }
10055
10056 /* Build and install a CONST_DECL for an enumeration constant of the
10057    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10058    Assignment of sequential values by default is handled here.  */
10059
10060 void
10061 build_enumerator (tree name, tree value, tree enumtype)
10062 {
10063   tree decl;
10064   tree context;
10065   tree type;
10066
10067   /* If the VALUE was erroneous, pretend it wasn't there; that will
10068      result in the enum being assigned the next value in sequence.  */
10069   if (value == error_mark_node)
10070     value = NULL_TREE;
10071
10072   /* Remove no-op casts from the value.  */
10073   if (value)
10074     STRIP_TYPE_NOPS (value);
10075
10076   if (! processing_template_decl)
10077     {
10078       /* Validate and default VALUE.  */
10079       if (value != NULL_TREE)
10080         {
10081           value = integral_constant_value (value);
10082
10083           if (TREE_CODE (value) == INTEGER_CST)
10084             {
10085               value = perform_integral_promotions (value);
10086               constant_expression_warning (value);
10087             }
10088           else
10089             {
10090               error ("enumerator value for %qD not integer constant", name);
10091               value = NULL_TREE;
10092             }
10093         }
10094
10095       /* Default based on previous value.  */
10096       if (value == NULL_TREE)
10097         {
10098           if (TYPE_VALUES (enumtype))
10099             {
10100               HOST_WIDE_INT hi;
10101               unsigned HOST_WIDE_INT lo;
10102               tree prev_value;
10103               bool overflowed;
10104
10105               /* The next value is the previous value plus one.  We can
10106                  safely assume that the previous value is an INTEGER_CST.
10107                  add_double doesn't know the type of the target expression,
10108                  so we must check with int_fits_type_p as well.  */
10109               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10110               overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10111                                        TREE_INT_CST_HIGH (prev_value),
10112                                        1, 0, &lo, &hi);
10113               value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10114               overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10115
10116               if (overflowed)
10117                 {
10118                   error ("overflow in enumeration values at %qD", name);
10119                   value = error_mark_node;
10120                 }
10121             }
10122           else
10123             value = integer_zero_node;
10124         }
10125
10126       /* Remove no-op casts from the value.  */
10127       STRIP_TYPE_NOPS (value);
10128     }
10129
10130   /* C++ associates enums with global, function, or class declarations.  */
10131   context = current_scope ();
10132
10133   /* Build the actual enumeration constant.  Note that the enumeration
10134     constants have the type of their initializers until the
10135     enumeration is complete:
10136
10137       [ dcl.enum ]
10138
10139       Following the closing brace of an enum-specifier, each enumer-
10140       ator has the type of its enumeration.  Prior to the closing
10141       brace, the type of each enumerator is the type of its
10142       initializing value.
10143
10144     In finish_enum we will reset the type.  Of course, if we're
10145     processing a template, there may be no value.  */
10146   type = value ? TREE_TYPE (value) : NULL_TREE;
10147
10148   if (context && context == current_class_type)
10149     /* This enum declaration is local to the class.  We need the full
10150        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
10151     decl = build_lang_decl (CONST_DECL, name, type);
10152   else
10153     /* It's a global enum, or it's local to a function.  (Note local to
10154       a function could mean local to a class method.  */
10155     decl = build_decl (CONST_DECL, name, type);
10156
10157   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10158   TREE_CONSTANT (decl) = 1;
10159   TREE_INVARIANT (decl) = 1;
10160   TREE_READONLY (decl) = 1;
10161   DECL_INITIAL (decl) = value;
10162
10163   if (context && context == current_class_type)
10164     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10165        on the TYPE_FIELDS list for `S'.  (That's so that you can say
10166        things like `S::i' later.)  */
10167     finish_member_declaration (decl);
10168   else
10169     pushdecl (decl);
10170
10171   /* Add this enumeration constant to the list for this type.  */
10172   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10173 }
10174
10175 \f
10176 /* We're defining DECL.  Make sure that it's type is OK.  */
10177
10178 static void
10179 check_function_type (tree decl, tree current_function_parms)
10180 {
10181   tree fntype = TREE_TYPE (decl);
10182   tree return_type = complete_type (TREE_TYPE (fntype));
10183
10184   /* In a function definition, arg types must be complete.  */
10185   require_complete_types_for_parms (current_function_parms);
10186
10187   if (dependent_type_p (return_type))
10188     return;
10189   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10190     {
10191       tree args = TYPE_ARG_TYPES (fntype);
10192           
10193       error ("return type %q#T is incomplete", return_type);
10194
10195       /* Make it return void instead.  */
10196       if (TREE_CODE (fntype) == METHOD_TYPE)
10197         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10198                                              void_type_node,
10199                                              TREE_CHAIN (args));
10200       else
10201         fntype = build_function_type (void_type_node, args);
10202       TREE_TYPE (decl)
10203         = build_exception_variant (fntype,
10204                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10205     }
10206   else
10207     abstract_virtuals_error (decl, TREE_TYPE (fntype));
10208 }
10209
10210 /* Create the FUNCTION_DECL for a function definition.
10211    DECLSPECS and DECLARATOR are the parts of the declaration;
10212    they describe the function's name and the type it returns,
10213    but twisted together in a fashion that parallels the syntax of C.
10214
10215    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10216    DECLARATOR is really the DECL for the function we are about to
10217    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10218    indicating that the function is an inline defined in-class.
10219
10220    This function creates a binding context for the function body
10221    as well as setting up the FUNCTION_DECL in current_function_decl.
10222
10223    For C++, we must first check whether that datum makes any sense.
10224    For example, "class A local_a(1,2);" means that variable local_a
10225    is an aggregate of type A, which should have a constructor
10226    applied to it with the argument list [1, 2].  */
10227
10228 void
10229 start_preparsed_function (tree decl1, tree attrs, int flags)
10230 {
10231   tree ctype = NULL_TREE;
10232   tree fntype;
10233   tree restype;
10234   int doing_friend = 0;
10235   struct cp_binding_level *bl;
10236   tree current_function_parms;
10237   struct c_fileinfo *finfo
10238     = get_fileinfo (lbasename (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))));
10239   bool honor_interface;
10240
10241   /* Sanity check.  */
10242   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10243   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10244
10245   fntype = TREE_TYPE (decl1);
10246   if (TREE_CODE (fntype) == METHOD_TYPE)
10247     ctype = TYPE_METHOD_BASETYPE (fntype);
10248
10249   /* ISO C++ 11.4/5.  A friend function defined in a class is in
10250      the (lexical) scope of the class in which it is defined.  */
10251   if (!ctype && DECL_FRIEND_P (decl1))
10252     {
10253       ctype = DECL_FRIEND_CONTEXT (decl1);
10254
10255       /* CTYPE could be null here if we're dealing with a template;
10256          for example, `inline friend float foo()' inside a template
10257          will have no CTYPE set.  */
10258       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10259         ctype = NULL_TREE;
10260       else
10261         doing_friend = 1;
10262     }
10263
10264   if (DECL_DECLARED_INLINE_P (decl1)
10265       && lookup_attribute ("noinline", attrs))
10266     warning (0, "inline function %q+D given attribute noinline", decl1);
10267
10268   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10269     /* This is a constructor, we must ensure that any default args
10270        introduced by this definition are propagated to the clones
10271        now. The clones are used directly in overload resolution.  */
10272     adjust_clone_args (decl1);
10273
10274   /* Sometimes we don't notice that a function is a static member, and
10275      build a METHOD_TYPE for it.  Fix that up now.  */
10276   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10277       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10278     {
10279       revert_static_member_fn (decl1);
10280       ctype = NULL_TREE;
10281     }
10282
10283   /* Set up current_class_type, and enter the scope of the class, if
10284      appropriate.  */
10285   if (ctype)
10286     push_nested_class (ctype);
10287   else if (DECL_STATIC_FUNCTION_P (decl1))
10288     push_nested_class (DECL_CONTEXT (decl1));
10289
10290   /* Now that we have entered the scope of the class, we must restore
10291      the bindings for any template parameters surrounding DECL1, if it
10292      is an inline member template.  (Order is important; consider the
10293      case where a template parameter has the same name as a field of
10294      the class.)  It is not until after this point that
10295      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
10296   if (flags & SF_INCLASS_INLINE)
10297     maybe_begin_member_template_processing (decl1);
10298
10299   /* Effective C++ rule 15.  */
10300   if (warn_ecpp
10301       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10302       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10303     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
10304
10305   /* Make the init_value nonzero so pushdecl knows this is not tentative.
10306      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
10307   if (!DECL_INITIAL (decl1))
10308     DECL_INITIAL (decl1) = error_mark_node;
10309
10310   /* This function exists in static storage.
10311      (This does not mean `static' in the C sense!)  */
10312   TREE_STATIC (decl1) = 1;
10313
10314   /* We must call push_template_decl after current_class_type is set
10315      up.  (If we are processing inline definitions after exiting a
10316      class scope, current_class_type will be NULL_TREE until set above
10317      by push_nested_class.)  */
10318   if (processing_template_decl)
10319     {
10320       /* FIXME: Handle error_mark_node more gracefully.  */
10321       tree newdecl1 = push_template_decl (decl1);
10322       if (newdecl1 != error_mark_node)
10323         decl1 = newdecl1;
10324     }
10325
10326   /* We are now in the scope of the function being defined.  */
10327   current_function_decl = decl1;
10328
10329   /* Save the parm names or decls from this function's declarator
10330      where store_parm_decls will find them.  */
10331   current_function_parms = DECL_ARGUMENTS (decl1);
10332
10333   /* Make sure the parameter and return types are reasonable.  When
10334      you declare a function, these types can be incomplete, but they
10335      must be complete when you define the function.  */
10336   check_function_type (decl1, current_function_parms);
10337   /* Make sure no default arg is missing.  */
10338   check_default_args (decl1);
10339
10340   /* Build the return declaration for the function.  */
10341   restype = TREE_TYPE (fntype);
10342   /* Promote the value to int before returning it.  */
10343   if (c_promoting_integer_type_p (restype))
10344     restype = type_promotes_to (restype);
10345   if (DECL_RESULT (decl1) == NULL_TREE)
10346     {
10347       tree resdecl;
10348
10349       resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10350       DECL_ARTIFICIAL (resdecl) = 1;
10351       DECL_IGNORED_P (resdecl) = 1;
10352       DECL_RESULT (decl1) = resdecl;
10353
10354       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10355     }
10356
10357   /* Initialize RTL machinery.  We cannot do this until
10358      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
10359      even when processing a template; this is how we get
10360      CFUN set up, and our per-function variables initialized.
10361      FIXME factor out the non-RTL stuff.  */
10362   bl = current_binding_level;
10363   allocate_struct_function (decl1);
10364   current_binding_level = bl;
10365
10366   /* Even though we're inside a function body, we still don't want to
10367      call expand_expr to calculate the size of a variable-sized array.
10368      We haven't necessarily assigned RTL to all variables yet, so it's
10369      not safe to try to expand expressions involving them.  */
10370   cfun->x_dont_save_pending_sizes_p = 1;
10371
10372   /* Start the statement-tree, start the tree now.  */
10373   DECL_SAVED_TREE (decl1) = push_stmt_list ();
10374
10375   /* Let the user know we're compiling this function.  */
10376   announce_function (decl1);
10377
10378   /* Record the decl so that the function name is defined.
10379      If we already have a decl for this name, and it is a FUNCTION_DECL,
10380      use the old decl.  */
10381   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10382     {
10383       /* A specialization is not used to guide overload resolution.  */
10384       if (!DECL_FUNCTION_MEMBER_P (decl1)
10385           && !(DECL_USE_TEMPLATE (decl1) &&
10386                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10387         {
10388           tree olddecl = pushdecl (decl1);
10389
10390           if (olddecl == error_mark_node)
10391             /* If something went wrong when registering the declaration,
10392                use DECL1; we have to have a FUNCTION_DECL to use when
10393                parsing the body of the function.  */
10394             ;
10395           else
10396             /* Otherwise, OLDDECL is either a previous declaration of
10397                the same function or DECL1 itself.  */
10398             decl1 = olddecl;
10399         }
10400       else
10401         {
10402           /* We need to set the DECL_CONTEXT.  */
10403           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10404             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10405         }
10406       fntype = TREE_TYPE (decl1);
10407
10408       /* If #pragma weak applies, mark the decl appropriately now.
10409          The pragma only applies to global functions.  Because
10410          determining whether or not the #pragma applies involves
10411          computing the mangled name for the declaration, we cannot
10412          apply the pragma until after we have merged this declaration
10413          with any previous declarations; if the original declaration
10414          has a linkage specification, that specification applies to
10415          the definition as well, and may affect the mangled name.  */
10416       if (!DECL_CONTEXT (decl1))
10417         maybe_apply_pragma_weak (decl1);
10418     }
10419
10420   /* Reset these in case the call to pushdecl changed them.  */
10421   current_function_decl = decl1;
10422   cfun->decl = decl1;
10423
10424   /* If we are (erroneously) defining a function that we have already
10425      defined before, wipe out what we knew before.  */
10426   if (!DECL_PENDING_INLINE_P (decl1))
10427     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10428
10429   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10430     {
10431       /* We know that this was set up by `grokclassfn'.  We do not
10432          wait until `store_parm_decls', since evil parse errors may
10433          never get us to that point.  Here we keep the consistency
10434          between `current_class_type' and `current_class_ptr'.  */
10435       tree t = DECL_ARGUMENTS (decl1);
10436
10437       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10438       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10439
10440       cp_function_chain->x_current_class_ref
10441         = build_indirect_ref (t, NULL);
10442       cp_function_chain->x_current_class_ptr = t;
10443
10444       /* Constructors and destructors need to know whether they're "in
10445          charge" of initializing virtual base classes.  */
10446       t = TREE_CHAIN (t);
10447       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10448         {
10449           current_in_charge_parm = t;
10450           t = TREE_CHAIN (t);
10451         }
10452       if (DECL_HAS_VTT_PARM_P (decl1))
10453         {
10454           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10455           current_vtt_parm = t;
10456         }
10457     }
10458
10459   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10460                      /* Implicitly-defined methods (like the
10461                         destructor for a class in which no destructor
10462                         is explicitly declared) must not be defined
10463                         until their definition is needed.  So, we
10464                         ignore interface specifications for
10465                         compiler-generated functions.  */
10466                      && !DECL_ARTIFICIAL (decl1));
10467                      
10468   if (DECL_INTERFACE_KNOWN (decl1))
10469     {
10470       tree ctx = decl_function_context (decl1);
10471
10472       if (DECL_NOT_REALLY_EXTERN (decl1))
10473         DECL_EXTERNAL (decl1) = 0;
10474
10475       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10476           && TREE_PUBLIC (ctx))
10477         /* This is a function in a local class in an extern inline
10478            function.  */
10479         comdat_linkage (decl1);
10480     }
10481   /* If this function belongs to an interface, it is public.
10482      If it belongs to someone else's interface, it is also external.
10483      This only affects inlines and template instantiations.  */
10484   else if (!finfo->interface_unknown && honor_interface)
10485     {
10486       if (DECL_DECLARED_INLINE_P (decl1)
10487           || DECL_TEMPLATE_INSTANTIATION (decl1)
10488           || processing_template_decl)
10489         {
10490           DECL_EXTERNAL (decl1)
10491             = (finfo->interface_only
10492                || (DECL_DECLARED_INLINE_P (decl1)
10493                    && ! flag_implement_inlines
10494                    && !DECL_VINDEX (decl1)));
10495
10496           /* For WIN32 we also want to put these in linkonce sections.  */
10497           maybe_make_one_only (decl1);
10498         }
10499       else
10500         DECL_EXTERNAL (decl1) = 0;
10501       DECL_INTERFACE_KNOWN (decl1) = 1;
10502       /* If this function is in an interface implemented in this file,
10503          make sure that the backend knows to emit this function
10504          here.  */
10505       if (!DECL_EXTERNAL (decl1))
10506         mark_needed (decl1);
10507     }
10508   else if (finfo->interface_unknown && finfo->interface_only
10509            && honor_interface)
10510     {
10511       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10512          interface, we will have both finfo->interface_unknown and
10513          finfo->interface_only set.  In that case, we don't want to
10514          use the normal heuristics because someone will supply a
10515          #pragma implementation elsewhere, and deducing it here would
10516          produce a conflict.  */
10517       comdat_linkage (decl1);
10518       DECL_EXTERNAL (decl1) = 0;
10519       DECL_INTERFACE_KNOWN (decl1) = 1;
10520       DECL_DEFER_OUTPUT (decl1) = 1;
10521     }
10522   else
10523     {
10524       /* This is a definition, not a reference.
10525          So clear DECL_EXTERNAL.  */
10526       DECL_EXTERNAL (decl1) = 0;
10527
10528       if ((DECL_DECLARED_INLINE_P (decl1)
10529            || DECL_TEMPLATE_INSTANTIATION (decl1))
10530           && ! DECL_INTERFACE_KNOWN (decl1)
10531           /* Don't try to defer nested functions for now.  */
10532           && ! decl_function_context (decl1))
10533         DECL_DEFER_OUTPUT (decl1) = 1;
10534       else
10535         DECL_INTERFACE_KNOWN (decl1) = 1;
10536     }
10537
10538   /* Determine the ELF visibility attribute for the function.  We must not
10539      do this before calling "pushdecl", as we must allow "duplicate_decls"
10540      to merge any attributes appropriately.  We also need to wait until
10541      linkage is set.  */
10542   if (!DECL_CLONED_FUNCTION_P (decl1))
10543     determine_visibility (decl1);
10544
10545   begin_scope (sk_function_parms, decl1);
10546
10547   ++function_depth;
10548
10549   if (DECL_DESTRUCTOR_P (decl1)
10550       || (DECL_CONSTRUCTOR_P (decl1)
10551           && targetm.cxx.cdtor_returns_this ()))
10552     {
10553       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10554       DECL_CONTEXT (cdtor_label) = current_function_decl;
10555     }
10556
10557   start_fname_decls ();
10558
10559   store_parm_decls (current_function_parms);
10560 }
10561
10562
10563 /* Like start_preparsed_function, except that instead of a
10564    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10565
10566    Returns 1 on success.  If the DECLARATOR is not suitable for a function
10567    (it defines a datum instead), we return 0, which tells
10568    yyparse to report a parse error.  */
10569
10570 int
10571 start_function (cp_decl_specifier_seq *declspecs,
10572                 const cp_declarator *declarator,
10573                 tree attrs)
10574 {
10575   tree decl1;
10576
10577   if (have_extern_spec)
10578     {
10579       declspecs->storage_class = sc_extern;
10580       /* This should only be done once on the outermost decl.  */
10581       have_extern_spec = false;
10582     }
10583
10584   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10585   /* If the declarator is not suitable for a function definition,
10586      cause a syntax error.  */
10587   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10588     return 0;
10589
10590   if (DECL_MAIN_P (decl1))
10591     /* main must return int.  grokfndecl should have corrected it
10592        (and issued a diagnostic) if the user got it wrong.  */
10593     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10594                              integer_type_node));
10595
10596   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10597
10598   return 1;
10599 }
10600 \f
10601 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10602    FN.  */
10603
10604 static bool
10605 use_eh_spec_block (tree fn)
10606 {
10607   return (flag_exceptions && flag_enforce_eh_specs
10608           && !processing_template_decl
10609           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10610           /* We insert the EH_SPEC_BLOCK only in the original
10611              function; then, it is copied automatically to the
10612              clones.  */
10613           && !DECL_CLONED_FUNCTION_P (fn)
10614           /* Implicitly-generated constructors and destructors have
10615              exception specifications.  However, those specifications
10616              are the union of the possible exceptions specified by the
10617              constructors/destructors for bases and members, so no
10618              unallowed exception will ever reach this function.  By
10619              not creating the EH_SPEC_BLOCK we save a little memory,
10620              and we avoid spurious warnings about unreachable
10621              code.  */
10622           && !DECL_ARTIFICIAL (fn));
10623 }
10624
10625 /* Store the parameter declarations into the current function declaration.
10626    This is called after parsing the parameter declarations, before
10627    digesting the body of the function.
10628
10629    Also install to binding contour return value identifier, if any.  */
10630
10631 static void
10632 store_parm_decls (tree current_function_parms)
10633 {
10634   tree fndecl = current_function_decl;
10635   tree parm;
10636
10637   /* This is a chain of any other decls that came in among the parm
10638      declarations.  If a parm is declared with  enum {foo, bar} x;
10639      then CONST_DECLs for foo and bar are put here.  */
10640   tree nonparms = NULL_TREE;
10641
10642   if (current_function_parms)
10643     {
10644       /* This case is when the function was defined with an ANSI prototype.
10645          The parms already have decls, so we need not do anything here
10646          except record them as in effect
10647          and complain if any redundant old-style parm decls were written.  */
10648
10649       tree specparms = current_function_parms;
10650       tree next;
10651
10652       /* Must clear this because it might contain TYPE_DECLs declared
10653              at class level.  */
10654       current_binding_level->names = NULL;
10655
10656       /* If we're doing semantic analysis, then we'll call pushdecl
10657              for each of these.  We must do them in reverse order so that
10658              they end in the correct forward order.  */
10659       specparms = nreverse (specparms);
10660
10661       for (parm = specparms; parm; parm = next)
10662         {
10663           next = TREE_CHAIN (parm);
10664           if (TREE_CODE (parm) == PARM_DECL)
10665             {
10666               if (DECL_NAME (parm) == NULL_TREE
10667                   || TREE_CODE (parm) != VOID_TYPE)
10668                 pushdecl (parm);
10669               else
10670                 error ("parameter %qD declared void", parm);
10671             }
10672           else
10673             {
10674               /* If we find an enum constant or a type tag,
10675                  put it aside for the moment.  */
10676               TREE_CHAIN (parm) = NULL_TREE;
10677               nonparms = chainon (nonparms, parm);
10678             }
10679         }
10680
10681       /* Get the decls in their original chain order and record in the
10682          function.  This is all and only the PARM_DECLs that were
10683          pushed into scope by the loop above.  */
10684       DECL_ARGUMENTS (fndecl) = getdecls ();
10685     }
10686   else
10687     DECL_ARGUMENTS (fndecl) = NULL_TREE;
10688
10689   /* Now store the final chain of decls for the arguments
10690      as the decl-chain of the current lexical scope.
10691      Put the enumerators in as well, at the front so that
10692      DECL_ARGUMENTS is not modified.  */
10693   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10694
10695   if (use_eh_spec_block (current_function_decl))
10696     current_eh_spec_block = begin_eh_spec_block ();
10697 }
10698
10699 \f
10700 /* We have finished doing semantic analysis on DECL, but have not yet
10701    generated RTL for its body.  Save away our current state, so that
10702    when we want to generate RTL later we know what to do.  */
10703
10704 static void
10705 save_function_data (tree decl)
10706 {
10707   struct language_function *f;
10708
10709   /* Save the language-specific per-function data so that we can
10710      get it back when we really expand this function.  */
10711   gcc_assert (!DECL_PENDING_INLINE_P (decl));
10712
10713   /* Make a copy.  */
10714   f = GGC_NEW (struct language_function);
10715   memcpy (f, cp_function_chain, sizeof (struct language_function));
10716   DECL_SAVED_FUNCTION_DATA (decl) = f;
10717
10718   /* Clear out the bits we don't need.  */
10719   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10720   f->bindings = NULL;
10721   f->x_local_names = NULL;
10722 }
10723
10724
10725 /* Set the return value of the constructor (if present).  */
10726
10727 static void
10728 finish_constructor_body (void)
10729 {
10730   tree val;
10731   tree exprstmt;
10732
10733   if (targetm.cxx.cdtor_returns_this ())
10734     {
10735       /* Any return from a constructor will end up here.  */
10736       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10737
10738       val = DECL_ARGUMENTS (current_function_decl);
10739       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10740                     DECL_RESULT (current_function_decl), val);
10741       /* Return the address of the object.  */
10742       exprstmt = build_stmt (RETURN_EXPR, val);
10743       add_stmt (exprstmt);
10744     }
10745 }
10746
10747 /* Do all the processing for the beginning of a destructor; set up the
10748    vtable pointers and cleanups for bases and members.  */
10749
10750 static void
10751 begin_destructor_body (void)
10752 {
10753   tree compound_stmt;
10754
10755   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10756      issued an error message.  We still want to try to process the
10757      body of the function, but initialize_vtbl_ptrs will crash if
10758      TYPE_BINFO is NULL.  */
10759   if (COMPLETE_TYPE_P (current_class_type))
10760     {
10761       compound_stmt = begin_compound_stmt (0);
10762       /* Make all virtual function table pointers in non-virtual base
10763          classes point to CURRENT_CLASS_TYPE's virtual function
10764          tables.  */
10765       initialize_vtbl_ptrs (current_class_ptr);
10766       finish_compound_stmt (compound_stmt);
10767       
10768       /* And insert cleanups for our bases and members so that they
10769          will be properly destroyed if we throw.  */
10770       push_base_cleanups ();
10771     }
10772 }
10773
10774 /* At the end of every destructor we generate code to delete the object if
10775    necessary.  Do that now.  */
10776
10777 static void
10778 finish_destructor_body (void)
10779 {
10780   tree exprstmt;
10781
10782   /* Any return from a destructor will end up here; that way all base
10783      and member cleanups will be run when the function returns.  */
10784   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10785
10786   /* In a virtual destructor, we must call delete.  */
10787   if (DECL_VIRTUAL_P (current_function_decl))
10788     {
10789       tree if_stmt;
10790       tree virtual_size = cxx_sizeof (current_class_type);
10791
10792       /* [class.dtor]
10793
10794       At the point of definition of a virtual destructor (including
10795       an implicit definition), non-placement operator delete shall
10796       be looked up in the scope of the destructor's class and if
10797       found shall be accessible and unambiguous.  */
10798       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr, 
10799                                       virtual_size,
10800                                       /*global_p=*/false, 
10801                                       /*placement=*/NULL_TREE, 
10802                                       /*alloc_fn=*/NULL_TREE);
10803
10804       if_stmt = begin_if_stmt ();
10805       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10806                                    current_in_charge_parm,
10807                                    integer_one_node),
10808                            if_stmt);
10809       finish_expr_stmt (exprstmt);
10810       finish_then_clause (if_stmt);
10811       finish_if_stmt (if_stmt);
10812     }
10813
10814   if (targetm.cxx.cdtor_returns_this ())
10815     {
10816       tree val;
10817
10818       val = DECL_ARGUMENTS (current_function_decl);
10819       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10820                     DECL_RESULT (current_function_decl), val);
10821       /* Return the address of the object.  */
10822       exprstmt = build_stmt (RETURN_EXPR, val);
10823       add_stmt (exprstmt);
10824     }
10825 }
10826
10827 /* Do the necessary processing for the beginning of a function body, which
10828    in this case includes member-initializers, but not the catch clauses of
10829    a function-try-block.  Currently, this means opening a binding level
10830    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
10831
10832 tree
10833 begin_function_body (void)
10834 {
10835   tree stmt;
10836
10837   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10838     return NULL_TREE;
10839
10840   if (processing_template_decl)
10841     /* Do nothing now.  */;
10842   else
10843     /* Always keep the BLOCK node associated with the outermost pair of
10844        curly braces of a function.  These are needed for correct
10845        operation of dwarfout.c.  */
10846     keep_next_level (true);
10847
10848   stmt = begin_compound_stmt (BCS_FN_BODY);
10849
10850   if (processing_template_decl)
10851     /* Do nothing now.  */;
10852   else if (DECL_DESTRUCTOR_P (current_function_decl))
10853     begin_destructor_body ();
10854
10855   return stmt;
10856 }
10857
10858 /* Do the processing for the end of a function body.  Currently, this means
10859    closing out the cleanups for fully-constructed bases and members, and in
10860    the case of the destructor, deleting the object if desired.  Again, this
10861    is only meaningful for [cd]tors, since they are the only functions where
10862    there is a significant distinction between the main body and any
10863    function catch clauses.  Handling, say, main() return semantics here
10864    would be wrong, as flowing off the end of a function catch clause for
10865    main() would also need to return 0.  */
10866
10867 void
10868 finish_function_body (tree compstmt)
10869 {
10870   if (compstmt == NULL_TREE)
10871     return;
10872   
10873   /* Close the block.  */
10874   finish_compound_stmt (compstmt);
10875
10876   if (processing_template_decl)
10877     /* Do nothing now.  */;
10878   else if (DECL_CONSTRUCTOR_P (current_function_decl))
10879     finish_constructor_body ();
10880   else if (DECL_DESTRUCTOR_P (current_function_decl))
10881     finish_destructor_body ();
10882 }
10883
10884 /* Given a function, returns the BLOCK corresponding to the outermost level
10885    of curly braces, skipping the artificial block created for constructor
10886    initializers.  */
10887
10888 static tree
10889 outer_curly_brace_block (tree fndecl)
10890 {
10891   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
10892   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10893     /* Skip the artificial function body block.  */
10894     block = BLOCK_SUBBLOCKS (block);
10895   return block;
10896 }
10897
10898 /* Finish up a function declaration and compile that function
10899    all the way to assembler language output.  The free the storage
10900    for the function definition.
10901
10902    FLAGS is a bitwise or of the following values:
10903      2 - INCLASS_INLINE
10904        We just finished processing the body of an in-class inline
10905        function definition.  (This processing will have taken place
10906        after the class definition is complete.)  */
10907
10908 tree
10909 finish_function (int flags)
10910 {
10911   tree fndecl = current_function_decl;
10912   tree fntype, ctype = NULL_TREE;
10913   int inclass_inline = (flags & 2) != 0;
10914   int nested;
10915
10916   /* When we get some parse errors, we can end up without a
10917      current_function_decl, so cope.  */
10918   if (fndecl == NULL_TREE)
10919     return error_mark_node;
10920
10921   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
10922       && DECL_VIRTUAL_P (fndecl)
10923       && !processing_template_decl)
10924     {
10925       tree fnclass = DECL_CONTEXT (fndecl);
10926       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
10927         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
10928     }
10929
10930   nested = function_depth > 1;
10931   fntype = TREE_TYPE (fndecl);
10932
10933   /*  TREE_READONLY (fndecl) = 1;
10934       This caused &foo to be of type ptr-to-const-function
10935       which then got a warning when stored in a ptr-to-function variable.  */
10936
10937   gcc_assert (building_stmt_tree ());
10938
10939   /* For a cloned function, we've already got all the code we need;
10940      there's no need to add any extra bits.  */
10941   if (!DECL_CLONED_FUNCTION_P (fndecl))
10942     {
10943       if (DECL_MAIN_P (current_function_decl))
10944         {
10945           tree stmt;
10946
10947           /* Make it so that `main' always returns 0 by default (or
10948              1 for VMS).  */
10949 #if VMS_TARGET
10950           stmt = finish_return_stmt (integer_one_node);
10951 #else
10952           stmt = finish_return_stmt (integer_zero_node);
10953 #endif
10954           /* Hack.  We don't want the middle-end to warn that this
10955              return is unreachable, so put the statement on the
10956              special line 0.  */
10957 #ifdef USE_MAPPED_LOCATION
10958           SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
10959 #else
10960           annotate_with_file_line (stmt, input_filename, 0);
10961 #endif
10962         }
10963
10964       if (use_eh_spec_block (current_function_decl))
10965         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
10966                               (TREE_TYPE (current_function_decl)),
10967                               current_eh_spec_block);
10968     }
10969
10970   /* If we're saving up tree structure, tie off the function now.  */
10971   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
10972
10973   finish_fname_decls ();
10974
10975   /* If this function can't throw any exceptions, remember that.  */
10976   if (!processing_template_decl
10977       && !cp_function_chain->can_throw
10978       && !flag_non_call_exceptions)
10979     TREE_NOTHROW (fndecl) = 1;
10980
10981   /* This must come after expand_function_end because cleanups might
10982      have declarations (from inline functions) that need to go into
10983      this function's blocks.  */
10984
10985   /* If the current binding level isn't the outermost binding level
10986      for this function, either there is a bug, or we have experienced
10987      syntax errors and the statement tree is malformed.  */
10988   if (current_binding_level->kind != sk_function_parms)
10989     {
10990       /* Make sure we have already experienced errors.  */
10991       gcc_assert (errorcount);
10992
10993       /* Throw away the broken statement tree and extra binding
10994          levels.  */
10995       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
10996
10997       while (current_binding_level->kind != sk_function_parms)
10998         {
10999           if (current_binding_level->kind == sk_class)
11000             pop_nested_class ();
11001           else
11002             poplevel (0, 0, 0);
11003         }
11004     }
11005   poplevel (1, 0, 1);
11006
11007   /* Statements should always be full-expressions at the outermost set
11008      of curly braces for a function.  */
11009   gcc_assert (stmts_are_full_exprs_p ());
11010
11011   /* Set up the named return value optimization, if we can.  Candidate
11012      variables are selected in check_return_value.  */
11013   if (current_function_return_value)
11014     {
11015       tree r = current_function_return_value;
11016       tree outer;
11017
11018       if (r != error_mark_node
11019           /* This is only worth doing for fns that return in memory--and
11020              simpler, since we don't have to worry about promoted modes.  */
11021           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11022           /* Only allow this for variables declared in the outer scope of
11023              the function so we know that their lifetime always ends with a
11024              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
11025              we were to do this optimization in tree-ssa.  */
11026           && (outer = outer_curly_brace_block (fndecl))
11027           && chain_member (r, BLOCK_VARS (outer)))
11028         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11029
11030       current_function_return_value = NULL_TREE;
11031     }
11032
11033   /* Remember that we were in class scope.  */
11034   if (current_class_name)
11035     ctype = current_class_type;
11036
11037   /* Must mark the RESULT_DECL as being in this function.  */
11038   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11039
11040   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11041      to the FUNCTION_DECL node itself.  */
11042   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11043
11044   /* Save away current state, if appropriate.  */
11045   if (!processing_template_decl)
11046     save_function_data (fndecl);
11047
11048   /* Complain if there's just no return statement.  */
11049   if (warn_return_type
11050       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11051       && !dependent_type_p (TREE_TYPE (fntype))
11052       && !current_function_returns_value && !current_function_returns_null
11053       /* Don't complain if we abort or throw.  */
11054       && !current_function_returns_abnormally
11055       && !DECL_NAME (DECL_RESULT (fndecl))
11056       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
11057          inline function, as we might never be compiled separately.  */
11058       && (DECL_INLINE (fndecl) || processing_template_decl)
11059       /* Structor return values (if any) are set by the compiler.  */
11060       && !DECL_CONSTRUCTOR_P (fndecl)
11061       && !DECL_DESTRUCTOR_P (fndecl))
11062     warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11063
11064   /* Store the end of the function, so that we get good line number
11065      info for the epilogue.  */
11066   cfun->function_end_locus = input_location;
11067
11068   /* Genericize before inlining.  */
11069   if (!processing_template_decl)
11070     {
11071       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11072       cp_genericize (fndecl);
11073       /* Clear out the bits we don't need.  */
11074       f->x_current_class_ptr = NULL;
11075       f->x_current_class_ref = NULL;
11076       f->x_eh_spec_block = NULL;
11077       f->x_in_charge_parm = NULL;
11078       f->x_vtt_parm = NULL;
11079       f->x_return_value = NULL;
11080       f->bindings = NULL;
11081
11082       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
11083       c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11084     }
11085   /* Clear out the bits we don't need.  */
11086   local_names = NULL;
11087
11088   /* We're leaving the context of this function, so zap cfun.  It's still in
11089      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
11090   cfun = NULL;
11091   current_function_decl = NULL;
11092
11093   /* If this is an in-class inline definition, we may have to pop the
11094      bindings for the template parameters that we added in
11095      maybe_begin_member_template_processing when start_function was
11096      called.  */
11097   if (inclass_inline)
11098     maybe_end_member_template_processing ();
11099
11100   /* Leave the scope of the class.  */
11101   if (ctype)
11102     pop_nested_class ();
11103
11104   --function_depth;
11105
11106   /* Clean up.  */
11107   if (! nested)
11108     /* Let the error reporting routines know that we're outside a
11109        function.  For a nested function, this value is used in
11110        cxx_pop_function_context and then reset via pop_function_context.  */
11111     current_function_decl = NULL_TREE;
11112
11113   return fndecl;
11114 }
11115 \f
11116 /* Create the FUNCTION_DECL for a function definition.
11117    DECLSPECS and DECLARATOR are the parts of the declaration;
11118    they describe the return type and the name of the function,
11119    but twisted together in a fashion that parallels the syntax of C.
11120
11121    This function creates a binding context for the function body
11122    as well as setting up the FUNCTION_DECL in current_function_decl.
11123
11124    Returns a FUNCTION_DECL on success.
11125
11126    If the DECLARATOR is not suitable for a function (it defines a datum
11127    instead), we return 0, which tells yyparse to report a parse error.
11128
11129    May return void_type_node indicating that this method is actually
11130    a friend.  See grokfield for more details.
11131
11132    Came here with a `.pushlevel' .
11133
11134    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11135    CHANGES TO CODE IN `grokfield'.  */
11136
11137 tree
11138 start_method (cp_decl_specifier_seq *declspecs,
11139               const cp_declarator *declarator, tree attrlist)
11140 {
11141   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11142                                 &attrlist);
11143
11144   if (fndecl == error_mark_node)
11145     return error_mark_node;
11146
11147   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11148     {
11149       error ("invalid member function declaration");
11150       return error_mark_node;
11151     }
11152
11153   if (attrlist)
11154     cplus_decl_attributes (&fndecl, attrlist, 0);
11155
11156   /* Pass friends other than inline friend functions back.  */
11157   if (fndecl == void_type_node)
11158     return fndecl;
11159
11160   if (DECL_IN_AGGR_P (fndecl))
11161     {
11162       if (DECL_CONTEXT (fndecl)
11163           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11164         error ("%qD is already defined in class %qT", fndecl,
11165                DECL_CONTEXT (fndecl));
11166       return error_mark_node;
11167     }
11168
11169   check_template_shadow (fndecl);
11170
11171   DECL_DECLARED_INLINE_P (fndecl) = 1;
11172   if (flag_default_inline)
11173     DECL_INLINE (fndecl) = 1;
11174
11175   /* We process method specializations in finish_struct_1.  */
11176   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11177     {
11178       fndecl = push_template_decl (fndecl);
11179       if (fndecl == error_mark_node)
11180         return fndecl;
11181     }
11182
11183   if (! DECL_FRIEND_P (fndecl))
11184     {
11185       if (TREE_CHAIN (fndecl))
11186         {
11187           fndecl = copy_node (fndecl);
11188           TREE_CHAIN (fndecl) = NULL_TREE;
11189         }
11190       grok_special_member_properties (fndecl);
11191     }
11192
11193   finish_decl (fndecl, NULL_TREE, NULL_TREE);
11194
11195   /* Make a place for the parms.  */
11196   begin_scope (sk_function_parms, fndecl);
11197
11198   DECL_IN_AGGR_P (fndecl) = 1;
11199   return fndecl;
11200 }
11201
11202 /* Go through the motions of finishing a function definition.
11203    We don't compile this method until after the whole class has
11204    been processed.
11205
11206    FINISH_METHOD must return something that looks as though it
11207    came from GROKFIELD (since we are defining a method, after all).
11208
11209    This is called after parsing the body of the function definition.
11210    STMTS is the chain of statements that makes up the function body.
11211
11212    DECL is the ..._DECL that `start_method' provided.  */
11213
11214 tree
11215 finish_method (tree decl)
11216 {
11217   tree fndecl = decl;
11218   tree old_initial;
11219
11220   tree link;
11221
11222   if (decl == void_type_node)
11223     return decl;
11224
11225   old_initial = DECL_INITIAL (fndecl);
11226
11227   /* Undo the level for the parms (from start_method).
11228      This is like poplevel, but it causes nothing to be
11229      saved.  Saving information here confuses symbol-table
11230      output routines.  Besides, this information will
11231      be correctly output when this method is actually
11232      compiled.  */
11233
11234   /* Clear out the meanings of the local variables of this level;
11235      also record in each decl which block it belongs to.  */
11236
11237   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11238     {
11239       if (DECL_NAME (link) != NULL_TREE)
11240         pop_binding (DECL_NAME (link), link);
11241       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11242       DECL_CONTEXT (link) = NULL_TREE;
11243     }
11244
11245   poplevel (0, 0, 0);
11246
11247   DECL_INITIAL (fndecl) = old_initial;
11248
11249   /* We used to check if the context of FNDECL was different from
11250      current_class_type as another way to get inside here.  This didn't work
11251      for String.cc in libg++.  */
11252   if (DECL_FRIEND_P (fndecl))
11253     {
11254       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11255                      fndecl);
11256       decl = void_type_node;
11257     }
11258
11259   return decl;
11260 }
11261 \f
11262
11263 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
11264    we can lay it out later, when and if its type becomes complete.  */
11265
11266 void
11267 maybe_register_incomplete_var (tree var)
11268 {
11269   gcc_assert (TREE_CODE (var) == VAR_DECL);
11270
11271   /* Keep track of variables with incomplete types.  */
11272   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11273       && DECL_EXTERNAL (var))
11274     {
11275       tree inner_type = TREE_TYPE (var);
11276
11277       while (TREE_CODE (inner_type) == ARRAY_TYPE)
11278         inner_type = TREE_TYPE (inner_type);
11279       inner_type = TYPE_MAIN_VARIANT (inner_type);
11280
11281       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11282           /* RTTI TD entries are created while defining the type_info.  */
11283           || (TYPE_LANG_SPECIFIC (inner_type)
11284               && TYPE_BEING_DEFINED (inner_type)))
11285         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11286     }
11287 }
11288
11289 /* Called when a class type (given by TYPE) is defined.  If there are
11290    any existing VAR_DECLs whose type hsa been completed by this
11291    declaration, update them now.  */
11292
11293 void
11294 complete_vars (tree type)
11295 {
11296   tree *list = &incomplete_vars;
11297
11298   gcc_assert (CLASS_TYPE_P (type));
11299   while (*list)
11300     {
11301       if (same_type_p (type, TREE_PURPOSE (*list)))
11302         {
11303           tree var = TREE_VALUE (*list);
11304           tree type = TREE_TYPE (var);
11305           /* Complete the type of the variable.  The VAR_DECL itself
11306              will be laid out in expand_expr.  */
11307           complete_type (type);
11308           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11309           /* Remove this entry from the list.  */
11310           *list = TREE_CHAIN (*list);
11311         }
11312       else
11313         list = &TREE_CHAIN (*list);
11314     }
11315
11316   /* Check for pending declarations which may have abstract type.  */
11317   complete_type_check_abstract (type);
11318 }
11319
11320 /* If DECL is of a type which needs a cleanup, build that cleanup
11321    here.  */
11322
11323 tree
11324 cxx_maybe_build_cleanup (tree decl)
11325 {
11326   tree type = TREE_TYPE (decl);
11327
11328   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11329     {
11330       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11331       tree rval;
11332       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11333                          && CLASSTYPE_VBASECLASSES (type));
11334
11335       if (TREE_CODE (type) == ARRAY_TYPE)
11336         rval = decl;
11337       else
11338         {
11339           cxx_mark_addressable (decl);
11340           rval = build_unary_op (ADDR_EXPR, decl, 0);
11341         }
11342
11343       /* Optimize for space over speed here.  */
11344       if (!has_vbases || flag_expensive_optimizations)
11345         flags |= LOOKUP_NONVIRTUAL;
11346
11347       rval = build_delete (TREE_TYPE (rval), rval,
11348                            sfk_complete_destructor, flags, 0);
11349
11350       return rval;
11351     }
11352   return NULL_TREE;
11353 }
11354 \f
11355 /* When a stmt has been parsed, this function is called.  */
11356
11357 void
11358 finish_stmt (void)
11359 {
11360 }
11361
11362 /* DECL was originally constructed as a non-static member function,
11363    but turned out to be static.  Update it accordingly.  */
11364
11365 void
11366 revert_static_member_fn (tree decl)
11367 {
11368   tree tmp;
11369   tree function = TREE_TYPE (decl);
11370   tree args = TYPE_ARG_TYPES (function);
11371
11372   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11373       != TYPE_UNQUALIFIED)
11374     error ("static member function %q#D declared with type qualifiers", decl);
11375
11376   args = TREE_CHAIN (args);
11377   tmp = build_function_type (TREE_TYPE (function), args);
11378   tmp = build_qualified_type (tmp, cp_type_quals (function));
11379   tmp = build_exception_variant (tmp,
11380                                  TYPE_RAISES_EXCEPTIONS (function));
11381   TREE_TYPE (decl) = tmp;
11382   if (DECL_ARGUMENTS (decl))
11383     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11384   DECL_STATIC_FUNCTION_P (decl) = 1;
11385 }
11386
11387 /* Initialize the variables used during compilation of a C++
11388    function.  */
11389
11390 void
11391 cxx_push_function_context (struct function * f)
11392 {
11393   struct language_function *p = GGC_CNEW (struct language_function);
11394   f->language = p;
11395
11396   /* Whenever we start a new function, we destroy temporaries in the
11397      usual way.  */
11398   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11399
11400   if (f->decl)
11401     {
11402       tree fn = f->decl;
11403
11404       if (DECL_SAVED_FUNCTION_DATA (fn))
11405         {
11406           /* If we already parsed this function, and we're just expanding it
11407              now, restore saved state.  */
11408           *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11409
11410           /* We don't need the saved data anymore.  Unless this is an inline
11411              function; we need the named return value info for
11412              declare_return_variable.  */
11413           if (! DECL_INLINE (fn))
11414             DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11415         }
11416     }
11417 }
11418
11419 /* Free the language-specific parts of F, now that we've finished
11420    compiling the function.  */
11421
11422 void
11423 cxx_pop_function_context (struct function * f)
11424 {
11425   f->language = 0;
11426 }
11427
11428 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11429    one of the language-independent trees.  */
11430
11431 enum cp_tree_node_structure_enum
11432 cp_tree_node_structure (union lang_tree_node * t)
11433 {
11434   switch (TREE_CODE (&t->generic))
11435     {
11436     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
11437     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
11438     case OVERLOAD:              return TS_CP_OVERLOAD;
11439     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
11440     case TINST_LEVEL:           return TS_CP_TINST_LEVEL;
11441     case PTRMEM_CST:            return TS_CP_PTRMEM;
11442     case BASELINK:              return TS_CP_BASELINK;
11443     default:                    return TS_CP_GENERIC;
11444     }
11445 }
11446
11447 /* Build the void_list_node (void_type_node having been created).  */
11448 tree
11449 build_void_list_node (void)
11450 {
11451   tree t = build_tree_list (NULL_TREE, void_type_node);
11452   return t;
11453 }
11454
11455 bool
11456 cp_missing_noreturn_ok_p (tree decl)
11457 {
11458   /* A missing noreturn is ok for the `main' function.  */
11459   return DECL_MAIN_P (decl);
11460 }
11461
11462 /* Return the COMDAT group into which DECL should be placed.  */
11463
11464 const char *
11465 cxx_comdat_group (tree decl)
11466 {
11467   tree name;
11468
11469   /* Virtual tables, construction virtual tables, and virtual table
11470      tables all go in a single COMDAT group, named after the primary
11471      virtual table.  */
11472   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11473     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11474   /* For all other DECLs, the COMDAT group is the mangled name of the
11475      declaration itself.  */
11476   else
11477     {
11478       while (DECL_THUNK_P (decl))
11479         {
11480           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11481              into the same section as the target function.  In that case
11482              we must return target's name.  */
11483           tree target = THUNK_TARGET (decl);
11484           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11485               && DECL_SECTION_NAME (target) != NULL
11486               && DECL_ONE_ONLY (target))
11487             decl = target;
11488           else
11489             break;
11490         }
11491       name = DECL_ASSEMBLER_NAME (decl);
11492     }
11493
11494   return IDENTIFIER_POINTER (name);
11495 }
11496
11497 #include "gt-cp-decl.h"