OSDN Git Service

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