OSDN Git Service

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