OSDN Git Service

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