OSDN Git Service

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