OSDN Git Service

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