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