OSDN Git Service

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