Initial import of binutils 2.22 on the new vendor branch
[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       if (b->kind == sk_function_parms)
3540         return error_mark_node;
3541       while (b->level_chain->kind != sk_function_parms)
3542         b = b->level_chain;
3543       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3544       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3545                       LOOKUP_ONLYCONVERTING);
3546     }
3547   else
3548     pushdecl_top_level_and_finish (decl, init);
3549
3550   return decl;
3551 }
3552
3553 static tree
3554 builtin_function_1 (tree decl, tree context, bool is_global)
3555 {
3556   tree          id = DECL_NAME (decl);
3557   const char *name = IDENTIFIER_POINTER (id);
3558
3559   retrofit_lang_decl (decl);
3560
3561   /* All nesting of C++ functions is lexical; there is never a "static
3562      chain" in the sense of GNU C nested functions.  */
3563   DECL_NO_STATIC_CHAIN (decl) = 1;
3564
3565   DECL_ARTIFICIAL (decl) = 1;
3566   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3567   SET_DECL_LANGUAGE (decl, lang_c);
3568   /* Runtime library routines are, by definition, available in an
3569      external shared object.  */
3570   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3571   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3572
3573   DECL_CONTEXT (decl) = context;
3574
3575   if (is_global)
3576     pushdecl_top_level (decl);
3577   else
3578     pushdecl (decl);
3579
3580   /* A function in the user's namespace should have an explicit
3581      declaration before it is used.  Mark the built-in function as
3582      anticipated but not actually declared.  */
3583   if (name[0] != '_' || name[1] != '_')
3584     DECL_ANTICIPATED (decl) = 1;
3585   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3586     {
3587       size_t len = strlen (name);
3588
3589       /* Treat __*_chk fortification functions as anticipated as well,
3590          unless they are __builtin_*.  */
3591       if (len > strlen ("___chk")
3592           && memcmp (name + len - strlen ("_chk"),
3593                      "_chk", strlen ("_chk") + 1) == 0)
3594         DECL_ANTICIPATED (decl) = 1;
3595     }
3596
3597   return decl;
3598 }
3599
3600 tree
3601 cxx_builtin_function (tree decl)
3602 {
3603   tree          id = DECL_NAME (decl);
3604   const char *name = IDENTIFIER_POINTER (id);
3605   /* All builtins that don't begin with an '_' should additionally
3606      go in the 'std' namespace.  */
3607   if (name[0] != '_')
3608     {
3609       tree decl2 = copy_node(decl);
3610       push_namespace (std_identifier);
3611       builtin_function_1 (decl2, std_node, false);
3612       pop_namespace ();
3613     }
3614
3615   return builtin_function_1 (decl, NULL_TREE, false);
3616 }
3617
3618 /* Like cxx_builtin_function, but guarantee the function is added to the global
3619    scope.  This is to allow function specific options to add new machine
3620    dependent builtins when the target ISA changes via attribute((target(...)))
3621    which saves space on program startup if the program does not use non-generic
3622    ISAs.  */
3623
3624 tree
3625 cxx_builtin_function_ext_scope (tree decl)
3626 {
3627
3628   tree          id = DECL_NAME (decl);
3629   const char *name = IDENTIFIER_POINTER (id);
3630   /* All builtins that don't begin with an '_' should additionally
3631      go in the 'std' namespace.  */
3632   if (name[0] != '_')
3633     {
3634       tree decl2 = copy_node(decl);
3635       push_namespace (std_identifier);
3636       builtin_function_1 (decl2, std_node, true);
3637       pop_namespace ();
3638     }
3639
3640   return builtin_function_1 (decl, NULL_TREE, true);
3641 }
3642
3643 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3644    function.  Not called directly.  */
3645
3646 static tree
3647 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3648 {
3649   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3650   DECL_EXTERNAL (fn) = 1;
3651   TREE_PUBLIC (fn) = 1;
3652   DECL_ARTIFICIAL (fn) = 1;
3653   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3654   SET_DECL_LANGUAGE (fn, lang_c);
3655   /* Runtime library routines are, by definition, available in an
3656      external shared object.  */
3657   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3658   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3659   return fn;
3660 }
3661
3662 /* Returns the _DECL for a library function with C linkage.
3663    We assume that such functions never throw; if this is incorrect,
3664    callers should unset TREE_NOTHROW.  */
3665
3666 static tree
3667 build_library_fn (tree name, tree type)
3668 {
3669   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3670   TREE_NOTHROW (fn) = 1;
3671   return fn;
3672 }
3673
3674 /* Returns the _DECL for a library function with C++ linkage.  */
3675
3676 static tree
3677 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3678 {
3679   tree fn = build_library_fn_1 (name, operator_code, type);
3680   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3681   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3682   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3683   return fn;
3684 }
3685
3686 /* Like build_library_fn, but takes a C string instead of an
3687    IDENTIFIER_NODE.  */
3688
3689 tree
3690 build_library_fn_ptr (const char* name, tree type)
3691 {
3692   return build_library_fn (get_identifier (name), type);
3693 }
3694
3695 /* Like build_cp_library_fn, but takes a C string instead of an
3696    IDENTIFIER_NODE.  */
3697
3698 tree
3699 build_cp_library_fn_ptr (const char* name, tree type)
3700 {
3701   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3702 }
3703
3704 /* Like build_library_fn, but also pushes the function so that we will
3705    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3706    may throw exceptions listed in RAISES.  */
3707
3708 tree
3709 push_library_fn (tree name, tree type, tree raises)
3710 {
3711   tree fn;
3712
3713   if (raises)
3714     type = build_exception_variant (type, raises);
3715
3716   fn = build_library_fn (name, type);
3717   pushdecl_top_level (fn);
3718   return fn;
3719 }
3720
3721 /* Like build_cp_library_fn, but also pushes the function so that it
3722    will be found by normal lookup.  */
3723
3724 static tree
3725 push_cp_library_fn (enum tree_code operator_code, tree type)
3726 {
3727   tree fn = build_cp_library_fn (ansi_opname (operator_code),
3728                                  operator_code,
3729                                  type);
3730   pushdecl (fn);
3731   return fn;
3732 }
3733
3734 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3735    a FUNCTION_TYPE.  */
3736
3737 tree
3738 push_void_library_fn (tree name, tree parmtypes)
3739 {
3740   tree type = build_function_type (void_type_node, parmtypes);
3741   return push_library_fn (name, type, NULL_TREE);
3742 }
3743
3744 /* Like push_library_fn, but also note that this function throws
3745    and does not return.  Used for __throw_foo and the like.  */
3746
3747 tree
3748 push_throw_library_fn (tree name, tree type)
3749 {
3750   tree fn = push_library_fn (name, type, NULL_TREE);
3751   TREE_THIS_VOLATILE (fn) = 1;
3752   TREE_NOTHROW (fn) = 0;
3753   return fn;
3754 }
3755 \f
3756 /* When we call finish_struct for an anonymous union, we create
3757    default copy constructors and such.  But, an anonymous union
3758    shouldn't have such things; this function undoes the damage to the
3759    anonymous union type T.
3760
3761    (The reason that we create the synthesized methods is that we don't
3762    distinguish `union { int i; }' from `typedef union { int i; } U'.
3763    The first is an anonymous union; the second is just an ordinary
3764    union type.)  */
3765
3766 void
3767 fixup_anonymous_aggr (tree t)
3768 {
3769   tree *q;
3770
3771   /* Wipe out memory of synthesized methods.  */
3772   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3773   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3774   TYPE_HAS_INIT_REF (t) = 0;
3775   TYPE_HAS_CONST_INIT_REF (t) = 0;
3776   TYPE_HAS_ASSIGN_REF (t) = 0;
3777   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3778
3779   /* Splice the implicitly generated functions out of the TYPE_METHODS
3780      list.  */
3781   q = &TYPE_METHODS (t);
3782   while (*q)
3783     {
3784       if (DECL_ARTIFICIAL (*q))
3785         *q = TREE_CHAIN (*q);
3786       else
3787         q = &TREE_CHAIN (*q);
3788     }
3789
3790   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
3791   if (TYPE_METHODS (t))
3792     {
3793       tree decl = TYPE_MAIN_DECL (t);
3794
3795       if (TREE_CODE (t) != UNION_TYPE)
3796         error ("%Jan anonymous struct cannot have function members", decl);
3797       else
3798         error ("%Jan anonymous union cannot have function members", decl);
3799     }
3800
3801   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3802      assignment operators (because they cannot have these methods themselves).
3803      For anonymous unions this is already checked because they are not allowed
3804      in any union, otherwise we have to check it.  */
3805   if (TREE_CODE (t) != UNION_TYPE)
3806     {
3807       tree field, type;
3808
3809       for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3810         if (TREE_CODE (field) == FIELD_DECL)
3811           {
3812             type = TREE_TYPE (field);
3813             if (CLASS_TYPE_P (type))
3814               {
3815                 if (TYPE_NEEDS_CONSTRUCTING (type))
3816                   error ("member %q+#D with constructor not allowed "
3817                          "in anonymous aggregate", field);
3818                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3819                   error ("member %q+#D with destructor not allowed "
3820                          "in anonymous aggregate", field);
3821                 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3822                   error ("member %q+#D with copy assignment operator "
3823                          "not allowed in anonymous aggregate", field);
3824               }
3825           }
3826     }
3827 }
3828
3829 /* Make sure that a declaration with no declarator is well-formed, i.e.
3830    just declares a tagged type or anonymous union.
3831
3832    Returns the type declared; or NULL_TREE if none.  */
3833
3834 tree
3835 check_tag_decl (cp_decl_specifier_seq *declspecs)
3836 {
3837   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3838   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3839   /* If a class, struct, or enum type is declared by the DECLSPECS
3840      (i.e, if a class-specifier, enum-specifier, or non-typename
3841      elaborated-type-specifier appears in the DECLSPECS),
3842      DECLARED_TYPE is set to the corresponding type.  */
3843   tree declared_type = NULL_TREE;
3844   bool error_p = false;
3845
3846   if (declspecs->multiple_types_p)
3847     error ("multiple types in one declaration");
3848   else if (declspecs->redefined_builtin_type)
3849     {
3850       if (!in_system_header)
3851         permerror (input_location, "redeclaration of C++ built-in type %qT",
3852                    declspecs->redefined_builtin_type);
3853       return NULL_TREE;
3854     }
3855
3856   if (declspecs->type
3857       && TYPE_P (declspecs->type)
3858       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3859            && MAYBE_CLASS_TYPE_P (declspecs->type))
3860           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3861     declared_type = declspecs->type;
3862   else if (declspecs->type == error_mark_node)
3863     error_p = true;
3864   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3865     permerror (input_location, "declaration does not declare anything");
3866   /* Check for an anonymous union.  */
3867   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
3868            && TYPE_ANONYMOUS_P (declared_type))
3869     {
3870       /* 7/3 In a simple-declaration, the optional init-declarator-list
3871          can be omitted only when declaring a class (clause 9) or
3872          enumeration (7.2), that is, when the decl-specifier-seq contains
3873          either a class-specifier, an elaborated-type-specifier with
3874          a class-key (9.1), or an enum-specifier.  In these cases and
3875          whenever a class-specifier or enum-specifier is present in the
3876          decl-specifier-seq, the identifiers in these specifiers are among
3877          the names being declared by the declaration (as class-name,
3878          enum-names, or enumerators, depending on the syntax).  In such
3879          cases, and except for the declaration of an unnamed bit-field (9.6),
3880          the decl-specifier-seq shall introduce one or more names into the
3881          program, or shall redeclare a name introduced by a previous
3882          declaration.  [Example:
3883              enum { };                  // ill-formed
3884              typedef class { };         // ill-formed
3885          --end example]  */
3886       if (saw_typedef)
3887         {
3888           error ("missing type-name in typedef-declaration");
3889           return NULL_TREE;
3890         }
3891       /* Anonymous unions are objects, so they can have specifiers.  */;
3892       SET_ANON_AGGR_TYPE_P (declared_type);
3893
3894       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
3895         pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
3896     }
3897
3898   else
3899     {
3900       if (declspecs->specs[(int)ds_inline]
3901           || declspecs->specs[(int)ds_virtual])
3902         error ("%qs can only be specified for functions",
3903                declspecs->specs[(int)ds_inline]
3904                ? "inline" : "virtual");
3905       else if (saw_friend
3906                && (!current_class_type
3907                    || current_scope () != current_class_type))
3908         error ("%<friend%> can only be specified inside a class");
3909       else if (declspecs->specs[(int)ds_explicit])
3910         error ("%<explicit%> can only be specified for constructors");
3911       else if (declspecs->storage_class)
3912         error ("a storage class can only be specified for objects "
3913                "and functions");
3914       else if (declspecs->specs[(int)ds_const]
3915                || declspecs->specs[(int)ds_volatile]
3916                || declspecs->specs[(int)ds_restrict]
3917                || declspecs->specs[(int)ds_thread])
3918         error ("qualifiers can only be specified for objects "
3919                "and functions");
3920       else if (saw_typedef)
3921         warning (0, "%<typedef%> was ignored in this declaration");
3922     }
3923
3924   return declared_type;
3925 }
3926
3927 /* Called when a declaration is seen that contains no names to declare.
3928    If its type is a reference to a structure, union or enum inherited
3929    from a containing scope, shadow that tag name for the current scope
3930    with a forward reference.
3931    If its type defines a new named structure or union
3932    or defines an enum, it is valid but we need not do anything here.
3933    Otherwise, it is an error.
3934
3935    C++: may have to grok the declspecs to learn about static,
3936    complain for anonymous unions.
3937
3938    Returns the TYPE declared -- or NULL_TREE if none.  */
3939
3940 tree
3941 shadow_tag (cp_decl_specifier_seq *declspecs)
3942 {
3943   tree t = check_tag_decl (declspecs);
3944
3945   if (!t)
3946     return NULL_TREE;
3947
3948   if (declspecs->attributes)
3949     {
3950       warning (0, "attribute ignored in declaration of %q+#T", t);
3951       warning (0, "attribute for %q+#T must follow the %qs keyword",
3952                t, class_key_or_enum_as_string (t));
3953
3954     }
3955
3956   if (maybe_process_partial_specialization (t) == error_mark_node)
3957     return NULL_TREE;
3958
3959   /* This is where the variables in an anonymous union are
3960      declared.  An anonymous union declaration looks like:
3961      union { ... } ;
3962      because there is no declarator after the union, the parser
3963      sends that declaration here.  */
3964   if (ANON_AGGR_TYPE_P (t))
3965     {
3966       fixup_anonymous_aggr (t);
3967
3968       if (TYPE_FIELDS (t))
3969         {
3970           tree decl = grokdeclarator (/*declarator=*/NULL,
3971                                       declspecs, NORMAL, 0, NULL);
3972           finish_anon_union (decl);
3973         }
3974     }
3975
3976   return t;
3977 }
3978 \f
3979 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
3980
3981 tree
3982 groktypename (cp_decl_specifier_seq *type_specifiers,
3983               const cp_declarator *declarator,
3984               bool is_template_arg)
3985 {
3986   tree attrs;
3987   tree type;
3988   enum decl_context context
3989     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
3990   attrs = type_specifiers->attributes;
3991   type_specifiers->attributes = NULL_TREE;
3992   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
3993   if (attrs && type != error_mark_node)
3994     {
3995       if (CLASS_TYPE_P (type))
3996         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
3997                  "outside of definition", type);
3998       else if (MAYBE_CLASS_TYPE_P (type))
3999         /* A template type parameter or other dependent type.  */
4000         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4001                  "type %qT without an associated declaration", type);
4002       else
4003         cplus_decl_attributes (&type, attrs, 0);
4004     }
4005   return type;
4006 }
4007
4008 /* Process a DECLARATOR for a function-scope variable declaration,
4009    namespace-scope variable declaration, or function declaration.
4010    (Function definitions go through start_function; class member
4011    declarations appearing in the body of the class go through
4012    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4013    If an error occurs, the error_mark_node is returned instead.
4014    
4015    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4016    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4017    for an explicitly defaulted function, or SD_DELETED for an explicitly
4018    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4019    implicitly initialized via a default constructor.  ATTRIBUTES and
4020    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4021    *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4022    set, the caller is responsible for calling pop_scope.  */
4023
4024 tree
4025 start_decl (const cp_declarator *declarator,
4026             cp_decl_specifier_seq *declspecs,
4027             int initialized,
4028             tree attributes,
4029             tree prefix_attributes,
4030             tree *pushed_scope_p)
4031 {
4032   tree decl;
4033   tree type;
4034   tree context;
4035   bool was_public;
4036   int flags;
4037
4038   *pushed_scope_p = NULL_TREE;
4039
4040   /* An object declared as __attribute__((deprecated)) suppresses
4041      warnings of uses of other deprecated items.  */
4042   if (lookup_attribute ("deprecated", attributes))
4043     deprecated_state = DEPRECATED_SUPPRESS;
4044
4045   attributes = chainon (attributes, prefix_attributes);
4046
4047   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4048                          &attributes);
4049
4050   deprecated_state = DEPRECATED_NORMAL;
4051
4052   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4053       || decl == error_mark_node)
4054     return error_mark_node;
4055
4056   type = TREE_TYPE (decl);
4057
4058   context = DECL_CONTEXT (decl);
4059
4060   if (context)
4061     {
4062       *pushed_scope_p = push_scope (context);
4063
4064       /* We are only interested in class contexts, later.  */
4065       if (TREE_CODE (context) == NAMESPACE_DECL)
4066         context = NULL_TREE;
4067     }
4068
4069   if (initialized)
4070     /* Is it valid for this decl to have an initializer at all?
4071        If not, set INITIALIZED to zero, which will indirectly
4072        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4073     switch (TREE_CODE (decl))
4074       {
4075       case TYPE_DECL:
4076         error ("typedef %qD is initialized (use decltype instead)", decl);
4077         return error_mark_node;
4078
4079       case FUNCTION_DECL:
4080         if (initialized == SD_DELETED)
4081           /* We'll handle the rest of the semantics later, but we need to
4082              set this now so it's visible to duplicate_decls.  */
4083           DECL_DELETED_FN (decl) = 1;
4084         break;
4085
4086       default:
4087         break;
4088       }
4089
4090   if (initialized)
4091     {
4092       if (! toplevel_bindings_p ()
4093           && DECL_EXTERNAL (decl))
4094         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4095                  decl);
4096       DECL_EXTERNAL (decl) = 0;
4097       if (toplevel_bindings_p ())
4098         TREE_STATIC (decl) = 1;
4099     }
4100
4101   /* If this is a typedef that names the class for linkage purposes
4102      (7.1.3p8), apply any attributes directly to the type.  */
4103   if (TREE_CODE (decl) == TYPE_DECL
4104       && TAGGED_TYPE_P (TREE_TYPE (decl))
4105       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4106     flags = ATTR_FLAG_TYPE_IN_PLACE;
4107   else
4108     flags = 0;
4109
4110   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4111   cplus_decl_attributes (&decl, attributes, flags);
4112
4113   /* Dllimported symbols cannot be defined.  Static data members (which
4114      can be initialized in-class and dllimported) go through grokfield,
4115      not here, so we don't need to exclude those decls when checking for
4116      a definition.  */
4117   if (initialized && DECL_DLLIMPORT_P (decl))
4118     {
4119       error ("definition of %q#D is marked %<dllimport%>", decl);
4120       DECL_DLLIMPORT_P (decl) = 0;
4121     }
4122
4123   /* If #pragma weak was used, mark the decl weak now.  */
4124   maybe_apply_pragma_weak (decl);
4125
4126   if (TREE_CODE (decl) == FUNCTION_DECL
4127       && DECL_DECLARED_INLINE_P (decl)
4128       && DECL_UNINLINABLE (decl)
4129       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4130     warning (0, "inline function %q+D given attribute noinline", decl);
4131
4132   if (context && COMPLETE_TYPE_P (complete_type (context)))
4133     {
4134       if (TREE_CODE (decl) == VAR_DECL)
4135         {
4136           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4137           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4138             error ("%q#D is not a static member of %q#T", decl, context);
4139           else
4140             {
4141               if (DECL_CONTEXT (field) != context)
4142                 {
4143                   if (!same_type_p (DECL_CONTEXT (field), context))
4144                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4145                                "to be defined as %<%T::%D%>",
4146                                DECL_CONTEXT (field), DECL_NAME (decl),
4147                                context, DECL_NAME (decl));
4148                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4149                 }
4150               if (processing_specialization
4151                   && template_class_depth (context) == 0
4152                   && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4153                 error ("template header not allowed in member definition "
4154                        "of explicitly specialized class");
4155               /* Static data member are tricky; an in-class initialization
4156                  still doesn't provide a definition, so the in-class
4157                  declaration will have DECL_EXTERNAL set, but will have an
4158                  initialization.  Thus, duplicate_decls won't warn
4159                  about this situation, and so we check here.  */
4160               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4161                 error ("duplicate initialization of %qD", decl);
4162               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4163                 decl = field;
4164             }
4165         }
4166       else
4167         {
4168           tree field = check_classfn (context, decl,
4169                                       (processing_template_decl
4170                                        > template_class_depth (context))
4171                                       ? current_template_parms
4172                                       : NULL_TREE);
4173           if (field && field != error_mark_node
4174               && duplicate_decls (decl, field,
4175                                  /*newdecl_is_friend=*/false))
4176             decl = field;
4177         }
4178
4179       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4180       DECL_IN_AGGR_P (decl) = 0;
4181       /* Do not mark DECL as an explicit specialization if it was not
4182          already marked as an instantiation; a declaration should
4183          never be marked as a specialization unless we know what
4184          template is being specialized.  */
4185       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4186         {
4187           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4188
4189           /* [temp.expl.spec] An explicit specialization of a static data
4190              member of a template is a definition if the declaration
4191              includes an initializer; otherwise, it is a declaration.
4192
4193              We check for processing_specialization so this only applies
4194              to the new specialization syntax.  */
4195           if (!initialized && processing_specialization)
4196             DECL_EXTERNAL (decl) = 1;
4197         }
4198
4199       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
4200         permerror (input_location, "declaration of %q#D outside of class is not definition",
4201                    decl);
4202     }
4203
4204   was_public = TREE_PUBLIC (decl);
4205
4206   /* Enter this declaration into the symbol table.  */
4207   decl = maybe_push_decl (decl);
4208
4209   if (processing_template_decl)
4210     decl = push_template_decl (decl);
4211   if (decl == error_mark_node)
4212     return error_mark_node;
4213
4214   /* Tell the back end to use or not use .common as appropriate.  If we say
4215      -fconserve-space, we want this to save .data space, at the expense of
4216      wrong semantics.  If we say -fno-conserve-space, we want this to
4217      produce errors about redefs; to do this we force variables into the
4218      data segment.  */
4219   if (flag_conserve_space
4220       && TREE_CODE (decl) == VAR_DECL
4221       && TREE_PUBLIC (decl)
4222       && !DECL_THREAD_LOCAL_P (decl)
4223       && !have_global_bss_p ())
4224     DECL_COMMON (decl) = 1;
4225
4226   if (TREE_CODE (decl) == VAR_DECL
4227       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4228       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4229     {
4230       /* This is a const variable with implicit 'static'.  Set
4231          DECL_THIS_STATIC so we can tell it from variables that are
4232          !TREE_PUBLIC because of the anonymous namespace.  */
4233       gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4234       DECL_THIS_STATIC (decl) = 1;
4235     }
4236
4237   if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4238     start_decl_1 (decl, initialized);
4239
4240   return decl;
4241 }
4242
4243 /* Process the declaration of a variable DECL.  INITIALIZED is true
4244    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4245    variable is initialized via an implicitly-called constructor.)
4246    This function must be called for ordinary variables (including, for
4247    example, implicit instantiations of templates), but must not be
4248    called for template declarations.  */
4249
4250 void
4251 start_decl_1 (tree decl, bool initialized)
4252 {
4253   tree type;
4254   bool complete_p;
4255   bool aggregate_definition_p;
4256
4257   gcc_assert (!processing_template_decl);
4258
4259   if (error_operand_p (decl))
4260     return;
4261
4262   gcc_assert (TREE_CODE (decl) == VAR_DECL);
4263
4264   type = TREE_TYPE (decl);
4265   complete_p = COMPLETE_TYPE_P (type);
4266   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4267
4268   /* If an explicit initializer is present, or if this is a definition
4269      of an aggregate, then we need a complete type at this point.
4270      (Scalars are always complete types, so there is nothing to
4271      check.)  This code just sets COMPLETE_P; errors (if necessary)
4272      are issued below.  */
4273   if ((initialized || aggregate_definition_p) 
4274       && !complete_p
4275       && COMPLETE_TYPE_P (complete_type (type)))
4276     {
4277       complete_p = true;
4278       /* We will not yet have set TREE_READONLY on DECL if the type
4279          was "const", but incomplete, before this point.  But, now, we
4280          have a complete type, so we can try again.  */
4281       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4282     }
4283
4284   if (initialized)
4285     /* Is it valid for this decl to have an initializer at all?  */
4286     {
4287       /* Don't allow initializations for incomplete types except for
4288          arrays which might be completed by the initialization.  */
4289       if (complete_p)
4290         ;                       /* A complete type is ok.  */
4291       else if (type_uses_auto (type))
4292         ;                       /* An auto type is ok.  */
4293       else if (TREE_CODE (type) != ARRAY_TYPE)
4294         {
4295           error ("variable %q#D has initializer but incomplete type", decl);
4296           type = TREE_TYPE (decl) = error_mark_node;
4297         }
4298       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4299         {
4300           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4301             error ("elements of array %q#D have incomplete type", decl);
4302           /* else we already gave an error in start_decl.  */
4303         }
4304     }
4305   else if (aggregate_definition_p && !complete_p)
4306     {
4307       if (type_uses_auto (type))
4308         error ("declaration of %q#D has no initializer", decl);
4309       else
4310         error ("aggregate %q#D has incomplete type and cannot be defined",
4311                decl);
4312       /* Change the type so that assemble_variable will give
4313          DECL an rtl we can live with: (mem (const_int 0)).  */
4314       type = TREE_TYPE (decl) = error_mark_node;
4315     }
4316
4317   /* Create a new scope to hold this declaration if necessary.
4318      Whether or not a new scope is necessary cannot be determined
4319      until after the type has been completed; if the type is a
4320      specialization of a class template it is not until after
4321      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4322      will be set correctly.  */
4323   maybe_push_cleanup_level (type);
4324 }
4325
4326 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4327    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4328    but will be set to a new CLEANUP_STMT if a temporary is created
4329    that must be destroyed subsequently.
4330
4331    Returns an initializer expression to use to initialize DECL, or
4332    NULL if the initialization can be performed statically.
4333
4334    Quotes on semantics can be found in ARM 8.4.3.  */
4335
4336 static tree
4337 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4338 {
4339   tree tmp;
4340
4341   if (init == NULL_TREE)
4342     {
4343       if ((DECL_LANG_SPECIFIC (decl) == 0
4344            || DECL_IN_AGGR_P (decl) == 0)
4345           && ! DECL_THIS_EXTERN (decl))
4346         error ("%qD declared as reference but not initialized", decl);
4347       return NULL_TREE;
4348     }
4349
4350   if (TREE_CODE (init) == TREE_LIST)
4351     init = build_x_compound_expr_from_list (init, "initializer");
4352
4353   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4354       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4355     /* Note: default conversion is only called in very special cases.  */
4356     init = decay_conversion (init);
4357
4358   /* Convert INIT to the reference type TYPE.  This may involve the
4359      creation of a temporary, whose lifetime must be the same as that
4360      of the reference.  If so, a DECL_EXPR for the temporary will be
4361      added just after the DECL_EXPR for DECL.  That's why we don't set
4362      DECL_INITIAL for local references (instead assigning to them
4363      explicitly); we need to allow the temporary to be initialized
4364      first.  */
4365   tmp = initialize_reference (type, init, decl, cleanup);
4366
4367   if (tmp == error_mark_node)
4368     return NULL_TREE;
4369   else if (tmp == NULL_TREE)
4370     {
4371       error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4372       return NULL_TREE;
4373     }
4374
4375   if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4376     return tmp;
4377
4378   DECL_INITIAL (decl) = tmp;
4379
4380   return NULL_TREE;
4381 }
4382
4383 /* Subroutine of check_initializer.  We're initializing a DECL of
4384    std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4385    extend the lifetime of the underlying array to match that of the decl,
4386    just like for reference initialization.  CLEANUP is as for
4387    grok_reference_init.  */
4388
4389 static tree
4390 build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4391 {
4392   tree aggr_init, array, arrtype;
4393   init = perform_implicit_conversion (type, init, tf_warning_or_error);
4394   aggr_init = TARGET_EXPR_INITIAL (init);
4395   init = build2 (INIT_EXPR, type, decl, init);
4396
4397   array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4398   arrtype = TREE_TYPE (array);
4399   STRIP_NOPS (array);
4400   gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4401   array = TREE_OPERAND (array, 0);
4402   /* If the array is constant, finish_compound_literal already made it a
4403      static variable and we don't need to do anything here.  */
4404   if (decl && TREE_CODE (array) == TARGET_EXPR)
4405     {
4406       tree subinit;
4407       tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4408       var = build_address (var);
4409       var = convert (arrtype, var);
4410       AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4411       init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4412     }
4413   return init;
4414 }
4415
4416 /* Designated initializers in arrays are not supported in GNU C++.
4417    The parser cannot detect this error since it does not know whether
4418    a given brace-enclosed initializer is for a class type or for an
4419    array.  This function checks that CE does not use a designated
4420    initializer.  If it does, an error is issued.  Returns true if CE
4421    is valid, i.e., does not have a designated initializer.  */
4422
4423 static bool
4424 check_array_designated_initializer (const constructor_elt *ce)
4425 {
4426   /* Designated initializers for array elements are not supported.  */
4427   if (ce->index)
4428     {
4429       /* The parser only allows identifiers as designated
4430          initializers.  */
4431       if (ce->index == error_mark_node)
4432         error ("name used in a GNU-style designated "
4433                "initializer for an array");
4434       else
4435         {
4436           gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4437           error ("name %qD used in a GNU-style designated "
4438                  "initializer for an array", ce->index);
4439         }
4440       return false;
4441     }
4442
4443   return true;
4444 }
4445
4446 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4447    array until we finish parsing the initializer.  If that's the
4448    situation we're in, update DECL accordingly.  */
4449
4450 static void
4451 maybe_deduce_size_from_array_init (tree decl, tree init)
4452 {
4453   tree type = TREE_TYPE (decl);
4454
4455   if (TREE_CODE (type) == ARRAY_TYPE
4456       && TYPE_DOMAIN (type) == NULL_TREE
4457       && TREE_CODE (decl) != TYPE_DECL)
4458     {
4459       /* do_default is really a C-ism to deal with tentative definitions.
4460          But let's leave it here to ease the eventual merge.  */
4461       int do_default = !DECL_EXTERNAL (decl);
4462       tree initializer = init ? init : DECL_INITIAL (decl);
4463       int failure = 0;
4464
4465       /* Check that there are no designated initializers in INIT, as
4466          those are not supported in GNU C++, and as the middle-end
4467          will crash if presented with a non-numeric designated
4468          initializer.  */
4469       if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4470         {
4471           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4472           constructor_elt *ce;
4473           HOST_WIDE_INT i;
4474           for (i = 0; 
4475                VEC_iterate (constructor_elt, v, i, ce);
4476                ++i) 
4477             if (!check_array_designated_initializer (ce))
4478               failure = 1;
4479         }
4480
4481       if (!failure)
4482         {
4483           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4484                                             do_default);
4485           if (failure == 1)
4486             {
4487               error ("initializer fails to determine size of %qD", decl);
4488               TREE_TYPE (decl) = error_mark_node;
4489             }
4490           else if (failure == 2)
4491             {
4492               if (do_default)
4493                 {
4494                   error ("array size missing in %qD", decl);
4495                   TREE_TYPE (decl) = error_mark_node;
4496                 }
4497               /* If a `static' var's size isn't known, make it extern as
4498                  well as static, so it does not get allocated.  If it's not
4499                  `static', then don't mark it extern; finish_incomplete_decl
4500                  will give it a default size and it will get allocated.  */
4501               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4502                 DECL_EXTERNAL (decl) = 1;
4503             }
4504           else if (failure == 3)
4505             {
4506               error ("zero-size array %qD", decl);
4507               TREE_TYPE (decl) = error_mark_node;
4508             }
4509         }
4510
4511       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4512
4513       layout_decl (decl, 0);
4514     }
4515 }
4516
4517 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4518    any appropriate error messages regarding the layout.  */
4519
4520 static void
4521 layout_var_decl (tree decl)
4522 {
4523   tree type;
4524
4525   type = TREE_TYPE (decl);
4526   if (type == error_mark_node)
4527     return;
4528
4529   /* If we haven't already layed out this declaration, do so now.
4530      Note that we must not call complete type for an external object
4531      because it's type might involve templates that we are not
4532      supposed to instantiate yet.  (And it's perfectly valid to say
4533      `extern X x' for some incomplete type `X'.)  */
4534   if (!DECL_EXTERNAL (decl))
4535     complete_type (type);
4536   if (!DECL_SIZE (decl)
4537       && TREE_TYPE (decl) != error_mark_node
4538       && (COMPLETE_TYPE_P (type)
4539           || (TREE_CODE (type) == ARRAY_TYPE
4540               && !TYPE_DOMAIN (type)
4541               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4542     layout_decl (decl, 0);
4543
4544   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4545     {
4546       /* An automatic variable with an incomplete type: that is an error.
4547          Don't talk about array types here, since we took care of that
4548          message in grokdeclarator.  */
4549       error ("storage size of %qD isn't known", decl);
4550       TREE_TYPE (decl) = error_mark_node;
4551     }
4552 #if 0
4553   /* Keep this code around in case we later want to control debug info
4554      based on whether a type is "used".  (jason 1999-11-11) */
4555
4556   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4557     /* Let debugger know it should output info for this type.  */
4558     note_debug_info_needed (ttype);
4559
4560   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4561     note_debug_info_needed (DECL_CONTEXT (decl));
4562 #endif
4563
4564   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4565       && DECL_SIZE (decl) != NULL_TREE
4566       && ! TREE_CONSTANT (DECL_SIZE (decl)))
4567     {
4568       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4569         constant_expression_warning (DECL_SIZE (decl));
4570       else
4571         {
4572           error ("storage size of %qD isn't constant", decl);
4573           TREE_TYPE (decl) = error_mark_node;
4574         }
4575     }
4576 }
4577
4578 /* If a local static variable is declared in an inline function, or if
4579    we have a weak definition, we must endeavor to create only one
4580    instance of the variable at link-time.  */
4581
4582 void
4583 maybe_commonize_var (tree decl)
4584 {
4585   /* Static data in a function with comdat linkage also has comdat
4586      linkage.  */
4587   if (TREE_STATIC (decl)
4588       /* Don't mess with __FUNCTION__.  */
4589       && ! DECL_ARTIFICIAL (decl)
4590       && DECL_FUNCTION_SCOPE_P (decl)
4591       /* Unfortunately, import_export_decl has not always been called
4592          before the function is processed, so we cannot simply check
4593          DECL_COMDAT.  */
4594       && (DECL_COMDAT (DECL_CONTEXT (decl))
4595           || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4596                || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4597               && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4598     {
4599       if (flag_weak)
4600         {
4601           /* With weak symbols, we simply make the variable COMDAT;
4602              that will cause copies in multiple translations units to
4603              be merged.  */
4604           comdat_linkage (decl);
4605         }
4606       else
4607         {
4608           if (DECL_INITIAL (decl) == NULL_TREE
4609               || DECL_INITIAL (decl) == error_mark_node)
4610             {
4611               /* Without weak symbols, we can use COMMON to merge
4612                  uninitialized variables.  */
4613               TREE_PUBLIC (decl) = 1;
4614               DECL_COMMON (decl) = 1;
4615             }
4616           else
4617             {
4618               /* While for initialized variables, we must use internal
4619                  linkage -- which means that multiple copies will not
4620                  be merged.  */
4621               TREE_PUBLIC (decl) = 0;
4622               DECL_COMMON (decl) = 0;
4623               warning (0, "sorry: semantics of inline function static "
4624                        "data %q+#D are wrong (you'll wind up "
4625                        "with multiple copies)", decl);
4626               warning (0, "%J  you can work around this by removing "
4627                        "the initializer",
4628                        decl);
4629             }
4630         }
4631     }
4632   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4633     /* Set it up again; we might have set DECL_INITIAL since the last
4634        time.  */
4635     comdat_linkage (decl);
4636 }
4637
4638 /* Issue an error message if DECL is an uninitialized const variable.  */
4639
4640 static void
4641 check_for_uninitialized_const_var (tree decl)
4642 {
4643   tree type = TREE_TYPE (decl);
4644
4645   /* ``Unless explicitly declared extern, a const object does not have
4646      external linkage and must be initialized. ($8.4; $12.1)'' ARM
4647      7.1.6 */
4648   if (TREE_CODE (decl) == VAR_DECL
4649       && TREE_CODE (type) != REFERENCE_TYPE
4650       && CP_TYPE_CONST_P (type)
4651       && !TYPE_NEEDS_CONSTRUCTING (type)
4652       && !DECL_INITIAL (decl))
4653     error ("uninitialized const %qD", decl);
4654 }
4655
4656 \f
4657 /* Structure holding the current initializer being processed by reshape_init.
4658    CUR is a pointer to the current element being processed, END is a pointer
4659    after the last element present in the initializer.  */
4660 typedef struct reshape_iterator_t
4661 {
4662   constructor_elt *cur;
4663   constructor_elt *end;
4664 } reshape_iter;
4665
4666 static tree reshape_init_r (tree, reshape_iter *, bool);
4667
4668 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4669    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4670    initialized.  If there are no more such fields, the return value
4671    will be NULL.  */
4672
4673 static tree
4674 next_initializable_field (tree field)
4675 {
4676   while (field
4677          && (TREE_CODE (field) != FIELD_DECL
4678              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4679              || DECL_ARTIFICIAL (field)))
4680     field = TREE_CHAIN (field);
4681
4682   return field;
4683 }
4684
4685 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4686    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4687    INTEGER_CST representing the size of the array minus one (the maximum index),
4688    or NULL_TREE if the array was declared without specifying the size. D is
4689    the iterator within the constructor.  */
4690
4691 static tree
4692 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4693 {
4694   tree new_init;
4695   bool sized_array_p = (max_index != NULL_TREE);
4696   unsigned HOST_WIDE_INT max_index_cst = 0;
4697   unsigned HOST_WIDE_INT index;
4698
4699   /* The initializer for an array is always a CONSTRUCTOR.  */
4700   new_init = build_constructor (init_list_type_node, NULL);
4701
4702   if (sized_array_p)
4703     {
4704       /* Minus 1 is used for zero sized arrays.  */
4705       if (integer_all_onesp (max_index))
4706         return new_init;
4707
4708       if (host_integerp (max_index, 1))
4709         max_index_cst = tree_low_cst (max_index, 1);
4710       /* sizetype is sign extended, not zero extended.  */
4711       else
4712         max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4713                                       1);
4714     }
4715
4716   /* Loop until there are no more initializers.  */
4717   for (index = 0;
4718        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4719        ++index)
4720     {
4721       tree elt_init;
4722
4723       check_array_designated_initializer (d->cur);
4724       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4725       if (elt_init == error_mark_node)
4726         return error_mark_node;
4727       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4728     }
4729
4730   return new_init;
4731 }
4732
4733 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4734    Parameters are the same of reshape_init_r.  */
4735
4736 static tree
4737 reshape_init_array (tree type, reshape_iter *d)
4738 {
4739   tree max_index = NULL_TREE;
4740
4741   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4742
4743   if (TYPE_DOMAIN (type))
4744     max_index = array_type_nelts (type);
4745
4746   return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4747 }
4748
4749 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4750    Parameters are the same of reshape_init_r.  */
4751
4752 static tree
4753 reshape_init_vector (tree type, reshape_iter *d)
4754 {
4755   tree max_index = NULL_TREE;
4756   tree rtype;
4757
4758   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4759
4760   if (COMPOUND_LITERAL_P (d->cur->value))
4761     {
4762       tree value = d->cur->value;
4763       if (!same_type_p (TREE_TYPE (value), type))
4764         {
4765           error ("invalid type %qT as initializer for a vector of type %qT",
4766                 TREE_TYPE (d->cur->value), type);
4767           value = error_mark_node;
4768         }
4769       ++d->cur;
4770       return value;
4771     }
4772
4773   /* For a vector, the representation type is a struct
4774       containing a single member which is an array of the
4775       appropriate size.  */
4776   rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4777   if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4778     max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4779
4780   return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4781 }
4782
4783 /* Subroutine of reshape_init_r, processes the initializers for classes
4784    or union. Parameters are the same of reshape_init_r.  */
4785
4786 static tree
4787 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4788 {
4789   tree field;
4790   tree new_init;
4791
4792   gcc_assert (CLASS_TYPE_P (type));
4793
4794   /* The initializer for a class is always a CONSTRUCTOR.  */
4795   new_init = build_constructor (init_list_type_node, NULL);
4796   field = next_initializable_field (TYPE_FIELDS (type));
4797
4798   if (!field)
4799     {
4800       /* [dcl.init.aggr]
4801
4802         An initializer for an aggregate member that is an
4803         empty class shall have the form of an empty
4804         initializer-list {}.  */
4805       if (!first_initializer_p)
4806         {
4807           error ("initializer for %qT must be brace-enclosed", type);
4808           return error_mark_node;
4809         }
4810       return new_init;
4811     }
4812
4813   /* Loop through the initializable fields, gathering initializers.  */
4814   while (d->cur != d->end)
4815     {
4816       tree field_init;
4817
4818       /* Handle designated initializers, as an extension.  */
4819       if (d->cur->index)
4820         {
4821           field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4822
4823           if (!field || TREE_CODE (field) != FIELD_DECL)
4824             {
4825               error ("%qT has no non-static data member named %qD", type,
4826                     d->cur->index);
4827               return error_mark_node;
4828             }
4829         }
4830
4831       /* If we processed all the member of the class, we are done.  */
4832       if (!field)
4833         break;
4834
4835       field_init = reshape_init_r (TREE_TYPE (field), d,
4836                                    /*first_initializer_p=*/false);
4837       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4838
4839       /* [dcl.init.aggr]
4840
4841         When a union  is  initialized with a brace-enclosed
4842         initializer, the braces shall only contain an
4843         initializer for the first member of the union.  */
4844       if (TREE_CODE (type) == UNION_TYPE)
4845         break;
4846
4847       field = next_initializable_field (TREE_CHAIN (field));
4848     }
4849
4850   return new_init;
4851 }
4852
4853 /* Subroutine of reshape_init, which processes a single initializer (part of
4854    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4855    iterator within the CONSTRUCTOR which points to the initializer to process.
4856    FIRST_INITIALIZER_P is true if this is the first initializer of the
4857    CONSTRUCTOR node.  */
4858
4859 static tree
4860 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4861 {
4862   tree init = d->cur->value;
4863
4864   if (error_operand_p (init))
4865     return error_mark_node;
4866
4867   /* A non-aggregate type is always initialized with a single
4868      initializer.  */
4869   if (!CP_AGGREGATE_TYPE_P (type))
4870     {
4871       /* It is invalid to initialize a non-aggregate type with a
4872          brace-enclosed initializer before C++0x.
4873          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4874          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4875          a CONSTRUCTOR (with a record type).  */
4876       if (TREE_CODE (init) == CONSTRUCTOR
4877           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
4878         {
4879           if (SCALAR_TYPE_P (type))
4880             {
4881               error ("braces around scalar initializer for type %qT", type);
4882               init = error_mark_node;
4883             }
4884           else
4885             maybe_warn_cpp0x ("extended initializer lists");
4886         }
4887
4888       d->cur++;
4889       return init;
4890     }
4891
4892   /* [dcl.init.aggr]
4893
4894      All implicit type conversions (clause _conv_) are considered when
4895      initializing the aggregate member with an initializer from an
4896      initializer-list.  If the initializer can initialize a member,
4897      the member is initialized.  Otherwise, if the member is itself a
4898      non-empty subaggregate, brace elision is assumed and the
4899      initializer is considered for the initialization of the first
4900      member of the subaggregate.  */
4901   if (TREE_CODE (init) != CONSTRUCTOR
4902       && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4903     {
4904       d->cur++;
4905       return init;
4906     }
4907
4908   /* [dcl.init.string]
4909
4910       A char array (whether plain char, signed char, or unsigned char)
4911       can be initialized by a string-literal (optionally enclosed in
4912       braces); a wchar_t array can be initialized by a wide
4913       string-literal (optionally enclosed in braces).  */
4914   if (TREE_CODE (type) == ARRAY_TYPE
4915       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4916     {
4917       tree str_init = init;
4918
4919       /* Strip one level of braces if and only if they enclose a single
4920          element (as allowed by [dcl.init.string]).  */
4921       if (!first_initializer_p
4922           && TREE_CODE (str_init) == CONSTRUCTOR
4923           && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4924         {
4925           str_init = VEC_index (constructor_elt,
4926                                 CONSTRUCTOR_ELTS (str_init), 0)->value;
4927         }
4928
4929       /* If it's a string literal, then it's the initializer for the array
4930          as a whole. Otherwise, continue with normal initialization for
4931          array types (one value per array element).  */
4932       if (TREE_CODE (str_init) == STRING_CST)
4933         {
4934           d->cur++;
4935           return str_init;
4936         }
4937     }
4938
4939   /* The following cases are about aggregates. If we are not within a full
4940      initializer already, and there is not a CONSTRUCTOR, it means that there
4941      is a missing set of braces (that is, we are processing the case for
4942      which reshape_init exists).  */
4943   if (!first_initializer_p)
4944     {
4945       if (TREE_CODE (init) == CONSTRUCTOR)
4946         {
4947           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4948             /* There is no need to reshape pointer-to-member function
4949                initializers, as they are always constructed correctly
4950                by the front end.  */
4951            ;
4952           else if (COMPOUND_LITERAL_P (init))
4953           /* For a nested compound literal, there is no need to reshape since
4954              brace elision is not allowed. Even if we decided to allow it,
4955              we should add a call to reshape_init in finish_compound_literal,
4956              before calling digest_init, so changing this code would still
4957              not be necessary.  */
4958             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4959           else
4960             {
4961               ++d->cur;
4962               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4963               return reshape_init (type, init);
4964             }
4965         }
4966
4967       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4968                type);
4969     }
4970
4971   /* Dispatch to specialized routines.  */
4972   if (CLASS_TYPE_P (type))
4973     return reshape_init_class (type, d, first_initializer_p);
4974   else if (TREE_CODE (type) == ARRAY_TYPE)
4975     return reshape_init_array (type, d);
4976   else if (TREE_CODE (type) == VECTOR_TYPE)
4977     return reshape_init_vector (type, d);
4978   else
4979     gcc_unreachable();
4980 }
4981
4982 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4983    brace-enclosed aggregate initializer.
4984
4985    INIT is the CONSTRUCTOR containing the list of initializers describing
4986    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4987    It may not presently match the shape of the TYPE; for example:
4988
4989      struct S { int a; int b; };
4990      struct S a[] = { 1, 2, 3, 4 };
4991
4992    Here INIT will hold a VEC of four elements, rather than a
4993    VEC of two elements, each itself a VEC of two elements.  This
4994    routine transforms INIT from the former form into the latter.  The
4995    revised CONSTRUCTOR node is returned.  */
4996
4997 tree
4998 reshape_init (tree type, tree init)
4999 {
5000   VEC(constructor_elt, gc) *v;
5001   reshape_iter d;
5002   tree new_init;
5003
5004   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5005
5006   v = CONSTRUCTOR_ELTS (init);
5007
5008   /* An empty constructor does not need reshaping, and it is always a valid
5009      initializer.  */
5010   if (VEC_empty (constructor_elt, v))
5011     return init;
5012
5013   /* Recurse on this CONSTRUCTOR.  */
5014   d.cur = VEC_index (constructor_elt, v, 0);
5015   d.end = d.cur + VEC_length (constructor_elt, v);
5016
5017   new_init = reshape_init_r (type, &d, true);
5018   if (new_init == error_mark_node)
5019     return error_mark_node;
5020
5021   /* Make sure all the element of the constructor were used. Otherwise,
5022      issue an error about exceeding initializers.  */
5023   if (d.cur != d.end)
5024     error ("too many initializers for %qT", type);
5025
5026   return new_init;
5027 }
5028
5029 /* Verify array initializer.  Returns true if errors have been reported.  */
5030
5031 bool
5032 check_array_initializer (tree decl, tree type, tree init)
5033 {
5034   tree element_type = TREE_TYPE (type);
5035
5036   /* The array type itself need not be complete, because the
5037      initializer may tell us how many elements are in the array.
5038      But, the elements of the array must be complete.  */
5039   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5040     {
5041       if (decl)
5042         error ("elements of array %q#D have incomplete type", decl);
5043       else
5044         error ("elements of array %q#T have incomplete type", type);
5045       return true;
5046     }
5047   /* It is not valid to initialize a VLA.  */
5048   if (init
5049       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5050           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5051     {
5052       if (decl)
5053         error ("variable-sized object %qD may not be initialized", decl);
5054       else
5055         error ("variable-sized compound literal");
5056       return true;
5057     }
5058   return false;
5059 }
5060
5061 /* Subroutine of check_initializer; args are passed down from that function.
5062    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5063
5064 static tree
5065 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5066      
5067 {
5068   int saved_stmts_are_full_exprs_p = 0;
5069   if (building_stmt_tree ())
5070     {
5071       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5072       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5073     }
5074   init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5075   if (building_stmt_tree ())
5076     current_stmt_tree ()->stmts_are_full_exprs_p =
5077       saved_stmts_are_full_exprs_p;
5078   return init;
5079 }
5080
5081 /* Verify INIT (the initializer for DECL), and record the
5082    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5083    grok_reference_init.
5084
5085    If the return value is non-NULL, it is an expression that must be
5086    evaluated dynamically to initialize DECL.  */
5087
5088 static tree
5089 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5090 {
5091   tree type = TREE_TYPE (decl);
5092   tree init_code = NULL;
5093
5094   /* Things that are going to be initialized need to have complete
5095      type.  */
5096   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5097
5098   if (type == error_mark_node)
5099     /* We will have already complained.  */
5100     return NULL_TREE;
5101
5102   if (TREE_CODE (type) == ARRAY_TYPE)
5103     {
5104       if (check_array_initializer (decl, type, init))
5105         return NULL_TREE;
5106     }
5107   else if (!COMPLETE_TYPE_P (type))
5108     {
5109       error ("%qD has incomplete type", decl);
5110       TREE_TYPE (decl) = error_mark_node;
5111       return NULL_TREE;
5112     }
5113   else
5114     /* There is no way to make a variable-sized class type in GNU C++.  */
5115     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5116
5117   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5118     {
5119       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5120       if (SCALAR_TYPE_P (type))
5121         {
5122           if (init_len == 0)
5123             {
5124               maybe_warn_cpp0x ("extended initializer lists");
5125               init = build_zero_init (type, NULL_TREE, false);
5126             }
5127           else if (init_len != 1)
5128             {
5129               error ("scalar object %qD requires one element in initializer",
5130                      decl);
5131               TREE_TYPE (decl) = error_mark_node;
5132               return NULL_TREE;
5133             }
5134         }
5135     }
5136
5137   if (TREE_CODE (decl) == CONST_DECL)
5138     {
5139       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5140
5141       DECL_INITIAL (decl) = init;
5142
5143       gcc_assert (init != NULL_TREE);
5144       init = NULL_TREE;
5145     }
5146   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
5147     init = grok_reference_init (decl, type, init, cleanup);
5148   else if (init)
5149     {
5150       /* Do not reshape constructors of vectors (they don't need to be
5151          reshaped.  */
5152       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5153         {
5154           if (is_std_init_list (type))
5155             return build_init_list_var_init (decl, type, init, cleanup);
5156           else if (TYPE_NON_AGGREGATE_CLASS (type))
5157             {
5158               /* Don't reshape if the class has constructors.  */
5159               if (cxx_dialect == cxx98)
5160                 error ("in C++98 %qD must be initialized by constructor, "
5161                        "not by %<{...}%>",
5162                        decl);
5163               init = build_tree_list (NULL_TREE, init);
5164             }
5165           else if ((*targetm.vector_opaque_p) (type))
5166             {
5167               error ("opaque vector types cannot be initialized");
5168               init = error_mark_node;
5169             }
5170           else
5171             init = reshape_init (type, init);       
5172         }
5173
5174       /* If DECL has an array type without a specific bound, deduce the
5175          array size from the initializer.  */
5176       maybe_deduce_size_from_array_init (decl, init);
5177       type = TREE_TYPE (decl);
5178       if (type == error_mark_node)
5179         return NULL_TREE;
5180
5181       if (TYPE_NEEDS_CONSTRUCTING (type)
5182           || (CLASS_TYPE_P (type)
5183               && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5184         return build_aggr_init_full_exprs (decl, init, flags);
5185       else if (TREE_CODE (init) != TREE_VEC)
5186         {
5187           init_code = store_init_value (decl, init);
5188           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5189               && DECL_INITIAL (decl)
5190               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5191               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5192             warning (0, "array %qD initialized by parenthesized string literal %qE",
5193                      decl, DECL_INITIAL (decl));
5194           init = NULL;
5195         }
5196     }
5197   else if (DECL_EXTERNAL (decl))
5198     ;
5199   else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5200     return build_aggr_init_full_exprs (decl, init, flags);
5201   else if (MAYBE_CLASS_TYPE_P (type))
5202     {
5203       tree core_type = strip_array_types (type);
5204
5205       if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
5206         error ("structure %qD with uninitialized const members", decl);
5207       if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
5208         error ("structure %qD with uninitialized reference members", decl);
5209
5210       check_for_uninitialized_const_var (decl);
5211     }
5212   else
5213     check_for_uninitialized_const_var (decl);
5214
5215   if (init && init != error_mark_node)
5216     init_code = build2 (INIT_EXPR, type, decl, init);
5217
5218   return init_code;
5219 }
5220
5221 /* If DECL is not a local variable, give it RTL.  */
5222
5223 static void
5224 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5225 {
5226   int toplev = toplevel_bindings_p ();
5227   int defer_p;
5228   const char *filename;
5229
5230   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5231   if (asmspec)
5232     {
5233       /* The `register' keyword, when used together with an
5234          asm-specification, indicates that the variable should be
5235          placed in a particular register.  */
5236       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5237         {
5238           set_user_assembler_name (decl, asmspec);
5239           DECL_HARD_REGISTER (decl) = 1;
5240         }
5241       else
5242         {
5243           if (TREE_CODE (decl) == FUNCTION_DECL
5244               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5245             set_builtin_user_assembler_name (decl, asmspec);
5246           set_user_assembler_name (decl, asmspec);
5247         }
5248     }
5249
5250   /* Handle non-variables up front.  */
5251   if (TREE_CODE (decl) != VAR_DECL)
5252     {
5253       rest_of_decl_compilation (decl, toplev, at_eof);
5254       return;
5255     }
5256
5257   /* If we see a class member here, it should be a static data
5258      member.  */
5259   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5260     {
5261       gcc_assert (TREE_STATIC (decl));
5262       /* An in-class declaration of a static data member should be
5263          external; it is only a declaration, and not a definition.  */
5264       if (init == NULL_TREE)
5265         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5266     }
5267
5268   /* We don't create any RTL for local variables.  */
5269   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5270     return;
5271
5272   /* We defer emission of local statics until the corresponding
5273      DECL_EXPR is expanded.  */
5274   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5275
5276   /* We try to defer namespace-scope static constants so that they are
5277      not emitted into the object file unnecessarily.  */
5278   filename = input_filename;
5279   if (!DECL_VIRTUAL_P (decl)
5280       && TREE_READONLY (decl)
5281       && DECL_INITIAL (decl) != NULL_TREE
5282       && DECL_INITIAL (decl) != error_mark_node
5283       && filename != NULL
5284       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5285       && toplev
5286       && !TREE_PUBLIC (decl))
5287     {
5288       /* Fool with the linkage of static consts according to #pragma
5289          interface.  */
5290       struct c_fileinfo *finfo = get_fileinfo (filename);
5291       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5292         {
5293           TREE_PUBLIC (decl) = 1;
5294           DECL_EXTERNAL (decl) = finfo->interface_only;
5295         }
5296
5297       defer_p = 1;
5298     }
5299   /* Likewise for template instantiations.  */
5300   else if (DECL_LANG_SPECIFIC (decl)
5301            && DECL_IMPLICIT_INSTANTIATION (decl))
5302     defer_p = 1;
5303
5304   /* If we're not deferring, go ahead and assemble the variable.  */
5305   if (!defer_p)
5306     rest_of_decl_compilation (decl, toplev, at_eof);
5307 }
5308
5309 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5310
5311 static tree
5312 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5313 {
5314   if (TYPE_P (*stmt_p))
5315     {
5316       *walk_subtrees = 0;
5317       return NULL_TREE;
5318     }
5319
5320   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5321     {
5322       tree guard = (tree)data;
5323       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5324
5325       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5326       /* Tell honor_protect_cleanup_actions to handle this as a separate
5327          cleanup.  */
5328       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5329  
5330       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5331     }
5332
5333   return NULL_TREE;
5334 }
5335
5336 /* We're initializing a local variable which has a cleanup GUARD.  If there
5337    are any temporaries used in the initializer INIT of this variable, we
5338    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5339    variable will be cleaned up properly if one of them throws.
5340
5341    Unfortunately, there's no way to express this properly in terms of
5342    nesting, as the regions for the temporaries overlap the region for the
5343    variable itself; if there are two temporaries, the variable needs to be
5344    the first thing destroyed if either of them throws.  However, we only
5345    want to run the variable's cleanup if it actually got constructed.  So
5346    we need to guard the temporary cleanups with the variable's cleanup if
5347    they are run on the normal path, but not if they are run on the
5348    exceptional path.  We implement this by telling
5349    honor_protect_cleanup_actions to strip the variable cleanup from the
5350    exceptional path.  */
5351
5352 static void
5353 wrap_temporary_cleanups (tree init, tree guard)
5354 {
5355   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5356 }
5357
5358 /* Generate code to initialize DECL (a local variable).  */
5359
5360 static void
5361 initialize_local_var (tree decl, tree init)
5362 {
5363   tree type = TREE_TYPE (decl);
5364   tree cleanup;
5365   int already_used;
5366
5367   gcc_assert (TREE_CODE (decl) == VAR_DECL
5368               || TREE_CODE (decl) == RESULT_DECL);
5369   gcc_assert (!TREE_STATIC (decl));
5370
5371   if (DECL_SIZE (decl) == NULL_TREE)
5372     {
5373       /* If we used it already as memory, it must stay in memory.  */
5374       DECL_INITIAL (decl) = NULL_TREE;
5375       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5376       return;
5377     }
5378
5379   if (type == error_mark_node)
5380     return;
5381
5382   /* Compute and store the initial value.  */
5383   already_used = TREE_USED (decl) || TREE_USED (type);
5384
5385   /* Generate a cleanup, if necessary.  */
5386   cleanup = cxx_maybe_build_cleanup (decl);
5387
5388   /* Perform the initialization.  */
5389   if (init)
5390     {
5391       int saved_stmts_are_full_exprs_p;
5392
5393       /* If we're only initializing a single object, guard the destructors
5394          of any temporaries used in its initializer with its destructor.
5395          This isn't right for arrays because each element initialization is
5396          a full-expression.  */
5397       if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5398         wrap_temporary_cleanups (init, cleanup);
5399
5400       gcc_assert (building_stmt_tree ());
5401       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5402       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5403       finish_expr_stmt (init);
5404       current_stmt_tree ()->stmts_are_full_exprs_p =
5405         saved_stmts_are_full_exprs_p;
5406     }
5407
5408   /* Set this to 0 so we can tell whether an aggregate which was
5409      initialized was ever used.  Don't do this if it has a
5410      destructor, so we don't complain about the 'resource
5411      allocation is initialization' idiom.  Now set
5412      attribute((unused)) on types so decls of that type will be
5413      marked used. (see TREE_USED, above.)  */
5414   if (TYPE_NEEDS_CONSTRUCTING (type)
5415       && ! already_used
5416       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5417       && DECL_NAME (decl))
5418     TREE_USED (decl) = 0;
5419   else if (already_used)
5420     TREE_USED (decl) = 1;
5421
5422   if (cleanup)
5423     finish_decl_cleanup (decl, cleanup);
5424 }
5425
5426 /* DECL is a VAR_DECL for a compiler-generated variable with static
5427    storage duration (like a virtual table) whose initializer is a
5428    compile-time constant.  INIT must be either a TREE_LIST of values,
5429    or a CONSTRUCTOR.  Initialize the variable and provide it to the
5430    back end.  */
5431
5432 void
5433 initialize_artificial_var (tree decl, tree init)
5434 {
5435   gcc_assert (DECL_ARTIFICIAL (decl));
5436   if (TREE_CODE (init) == TREE_LIST)
5437     init = build_constructor_from_list (TREE_TYPE (decl), init);
5438   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5439   DECL_INITIAL (decl) = init;
5440   DECL_INITIALIZED_P (decl) = 1;
5441   determine_visibility (decl);
5442   layout_var_decl (decl);
5443   maybe_commonize_var (decl);
5444   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5445 }
5446
5447 /* INIT is the initializer for a variable, as represented by the
5448    parser.  Returns true iff INIT is value-dependent.  */
5449
5450 static bool
5451 value_dependent_init_p (tree init)
5452 {
5453   if (TREE_CODE (init) == TREE_LIST)
5454     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5455     return any_value_dependent_elements_p (init);
5456   else if (TREE_CODE (init) == CONSTRUCTOR)
5457   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5458     {
5459       VEC(constructor_elt, gc) *elts;
5460       size_t nelts;
5461       size_t i;
5462
5463       elts = CONSTRUCTOR_ELTS (init);
5464       nelts = VEC_length (constructor_elt, elts);
5465       for (i = 0; i < nelts; ++i)
5466         if (value_dependent_init_p (VEC_index (constructor_elt,
5467                                                elts, i)->value))
5468           return true;
5469     }
5470   else
5471     /* It must be a simple expression, e.g., int i = 3;  */
5472     return value_dependent_expression_p (init);
5473   
5474   return false;
5475 }
5476
5477 /* Finish processing of a declaration;
5478    install its line number and initial value.
5479    If the length of an array type is not known before,
5480    it must be determined now, from the initial value, or it is an error.
5481
5482    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5483    true, then INIT is an integral constant expression.
5484
5485    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5486    if the (init) syntax was used.  */
5487
5488 void
5489 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5490                 tree asmspec_tree, int flags)
5491 {
5492   tree type;
5493   tree cleanup;
5494   const char *asmspec = NULL;
5495   int was_readonly = 0;
5496   bool var_definition_p = false;
5497   int saved_processing_template_decl;
5498   tree auto_node;
5499
5500   if (decl == error_mark_node)
5501     return;
5502   else if (! decl)
5503     {
5504       if (init)
5505         error ("assignment (not initialization) in declaration");
5506       return;
5507     }
5508
5509   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5510   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5511   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5512
5513   type = TREE_TYPE (decl);
5514   if (type == error_mark_node)
5515     return;
5516
5517   /* Assume no cleanup is required.  */
5518   cleanup = NULL_TREE;
5519   saved_processing_template_decl = processing_template_decl;
5520
5521   /* If a name was specified, get the string.  */
5522   if (global_scope_p (current_binding_level))
5523     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5524   if (asmspec_tree && asmspec_tree != error_mark_node)
5525     asmspec = TREE_STRING_POINTER (asmspec_tree);
5526
5527   if (current_class_type
5528       && CP_DECL_CONTEXT (decl) == current_class_type
5529       && TYPE_BEING_DEFINED (current_class_type)
5530       && (DECL_INITIAL (decl) || init))
5531     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5532
5533   auto_node = type_uses_auto (type);
5534   if (auto_node)
5535     {
5536       if (init == NULL_TREE)
5537         {
5538           error ("declaration of %q#D has no initializer", decl);
5539           TREE_TYPE (decl) = error_mark_node;
5540           return;
5541         }
5542       if (TREE_CODE (init) == TREE_LIST)
5543         init = build_x_compound_expr_from_list (init, "initializer");
5544       if (describable_type (init))
5545         {
5546           type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5547           if (type == error_mark_node)
5548             return;
5549         }
5550     }
5551
5552   if (init && TREE_CODE (decl) == FUNCTION_DECL)
5553     {
5554       tree clone;
5555       if (init == ridpointers[(int)RID_DELETE])
5556         {
5557           /* FIXME check this is 1st decl.  */
5558           DECL_DELETED_FN (decl) = 1;
5559           DECL_DECLARED_INLINE_P (decl) = 1;
5560           DECL_INITIAL (decl) = error_mark_node;
5561           FOR_EACH_CLONE (clone, decl)
5562             {
5563               DECL_DELETED_FN (clone) = 1;
5564               DECL_DECLARED_INLINE_P (clone) = 1;
5565               DECL_INITIAL (clone) = error_mark_node;
5566             }
5567           init = NULL_TREE;
5568         }
5569       else if (init == ridpointers[(int)RID_DEFAULT])
5570         {
5571           if (!defaultable_fn_p (decl))
5572             {
5573               error ("%qD cannot be defaulted", decl);
5574               DECL_INITIAL (decl) = NULL_TREE;
5575             }
5576           else
5577             {
5578               DECL_DEFAULTED_FN (decl) = 1;
5579               FOR_EACH_CLONE (clone, decl)
5580                 DECL_DEFAULTED_FN (clone) = 1;
5581             }
5582         }
5583     }
5584     
5585   if (processing_template_decl)
5586     {
5587       bool type_dependent_p;
5588
5589       /* Add this declaration to the statement-tree.  */
5590       if (at_function_scope_p ())
5591         add_decl_expr (decl);
5592
5593       type_dependent_p = dependent_type_p (type);
5594
5595       if (check_for_bare_parameter_packs (init))
5596         {
5597           init = NULL_TREE;
5598           DECL_INITIAL (decl) = NULL_TREE;
5599         }
5600
5601       if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
5602         {
5603           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5604           if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5605             TREE_CONSTANT (decl) = 1;
5606         }
5607
5608       /* Generally, initializers in templates are expanded when the
5609          template is instantiated.  But, if DECL is an integral
5610          constant static data member, then it can be used in future
5611          integral constant expressions, and its value must be
5612          available. */
5613       if (!(init
5614             && DECL_CLASS_SCOPE_P (decl)
5615             && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5616             && !type_dependent_p
5617             && !value_dependent_init_p (init)))
5618         {
5619           if (init)
5620             DECL_INITIAL (decl) = init;
5621           if (TREE_CODE (decl) == VAR_DECL
5622               && !DECL_PRETTY_FUNCTION_P (decl)
5623               && !type_dependent_p)
5624             maybe_deduce_size_from_array_init (decl, init);
5625           goto finish_end;
5626         }
5627
5628       if (TREE_CODE (init) == TREE_LIST)
5629         {
5630           /* If the parenthesized-initializer form was used (e.g.,
5631              "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5632              arguments.  (There is generally only one.)  We convert them
5633              individually.  */
5634           tree list = init;
5635           for (; list; list = TREE_CHAIN (list))
5636             {
5637               tree elt = TREE_VALUE (list);
5638               TREE_VALUE (list) = fold_non_dependent_expr (elt);
5639             }
5640         }
5641       else
5642         init = fold_non_dependent_expr (init);
5643       processing_template_decl = 0;
5644     }
5645
5646   /* Take care of TYPE_DECLs up front.  */
5647   if (TREE_CODE (decl) == TYPE_DECL)
5648     {
5649       if (type != error_mark_node
5650           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
5651         {
5652           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5653             warning (0, "shadowing previous type declaration of %q#D", decl);
5654           set_identifier_type_value (DECL_NAME (decl), decl);
5655         }
5656
5657       /* If we have installed this as the canonical typedef for this
5658          type, and that type has not been defined yet, delay emitting
5659          the debug information for it, as we will emit it later.  */
5660       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5661           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5662         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5663
5664       rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5665                                 at_eof);
5666       goto finish_end;
5667     }
5668
5669   /* A reference will be modified here, as it is initialized.  */
5670   if (! DECL_EXTERNAL (decl)
5671       && TREE_READONLY (decl)
5672       && TREE_CODE (type) == REFERENCE_TYPE)
5673     {
5674       was_readonly = 1;
5675       TREE_READONLY (decl) = 0;
5676     }
5677
5678   if (TREE_CODE (decl) == VAR_DECL)
5679     {
5680       /* Only PODs can have thread-local storage.  Other types may require
5681          various kinds of non-trivial initialization.  */
5682       if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5683         error ("%qD cannot be thread-local because it has non-POD type %qT",
5684                decl, TREE_TYPE (decl));
5685       /* If this is a local variable that will need a mangled name,
5686          register it now.  We must do this before processing the
5687          initializer for the variable, since the initialization might
5688          require a guard variable, and since the mangled name of the
5689          guard variable will depend on the mangled name of this
5690          variable.  */
5691       if (DECL_FUNCTION_SCOPE_P (decl)
5692           && TREE_STATIC (decl)
5693           && !DECL_ARTIFICIAL (decl))
5694         push_local_name (decl);
5695       /* Convert the initializer to the type of DECL, if we have not
5696          already initialized DECL.  */
5697       if (!DECL_INITIALIZED_P (decl)
5698           /* If !DECL_EXTERNAL then DECL is being defined.  In the
5699              case of a static data member initialized inside the
5700              class-specifier, there can be an initializer even if DECL
5701              is *not* defined.  */
5702           && (!DECL_EXTERNAL (decl) || init))
5703         {
5704           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5705             {
5706               tree jclass
5707                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5708               /* Allow libjava/prims.cc define primitive classes.  */
5709               if (init != NULL_TREE
5710                   || jclass == NULL_TREE
5711                   || TREE_CODE (jclass) != TYPE_DECL
5712                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
5713                   || !same_type_ignoring_top_level_qualifiers_p
5714                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
5715                 error ("Java object %qD not allocated with %<new%>", decl);
5716               init = NULL_TREE;
5717             }
5718           if (init)
5719             {
5720               DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5721               if (init_const_expr_p)
5722                 {
5723                   DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5724                   if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5725                     TREE_CONSTANT (decl) = 1;
5726                 }
5727             }
5728           init = check_initializer (decl, init, flags, &cleanup);
5729           /* Thread-local storage cannot be dynamically initialized.  */
5730           if (DECL_THREAD_LOCAL_P (decl) && init)
5731             {
5732               error ("%qD is thread-local and so cannot be dynamically "
5733                      "initialized", decl);
5734               init = NULL_TREE;
5735             }
5736
5737           /* Check that the initializer for a static data member was a
5738              constant.  Although we check in the parser that the
5739              initializer is an integral constant expression, we do not
5740              simplify division-by-zero at the point at which it
5741              occurs.  Therefore, in:
5742
5743                struct S { static const int i = 7 / 0; };
5744
5745              we issue an error at this point.  It would
5746              probably be better to forbid division by zero in
5747              integral constant expressions.  */
5748           if (DECL_EXTERNAL (decl) && init)
5749             {
5750               error ("%qD cannot be initialized by a non-constant expression"
5751                      " when being declared", decl);
5752               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5753               init = NULL_TREE;
5754             }
5755
5756           /* Handle:
5757
5758              [dcl.init]
5759
5760              The memory occupied by any object of static storage
5761              duration is zero-initialized at program startup before
5762              any other initialization takes place.
5763
5764              We cannot create an appropriate initializer until after
5765              the type of DECL is finalized.  If DECL_INITIAL is set,
5766              then the DECL is statically initialized, and any
5767              necessary zero-initialization has already been performed.  */
5768           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5769             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5770                                                    /*nelts=*/NULL_TREE,
5771                                                    /*static_storage_p=*/true);
5772           /* Remember that the initialization for this variable has
5773              taken place.  */
5774           DECL_INITIALIZED_P (decl) = 1;
5775           /* This declaration is the definition of this variable,
5776              unless we are initializing a static data member within
5777              the class specifier.  */
5778           if (!DECL_EXTERNAL (decl))
5779             var_definition_p = true;
5780         }
5781       /* If the variable has an array type, lay out the type, even if
5782          there is no initializer.  It is valid to index through the
5783          array, and we must get TYPE_ALIGN set correctly on the array
5784          type.  */
5785       else if (TREE_CODE (type) == ARRAY_TYPE)
5786         layout_type (type);
5787
5788       if (!processing_template_decl
5789           && TREE_STATIC (decl)
5790           && !at_function_scope_p ()
5791           && current_function_decl == NULL)
5792         /* So decl is a global variable or a static member of a
5793            non local class. Record the types it uses
5794            so that we can decide later to emit debug info for them.  */
5795         record_types_used_by_current_var_decl (decl);
5796     }
5797   else if (TREE_CODE (decl) == FIELD_DECL
5798            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5799     error ("non-static data member %qD has Java class type", decl);
5800
5801   /* Add this declaration to the statement-tree.  This needs to happen
5802      after the call to check_initializer so that the DECL_EXPR for a
5803      reference temp is added before the DECL_EXPR for the reference itself.  */
5804   if (at_function_scope_p ())
5805     add_decl_expr (decl);
5806
5807   /* Let the middle end know about variables and functions -- but not
5808      static data members in uninstantiated class templates.  */
5809   if (!saved_processing_template_decl
5810       && (TREE_CODE (decl) == VAR_DECL 
5811           || TREE_CODE (decl) == FUNCTION_DECL))
5812     {
5813       if (TREE_CODE (decl) == VAR_DECL)
5814         {
5815           layout_var_decl (decl);
5816           maybe_commonize_var (decl);
5817         }
5818
5819       /* This needs to happen after the linkage is set. */
5820       determine_visibility (decl);
5821
5822       if (var_definition_p && TREE_STATIC (decl))
5823         {
5824           /* If a TREE_READONLY variable needs initialization
5825              at runtime, it is no longer readonly and we need to
5826              avoid MEM_READONLY_P being set on RTL created for it.  */
5827           if (init)
5828             {
5829               if (TREE_READONLY (decl))
5830                 TREE_READONLY (decl) = 0;
5831               was_readonly = 0;
5832             }
5833           else if (was_readonly)
5834             TREE_READONLY (decl) = 1;
5835         }
5836
5837       make_rtl_for_nonlocal_decl (decl, init, asmspec);
5838
5839       /* Check for abstractness of the type. Notice that there is no
5840          need to strip array types here since the check for those types
5841          is already done within create_array_type_for_decl.  */
5842       if (TREE_CODE (type) == FUNCTION_TYPE
5843           || TREE_CODE (type) == METHOD_TYPE)
5844         abstract_virtuals_error (decl, TREE_TYPE (type));
5845       else
5846         abstract_virtuals_error (decl, type);
5847
5848       if (TREE_TYPE (decl) == error_mark_node)
5849         /* No initialization required.  */
5850         ;
5851       else if (TREE_CODE (decl) == FUNCTION_DECL)
5852         {
5853           if (init)
5854             {
5855               if (init == ridpointers[(int)RID_DEFAULT])
5856                 {
5857                   /* An out-of-class default definition is defined at
5858                      the point where it is explicitly defaulted.  */
5859                   if (DECL_INITIAL (decl) == error_mark_node)
5860                     synthesize_method (decl);
5861                 }
5862               else
5863                 error ("function %q#D is initialized like a variable", decl);
5864             }
5865           /* else no initialization required.  */
5866         }
5867       else if (DECL_EXTERNAL (decl)
5868                && ! (DECL_LANG_SPECIFIC (decl)
5869                      && DECL_NOT_REALLY_EXTERN (decl)))
5870         {
5871           if (init)
5872             DECL_INITIAL (decl) = init;
5873         }
5874       /* A variable definition.  */
5875       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5876         /* Initialize the local variable.  */
5877         initialize_local_var (decl, init);
5878
5879       /* If a variable is defined, and then a subsequent
5880          definition with external linkage is encountered, we will
5881          get here twice for the same variable.  We want to avoid
5882          calling expand_static_init more than once.  For variables
5883          that are not static data members, we can call
5884          expand_static_init only when we actually process the
5885          initializer.  It is not legal to redeclare a static data
5886          member, so this issue does not arise in that case.  */
5887       else if (var_definition_p && TREE_STATIC (decl))
5888         expand_static_init (decl, init);
5889     }
5890
5891   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5892      reference, insert it in the statement-tree now.  */
5893   if (cleanup)
5894     push_cleanup (decl, cleanup, false);
5895
5896  finish_end:
5897   processing_template_decl = saved_processing_template_decl;
5898
5899   if (was_readonly)
5900     TREE_READONLY (decl) = 1;
5901
5902   /* If this was marked 'used', be sure it will be output.  */
5903   if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5904     mark_decl_referenced (decl);
5905 }
5906
5907 /* This is here for a midend callback from c-common.c.  */
5908
5909 void
5910 finish_decl (tree decl, tree init, tree asmspec_tree)
5911 {
5912   cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5913 }
5914
5915 /* Returns a declaration for a VAR_DECL as if:
5916
5917      extern "C" TYPE NAME;
5918
5919    had been seen.  Used to create compiler-generated global
5920    variables.  */
5921
5922 static tree
5923 declare_global_var (tree name, tree type)
5924 {
5925   tree decl;
5926
5927   push_to_top_level ();
5928   decl = build_decl (VAR_DECL, name, type);
5929   TREE_PUBLIC (decl) = 1;
5930   DECL_EXTERNAL (decl) = 1;
5931   DECL_ARTIFICIAL (decl) = 1;
5932   /* If the user has explicitly declared this variable (perhaps
5933      because the code we are compiling is part of a low-level runtime
5934      library), then it is possible that our declaration will be merged
5935      with theirs by pushdecl.  */
5936   decl = pushdecl (decl);
5937   finish_decl (decl, NULL_TREE, NULL_TREE);
5938   pop_from_top_level ();
5939
5940   return decl;
5941 }
5942
5943 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5944    if "__cxa_atexit" is not being used) corresponding to the function
5945    to be called when the program exits.  */
5946
5947 static tree
5948 get_atexit_fn_ptr_type (void)
5949 {
5950   tree arg_types;
5951   tree fn_type;
5952
5953   if (!atexit_fn_ptr_type_node)
5954     {
5955       if (flag_use_cxa_atexit 
5956           && !targetm.cxx.use_atexit_for_cxa_atexit ())
5957         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
5958         arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5959       else
5960         /* The parameter to "atexit" is "void (*)(void)".  */
5961         arg_types = void_list_node;
5962       
5963       fn_type = build_function_type (void_type_node, arg_types);
5964       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5965     }
5966
5967   return atexit_fn_ptr_type_node;
5968 }
5969
5970 /* Returns a pointer to the `atexit' function.  Note that if
5971    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5972    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
5973
5974 static tree
5975 get_atexit_node (void)
5976 {
5977   tree atexit_fndecl;
5978   tree arg_types;
5979   tree fn_type;
5980   tree fn_ptr_type;
5981   const char *name;
5982   bool use_aeabi_atexit;
5983
5984   if (atexit_node)
5985     return atexit_node;
5986
5987   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
5988     {
5989       /* The declaration for `__cxa_atexit' is:
5990
5991            int __cxa_atexit (void (*)(void *), void *, void *)
5992
5993          We build up the argument types and then then function type
5994          itself.  */
5995
5996       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5997       /* First, build the pointer-to-function type for the first
5998          argument.  */
5999       fn_ptr_type = get_atexit_fn_ptr_type ();
6000       /* Then, build the rest of the argument types.  */
6001       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6002       if (use_aeabi_atexit)
6003         {
6004           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6005           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6006         }
6007       else
6008         {
6009           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6010           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6011         }
6012       /* And the final __cxa_atexit type.  */
6013       fn_type = build_function_type (integer_type_node, arg_types);
6014       fn_ptr_type = build_pointer_type (fn_type);
6015       if (use_aeabi_atexit)
6016         name = "__aeabi_atexit";
6017       else
6018         name = "__cxa_atexit";
6019     }
6020   else
6021     {
6022       /* The declaration for `atexit' is:
6023
6024            int atexit (void (*)());
6025
6026          We build up the argument types and then then function type
6027          itself.  */
6028       fn_ptr_type = get_atexit_fn_ptr_type ();
6029       arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6030       /* Build the final atexit type.  */
6031       fn_type = build_function_type (integer_type_node, arg_types);
6032       name = "atexit";
6033     }
6034
6035   /* Now, build the function declaration.  */
6036   push_lang_context (lang_name_c);
6037   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6038   mark_used (atexit_fndecl);
6039   pop_lang_context ();
6040   atexit_node = decay_conversion (atexit_fndecl);
6041
6042   return atexit_node;
6043 }
6044
6045 /* Returns the __dso_handle VAR_DECL.  */
6046
6047 static tree
6048 get_dso_handle_node (void)
6049 {
6050   if (dso_handle_node)
6051     return dso_handle_node;
6052
6053   /* Declare the variable.  */
6054   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6055                                         ptr_type_node);
6056
6057   return dso_handle_node;
6058 }
6059
6060 /* Begin a new function with internal linkage whose job will be simply
6061    to destroy some particular variable.  */
6062
6063 static GTY(()) int start_cleanup_cnt;
6064
6065 static tree
6066 start_cleanup_fn (void)
6067 {
6068   char name[32];
6069   tree fntype;
6070   tree fndecl;
6071   bool use_cxa_atexit = flag_use_cxa_atexit
6072                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6073
6074   push_to_top_level ();
6075
6076   /* No need to mangle this.  */
6077   push_lang_context (lang_name_c);
6078
6079   /* Build the name of the function.  */
6080   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6081   /* Build the function declaration.  */
6082   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6083   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6084   /* It's a function with internal linkage, generated by the
6085      compiler.  */
6086   TREE_PUBLIC (fndecl) = 0;
6087   DECL_ARTIFICIAL (fndecl) = 1;
6088   /* Make the function `inline' so that it is only emitted if it is
6089      actually needed.  It is unlikely that it will be inlined, since
6090      it is only called via a function pointer, but we avoid unnecessary
6091      emissions this way.  */
6092   DECL_DECLARED_INLINE_P (fndecl) = 1;
6093   DECL_INTERFACE_KNOWN (fndecl) = 1;
6094   /* Build the parameter.  */
6095   if (use_cxa_atexit)
6096     {
6097       tree parmdecl;
6098
6099       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6100       DECL_CONTEXT (parmdecl) = fndecl;
6101       TREE_USED (parmdecl) = 1;
6102       DECL_ARGUMENTS (fndecl) = parmdecl;
6103     }
6104
6105   pushdecl (fndecl);
6106   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6107
6108   pop_lang_context ();
6109
6110   return current_function_decl;
6111 }
6112
6113 /* Finish the cleanup function begun by start_cleanup_fn.  */
6114
6115 static void
6116 end_cleanup_fn (void)
6117 {
6118   expand_or_defer_fn (finish_function (0));
6119
6120   pop_from_top_level ();
6121 }
6122
6123 /* Generate code to handle the destruction of DECL, an object with
6124    static storage duration.  */
6125
6126 tree
6127 register_dtor_fn (tree decl)
6128 {
6129   tree cleanup;
6130   tree compound_stmt;
6131   tree args;
6132   tree fcall;
6133   tree type;
6134   bool use_dtor;
6135
6136   type = TREE_TYPE (decl);
6137   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6138     return void_zero_node;
6139
6140   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6141      a class object, we can just pass the destructor to
6142      "__cxa_atexit"; we don't have to build a temporary function to do
6143      the cleanup.  */
6144   use_dtor = (flag_use_cxa_atexit 
6145               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6146               && CLASS_TYPE_P (type));
6147   if (use_dtor)
6148     {
6149       int idx;
6150
6151       /* Find the destructor.  */
6152       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6153       gcc_assert (idx >= 0);
6154       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6155       /* Make sure it is accessible.  */
6156       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6157     }
6158   else
6159     {
6160       /* Call build_cleanup before we enter the anonymous function so
6161          that any access checks will be done relative to the current
6162          scope, rather than the scope of the anonymous function.  */
6163       build_cleanup (decl);
6164   
6165       /* Now start the function.  */
6166       cleanup = start_cleanup_fn ();
6167       
6168       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6169          to the original function, rather than the anonymous one.  That
6170          will make the back end think that nested functions are in use,
6171          which causes confusion.  */
6172       push_deferring_access_checks (dk_no_check);
6173       fcall = build_cleanup (decl);
6174       pop_deferring_access_checks ();
6175       
6176       /* Create the body of the anonymous function.  */
6177       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6178       finish_expr_stmt (fcall);
6179       finish_compound_stmt (compound_stmt);
6180       end_cleanup_fn ();
6181     }
6182
6183   /* Call atexit with the cleanup function.  */
6184   mark_used (cleanup);
6185   cleanup = build_address (cleanup);
6186   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6187     {
6188       tree addr;
6189
6190       if (use_dtor)
6191         {
6192           /* We must convert CLEANUP to the type that "__cxa_atexit"
6193              expects.  */
6194           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6195           /* "__cxa_atexit" will pass the address of DECL to the
6196              cleanup function.  */
6197           mark_used (decl);
6198           addr = build_address (decl);
6199           /* The declared type of the parameter to "__cxa_atexit" is
6200              "void *".  For plain "T*", we could just let the
6201              machinery in cp_build_function_call convert it -- but if the
6202              type is "cv-qualified T *", then we need to convert it
6203              before passing it in, to avoid spurious errors.  */
6204           addr = build_nop (ptr_type_node, addr);
6205         }
6206       else
6207         /* Since the cleanup functions we build ignore the address
6208            they're given, there's no reason to pass the actual address
6209            in, and, in general, it's cheaper to pass NULL than any
6210            other value.  */
6211         addr = null_pointer_node;
6212       args = tree_cons (NULL_TREE,
6213                         cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6214                                         tf_warning_or_error),
6215                         NULL_TREE);
6216       if (targetm.cxx.use_aeabi_atexit ())
6217         {
6218           args = tree_cons (NULL_TREE, cleanup, args);
6219           args = tree_cons (NULL_TREE, addr, args);
6220         }
6221       else
6222         {
6223           args = tree_cons (NULL_TREE, addr, args);
6224           args = tree_cons (NULL_TREE, cleanup, args);
6225         }
6226     }
6227   else
6228     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
6229   return cp_build_function_call (get_atexit_node (), args, 
6230                                  tf_warning_or_error);
6231 }
6232
6233 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6234    is its initializer.  Generate code to handle the construction
6235    and destruction of DECL.  */
6236
6237 static void
6238 expand_static_init (tree decl, tree init)
6239 {
6240   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6241   gcc_assert (TREE_STATIC (decl));
6242
6243   /* Some variables require no initialization.  */
6244   if (!init
6245       && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6246       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6247     return;
6248
6249   if (DECL_FUNCTION_SCOPE_P (decl))
6250     {
6251       /* Emit code to perform this initialization but once.  */
6252       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6253       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6254       tree guard, guard_addr;
6255       tree acquire_fn, release_fn, abort_fn;
6256       tree flag, begin;
6257
6258       /* Emit code to perform this initialization but once.  This code
6259          looks like:
6260
6261            static <type> guard;
6262            if (!guard.first_byte) {
6263              if (__cxa_guard_acquire (&guard)) {
6264                bool flag = false;
6265                try {
6266                  // Do initialization.
6267                  flag = true; __cxa_guard_release (&guard);
6268                  // Register variable for destruction at end of program.
6269                } catch {
6270                  if (!flag) __cxa_guard_abort (&guard);
6271                }
6272            }
6273
6274          Note that the `flag' variable is only set to 1 *after* the
6275          initialization is complete.  This ensures that an exception,
6276          thrown during the construction, will cause the variable to
6277          reinitialized when we pass through this code again, as per:
6278
6279            [stmt.dcl]
6280
6281            If the initialization exits by throwing an exception, the
6282            initialization is not complete, so it will be tried again
6283            the next time control enters the declaration.
6284
6285          This process should be thread-safe, too; multiple threads
6286          should not be able to initialize the variable more than
6287          once.  */
6288
6289       /* Create the guard variable.  */
6290       guard = get_guard (decl);
6291
6292       /* This optimization isn't safe on targets with relaxed memory
6293          consistency.  On such targets we force synchronization in
6294          __cxa_guard_acquire.  */
6295       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6296         {
6297           /* Begin the conditional initialization.  */
6298           if_stmt = begin_if_stmt ();
6299           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6300           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6301         }
6302
6303       if (flag_threadsafe_statics)
6304         {
6305           guard_addr = build_address (guard);
6306
6307           acquire_fn = get_identifier ("__cxa_guard_acquire");
6308           release_fn = get_identifier ("__cxa_guard_release");
6309           abort_fn = get_identifier ("__cxa_guard_abort");
6310           if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6311             {
6312               tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6313                                          void_list_node);
6314               tree vfntype = build_function_type (void_type_node, argtypes);
6315               acquire_fn = push_library_fn
6316                 (acquire_fn, build_function_type (integer_type_node, argtypes),
6317                  NULL_TREE);
6318               release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6319               abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6320             }
6321           else
6322             {
6323               release_fn = identifier_global_value (release_fn);
6324               abort_fn = identifier_global_value (abort_fn);
6325             }
6326
6327           inner_if_stmt = begin_if_stmt ();
6328           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6329                                inner_if_stmt);
6330
6331           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6332           begin = get_target_expr (boolean_false_node);
6333           flag = TARGET_EXPR_SLOT (begin);
6334
6335           TARGET_EXPR_CLEANUP (begin)
6336             = build3 (COND_EXPR, void_type_node, flag,
6337                       void_zero_node,
6338                       build_call_n (abort_fn, 1, guard_addr));
6339           CLEANUP_EH_ONLY (begin) = 1;
6340
6341           /* Do the initialization itself.  */
6342           init = add_stmt_to_compound (begin, init);
6343           init = add_stmt_to_compound
6344             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6345           init = add_stmt_to_compound
6346             (init, build_call_n (release_fn, 1, guard_addr));
6347         }
6348       else
6349         init = add_stmt_to_compound (init, set_guard (guard));
6350
6351       /* Use atexit to register a function for destroying this static
6352          variable.  */
6353       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6354
6355       finish_expr_stmt (init);
6356
6357       if (flag_threadsafe_statics)
6358         {
6359           finish_compound_stmt (inner_then_clause);
6360           finish_then_clause (inner_if_stmt);
6361           finish_if_stmt (inner_if_stmt);
6362         }
6363
6364       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6365         {
6366           finish_compound_stmt (then_clause);
6367           finish_then_clause (if_stmt);
6368           finish_if_stmt (if_stmt);
6369         }
6370     }
6371   else
6372     static_aggregates = tree_cons (init, decl, static_aggregates);
6373 }
6374
6375 \f
6376 /* Make TYPE a complete type based on INITIAL_VALUE.
6377    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6378    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6379    3 if the initializer list is empty (in pedantic mode). */
6380
6381 int
6382 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6383 {
6384   int failure;
6385   tree type, elt_type;
6386
6387   if (initial_value)
6388     {
6389       unsigned HOST_WIDE_INT i;
6390       tree value;
6391
6392       /* An array of character type can be initialized from a
6393          brace-enclosed string constant.
6394
6395          FIXME: this code is duplicated from reshape_init. Probably
6396          we should just call reshape_init here?  */
6397       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6398           && TREE_CODE (initial_value) == CONSTRUCTOR
6399           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6400         {
6401           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6402           tree value = VEC_index (constructor_elt, v, 0)->value;
6403
6404           if (TREE_CODE (value) == STRING_CST
6405               && VEC_length (constructor_elt, v) == 1)
6406             initial_value = value;
6407         }
6408
6409       /* If any of the elements are parameter packs, we can't actually
6410          complete this type now because the array size is dependent.  */
6411       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6412         {
6413           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6414                                       i, value)
6415             {
6416               if (PACK_EXPANSION_P (value))
6417                 return 0;
6418             }
6419         }
6420     }
6421
6422   failure = complete_array_type (ptype, initial_value, do_default);
6423
6424   /* We can create the array before the element type is complete, which
6425      means that we didn't have these two bits set in the original type
6426      either.  In completing the type, we are expected to propagate these
6427      bits.  See also complete_type which does the same thing for arrays
6428      of fixed size.  */
6429   type = *ptype;
6430   if (TYPE_DOMAIN (type))
6431     {
6432       elt_type = TREE_TYPE (type);
6433       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6434       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6435         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6436     }
6437
6438   return failure;
6439 }
6440 \f
6441 /* Return zero if something is declared to be a member of type
6442    CTYPE when in the context of CUR_TYPE.  STRING is the error
6443    message to print in that case.  Otherwise, quietly return 1.  */
6444
6445 static int
6446 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6447 {
6448   if (ctype && ctype != cur_type)
6449     {
6450       if (flags == DTOR_FLAG)
6451         error ("destructor for alien class %qT cannot be a member", ctype);
6452       else
6453         error ("constructor for alien class %qT cannot be a member", ctype);
6454       return 0;
6455     }
6456   return 1;
6457 }
6458 \f
6459 /* Subroutine of `grokdeclarator'.  */
6460
6461 /* Generate errors possibly applicable for a given set of specifiers.
6462    This is for ARM $7.1.2.  */
6463
6464 static void
6465 bad_specifiers (tree object,
6466                 const char* type,
6467                 int virtualp,
6468                 int quals,
6469                 int inlinep,
6470                 int friendp,
6471                 int raises)
6472 {
6473   if (virtualp)
6474     error ("%qD declared as a %<virtual%> %s", object, type);
6475   if (inlinep)
6476     error ("%qD declared as an %<inline%> %s", object, type);
6477   if (quals)
6478     error ("%<const%> and %<volatile%> function specifiers on "
6479            "%qD invalid in %s declaration",
6480            object, type);
6481   if (friendp)
6482     error ("%q+D declared as a friend", object);
6483   if (raises
6484       && (TREE_CODE (object) == TYPE_DECL
6485           || (!TYPE_PTRFN_P (TREE_TYPE (object))
6486               && !TYPE_REFFN_P (TREE_TYPE (object))
6487               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6488     error ("%q+D declared with an exception specification", object);
6489 }
6490
6491 /* DECL is a member function or static data member and is presently
6492    being defined.  Check that the definition is taking place in a
6493    valid namespace.  */
6494
6495 static void
6496 check_class_member_definition_namespace (tree decl)
6497 {
6498   /* These checks only apply to member functions and static data
6499      members.  */
6500   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6501               || TREE_CODE (decl) == VAR_DECL);
6502   /* We check for problems with specializations in pt.c in
6503      check_specialization_namespace, where we can issue better
6504      diagnostics.  */
6505   if (processing_specialization)
6506     return;
6507   /* There are no restrictions on the placement of
6508      explicit instantiations.  */
6509   if (processing_explicit_instantiation)
6510     return;
6511   /* [class.mfct]
6512
6513      A member function definition that appears outside of the
6514      class definition shall appear in a namespace scope enclosing
6515      the class definition.
6516
6517      [class.static.data]
6518
6519      The definition for a static data member shall appear in a
6520      namespace scope enclosing the member's class definition.  */
6521   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6522     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6523                decl, DECL_CONTEXT (decl));
6524 }
6525
6526 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
6527    METHOD_TYPE for a non-static member function; QUALS are the
6528    cv-qualifiers that apply to the function.  */
6529
6530 tree
6531 build_this_parm (tree type, cp_cv_quals quals)
6532 {
6533   tree this_type;
6534   tree qual_type;
6535   tree parm;
6536   cp_cv_quals this_quals;
6537
6538   this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6539   /* The `this' parameter is implicitly `const'; it cannot be
6540      assigned to.  */
6541   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6542   qual_type = cp_build_qualified_type (this_type, this_quals);
6543   parm = build_artificial_parm (this_identifier, qual_type);
6544   cp_apply_type_quals_to_decl (this_quals, parm);
6545   return parm;
6546 }
6547
6548 /* CTYPE is class type, or null if non-class.
6549    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6550    or METHOD_TYPE.
6551    DECLARATOR is the function's name.
6552    PARMS is a chain of PARM_DECLs for the function.
6553    VIRTUALP is truthvalue of whether the function is virtual or not.
6554    FLAGS are to be passed through to `grokclassfn'.
6555    QUALS are qualifiers indicating whether the function is `const'
6556    or `volatile'.
6557    RAISES is a list of exceptions that this function can raise.
6558    CHECK is 1 if we must find this method in CTYPE, 0 if we should
6559    not look, and -1 if we should not call `grokclassfn' at all.
6560
6561    SFK is the kind of special function (if any) for the new function.
6562
6563    Returns `NULL_TREE' if something goes wrong, after issuing
6564    applicable error messages.  */
6565
6566 static tree
6567 grokfndecl (tree ctype,
6568             tree type,
6569             tree declarator,
6570             tree parms,
6571             tree orig_declarator,
6572             int virtualp,
6573             enum overload_flags flags,
6574             cp_cv_quals quals,
6575             tree raises,
6576             int check,
6577             int friendp,
6578             int publicp,
6579             int inlinep,
6580             special_function_kind sfk,
6581             bool funcdef_flag,
6582             int template_count,
6583             tree in_namespace,
6584             tree* attrlist,
6585             location_t location)
6586 {
6587   tree decl;
6588   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
6589   tree t;
6590
6591   if (raises)
6592     type = build_exception_variant (type, raises);
6593
6594   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
6595
6596   /* If we have an explicit location, use it, otherwise use whatever
6597      build_lang_decl used (probably input_location).  */
6598   if (location != UNKNOWN_LOCATION)
6599     DECL_SOURCE_LOCATION (decl) = location;
6600
6601   if (TREE_CODE (type) == METHOD_TYPE)
6602     {
6603       tree parm;
6604       parm = build_this_parm (type, quals);
6605       TREE_CHAIN (parm) = parms;
6606       parms = parm;
6607     }
6608   DECL_ARGUMENTS (decl) = parms;
6609   for (t = parms; t; t = TREE_CHAIN (t))
6610     DECL_CONTEXT (t) = decl;
6611   /* Propagate volatile out from type to decl.  */
6612   if (TYPE_VOLATILE (type))
6613     TREE_THIS_VOLATILE (decl) = 1;
6614
6615   /* Setup decl according to sfk.  */
6616   switch (sfk)
6617     {
6618     case sfk_constructor:
6619     case sfk_copy_constructor:
6620       DECL_CONSTRUCTOR_P (decl) = 1;
6621       break;
6622     case sfk_destructor:
6623       DECL_DESTRUCTOR_P (decl) = 1;
6624       break;
6625     default:
6626       break;
6627     }
6628
6629   /* If pointers to member functions use the least significant bit to
6630      indicate whether a function is virtual, ensure a pointer
6631      to this function will have that bit clear.  */
6632   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6633       && TREE_CODE (type) == METHOD_TYPE
6634       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6635     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6636
6637   if (friendp
6638       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6639     {
6640       if (funcdef_flag)
6641         error
6642           ("defining explicit specialization %qD in friend declaration",
6643            orig_declarator);
6644       else
6645         {
6646           tree fns = TREE_OPERAND (orig_declarator, 0);
6647           tree args = TREE_OPERAND (orig_declarator, 1);
6648
6649           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6650             {
6651               /* Something like `template <class T> friend void f<T>()'.  */
6652               error ("invalid use of template-id %qD in declaration "
6653                      "of primary template",
6654                      orig_declarator);
6655               return NULL_TREE;
6656             }
6657
6658
6659           /* A friend declaration of the form friend void f<>().  Record
6660              the information in the TEMPLATE_ID_EXPR.  */
6661           SET_DECL_IMPLICIT_INSTANTIATION (decl);
6662
6663           if (TREE_CODE (fns) == COMPONENT_REF)
6664             {
6665               /* Due to bison parser ickiness, we will have already looked
6666                  up an operator_name or PFUNCNAME within the current class
6667                  (see template_id in parse.y). If the current class contains
6668                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
6669
6670               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6671                           == current_class_type);
6672               fns = TREE_OPERAND (fns, 1);
6673             }
6674           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6675                       || TREE_CODE (fns) == OVERLOAD);
6676           DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6677
6678           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6679             if (TREE_PURPOSE (t)
6680                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6681             {
6682               error ("default arguments are not allowed in declaration "
6683                      "of friend template specialization %qD",
6684                      decl);
6685               return NULL_TREE;
6686             }
6687
6688           if (inlinep)
6689             {
6690               error ("%<inline%> is not allowed in declaration of friend "
6691                      "template specialization %qD",
6692                      decl);
6693               return NULL_TREE;
6694             }
6695         }
6696     }
6697
6698   /* If this decl has namespace scope, set that up.  */
6699   if (in_namespace)
6700     set_decl_namespace (decl, in_namespace, friendp);
6701   else if (!ctype)
6702     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6703
6704   /* `main' and builtins have implicit 'C' linkage.  */
6705   if ((MAIN_NAME_P (declarator)
6706        || (IDENTIFIER_LENGTH (declarator) > 10
6707            && IDENTIFIER_POINTER (declarator)[0] == '_'
6708            && IDENTIFIER_POINTER (declarator)[1] == '_'
6709            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6710       && current_lang_name == lang_name_cplusplus
6711       && ctype == NULL_TREE
6712       /* NULL_TREE means global namespace.  */
6713       && DECL_CONTEXT (decl) == NULL_TREE)
6714     SET_DECL_LANGUAGE (decl, lang_c);
6715
6716   /* Should probably propagate const out from type to decl I bet (mrs).  */
6717   if (staticp)
6718     {
6719       DECL_STATIC_FUNCTION_P (decl) = 1;
6720       DECL_CONTEXT (decl) = ctype;
6721     }
6722
6723   if (ctype)
6724     {
6725       DECL_CONTEXT (decl) = ctype;
6726       if (funcdef_flag)
6727         check_class_member_definition_namespace (decl);
6728     }
6729
6730   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6731     {
6732       if (processing_template_decl)
6733         error ("cannot declare %<::main%> to be a template");
6734       if (inlinep)
6735         error ("cannot declare %<::main%> to be inline");
6736       if (!publicp)
6737         error ("cannot declare %<::main%> to be static");
6738       inlinep = 0;
6739       publicp = 1;
6740     }
6741
6742   /* Members of anonymous types and local classes have no linkage; make
6743      them internal.  If a typedef is made later, this will be changed.  */
6744   if (ctype && (TYPE_ANONYMOUS_P (ctype)
6745                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6746     publicp = 0;
6747
6748   if (publicp)
6749     {
6750       /* [basic.link]: A name with no linkage (notably, the name of a class
6751          or enumeration declared in a local scope) shall not be used to
6752          declare an entity with linkage.
6753
6754          Only check this for public decls for now.  See core 319, 389.  */
6755       t = no_linkage_check (TREE_TYPE (decl),
6756                             /*relaxed_p=*/false);
6757       if (t)
6758         {
6759           if (TYPE_ANONYMOUS_P (t))
6760             {
6761               if (DECL_EXTERN_C_P (decl))
6762                 /* Allow this; it's pretty common in C.  */;
6763               else
6764                 {
6765                   permerror (input_location, "non-local function %q#D uses anonymous type",
6766                               decl);
6767                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6768                     permerror (input_location, "%q+#D does not refer to the unqualified "
6769                                "type, so it is not used for linkage",
6770                                TYPE_NAME (t));
6771                 }
6772             }
6773           else
6774             permerror (input_location, "non-local function %q#D uses local type %qT", decl, t);
6775         }
6776     }
6777
6778   TREE_PUBLIC (decl) = publicp;
6779   if (! publicp)
6780     {
6781       DECL_INTERFACE_KNOWN (decl) = 1;
6782       DECL_NOT_REALLY_EXTERN (decl) = 1;
6783     }
6784
6785   /* If the declaration was declared inline, mark it as such.  */
6786   if (inlinep)
6787     DECL_DECLARED_INLINE_P (decl) = 1;
6788
6789   DECL_EXTERNAL (decl) = 1;
6790   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6791     {
6792       error (ctype
6793              ? G_("static member function %qD cannot have cv-qualifier")
6794              : G_("non-member function %qD cannot have cv-qualifier"),
6795              decl);
6796       quals = TYPE_UNQUALIFIED;
6797     }
6798
6799   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6800       && !grok_op_properties (decl, /*complain=*/true))
6801     return NULL_TREE;
6802
6803   if (ctype && decl_function_context (decl))
6804     DECL_NO_STATIC_CHAIN (decl) = 1;
6805
6806   if (funcdef_flag)
6807     /* Make the init_value nonzero so pushdecl knows this is not
6808        tentative.  error_mark_node is replaced later with the BLOCK.  */
6809     DECL_INITIAL (decl) = error_mark_node;
6810
6811   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6812     TREE_NOTHROW (decl) = 1;
6813
6814   /* Caller will do the rest of this.  */
6815   if (check < 0)
6816     return decl;
6817
6818   if (ctype != NULL_TREE)
6819     grokclassfn (ctype, decl, flags);
6820
6821   decl = check_explicit_specialization (orig_declarator, decl,
6822                                         template_count,
6823                                         2 * funcdef_flag +
6824                                         4 * (friendp != 0));
6825   if (decl == error_mark_node)
6826     return NULL_TREE;
6827
6828   if (attrlist)
6829     {
6830       cplus_decl_attributes (&decl, *attrlist, 0);
6831       *attrlist = NULL_TREE;
6832     }
6833
6834   /* Check main's type after attributes have been applied.  */
6835   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6836     {
6837       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6838                         integer_type_node))
6839         {
6840           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6841           tree newtype;
6842           error ("%<::main%> must return %<int%>");
6843           newtype = build_function_type (integer_type_node, oldtypeargs);
6844           TREE_TYPE (decl) = newtype;
6845         }
6846       if (warn_main)
6847         check_main_parameter_types (decl);
6848     }
6849
6850   if (ctype != NULL_TREE
6851       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6852       && check)
6853     {
6854       tree old_decl = check_classfn (ctype, decl,
6855                                      (processing_template_decl
6856                                       > template_class_depth (ctype))
6857                                      ? current_template_parms
6858                                      : NULL_TREE);
6859
6860       if (old_decl == error_mark_node)
6861         return NULL_TREE;
6862
6863       if (old_decl)
6864         {
6865           tree ok;
6866           tree pushed_scope;
6867
6868           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6869             /* Because grokfndecl is always supposed to return a
6870                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6871                here.  We depend on our callers to figure out that its
6872                really a template that's being returned.  */
6873             old_decl = DECL_TEMPLATE_RESULT (old_decl);
6874
6875           if (DECL_STATIC_FUNCTION_P (old_decl)
6876               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6877             /* Remove the `this' parm added by grokclassfn.
6878                XXX Isn't this done in start_function, too?  */
6879             revert_static_member_fn (decl);
6880           if (DECL_ARTIFICIAL (old_decl))
6881             {
6882               error ("definition of implicitly-declared %qD", old_decl);
6883               return NULL_TREE;
6884             }
6885
6886           /* Since we've smashed OLD_DECL to its
6887              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
6888           if (TREE_CODE (decl) == TEMPLATE_DECL)
6889             decl = DECL_TEMPLATE_RESULT (decl);
6890
6891           /* Attempt to merge the declarations.  This can fail, in
6892              the case of some invalid specialization declarations.  */
6893           pushed_scope = push_scope (ctype);
6894           ok = duplicate_decls (decl, old_decl, friendp);
6895           if (pushed_scope)
6896             pop_scope (pushed_scope);
6897           if (!ok)
6898             {
6899               error ("no %q#D member function declared in class %qT",
6900                      decl, ctype);
6901               return NULL_TREE;
6902             }
6903           return old_decl;
6904         }
6905     }
6906
6907   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6908     return NULL_TREE;
6909
6910   if (ctype == NULL_TREE || check)
6911     return decl;
6912
6913   if (virtualp)
6914     DECL_VIRTUAL_P (decl) = 1;
6915
6916   return decl;
6917 }
6918
6919 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
6920    the linkage that DECL will receive in the object file.  */
6921
6922 static void
6923 set_linkage_for_static_data_member (tree decl)
6924 {
6925   /* A static data member always has static storage duration and
6926      external linkage.  Note that static data members are forbidden in
6927      local classes -- the only situation in which a class has
6928      non-external linkage.  */
6929   TREE_PUBLIC (decl) = 1;
6930   TREE_STATIC (decl) = 1;
6931   /* For non-template classes, static data members are always put
6932      out in exactly those files where they are defined, just as
6933      with ordinary namespace-scope variables.  */
6934   if (!processing_template_decl)
6935     DECL_INTERFACE_KNOWN (decl) = 1;
6936 }
6937
6938 /* Create a VAR_DECL named NAME with the indicated TYPE.
6939
6940    If SCOPE is non-NULL, it is the class type or namespace containing
6941    the variable.  If SCOPE is NULL, the variable should is created in
6942    the innermost enclosings scope.  */
6943
6944 static tree
6945 grokvardecl (tree type,
6946              tree name,
6947              const cp_decl_specifier_seq *declspecs,
6948              int initialized,
6949              int constp,
6950              tree scope)
6951 {
6952   tree decl;
6953   tree explicit_scope;
6954
6955   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6956
6957   /* Compute the scope in which to place the variable, but remember
6958      whether or not that scope was explicitly specified by the user.   */
6959   explicit_scope = scope;
6960   if (!scope)
6961     {
6962       /* An explicit "extern" specifier indicates a namespace-scope
6963          variable.  */
6964       if (declspecs->storage_class == sc_extern)
6965         scope = current_namespace;
6966       else if (!at_function_scope_p ())
6967         scope = current_scope ();
6968     }
6969
6970   if (scope
6971       && (/* If the variable is a namespace-scope variable declared in a
6972              template, we need DECL_LANG_SPECIFIC.  */
6973           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6974           /* Similarly for namespace-scope variables with language linkage
6975              other than C++.  */
6976           || (TREE_CODE (scope) == NAMESPACE_DECL
6977               && current_lang_name != lang_name_cplusplus)
6978           /* Similarly for static data members.  */
6979           || TYPE_P (scope)))
6980     decl = build_lang_decl (VAR_DECL, name, type);
6981   else
6982     decl = build_decl (VAR_DECL, name, type);
6983
6984   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6985     set_decl_namespace (decl, explicit_scope, 0);
6986   else
6987     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6988
6989   if (declspecs->storage_class == sc_extern)
6990     {
6991       DECL_THIS_EXTERN (decl) = 1;
6992       DECL_EXTERNAL (decl) = !initialized;
6993     }
6994
6995   if (DECL_CLASS_SCOPE_P (decl))
6996     {
6997       set_linkage_for_static_data_member (decl);
6998       /* This function is only called with out-of-class definitions.  */
6999       DECL_EXTERNAL (decl) = 0;
7000       check_class_member_definition_namespace (decl);
7001     }
7002   /* At top level, either `static' or no s.c. makes a definition
7003      (perhaps tentative), and absence of `static' makes it public.  */
7004   else if (toplevel_bindings_p ())
7005     {
7006       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7007                             && (DECL_THIS_EXTERN (decl) || ! constp));
7008       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7009     }
7010   /* Not at top level, only `static' makes a static definition.  */
7011   else
7012     {
7013       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7014       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7015     }
7016
7017   if (declspecs->specs[(int)ds_thread])
7018     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7019
7020   if (TREE_PUBLIC (decl))
7021     {
7022       /* [basic.link]: A name with no linkage (notably, the name of a class
7023          or enumeration declared in a local scope) shall not be used to
7024          declare an entity with linkage.
7025
7026          Only check this for public decls for now.  */
7027       tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
7028       if (t)
7029         {
7030           if (TYPE_ANONYMOUS_P (t))
7031             {
7032               if (DECL_EXTERN_C_P (decl))
7033                 /* Allow this; it's pretty common in C.  */
7034                   ;
7035               else
7036                 {
7037                   /* DRs 132, 319 and 389 seem to indicate types with
7038                      no linkage can only be used to declare extern "C"
7039                      entities.  Since it's not always an error in the
7040                      ISO C++ 90 Standard, we only issue a warning.  */
7041                   warning (0, "non-local variable %q#D uses anonymous type",
7042                            decl);
7043                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7044                     warning (0, "%q+#D does not refer to the unqualified "
7045                              "type, so it is not used for linkage",
7046                              TYPE_NAME (t));
7047                 }
7048             }
7049           else
7050             warning (0, "non-local variable %q#D uses local type %qT", decl, t);
7051         }
7052     }
7053   else
7054     DECL_INTERFACE_KNOWN (decl) = 1;
7055
7056   return decl;
7057 }
7058
7059 /* Create and return a canonical pointer to member function type, for
7060    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7061
7062 tree
7063 build_ptrmemfunc_type (tree type)
7064 {
7065   tree field, fields;
7066   tree t;
7067   tree unqualified_variant = NULL_TREE;
7068
7069   if (type == error_mark_node)
7070     return type;
7071
7072   /* If a canonical type already exists for this type, use it.  We use
7073      this method instead of type_hash_canon, because it only does a
7074      simple equality check on the list of field members.  */
7075
7076   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7077     return t;
7078
7079   /* Make sure that we always have the unqualified pointer-to-member
7080      type first.  */
7081   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7082     unqualified_variant
7083       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7084
7085   t = make_class_type (RECORD_TYPE);
7086   xref_basetypes (t, NULL_TREE);
7087
7088   /* Let the front end know this is a pointer to member function...  */
7089   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7090   /* ... and not really a class type.  */
7091   SET_CLASS_TYPE_P (t, 0);
7092
7093   field = build_decl (FIELD_DECL, pfn_identifier, type);
7094   fields = field;
7095
7096   field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
7097   TREE_CHAIN (field) = fields;
7098   fields = field;
7099
7100   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7101
7102   /* Zap out the name so that the back end will give us the debugging
7103      information for this anonymous RECORD_TYPE.  */
7104   TYPE_NAME (t) = NULL_TREE;
7105
7106   /* If this is not the unqualified form of this pointer-to-member
7107      type, set the TYPE_MAIN_VARIANT for this type to be the
7108      unqualified type.  Since they are actually RECORD_TYPEs that are
7109      not variants of each other, we must do this manually.  */
7110   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7111     {
7112       t = build_qualified_type (t, cp_type_quals (type));
7113       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7114       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7115       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7116       TREE_TYPE (TYPE_BINFO (t)) = t;
7117     }
7118
7119   /* Cache this pointer-to-member type so that we can find it again
7120      later.  */
7121   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7122
7123   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7124     SET_TYPE_STRUCTURAL_EQUALITY (t);
7125   else if (TYPE_CANONICAL (type) != type)
7126     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7127
7128   return t;
7129 }
7130
7131 /* Create and return a pointer to data member type.  */
7132
7133 tree
7134 build_ptrmem_type (tree class_type, tree member_type)
7135 {
7136   if (TREE_CODE (member_type) == METHOD_TYPE)
7137     {
7138       tree arg_types = TYPE_ARG_TYPES (member_type);
7139       cp_cv_quals quals = cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)));
7140       member_type = build_memfn_type (member_type, class_type, quals);
7141       return build_ptrmemfunc_type (build_pointer_type (member_type));
7142     }
7143   else
7144     {
7145       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7146       return build_offset_type (class_type, member_type);
7147     }
7148 }
7149
7150 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7151    Check to see that the definition is valid.  Issue appropriate error
7152    messages.  Return 1 if the definition is particularly bad, or 0
7153    otherwise.  */
7154
7155 int
7156 check_static_variable_definition (tree decl, tree type)
7157 {
7158   /* Motion 10 at San Diego: If a static const integral data member is
7159      initialized with an integral constant expression, the initializer
7160      may appear either in the declaration (within the class), or in
7161      the definition, but not both.  If it appears in the class, the
7162      member is a member constant.  The file-scope definition is always
7163      required.  */
7164   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7165     {
7166       error ("invalid in-class initialization of static data member "
7167              "of non-integral type %qT",
7168              type);
7169       /* If we just return the declaration, crashes will sometimes
7170          occur.  We therefore return void_type_node, as if this were a
7171          friend declaration, to cause callers to completely ignore
7172          this declaration.  */
7173       return 1;
7174     }
7175   else if (!CP_TYPE_CONST_P (type))
7176     error ("ISO C++ forbids in-class initialization of non-const "
7177            "static member %qD",
7178            decl);
7179   else if (!INTEGRAL_TYPE_P (type))
7180     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7181              "%qD of non-integral type %qT", decl, type);
7182
7183   return 0;
7184 }
7185
7186 /* Given the SIZE (i.e., number of elements) in an array, compute an
7187    appropriate index type for the array.  If non-NULL, NAME is the
7188    name of the thing being declared.  */
7189
7190 tree
7191 compute_array_index_type (tree name, tree size)
7192 {
7193   tree type;
7194   tree itype;
7195   tree abi_1_itype = NULL_TREE;
7196
7197   if (error_operand_p (size))
7198     return error_mark_node;
7199
7200   type = TREE_TYPE (size);
7201   /* The array bound must be an integer type.  */
7202   if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
7203     {
7204       if (name)
7205         error ("size of array %qD has non-integral type %qT", name, type);
7206       else
7207         error ("size of array has non-integral type %qT", type);
7208       size = integer_one_node;
7209       type = TREE_TYPE (size);
7210     }
7211
7212   /* We can only call value_dependent_expression_p on integral constant
7213      expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7214      set if this isn't one.  */
7215   if (processing_template_decl
7216       && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7217     {
7218       /* We cannot do any checking for a SIZE that isn't known to be
7219          constant. Just build the index type and mark that it requires
7220          structural equality checks.  */
7221       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7222                                            size, integer_one_node));
7223       TYPE_DEPENDENT_P (itype) = 1;
7224       TYPE_DEPENDENT_P_VALID (itype) = 1;
7225       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7226       return itype;
7227     }
7228   
7229   if (!abi_version_at_least (2) && processing_template_decl)
7230     /* For abi-1, we handled all instances in templates the same way,
7231        even when they were non-dependent. This affects the manglings
7232        produced.  So, we do the normal checking for non-dependent
7233        sizes, but at the end we'll return the same type that abi-1
7234        would have, but with TYPE_CANONICAL set to the "right"
7235        value that the current ABI would provide. */
7236     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7237                                                size, integer_one_node));
7238
7239   /* The size might be the result of a cast.  */
7240   STRIP_TYPE_NOPS (size);
7241
7242   /* It might be a const variable or enumeration constant.  */
7243   size = integral_constant_value (size);
7244
7245   /* Normally, the array-bound will be a constant.  */
7246   if (TREE_CODE (size) == INTEGER_CST)
7247     {
7248       /* Check to see if the array bound overflowed.  Make that an
7249          error, no matter how generous we're being.  */
7250       constant_expression_error (size);
7251
7252       /* An array must have a positive number of elements.  */
7253       if (INT_CST_LT (size, integer_zero_node))
7254         {
7255           if (name)
7256             error ("size of array %qD is negative", name);
7257           else
7258             error ("size of array is negative");
7259           size = integer_one_node;
7260         }
7261       /* As an extension we allow zero-sized arrays.  We always allow
7262          them in system headers because glibc uses them.  */
7263       else if (integer_zerop (size) && !in_system_header)
7264         {
7265           if (name)
7266             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7267           else
7268             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7269         }
7270     }
7271   else if (TREE_CONSTANT (size))
7272     {
7273       /* `(int) &fn' is not a valid array bound.  */
7274       if (name)
7275         error ("size of array %qD is not an integral constant-expression",
7276                name);
7277       else
7278         error ("size of array is not an integral constant-expression");
7279       size = integer_one_node;
7280     }
7281   else if (pedantic && warn_vla != 0)
7282     {
7283       if (name)
7284         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7285       else
7286         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7287     }
7288   else if (warn_vla > 0)
7289     {
7290       if (name)
7291         warning (OPT_Wvla, 
7292                  "variable length array %qD is used", name);
7293       else
7294         warning (OPT_Wvla, 
7295                  "variable length array is used");
7296     }
7297
7298   if (processing_template_decl && !TREE_CONSTANT (size))
7299     /* A variable sized array.  */
7300     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7301   else
7302     {
7303       HOST_WIDE_INT saved_processing_template_decl;
7304
7305       /* Compute the index of the largest element in the array.  It is
7306          one less than the number of elements in the array.  We save
7307          and restore PROCESSING_TEMPLATE_DECL so that computations in
7308          cp_build_binary_op will be appropriately folded.  */
7309       saved_processing_template_decl = processing_template_decl;
7310       processing_template_decl = 0;
7311       itype = cp_build_binary_op (input_location,
7312                                   MINUS_EXPR,
7313                                   cp_convert (ssizetype, size),
7314                                   cp_convert (ssizetype, integer_one_node),
7315                                   tf_warning_or_error);
7316       itype = fold (itype);
7317       processing_template_decl = saved_processing_template_decl;
7318
7319       if (!TREE_CONSTANT (itype))
7320         /* A variable sized array.  */
7321         itype = variable_size (itype);
7322       /* Make sure that there was no overflow when creating to a signed
7323          index type.  (For example, on a 32-bit machine, an array with
7324          size 2^32 - 1 is too big.)  */
7325       else if (TREE_CODE (itype) == INTEGER_CST
7326                && TREE_OVERFLOW (itype))
7327         {
7328           error ("overflow in array dimension");
7329           TREE_OVERFLOW (itype) = 0;
7330         }
7331     }
7332
7333   /* Create and return the appropriate index type.  */
7334   if (abi_1_itype)
7335     {
7336       tree t = build_index_type (itype);
7337       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7338       return abi_1_itype;
7339     }
7340   else
7341     return build_index_type (itype);
7342 }
7343
7344 /* Returns the scope (if any) in which the entity declared by
7345    DECLARATOR will be located.  If the entity was declared with an
7346    unqualified name, NULL_TREE is returned.  */
7347
7348 tree
7349 get_scope_of_declarator (const cp_declarator *declarator)
7350 {
7351   while (declarator && declarator->kind != cdk_id)
7352     declarator = declarator->declarator;
7353
7354   /* If the declarator-id is a SCOPE_REF, the scope in which the
7355      declaration occurs is the first operand.  */
7356   if (declarator
7357       && declarator->u.id.qualifying_scope)
7358     return declarator->u.id.qualifying_scope;
7359
7360   /* Otherwise, the declarator is not a qualified name; the entity will
7361      be declared in the current scope.  */
7362   return NULL_TREE;
7363 }
7364
7365 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7366    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
7367    with this type.  */
7368
7369 static tree
7370 create_array_type_for_decl (tree name, tree type, tree size)
7371 {
7372   tree itype = NULL_TREE;
7373   const char* error_msg;
7374
7375   /* If things have already gone awry, bail now.  */
7376   if (type == error_mark_node || size == error_mark_node)
7377     return error_mark_node;
7378
7379   /* Assume that everything will go OK.  */
7380   error_msg = NULL;
7381
7382   /* There are some types which cannot be array elements.  */
7383   switch (TREE_CODE (type))
7384     {
7385     case VOID_TYPE:
7386       error_msg = "array of void";
7387       break;
7388
7389     case FUNCTION_TYPE:
7390       error_msg = "array of functions";
7391       break;
7392
7393     case REFERENCE_TYPE:
7394       error_msg = "array of references";
7395       break;
7396
7397     case METHOD_TYPE:
7398       error_msg = "array of function members";
7399       break;
7400
7401     default:
7402       break;
7403     }
7404
7405   /* If something went wrong, issue an error-message and return.  */
7406   if (error_msg)
7407     {
7408       if (name)
7409         error ("declaration of %qD as %s", name, error_msg);
7410       else
7411         error ("creating %s", error_msg);
7412
7413       return error_mark_node;
7414     }
7415
7416   /* [dcl.array]
7417
7418      The constant expressions that specify the bounds of the arrays
7419      can be omitted only for the first member of the sequence.  */
7420   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7421     {
7422       if (name)
7423         error ("declaration of %qD as multidimensional array must "
7424                "have bounds for all dimensions except the first",
7425                name);
7426       else
7427         error ("multidimensional array must have bounds for all "
7428                "dimensions except the first");
7429
7430       return error_mark_node;
7431     }
7432
7433   /* Figure out the index type for the array.  */
7434   if (size)
7435     itype = compute_array_index_type (name, size);
7436
7437   /* [dcl.array]
7438      T is called the array element type; this type shall not be [...] an
7439      abstract class type.  */
7440   abstract_virtuals_error (name, type);
7441
7442   return build_cplus_array_type (type, itype);
7443 }
7444
7445 /* Check that it's OK to declare a function with the indicated TYPE.
7446    SFK indicates the kind of special function (if any) that this
7447    function is.  OPTYPE is the type given in a conversion operator
7448    declaration, or the class type for a constructor/destructor.
7449    Returns the actual return type of the function; that
7450    may be different than TYPE if an error occurs, or for certain
7451    special functions.  */
7452
7453 static tree
7454 check_special_function_return_type (special_function_kind sfk,
7455                                     tree type,
7456                                     tree optype)
7457 {
7458   switch (sfk)
7459     {
7460     case sfk_constructor:
7461       if (type)
7462         error ("return type specification for constructor invalid");
7463
7464       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7465         type = build_pointer_type (optype);
7466       else
7467         type = void_type_node;
7468       break;
7469
7470     case sfk_destructor:
7471       if (type)
7472         error ("return type specification for destructor invalid");
7473       /* We can't use the proper return type here because we run into
7474          problems with ambiguous bases and covariant returns.
7475          Java classes are left unchanged because (void *) isn't a valid
7476          Java type, and we don't want to change the Java ABI.  */
7477       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7478         type = build_pointer_type (void_type_node);
7479       else
7480         type = void_type_node;
7481       break;
7482
7483     case sfk_conversion:
7484       if (type)
7485         error ("return type specified for %<operator %T%>",  optype);
7486       type = optype;
7487       break;
7488
7489     default:
7490       gcc_unreachable ();
7491     }
7492
7493   return type;
7494 }
7495
7496 /* A variable or data member (whose unqualified name is IDENTIFIER)
7497    has been declared with the indicated TYPE.  If the TYPE is not
7498    acceptable, issue an error message and return a type to use for
7499    error-recovery purposes.  */
7500
7501 tree
7502 check_var_type (tree identifier, tree type)
7503 {
7504   if (VOID_TYPE_P (type))
7505     {
7506       if (!identifier)
7507         error ("unnamed variable or field declared void");
7508       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7509         {
7510           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7511           error ("variable or field %qE declared void", identifier);
7512         }
7513       else
7514         error ("variable or field declared void");
7515       type = error_mark_node;
7516     }
7517
7518   return type;
7519 }
7520
7521 /* Given declspecs and a declarator (abstract or otherwise), determine
7522    the name and type of the object declared and construct a DECL node
7523    for it.
7524
7525    DECLSPECS points to the representation of declaration-specifier
7526    sequence that precedes declarator.
7527
7528    DECL_CONTEXT says which syntactic context this declaration is in:
7529      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7530      FUNCDEF for a function definition.  Like NORMAL but a few different
7531       error messages in each case.  Return value may be zero meaning
7532       this definition is too screwy to try to parse.
7533      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
7534       handle member functions (which have FIELD context).
7535       Return value may be zero meaning this definition is too screwy to
7536       try to parse.
7537      PARM for a parameter declaration (either within a function prototype
7538       or before a function body).  Make a PARM_DECL, or return void_type_node.
7539      CATCHPARM for a parameter declaration before a catch clause.
7540      TYPENAME if for a typename (in a cast or sizeof).
7541       Don't make a DECL node; just return the ..._TYPE node.
7542      FIELD for a struct or union field; make a FIELD_DECL.
7543      BITFIELD for a field with specified width.
7544    INITIALIZED is as for start_decl.
7545
7546    ATTRLIST is a pointer to the list of attributes, which may be NULL
7547    if there are none; *ATTRLIST may be modified if attributes from inside
7548    the declarator should be applied to the declaration.
7549
7550    When this function is called, scoping variables (such as
7551    CURRENT_CLASS_TYPE) should reflect the scope in which the
7552    declaration occurs, not the scope in which the new declaration will
7553    be placed.  For example, on:
7554
7555      void S::f() { ... }
7556
7557    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7558    should not be `S'.
7559
7560    Returns a DECL (if a declarator is present), a TYPE (if there is no
7561    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7562    error occurs. */
7563
7564 tree
7565 grokdeclarator (const cp_declarator *declarator,
7566                 const cp_decl_specifier_seq *declspecs,
7567                 enum decl_context decl_context,
7568                 int initialized,
7569                 tree* attrlist)
7570 {
7571   tree type = NULL_TREE;
7572   int longlong = 0;
7573   int virtualp, explicitp, friendp, inlinep, staticp;
7574   int explicit_int = 0;
7575   int explicit_char = 0;
7576   int defaulted_int = 0;
7577   tree dependent_name = NULL_TREE;
7578
7579   tree typedef_decl = NULL_TREE;
7580   const char *name = NULL;
7581   tree typedef_type = NULL_TREE;
7582   /* True if this declarator is a function definition.  */
7583   bool funcdef_flag = false;
7584   cp_declarator_kind innermost_code = cdk_error;
7585   int bitfield = 0;
7586 #if 0
7587   /* See the code below that used this.  */
7588   tree decl_attr = NULL_TREE;
7589 #endif
7590
7591   /* Keep track of what sort of function is being processed
7592      so that we can warn about default return values, or explicit
7593      return values which do not match prescribed defaults.  */
7594   special_function_kind sfk = sfk_none;
7595
7596   tree dname = NULL_TREE;
7597   tree ctor_return_type = NULL_TREE;
7598   enum overload_flags flags = NO_SPECIAL;
7599   /* cv-qualifiers that apply to the declarator, for a declaration of
7600      a member function.  */
7601   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7602   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
7603   int type_quals;
7604   tree raises = NULL_TREE;
7605   int template_count = 0;
7606   tree returned_attrs = NULL_TREE;
7607   tree parms = NULL_TREE;
7608   const cp_declarator *id_declarator;
7609   /* The unqualified name of the declarator; either an
7610      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
7611   tree unqualified_id;
7612   /* The class type, if any, in which this entity is located,
7613      or NULL_TREE if none.  Note that this value may be different from
7614      the current class type; for example if an attempt is made to declare
7615      "A::f" inside "B", this value will be "A".  */
7616   tree ctype = current_class_type;
7617   /* The NAMESPACE_DECL for the namespace in which this entity is
7618      located.  If an unqualified name is used to declare the entity,
7619      this value will be NULL_TREE, even if the entity is located at
7620      namespace scope.  */
7621   tree in_namespace = NULL_TREE;
7622   cp_storage_class storage_class;
7623   bool unsigned_p, signed_p, short_p, long_p, thread_p;
7624   bool type_was_error_mark_node = false;
7625   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7626   bool template_type_arg = false;
7627
7628   signed_p = declspecs->specs[(int)ds_signed];
7629   unsigned_p = declspecs->specs[(int)ds_unsigned];
7630   short_p = declspecs->specs[(int)ds_short];
7631   long_p = declspecs->specs[(int)ds_long];
7632   longlong = declspecs->specs[(int)ds_long] >= 2;
7633   thread_p = declspecs->specs[(int)ds_thread];
7634
7635   if (decl_context == FUNCDEF)
7636     funcdef_flag = true, decl_context = NORMAL;
7637   else if (decl_context == MEMFUNCDEF)
7638     funcdef_flag = true, decl_context = FIELD;
7639   else if (decl_context == BITFIELD)
7640     bitfield = 1, decl_context = FIELD;
7641   else if (decl_context == TEMPLATE_TYPE_ARG)
7642     template_type_arg = true, decl_context = TYPENAME;
7643
7644   if (initialized > 1)
7645     funcdef_flag = true;
7646
7647   /* Look inside a declarator for the name being declared
7648      and get it as a string, for an error message.  */
7649   for (id_declarator = declarator;
7650        id_declarator;
7651        id_declarator = id_declarator->declarator)
7652     {
7653       if (id_declarator->kind != cdk_id)
7654         innermost_code = id_declarator->kind;
7655
7656       switch (id_declarator->kind)
7657         {
7658         case cdk_function:
7659           if (id_declarator->declarator
7660               && id_declarator->declarator->kind == cdk_id)
7661             {
7662               sfk = id_declarator->declarator->u.id.sfk;
7663               if (sfk == sfk_destructor)
7664                 flags = DTOR_FLAG;
7665             }
7666           break;
7667
7668         case cdk_id:
7669           {
7670             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7671             tree decl = id_declarator->u.id.unqualified_name;
7672             if (!decl)
7673               break;
7674             if (qualifying_scope)
7675               {
7676                 if (at_function_scope_p ())
7677                   {
7678                     /* [dcl.meaning] 
7679
7680                        A declarator-id shall not be qualified except
7681                        for ... 
7682
7683                        None of the cases are permitted in block
7684                        scope.  */
7685                     if (qualifying_scope == global_namespace)
7686                       error ("invalid use of qualified-name %<::%D%>",
7687                              decl);
7688                     else if (TYPE_P (qualifying_scope))
7689                       error ("invalid use of qualified-name %<%T::%D%>",
7690                              qualifying_scope, decl);
7691                     else 
7692                       error ("invalid use of qualified-name %<%D::%D%>",
7693                              qualifying_scope, decl);
7694                     return error_mark_node;
7695                   }
7696                 else if (TYPE_P (qualifying_scope))
7697                   {
7698                     ctype = qualifying_scope;
7699                     if (innermost_code != cdk_function
7700                         && current_class_type
7701                         && !UNIQUELY_DERIVED_FROM_P (ctype,
7702                                                      current_class_type))
7703                       {
7704                         error ("type %qT is not derived from type %qT",
7705                                ctype, current_class_type);
7706                         return error_mark_node;
7707                       }
7708                   }
7709                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7710                   in_namespace = qualifying_scope;
7711               }
7712             switch (TREE_CODE (decl))
7713               {
7714               case BIT_NOT_EXPR:
7715                 {
7716                   tree type;
7717
7718                   if (innermost_code != cdk_function)
7719                     {
7720                       error ("declaration of %qD as non-function", decl);
7721                       return error_mark_node;
7722                     }
7723                   else if (!qualifying_scope
7724                            && !(current_class_type && at_class_scope_p ()))
7725                     {
7726                       error ("declaration of %qD as non-member", decl);
7727                       return error_mark_node;
7728                     }
7729
7730                   type = TREE_OPERAND (decl, 0);
7731                   if (TYPE_P (type))
7732                     type = constructor_name (type);
7733                   name = IDENTIFIER_POINTER (type);
7734                   dname = decl;
7735                 }
7736                 break;
7737
7738               case TEMPLATE_ID_EXPR:
7739                 {
7740                   tree fns = TREE_OPERAND (decl, 0);
7741
7742                   dname = fns;
7743                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
7744                     {
7745                       gcc_assert (is_overloaded_fn (dname));
7746                       dname = DECL_NAME (get_first_fn (dname));
7747                     }
7748                 }
7749                 /* Fall through.  */
7750
7751               case IDENTIFIER_NODE:
7752                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7753                   dname = decl;
7754
7755                 if (C_IS_RESERVED_WORD (dname))
7756                   {
7757                     error ("declarator-id missing; using reserved word %qD",
7758                            dname);
7759                     name = IDENTIFIER_POINTER (dname);
7760                   }
7761                 else if (!IDENTIFIER_TYPENAME_P (dname))
7762                   name = IDENTIFIER_POINTER (dname);
7763                 else
7764                   {
7765                     gcc_assert (flags == NO_SPECIAL);
7766                     flags = TYPENAME_FLAG;
7767                     ctor_return_type = TREE_TYPE (dname);
7768                     sfk = sfk_conversion;
7769                     if (is_typename_at_global_scope (dname))
7770                       name = IDENTIFIER_POINTER (dname);
7771                     else
7772                       name = "<invalid operator>";
7773                   }
7774                 break;
7775
7776               default:
7777                 gcc_unreachable ();
7778               }
7779             break;
7780           }
7781
7782         case cdk_array:
7783         case cdk_pointer:
7784         case cdk_reference:
7785         case cdk_ptrmem:
7786           break;
7787
7788         case cdk_error:
7789           return error_mark_node;
7790
7791         default:
7792           gcc_unreachable ();
7793         }
7794       if (id_declarator->kind == cdk_id)
7795         break;
7796     }
7797
7798   /* [dcl.fct.edf]
7799
7800      The declarator in a function-definition shall have the form
7801      D1 ( parameter-declaration-clause) ...  */
7802   if (funcdef_flag && innermost_code != cdk_function)
7803     {
7804       error ("function definition does not declare parameters");
7805       return error_mark_node;
7806     }
7807
7808   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7809       && innermost_code != cdk_function
7810       && ! (ctype && !declspecs->any_specifiers_p))
7811     {
7812       error ("declaration of %qD as non-function", dname);
7813       return error_mark_node;
7814     }
7815
7816   /* Anything declared one level down from the top level
7817      must be one of the parameters of a function
7818      (because the body is at least two levels down).  */
7819
7820   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7821      by not allowing C++ class definitions to specify their parameters
7822      with xdecls (must be spec.d in the parmlist).
7823
7824      Since we now wait to push a class scope until we are sure that
7825      we are in a legitimate method context, we must set oldcname
7826      explicitly (since current_class_name is not yet alive).
7827
7828      We also want to avoid calling this a PARM if it is in a namespace.  */
7829
7830   if (decl_context == NORMAL && !toplevel_bindings_p ())
7831     {
7832       struct cp_binding_level *b = current_binding_level;
7833       current_binding_level = b->level_chain;
7834       if (current_binding_level != 0 && toplevel_bindings_p ())
7835         decl_context = PARM;
7836       current_binding_level = b;
7837     }
7838
7839   if (name == NULL)
7840     name = decl_context == PARM ? "parameter" : "type name";
7841
7842   /* If there were multiple types specified in the decl-specifier-seq,
7843      issue an error message.  */
7844   if (declspecs->multiple_types_p)
7845     {
7846       error ("two or more data types in declaration of %qs", name);
7847       return error_mark_node;
7848     }
7849
7850   if (declspecs->conflicting_specifiers_p)
7851     {
7852       error ("conflicting specifiers in declaration of %qs", name);
7853       return error_mark_node;
7854     }
7855
7856   /* Extract the basic type from the decl-specifier-seq.  */
7857   type = declspecs->type;
7858   if (type == error_mark_node)
7859     {
7860       type = NULL_TREE;
7861       type_was_error_mark_node = true;
7862     }
7863   /* If the entire declaration is itself tagged as deprecated then
7864      suppress reports of deprecated items.  */
7865   if (type && TREE_DEPRECATED (type)
7866       && deprecated_state != DEPRECATED_SUPPRESS)
7867     warn_deprecated_use (type);
7868   if (type && TREE_CODE (type) == TYPE_DECL)
7869     {
7870       typedef_decl = type;
7871       type = TREE_TYPE (typedef_decl);
7872       if (TREE_DEPRECATED (type)
7873           && DECL_ARTIFICIAL (typedef_decl)
7874           && deprecated_state != DEPRECATED_SUPPRESS)
7875         warn_deprecated_use (type);
7876     }
7877   /* No type at all: default to `int', and set DEFAULTED_INT
7878      because it was not a user-defined typedef.  */
7879   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7880     {
7881       /* These imply 'int'.  */
7882       type = integer_type_node;
7883       defaulted_int = 1;
7884     }
7885   /* Gather flags.  */
7886   explicit_int = declspecs->explicit_int_p;
7887   explicit_char = declspecs->explicit_char_p;
7888
7889 #if 0
7890   /* See the code below that used this.  */
7891   if (typedef_decl)
7892     decl_attr = DECL_ATTRIBUTES (typedef_decl);
7893 #endif
7894   typedef_type = type;
7895
7896
7897   if (sfk != sfk_conversion)
7898     ctor_return_type = ctype;
7899
7900   if (sfk != sfk_none)
7901     type = check_special_function_return_type (sfk, type,
7902                                                ctor_return_type);
7903   else if (type == NULL_TREE)
7904     {
7905       int is_main;
7906
7907       explicit_int = -1;
7908
7909       /* We handle `main' specially here, because 'main () { }' is so
7910          common.  With no options, it is allowed.  With -Wreturn-type,
7911          it is a warning.  It is only an error with -pedantic-errors.  */
7912       is_main = (funcdef_flag
7913                  && dname && MAIN_NAME_P (dname)
7914                  && ctype == NULL_TREE
7915                  && in_namespace == NULL_TREE
7916                  && current_namespace == global_namespace);
7917
7918       if (type_was_error_mark_node)
7919         /* We've already issued an error, don't complain more.  */;
7920       else if (in_system_header || flag_ms_extensions)
7921         /* Allow it, sigh.  */;
7922       else if (! is_main)
7923         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
7924       else if (pedantic)
7925         pedwarn (input_location, OPT_pedantic,
7926                  "ISO C++ forbids declaration of %qs with no type", name);
7927       else
7928         warning (OPT_Wreturn_type,
7929                  "ISO C++ forbids declaration of %qs with no type", name);
7930
7931       type = integer_type_node;
7932     }
7933
7934   ctype = NULL_TREE;
7935
7936   /* Now process the modifiers that were specified
7937      and check for invalid combinations.  */
7938
7939   /* Long double is a special combination.  */
7940   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7941     {
7942       long_p = false;
7943       type = build_qualified_type (long_double_type_node,
7944                                    cp_type_quals (type));
7945     }
7946
7947   /* Check all other uses of type modifiers.  */
7948
7949   if (unsigned_p || signed_p || long_p || short_p)
7950     {
7951       int ok = 0;
7952
7953       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7954         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7955       else if (signed_p && unsigned_p)
7956         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7957       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7958         error ("%<long long%> invalid for %qs", name);
7959       else if (long_p && TREE_CODE (type) == REAL_TYPE)
7960         error ("%<long%> invalid for %qs", name);
7961       else if (short_p && TREE_CODE (type) == REAL_TYPE)
7962         error ("%<short%> invalid for %qs", name);
7963       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7964         error ("%<long%> or %<short%> invalid for %qs", name);
7965       else if ((long_p || short_p) && explicit_char)
7966         error ("%<long%> or %<short%> specified with char for %qs", name);
7967       else if (long_p && short_p)
7968         error ("%<long%> and %<short%> specified together for %qs", name);
7969       else if (type == char16_type_node || type == char32_type_node)
7970         {
7971           if (signed_p || unsigned_p)
7972             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7973           else if (short_p || long_p)
7974             error ("%<short%> or %<long%> invalid for %qs", name);
7975         }
7976       else
7977         {
7978           ok = 1;
7979           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7980             {
7981               pedwarn (input_location, OPT_pedantic, 
7982                        "long, short, signed or unsigned used invalidly for %qs",
7983                        name);
7984               if (flag_pedantic_errors)
7985                 ok = 0;
7986             }
7987         }
7988
7989       /* Discard the type modifiers if they are invalid.  */
7990       if (! ok)
7991         {
7992           unsigned_p = false;
7993           signed_p = false;
7994           long_p = false;
7995           short_p = false;
7996           longlong = 0;
7997         }
7998     }
7999
8000   /* Decide whether an integer type is signed or not.
8001      Optionally treat bitfields as signed by default.  */
8002   if (unsigned_p
8003       /* [class.bit]
8004
8005          It is implementation-defined whether a plain (neither
8006          explicitly signed or unsigned) char, short, int, or long
8007          bit-field is signed or unsigned.
8008
8009          Naturally, we extend this to long long as well.  Note that
8010          this does not include wchar_t.  */
8011       || (bitfield && !flag_signed_bitfields
8012           && !signed_p
8013           /* A typedef for plain `int' without `signed' can be
8014              controlled just like plain `int', but a typedef for
8015              `signed int' cannot be so controlled.  */
8016           && !(typedef_decl
8017                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8018           && TREE_CODE (type) == INTEGER_TYPE
8019           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8020     {
8021       if (longlong)
8022         type = long_long_unsigned_type_node;
8023       else if (long_p)
8024         type = long_unsigned_type_node;
8025       else if (short_p)
8026         type = short_unsigned_type_node;
8027       else if (type == char_type_node)
8028         type = unsigned_char_type_node;
8029       else if (typedef_decl)
8030         type = unsigned_type_for (type);
8031       else
8032         type = unsigned_type_node;
8033     }
8034   else if (signed_p && type == char_type_node)
8035     type = signed_char_type_node;
8036   else if (longlong)
8037     type = long_long_integer_type_node;
8038   else if (long_p)
8039     type = long_integer_type_node;
8040   else if (short_p)
8041     type = short_integer_type_node;
8042
8043   if (declspecs->specs[(int)ds_complex])
8044     {
8045       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8046         error ("complex invalid for %qs", name);
8047       /* If we just have "complex", it is equivalent to
8048          "complex double", but if any modifiers at all are specified it is
8049          the complex form of TYPE.  E.g, "complex short" is
8050          "complex short int".  */
8051
8052       else if (defaulted_int && ! longlong
8053                && ! (long_p || short_p || signed_p || unsigned_p))
8054         type = complex_double_type_node;
8055       else if (type == integer_type_node)
8056         type = complex_integer_type_node;
8057       else if (type == float_type_node)
8058         type = complex_float_type_node;
8059       else if (type == double_type_node)
8060         type = complex_double_type_node;
8061       else if (type == long_double_type_node)
8062         type = complex_long_double_type_node;
8063       else
8064         type = build_complex_type (type);
8065     }
8066
8067   type_quals = TYPE_UNQUALIFIED;
8068   if (declspecs->specs[(int)ds_const])
8069     type_quals |= TYPE_QUAL_CONST;
8070   if (declspecs->specs[(int)ds_volatile])
8071     type_quals |= TYPE_QUAL_VOLATILE;
8072   if (declspecs->specs[(int)ds_restrict])
8073     type_quals |= TYPE_QUAL_RESTRICT;
8074   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8075     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8076            ctor_return_type);
8077
8078   if (TREE_CODE (type) == FUNCTION_TYPE
8079       && type_quals != TYPE_UNQUALIFIED)
8080     {
8081       /* This was an error in C++98 (cv-qualifiers cannot be added to
8082          a function type), but DR 295 makes the code well-formed by
8083          dropping the extra qualifiers. */
8084       if (pedantic)
8085         {
8086           tree bad_type = build_qualified_type (type, type_quals);
8087           pedwarn (input_location, OPT_pedantic, 
8088                    "ignoring %qV qualifiers added to function type %qT",
8089                    bad_type, type);
8090         }
8091       type_quals = TYPE_UNQUALIFIED;
8092     }
8093   type_quals |= cp_type_quals (type);
8094   type = cp_build_qualified_type_real
8095     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8096                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8097   /* We might have ignored or rejected some of the qualifiers.  */
8098   type_quals = cp_type_quals (type);
8099
8100   staticp = 0;
8101   inlinep = !! declspecs->specs[(int)ds_inline];
8102   virtualp = !! declspecs->specs[(int)ds_virtual];
8103   explicitp = !! declspecs->specs[(int)ds_explicit];
8104
8105   storage_class = declspecs->storage_class;
8106   if (storage_class == sc_static)
8107     staticp = 1 + (decl_context == FIELD);
8108
8109   if (virtualp && staticp == 2)
8110     {
8111       error ("member %qD cannot be declared both virtual and static", dname);
8112       storage_class = sc_none;
8113       staticp = 0;
8114     }
8115   friendp = !! declspecs->specs[(int)ds_friend];
8116
8117   if (dependent_name && !friendp)
8118     {
8119       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8120       return error_mark_node;
8121     }
8122
8123   /* Issue errors about use of storage classes for parameters.  */
8124   if (decl_context == PARM)
8125     {
8126       if (declspecs->specs[(int)ds_typedef])
8127         {
8128           error ("typedef declaration invalid in parameter declaration");
8129           return error_mark_node;
8130         }
8131       else if (storage_class == sc_static
8132                || storage_class == sc_extern
8133                || thread_p)
8134         error ("storage class specifiers invalid in parameter declarations");
8135
8136       if (type_uses_auto (type))
8137         {
8138           error ("parameter declared %<auto%>");
8139           type = error_mark_node;
8140         }
8141     }
8142
8143   /* Give error if `virtual' is used outside of class declaration.  */
8144   if (virtualp
8145       && (current_class_name == NULL_TREE || decl_context != FIELD))
8146     {
8147       error ("%<virtual%> outside class declaration");
8148       virtualp = 0;
8149     }
8150
8151   /* Static anonymous unions are dealt with here.  */
8152   if (staticp && decl_context == TYPENAME
8153       && declspecs->type
8154       && ANON_AGGR_TYPE_P (declspecs->type))
8155     decl_context = FIELD;
8156
8157   /* Warn about storage classes that are invalid for certain
8158      kinds of declarations (parameters, typenames, etc.).  */
8159   if (thread_p
8160       && ((storage_class
8161            && storage_class != sc_extern
8162            && storage_class != sc_static)
8163           || declspecs->specs[(int)ds_typedef]))
8164     {
8165       error ("multiple storage classes in declaration of %qs", name);
8166       thread_p = false;
8167     }
8168   if (decl_context != NORMAL
8169       && ((storage_class != sc_none
8170            && storage_class != sc_mutable)
8171           || thread_p))
8172     {
8173       if ((decl_context == PARM || decl_context == CATCHPARM)
8174           && (storage_class == sc_register
8175               || storage_class == sc_auto))
8176         ;
8177       else if (declspecs->specs[(int)ds_typedef])
8178         ;
8179       else if (decl_context == FIELD
8180                /* C++ allows static class elements.  */
8181                && storage_class == sc_static)
8182         /* C++ also allows inlines and signed and unsigned elements,
8183            but in those cases we don't come in here.  */
8184         ;
8185       else
8186         {
8187           if (decl_context == FIELD)
8188             error ("storage class specified for %qs", name);
8189           else
8190             {
8191               if (decl_context == PARM || decl_context == CATCHPARM)
8192                 error ("storage class specified for parameter %qs", name);
8193               else
8194                 error ("storage class specified for typename");
8195             }
8196           if (storage_class == sc_register
8197               || storage_class == sc_auto
8198               || storage_class == sc_extern
8199               || thread_p)
8200             storage_class = sc_none;
8201         }
8202     }
8203   else if (storage_class == sc_extern && funcdef_flag
8204            && ! toplevel_bindings_p ())
8205     error ("nested function %qs declared %<extern%>", name);
8206   else if (toplevel_bindings_p ())
8207     {
8208       if (storage_class == sc_auto)
8209         error ("top-level declaration of %qs specifies %<auto%>", name);
8210     }
8211   else if (thread_p
8212            && storage_class != sc_extern
8213            && storage_class != sc_static)
8214     {
8215       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8216              name);
8217       thread_p = false;
8218     }
8219
8220   if (storage_class && friendp)
8221     {
8222       error ("storage class specifiers invalid in friend function declarations");
8223       storage_class = sc_none;
8224       staticp = 0;
8225     }
8226
8227   if (!id_declarator)
8228     unqualified_id = NULL_TREE;
8229   else
8230     {
8231       unqualified_id = id_declarator->u.id.unqualified_name;
8232       switch (TREE_CODE (unqualified_id))
8233         {
8234         case BIT_NOT_EXPR:
8235           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8236           if (TYPE_P (unqualified_id))
8237             unqualified_id = constructor_name (unqualified_id);
8238           break;
8239
8240         case IDENTIFIER_NODE:
8241         case TEMPLATE_ID_EXPR:
8242           break;
8243
8244         default:
8245           gcc_unreachable ();
8246         }
8247     }
8248
8249   /* Determine the type of the entity declared by recurring on the
8250      declarator.  */
8251   for (; declarator; declarator = declarator->declarator)
8252     {
8253       const cp_declarator *inner_declarator;
8254       tree attrs;
8255
8256       if (type == error_mark_node)
8257         return error_mark_node;
8258
8259       attrs = declarator->attributes;
8260       if (attrs)
8261         {
8262           int attr_flags;
8263
8264           attr_flags = 0;
8265           if (declarator == NULL || declarator->kind == cdk_id)
8266             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8267           if (declarator->kind == cdk_function)
8268             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8269           if (declarator->kind == cdk_array)
8270             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8271           returned_attrs = decl_attributes (&type,
8272                                             chainon (returned_attrs, attrs),
8273                                             attr_flags);
8274         }
8275
8276       if (declarator->kind == cdk_id)
8277         break;
8278
8279       inner_declarator = declarator->declarator;
8280
8281       switch (declarator->kind)
8282         {
8283         case cdk_array:
8284           type = create_array_type_for_decl (dname, type,
8285                                              declarator->u.array.bounds);
8286           break;
8287
8288         case cdk_function:
8289           {
8290             tree arg_types;
8291             int funcdecl_p;
8292
8293             /* Declaring a function type.
8294                Make sure we have a valid type for the function to return.  */
8295
8296             if (type_quals != TYPE_UNQUALIFIED)
8297               {
8298                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8299                   warning (OPT_Wignored_qualifiers,
8300                            "type qualifiers ignored on function return type");
8301                 /* We now know that the TYPE_QUALS don't apply to the
8302                    decl, but to its return type.  */
8303                 type_quals = TYPE_UNQUALIFIED;
8304               }
8305
8306             /* Error about some types functions can't return.  */
8307
8308             if (TREE_CODE (type) == FUNCTION_TYPE)
8309               {
8310                 error ("%qs declared as function returning a function", name);
8311                 return error_mark_node;
8312               }
8313             if (TREE_CODE (type) == ARRAY_TYPE)
8314               {
8315                 error ("%qs declared as function returning an array", name);
8316                 return error_mark_node;
8317               }
8318
8319             /* Pick up type qualifiers which should be applied to `this'.  */
8320             memfn_quals = declarator->u.function.qualifiers;
8321
8322             /* Pick up the exception specifications.  */
8323             raises = declarator->u.function.exception_specification;
8324
8325             /* Say it's a definition only for the CALL_EXPR
8326                closest to the identifier.  */
8327             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8328
8329             /* Handle a late-specified return type.  */
8330             if (funcdecl_p)
8331               {
8332                 if (type_uses_auto (type))
8333                   {
8334                     if (!declarator->u.function.late_return_type)
8335                       {
8336                         error ("%qs function uses %<auto%> type specifier without"
8337                                " late return type", name);
8338                         return error_mark_node;
8339                       }
8340                     else if (!is_auto (type))
8341                       {
8342                         error ("%qs function with late return type has"
8343                                " %qT as its type rather than plain %<auto%>",
8344                                name, type);
8345                         return error_mark_node;
8346                       }
8347                   }
8348                 else if (declarator->u.function.late_return_type)
8349                   {
8350                     error ("%qs function with late return type not declared"
8351                            " with %<auto%> type specifier", name);
8352                     return error_mark_node;
8353                   }
8354               }
8355             type = splice_late_return_type
8356               (type, declarator->u.function.late_return_type);
8357             if (type == error_mark_node)
8358               return error_mark_node;
8359
8360             if (ctype == NULL_TREE
8361                 && decl_context == FIELD
8362                 && funcdecl_p
8363                 && (friendp == 0 || dname == current_class_name))
8364               ctype = current_class_type;
8365
8366             if (ctype && (sfk == sfk_constructor
8367                           || sfk == sfk_destructor))
8368               {
8369                 /* We are within a class's scope. If our declarator name
8370                    is the same as the class name, and we are defining
8371                    a function, then it is a constructor/destructor, and
8372                    therefore returns a void type.  */
8373
8374                 /* ISO C++ 12.4/2.  A destructor may not be declared
8375                    const or volatile.  A destructor may not be
8376                    static.
8377
8378                    ISO C++ 12.1.  A constructor may not be declared
8379                    const or volatile.  A constructor may not be
8380                    virtual.  A constructor may not be static.  */
8381                 if (staticp == 2)
8382                   error ((flags == DTOR_FLAG)
8383                          ? "destructor cannot be static member function"
8384                          : "constructor cannot be static member function");
8385                 if (memfn_quals)
8386                   {
8387                     error ((flags == DTOR_FLAG)
8388                            ? "destructors may not be cv-qualified"
8389                            : "constructors may not be cv-qualified");
8390                     memfn_quals = TYPE_UNQUALIFIED;
8391                   }
8392
8393                 if (decl_context == FIELD
8394                     && !member_function_or_else (ctype,
8395                                                  current_class_type,
8396                                                  flags))
8397                   return error_mark_node;
8398
8399                 if (flags != DTOR_FLAG)
8400                   {
8401                     /* It's a constructor.  */
8402                     if (explicitp == 1)
8403                       explicitp = 2;
8404                     if (virtualp)
8405                       {
8406                         permerror (input_location, "constructors cannot be declared virtual");
8407                         virtualp = 0;
8408                       }
8409                     if (decl_context == FIELD
8410                         && sfk != sfk_constructor)
8411                       return error_mark_node;
8412                   }
8413                 if (decl_context == FIELD)
8414                   staticp = 0;
8415               }
8416             else if (friendp)
8417               {
8418                 if (initialized)
8419                   error ("can't initialize friend function %qs", name);
8420                 if (virtualp)
8421                   {
8422                     /* Cannot be both friend and virtual.  */
8423                     error ("virtual functions cannot be friends");
8424                     friendp = 0;
8425                   }
8426                 if (decl_context == NORMAL)
8427                   error ("friend declaration not in class definition");
8428                 if (current_function_decl && funcdef_flag)
8429                   error ("can't define friend function %qs in a local "
8430                          "class definition",
8431                          name);
8432               }
8433
8434             arg_types = grokparms (declarator->u.function.parameters,
8435                                    &parms);
8436
8437             if (inner_declarator
8438                 && inner_declarator->kind == cdk_id
8439                 && inner_declarator->u.id.sfk == sfk_destructor
8440                 && arg_types != void_list_node)
8441               {
8442                 error ("destructors may not have parameters");
8443                 arg_types = void_list_node;
8444                 parms = NULL_TREE;
8445               }
8446
8447             type = build_function_type (type, arg_types);
8448           }
8449           break;
8450
8451         case cdk_pointer:
8452         case cdk_reference:
8453         case cdk_ptrmem:
8454           /* Filter out pointers-to-references and references-to-references.
8455              We can get these if a TYPE_DECL is used.  */
8456
8457           if (TREE_CODE (type) == REFERENCE_TYPE)
8458             {
8459               if (declarator->kind != cdk_reference)
8460                 {
8461                   error ("cannot declare pointer to %q#T", type);
8462                   type = TREE_TYPE (type);
8463                 }
8464
8465               /* In C++0x, we allow reference to reference declarations
8466                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8467                  and template type arguments [14.3.1/4 temp.arg.type]. The
8468                  check for direct reference to reference declarations, which
8469                  are still forbidden, occurs below. Reasoning behind the change
8470                  can be found in DR106, DR540, and the rvalue reference
8471                  proposals. */
8472               else if (cxx_dialect == cxx98)
8473                 {
8474                   error ("cannot declare reference to %q#T", type);
8475                   type = TREE_TYPE (type);
8476                 }
8477             }
8478           else if (VOID_TYPE_P (type))
8479             {
8480               if (declarator->kind == cdk_reference)
8481                 error ("cannot declare reference to %q#T", type);
8482               else if (declarator->kind == cdk_ptrmem)
8483                 error ("cannot declare pointer to %q#T member", type);
8484             }
8485
8486           /* We now know that the TYPE_QUALS don't apply to the decl,
8487              but to the target of the pointer.  */
8488           type_quals = TYPE_UNQUALIFIED;
8489
8490           if (declarator->kind == cdk_ptrmem
8491               && (TREE_CODE (type) == FUNCTION_TYPE
8492                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8493             {
8494               memfn_quals |= cp_type_quals (type);
8495               type = build_memfn_type (type,
8496                                        declarator->u.pointer.class_type,
8497                                        memfn_quals);
8498               memfn_quals = TYPE_UNQUALIFIED;
8499             }
8500
8501           if (TREE_CODE (type) == FUNCTION_TYPE
8502               && cp_type_quals (type) != TYPE_UNQUALIFIED)
8503             error ("cannot declare %s to qualified function type %qT",
8504                    declarator->kind == cdk_reference ? "reference" : "pointer",
8505                    type);
8506
8507           /* When the pointed-to type involves components of variable size,
8508              care must be taken to ensure that the size evaluation code is
8509              emitted early enough to dominate all the possible later uses
8510              and late enough for the variables on which it depends to have
8511              been assigned.
8512
8513              This is expected to happen automatically when the pointed-to
8514              type has a name/declaration of it's own, but special attention
8515              is required if the type is anonymous.
8516
8517              We handle the NORMAL and FIELD contexts here by inserting a
8518              dummy statement that just evaluates the size at a safe point
8519              and ensures it is not deferred until e.g. within a deeper
8520              conditional context (c++/43555).
8521
8522              We expect nothing to be needed here for PARM or TYPENAME.
8523              Evaluating the size at this point for TYPENAME would
8524              actually be incorrect, as we might be in the middle of an
8525              expression with side effects on the pointed-to type size
8526              "arguments" prior to the pointer declaration point and the
8527              size evaluation could end up prior to the side effects.  */
8528
8529           if (!TYPE_NAME (type)
8530               && (decl_context == NORMAL || decl_context == FIELD)
8531               && at_function_scope_p ()
8532               && variably_modified_type_p (type, NULL_TREE))
8533             finish_expr_stmt (TYPE_SIZE (type));
8534
8535           if (declarator->kind == cdk_reference)
8536             {
8537               /* In C++0x, the type we are creating a reference to might be
8538                  a typedef which is itself a reference type. In that case,
8539                  we follow the reference collapsing rules in
8540                  [7.1.3/8 dcl.typedef] to create the final reference type:
8541
8542                  "If a typedef TD names a type that is a reference to a type
8543                  T, an attempt to create the type 'lvalue reference to cv TD'
8544                  creates the type 'lvalue reference to T,' while an attempt
8545                  to create the type "rvalue reference to cv TD' creates the
8546                  type TD."
8547               */
8548               if (!VOID_TYPE_P (type))
8549                 type = cp_build_reference_type
8550                        ((TREE_CODE (type) == REFERENCE_TYPE
8551                          ? TREE_TYPE (type) : type),
8552                         (declarator->u.reference.rvalue_ref
8553                          && (TREE_CODE(type) != REFERENCE_TYPE
8554                              || TYPE_REF_IS_RVALUE (type))));
8555
8556               /* In C++0x, we need this check for direct reference to
8557                  reference declarations, which are forbidden by
8558                  [8.3.2/5 dcl.ref]. Reference to reference declarations
8559                  are only allowed indirectly through typedefs and template
8560                  type arguments. Example:
8561
8562                    void foo(int & &);      // invalid ref-to-ref decl
8563
8564                    typedef int & int_ref;
8565                    void foo(int_ref &);    // valid ref-to-ref decl
8566               */
8567               if (inner_declarator && inner_declarator->kind == cdk_reference)
8568                 error ("cannot declare reference to %q#T, which is not "
8569                        "a typedef or a template type argument", type);
8570             }
8571           else if (TREE_CODE (type) == METHOD_TYPE)
8572             type = build_ptrmemfunc_type (build_pointer_type (type));
8573           else if (declarator->kind == cdk_ptrmem)
8574             {
8575               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8576                           != NAMESPACE_DECL);
8577               if (declarator->u.pointer.class_type == error_mark_node)
8578                 /* We will already have complained.  */
8579                 type = error_mark_node;
8580               else
8581                 type = build_ptrmem_type (declarator->u.pointer.class_type,
8582                                           type);
8583             }
8584           else
8585             type = build_pointer_type (type);
8586
8587           /* Process a list of type modifier keywords (such as
8588              const or volatile) that were given inside the `*' or `&'.  */
8589
8590           if (declarator->u.pointer.qualifiers)
8591             {
8592               type
8593                 = cp_build_qualified_type (type,
8594                                            declarator->u.pointer.qualifiers);
8595               type_quals = cp_type_quals (type);
8596             }
8597           ctype = NULL_TREE;
8598           break;
8599
8600         case cdk_error:
8601           break;
8602
8603         default:
8604           gcc_unreachable ();
8605         }
8606     }
8607
8608   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8609       && TREE_CODE (type) != FUNCTION_TYPE
8610       && TREE_CODE (type) != METHOD_TYPE)
8611     {
8612       error ("template-id %qD used as a declarator",
8613              unqualified_id);
8614       unqualified_id = dname;
8615     }
8616
8617   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8618      qualified with a class-name, turn it into a METHOD_TYPE, unless
8619      we know that the function is static.  We take advantage of this
8620      opportunity to do other processing that pertains to entities
8621      explicitly declared to be class members.  Note that if DECLARATOR
8622      is non-NULL, we know it is a cdk_id declarator; otherwise, we
8623      would not have exited the loop above.  */
8624   if (declarator
8625       && declarator->u.id.qualifying_scope
8626       && TYPE_P (declarator->u.id.qualifying_scope))
8627     {
8628       tree t;
8629
8630       ctype = declarator->u.id.qualifying_scope;
8631       ctype = TYPE_MAIN_VARIANT (ctype);
8632       t = ctype;
8633       while (t != NULL_TREE && CLASS_TYPE_P (t))
8634         {
8635           /* You're supposed to have one `template <...>' for every
8636              template class, but you don't need one for a full
8637              specialization.  For example:
8638
8639                template <class T> struct S{};
8640                template <> struct S<int> { void f(); };
8641                void S<int>::f () {}
8642
8643              is correct; there shouldn't be a `template <>' for the
8644              definition of `S<int>::f'.  */
8645           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8646               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8647             /* T is an explicit (not partial) specialization.  All
8648                containing classes must therefore also be explicitly
8649                specialized.  */
8650             break;
8651           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8652               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8653             template_count += 1;
8654
8655           t = TYPE_MAIN_DECL (t);
8656           t = DECL_CONTEXT (t);
8657         }
8658
8659       if (ctype == current_class_type)
8660         {
8661           if (friendp)
8662             {
8663               permerror (input_location, "member functions are implicitly friends of their class");
8664               friendp = 0;
8665             }
8666           else
8667             permerror (declarator->id_loc, 
8668                           "extra qualification %<%T::%> on member %qs",
8669                           ctype, name);
8670         }
8671       else if (/* If the qualifying type is already complete, then we
8672                   can skip the following checks.  */
8673                !COMPLETE_TYPE_P (ctype)
8674                && (/* If the function is being defined, then
8675                       qualifying type must certainly be complete.  */
8676                    funcdef_flag
8677                    /* A friend declaration of "T::f" is OK, even if
8678                       "T" is a template parameter.  But, if this
8679                       function is not a friend, the qualifying type
8680                       must be a class.  */
8681                    || (!friendp && !CLASS_TYPE_P (ctype))
8682                    /* For a declaration, the type need not be
8683                       complete, if either it is dependent (since there
8684                       is no meaningful definition of complete in that
8685                       case) or the qualifying class is currently being
8686                       defined.  */
8687                    || !(dependent_type_p (ctype)
8688                         || currently_open_class (ctype)))
8689                /* Check that the qualifying type is complete.  */
8690                && !complete_type_or_else (ctype, NULL_TREE))
8691         return error_mark_node;
8692       else if (TREE_CODE (type) == FUNCTION_TYPE)
8693         {
8694           tree sname = declarator->u.id.unqualified_name;
8695
8696           if (current_class_type
8697               && (!friendp || funcdef_flag))
8698             {
8699               error (funcdef_flag
8700                      ? "cannot define member function %<%T::%s%> within %<%T%>"
8701                      : "cannot declare member function %<%T::%s%> within %<%T%>",
8702                      ctype, name, current_class_type);
8703               return error_mark_node;
8704             }
8705
8706           if (TREE_CODE (sname) == IDENTIFIER_NODE
8707               && NEW_DELETE_OPNAME_P (sname))
8708             /* Overloaded operator new and operator delete
8709                are always static functions.  */
8710             ;
8711           else
8712             type = build_memfn_type (type, ctype, memfn_quals);
8713         }
8714       else if (declspecs->specs[(int)ds_typedef]
8715                && current_class_type)
8716         {
8717           error ("cannot declare member %<%T::%s%> within %qT",
8718                  ctype, name, current_class_type);
8719           return error_mark_node;
8720         }
8721     }
8722
8723   /* Now TYPE has the actual type.  */
8724
8725   if (returned_attrs)
8726     {
8727       if (attrlist)
8728         *attrlist = chainon (returned_attrs, *attrlist);
8729       else
8730         attrlist = &returned_attrs;
8731     }
8732
8733   /* Handle parameter packs. */
8734   if (parameter_pack_p)
8735     {
8736       if (decl_context == PARM)
8737         /* Turn the type into a pack expansion.*/
8738         type = make_pack_expansion (type);
8739       else
8740         error ("non-parameter %qs cannot be a parameter pack", name);
8741     }
8742
8743   /* Did array size calculations overflow?  */
8744
8745   if (TREE_CODE (type) == ARRAY_TYPE
8746       && COMPLETE_TYPE_P (type)
8747       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8748       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8749     {
8750       error ("size of array %qs is too large", name);
8751       /* If we proceed with the array type as it is, we'll eventually
8752          crash in tree_low_cst().  */
8753       type = error_mark_node;
8754     }
8755
8756   if ((decl_context == FIELD || decl_context == PARM)
8757       && !processing_template_decl
8758       && variably_modified_type_p (type, NULL_TREE))
8759     {
8760       if (decl_context == FIELD)
8761         error ("data member may not have variably modified type %qT", type);
8762       else
8763         error ("parameter may not have variably modified type %qT", type);
8764       type = error_mark_node;
8765     }
8766
8767   if (explicitp == 1 || (explicitp && friendp))
8768     {
8769       /* [dcl.fct.spec] The explicit specifier shall only be used in
8770          declarations of constructors within a class definition.  */
8771       error ("only declarations of constructors can be %<explicit%>");
8772       explicitp = 0;
8773     }
8774
8775   if (storage_class == sc_mutable)
8776     {
8777       if (decl_context != FIELD || friendp)
8778         {
8779           error ("non-member %qs cannot be declared %<mutable%>", name);
8780           storage_class = sc_none;
8781         }
8782       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8783         {
8784           error ("non-object member %qs cannot be declared %<mutable%>", name);
8785           storage_class = sc_none;
8786         }
8787       else if (TREE_CODE (type) == FUNCTION_TYPE
8788                || TREE_CODE (type) == METHOD_TYPE)
8789         {
8790           error ("function %qs cannot be declared %<mutable%>", name);
8791           storage_class = sc_none;
8792         }
8793       else if (staticp)
8794         {
8795           error ("static %qs cannot be declared %<mutable%>", name);
8796           storage_class = sc_none;
8797         }
8798       else if (type_quals & TYPE_QUAL_CONST)
8799         {
8800           error ("const %qs cannot be declared %<mutable%>", name);
8801           storage_class = sc_none;
8802         }
8803     }
8804
8805   /* If this is declaring a typedef name, return a TYPE_DECL.  */
8806   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8807     {
8808       tree decl;
8809
8810       /* Note that the grammar rejects storage classes
8811          in typenames, fields or parameters.  */
8812       if (current_lang_name == lang_name_java)
8813         TYPE_FOR_JAVA (type) = 1;
8814
8815       /* This declaration:
8816
8817            typedef void f(int) const;
8818
8819          declares a function type which is not a member of any
8820          particular class, but which is cv-qualified; for
8821          example "f S::*" declares a pointer to a const-qualified
8822          member function of S.  We record the cv-qualification in the
8823          function type.  */
8824       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8825         {
8826           type = cp_build_qualified_type (type, memfn_quals);
8827           
8828           /* We have now dealt with these qualifiers.  */
8829           memfn_quals = TYPE_UNQUALIFIED;
8830         }
8831
8832       if (decl_context == FIELD)
8833         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8834       else
8835         decl = build_decl (TYPE_DECL, unqualified_id, type);
8836       if (id_declarator && declarator->u.id.qualifying_scope) {
8837         error ("%Jtypedef name may not be a nested-name-specifier", decl);
8838         TREE_TYPE (decl) = error_mark_node;
8839       }
8840
8841       if (decl_context != FIELD)
8842         {
8843           if (!current_function_decl)
8844             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8845           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8846                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8847                        (current_function_decl)))
8848             /* The TYPE_DECL is "abstract" because there will be
8849                clones of this constructor/destructor, and there will
8850                be copies of this TYPE_DECL generated in those
8851                clones.  */
8852             DECL_ABSTRACT (decl) = 1;
8853         }
8854       else if (constructor_name_p (unqualified_id, current_class_type))
8855         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
8856                    "as enclosing class",
8857                    unqualified_id);
8858
8859       /* If the user declares "typedef struct {...} foo" then the
8860          struct will have an anonymous name.  Fill that name in now.
8861          Nothing can refer to it, so nothing needs know about the name
8862          change.  */
8863       if (type != error_mark_node
8864           && unqualified_id
8865           && TYPE_NAME (type)
8866           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8867           && TYPE_ANONYMOUS_P (type)
8868           && cp_type_quals (type) == TYPE_UNQUALIFIED)
8869         {
8870           tree oldname = TYPE_NAME (type);
8871           tree t;
8872
8873           /* Replace the anonymous name with the real name everywhere.  */
8874           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8875             if (TYPE_NAME (t) == oldname)
8876               TYPE_NAME (t) = decl;
8877
8878           if (TYPE_LANG_SPECIFIC (type))
8879             TYPE_WAS_ANONYMOUS (type) = 1;
8880
8881           /* If this is a typedef within a template class, the nested
8882              type is a (non-primary) template.  The name for the
8883              template needs updating as well.  */
8884           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
8885             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
8886               = TYPE_IDENTIFIER (type);
8887
8888           /* FIXME remangle member functions; member functions of a
8889              type with external linkage have external linkage.  */
8890         }
8891
8892       if (signed_p
8893           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8894         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8895
8896       bad_specifiers (decl, "type", virtualp,
8897                       memfn_quals != TYPE_UNQUALIFIED,
8898                       inlinep, friendp, raises != NULL_TREE);
8899
8900       return decl;
8901     }
8902
8903   /* Detect the case of an array type of unspecified size
8904      which came, as such, direct from a typedef name.
8905      We must copy the type, so that the array's domain can be
8906      individually set by the object's initializer.  */
8907
8908   if (type && typedef_type
8909       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
8910       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8911     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8912
8913   /* Detect where we're using a typedef of function type to declare a
8914      function. PARMS will not be set, so we must create it now.  */
8915
8916   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8917     {
8918       tree decls = NULL_TREE;
8919       tree args;
8920
8921       for (args = TYPE_ARG_TYPES (type);
8922            args && args != void_list_node;
8923            args = TREE_CHAIN (args))
8924         {
8925           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
8926
8927           TREE_CHAIN (decl) = decls;
8928           decls = decl;
8929         }
8930
8931       parms = nreverse (decls);
8932
8933       if (decl_context != TYPENAME)
8934         {
8935           /* A cv-qualifier-seq shall only be part of the function type
8936              for a non-static member function. [8.3.5/4 dcl.fct] */
8937           if (cp_type_quals (type) != TYPE_UNQUALIFIED
8938               && (current_class_type == NULL_TREE || staticp) )
8939             {
8940               error (staticp
8941                      ? G_("qualified function types cannot be used to "
8942                           "declare static member functions")
8943                      : G_("qualified function types cannot be used to "
8944                           "declare free functions"));
8945               type = TYPE_MAIN_VARIANT (type);
8946             }
8947
8948           /* The qualifiers on the function type become the qualifiers on
8949              the non-static member function. */
8950           memfn_quals |= cp_type_quals (type);
8951         }
8952     }
8953
8954   /* If this is a type name (such as, in a cast or sizeof),
8955      compute the type and return it now.  */
8956
8957   if (decl_context == TYPENAME)
8958     {
8959       /* Note that the grammar rejects storage classes
8960          in typenames, fields or parameters.  */
8961       if (type_quals != TYPE_UNQUALIFIED)
8962         type_quals = TYPE_UNQUALIFIED;
8963
8964       /* Special case: "friend class foo" looks like a TYPENAME context.  */
8965       if (friendp)
8966         {
8967           if (type_quals != TYPE_UNQUALIFIED)
8968             {
8969               error ("type qualifiers specified for friend class declaration");
8970               type_quals = TYPE_UNQUALIFIED;
8971             }
8972           if (inlinep)
8973             {
8974               error ("%<inline%> specified for friend class declaration");
8975               inlinep = 0;
8976             }
8977
8978           if (!current_aggr)
8979             {
8980               /* Don't allow friend declaration without a class-key.  */
8981               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8982                 permerror (input_location, "template parameters cannot be friends");
8983               else if (TREE_CODE (type) == TYPENAME_TYPE)
8984                 permerror (input_location, "friend declaration requires class-key, "
8985                            "i.e. %<friend class %T::%D%>",
8986                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8987               else
8988                 permerror (input_location, "friend declaration requires class-key, "
8989                            "i.e. %<friend %#T%>",
8990                            type);
8991             }
8992
8993           /* Only try to do this stuff if we didn't already give up.  */
8994           if (type != integer_type_node)
8995             {
8996               /* A friendly class?  */
8997               if (current_class_type)
8998                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8999                                    /*complain=*/true);
9000               else
9001                 error ("trying to make class %qT a friend of global scope",
9002                        type);
9003
9004               type = void_type_node;
9005             }
9006         }
9007       else if (memfn_quals)
9008         {
9009           if (ctype == NULL_TREE
9010               && TREE_CODE (type) == METHOD_TYPE)
9011             ctype = TYPE_METHOD_BASETYPE (type);
9012
9013           if (ctype)
9014             type = build_memfn_type (type, ctype, memfn_quals);
9015           /* Core issue #547: need to allow this in template type args.  */
9016           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9017             type = cp_build_qualified_type (type, memfn_quals);
9018           else
9019             error ("invalid qualifiers on non-member function type");
9020         }
9021
9022       return type;
9023     }
9024   else if (unqualified_id == NULL_TREE && decl_context != PARM
9025            && decl_context != CATCHPARM
9026            && TREE_CODE (type) != UNION_TYPE
9027            && ! bitfield)
9028     {
9029       error ("abstract declarator %qT used as declaration", type);
9030       return error_mark_node;
9031     }
9032
9033   /* Only functions may be declared using an operator-function-id.  */
9034   if (unqualified_id
9035       && IDENTIFIER_OPNAME_P (unqualified_id)
9036       && TREE_CODE (type) != FUNCTION_TYPE
9037       && TREE_CODE (type) != METHOD_TYPE)
9038     {
9039       error ("declaration of %qD as non-function", unqualified_id);
9040       return error_mark_node;
9041     }
9042
9043   /* We don't check parameter types here because we can emit a better
9044      error message later.  */
9045   if (decl_context != PARM)
9046     {
9047       type = check_var_type (unqualified_id, type);
9048       if (type == error_mark_node)
9049         return error_mark_node;
9050     }
9051
9052   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9053      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9054
9055   if (decl_context == PARM || decl_context == CATCHPARM)
9056     {
9057       if (ctype || in_namespace)
9058         error ("cannot use %<::%> in parameter declaration");
9059
9060       /* A parameter declared as an array of T is really a pointer to T.
9061          One declared as a function is really a pointer to a function.
9062          One declared as a member is really a pointer to member.  */
9063
9064       if (TREE_CODE (type) == ARRAY_TYPE)
9065         {
9066           /* Transfer const-ness of array into that of type pointed to.  */
9067           type = build_pointer_type (TREE_TYPE (type));
9068           type_quals = TYPE_UNQUALIFIED;
9069         }
9070       else if (TREE_CODE (type) == FUNCTION_TYPE)
9071         type = build_pointer_type (type);
9072     }
9073
9074   {
9075     tree decl;
9076
9077     if (decl_context == PARM)
9078       {
9079         decl = cp_build_parm_decl (unqualified_id, type);
9080
9081         bad_specifiers (decl, "parameter", virtualp,
9082                         memfn_quals != TYPE_UNQUALIFIED,
9083                         inlinep, friendp, raises != NULL_TREE);
9084       }
9085     else if (decl_context == FIELD)
9086       {
9087         /* The C99 flexible array extension.  */
9088         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9089             && TYPE_DOMAIN (type) == NULL_TREE)
9090           {
9091             tree itype = compute_array_index_type (dname, integer_zero_node);
9092             type = build_cplus_array_type (TREE_TYPE (type), itype);
9093           }
9094
9095         if (type == error_mark_node)
9096           {
9097             /* Happens when declaring arrays of sizes which
9098                are error_mark_node, for example.  */
9099             decl = NULL_TREE;
9100           }
9101         else if (in_namespace && !friendp)
9102           {
9103             /* Something like struct S { int N::j; };  */
9104             error ("invalid use of %<::%>");
9105             return error_mark_node;
9106           }
9107         else if (TREE_CODE (type) == FUNCTION_TYPE)
9108           {
9109             int publicp = 0;
9110             tree function_context;
9111
9112             if (friendp == 0)
9113               {
9114                 if (ctype == NULL_TREE)
9115                   ctype = current_class_type;
9116
9117                 if (ctype == NULL_TREE)
9118                   {
9119                     error ("can't make %qD into a method -- not in a class",
9120                            unqualified_id);
9121                     return error_mark_node;
9122                   }
9123
9124                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9125                    ARM 9.5 */
9126                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9127                   {
9128                     error ("function %qD declared virtual inside a union",
9129                            unqualified_id);
9130                     return error_mark_node;
9131                   }
9132
9133                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9134                   {
9135                     if (virtualp)
9136                       {
9137                         error ("%qD cannot be declared virtual, since it "
9138                                "is always static",
9139                                unqualified_id);
9140                         virtualp = 0;
9141                       }
9142                   }
9143                 else if (staticp < 2)
9144                   type = build_memfn_type (type, ctype, memfn_quals);
9145               }
9146
9147             /* Check that the name used for a destructor makes sense.  */
9148             if (sfk == sfk_destructor)
9149               {
9150                 tree uqname = id_declarator->u.id.unqualified_name;
9151
9152                 if (!ctype)
9153                   {
9154                     gcc_assert (friendp);
9155                     error ("expected qualified name in friend declaration "
9156                            "for destructor %qD", uqname);
9157                     return error_mark_node;
9158                   }
9159
9160                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9161                   {
9162                     error ("declaration of %qD as member of %qT",
9163                            uqname, ctype);
9164                     return error_mark_node;
9165                   }
9166               }
9167             else if (sfk == sfk_constructor && friendp)
9168               {
9169                 error ("expected qualified name in friend declaration "
9170                        "for constructor %qD",
9171                        id_declarator->u.id.unqualified_name);
9172                 return error_mark_node;
9173               }
9174
9175             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9176             function_context = (ctype != NULL_TREE) ?
9177               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9178             publicp = (! friendp || ! staticp)
9179               && function_context == NULL_TREE;
9180             decl = grokfndecl (ctype, type,
9181                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9182                                ? unqualified_id : dname,
9183                                parms,
9184                                unqualified_id,
9185                                virtualp, flags, memfn_quals, raises,
9186                                friendp ? -1 : 0, friendp, publicp, inlinep,
9187                                sfk,
9188                                funcdef_flag, template_count, in_namespace,
9189                                attrlist, declarator->id_loc);
9190             if (decl == NULL_TREE)
9191               return error_mark_node;
9192 #if 0
9193             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9194             /* The decl and setting of decl_attr is also turned off.  */
9195             decl = build_decl_attribute_variant (decl, decl_attr);
9196 #endif
9197
9198             /* [class.conv.ctor]
9199
9200                A constructor declared without the function-specifier
9201                explicit that can be called with a single parameter
9202                specifies a conversion from the type of its first
9203                parameter to the type of its class.  Such a constructor
9204                is called a converting constructor.  */
9205             if (explicitp == 2)
9206               DECL_NONCONVERTING_P (decl) = 1;
9207           }
9208         else if (TREE_CODE (type) == METHOD_TYPE)
9209           {
9210             /* We only get here for friend declarations of
9211                members of other classes.  */
9212             /* All method decls are public, so tell grokfndecl to set
9213                TREE_PUBLIC, also.  */
9214             decl = grokfndecl (ctype, type,
9215                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9216                                ? unqualified_id : dname,
9217                                parms,
9218                                unqualified_id,
9219                                virtualp, flags, memfn_quals, raises,
9220                                friendp ? -1 : 0, friendp, 1, 0, sfk,
9221                                funcdef_flag, template_count, in_namespace,
9222                                attrlist,
9223                                declarator->id_loc);
9224             if (decl == NULL_TREE)
9225               return error_mark_node;
9226           }
9227         else if (!staticp && !dependent_type_p (type)
9228                  && !COMPLETE_TYPE_P (complete_type (type))
9229                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9230           {
9231             if (unqualified_id)
9232               error ("field %qD has incomplete type", unqualified_id);
9233             else
9234               error ("name %qT has incomplete type", type);
9235
9236             /* If we're instantiating a template, tell them which
9237                instantiation made the field's type be incomplete.  */
9238             if (current_class_type
9239                 && TYPE_NAME (current_class_type)
9240                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9241                 && declspecs->type
9242                 && declspecs->type == type)
9243               error ("  in instantiation of template %qT",
9244                      current_class_type);
9245
9246             return error_mark_node;
9247           }
9248         else
9249           {
9250             if (friendp)
9251               {
9252                 error ("%qE is neither function nor member function; "
9253                        "cannot be declared friend", unqualified_id);
9254                 friendp = 0;
9255               }
9256             decl = NULL_TREE;
9257           }
9258
9259         if (friendp)
9260           {
9261             /* Friends are treated specially.  */
9262             if (ctype == current_class_type)
9263               ;  /* We already issued a permerror.  */
9264             else if (decl && DECL_NAME (decl))
9265               {
9266                 if (template_class_depth (current_class_type) == 0)
9267                   {
9268                     decl = check_explicit_specialization
9269                       (unqualified_id, decl, template_count,
9270                        2 * funcdef_flag + 4);
9271                     if (decl == error_mark_node)
9272                       return error_mark_node;
9273                   }
9274
9275                 decl = do_friend (ctype, unqualified_id, decl,
9276                                   *attrlist, flags,
9277                                   funcdef_flag);
9278                 return decl;
9279               }
9280             else
9281               return error_mark_node;
9282           }
9283
9284         /* Structure field.  It may not be a function, except for C++.  */
9285
9286         if (decl == NULL_TREE)
9287           {
9288             if (initialized)
9289               {
9290                 if (!staticp)
9291                   {
9292                     /* An attempt is being made to initialize a non-static
9293                        member.  But, from [class.mem]:
9294
9295                        4 A member-declarator can contain a
9296                        constant-initializer only if it declares a static
9297                        member (_class.static_) of integral or enumeration
9298                        type, see _class.static.data_.
9299
9300                        This used to be relatively common practice, but
9301                        the rest of the compiler does not correctly
9302                        handle the initialization unless the member is
9303                        static so we make it static below.  */
9304                     permerror (input_location, "ISO C++ forbids initialization of member %qD",
9305                                unqualified_id);
9306                     permerror (input_location, "making %qD static", unqualified_id);
9307                     staticp = 1;
9308                   }
9309
9310                 if (uses_template_parms (type))
9311                   /* We'll check at instantiation time.  */
9312                   ;
9313                 else if (check_static_variable_definition (unqualified_id,
9314                                                            type))
9315                   /* If we just return the declaration, crashes
9316                      will sometimes occur.  We therefore return
9317                      void_type_node, as if this was a friend
9318                      declaration, to cause callers to completely
9319                      ignore this declaration.  */
9320                   return error_mark_node;
9321               }
9322
9323             if (staticp)
9324               {
9325                 /* C++ allows static class members.  All other work
9326                    for this is done by grokfield.  */
9327                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9328                 set_linkage_for_static_data_member (decl);
9329                 /* Even if there is an in-class initialization, DECL
9330                    is considered undefined until an out-of-class
9331                    definition is provided.  */
9332                 DECL_EXTERNAL (decl) = 1;
9333
9334                 if (thread_p)
9335                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9336               }
9337             else
9338               {
9339                 decl = build_decl (FIELD_DECL, unqualified_id, type);
9340                 DECL_NONADDRESSABLE_P (decl) = bitfield;
9341                 if (bitfield && !unqualified_id)
9342                   TREE_NO_WARNING (decl) = 1;
9343
9344                 if (storage_class == sc_mutable)
9345                   {
9346                     DECL_MUTABLE_P (decl) = 1;
9347                     storage_class = sc_none;
9348                   }
9349               }
9350
9351             bad_specifiers (decl, "field", virtualp,
9352                             memfn_quals != TYPE_UNQUALIFIED,
9353                             inlinep, friendp, raises != NULL_TREE);
9354           }
9355       }
9356     else if (TREE_CODE (type) == FUNCTION_TYPE
9357              || TREE_CODE (type) == METHOD_TYPE)
9358       {
9359         tree original_name;
9360         int publicp = 0;
9361
9362         if (!unqualified_id)
9363           return error_mark_node;
9364
9365         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9366           original_name = dname;
9367         else
9368           original_name = unqualified_id;
9369
9370         if (storage_class == sc_auto)
9371           error ("storage class %<auto%> invalid for function %qs", name);
9372         else if (storage_class == sc_register)
9373           error ("storage class %<register%> invalid for function %qs", name);
9374         else if (thread_p)
9375           error ("storage class %<__thread%> invalid for function %qs", name);
9376
9377         /* Function declaration not at top level.
9378            Storage classes other than `extern' are not allowed
9379            and `extern' makes no difference.  */
9380         if (! toplevel_bindings_p ()
9381             && (storage_class == sc_static
9382                 || declspecs->specs[(int)ds_inline])
9383             && pedantic)
9384           {
9385             if (storage_class == sc_static)
9386               pedwarn (input_location, OPT_pedantic, 
9387                        "%<static%> specified invalid for function %qs "
9388                        "declared out of global scope", name);
9389             else
9390               pedwarn (input_location, OPT_pedantic, 
9391                        "%<inline%> specifier invalid for function %qs "
9392                        "declared out of global scope", name);
9393           }
9394
9395         if (ctype != NULL_TREE
9396             && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9397           {
9398             error ("%q#T is not a class or a namespace", ctype);
9399             ctype = NULL_TREE;
9400           }
9401
9402         if (ctype == NULL_TREE)
9403           {
9404             if (virtualp)
9405               {
9406                 error ("virtual non-class function %qs", name);
9407                 virtualp = 0;
9408               }
9409             else if (sfk == sfk_constructor
9410                      || sfk == sfk_destructor)
9411               {
9412                 error (funcdef_flag
9413                        ? "%qs defined in a non-class scope"
9414                        : "%qs declared in a non-class scope", name);
9415                 sfk = sfk_none;
9416               }
9417           }
9418         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9419                  && !NEW_DELETE_OPNAME_P (original_name))
9420           type = build_method_type_directly (ctype,
9421                                              TREE_TYPE (type),
9422                                              TYPE_ARG_TYPES (type));
9423
9424         /* Record presence of `static'.  */
9425         publicp = (ctype != NULL_TREE
9426                    || storage_class == sc_extern
9427                    || storage_class != sc_static);
9428
9429         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9430                            virtualp, flags, memfn_quals, raises,
9431                            1, friendp,
9432                            publicp, inlinep, sfk, funcdef_flag,
9433                            template_count, in_namespace, attrlist,
9434                            declarator->id_loc);
9435         if (decl == NULL_TREE)
9436           return error_mark_node;
9437
9438         if (staticp == 1)
9439           {
9440             int invalid_static = 0;
9441
9442             /* Don't allow a static member function in a class, and forbid
9443                declaring main to be static.  */
9444             if (TREE_CODE (type) == METHOD_TYPE)
9445               {
9446                 permerror (input_location, "cannot declare member function %qD to have "
9447                            "static linkage", decl);
9448                 invalid_static = 1;
9449               }
9450             else if (current_function_decl)
9451               {
9452                 /* FIXME need arm citation */
9453                 error ("cannot declare static function inside another function");
9454                 invalid_static = 1;
9455               }
9456
9457             if (invalid_static)
9458               {
9459                 staticp = 0;
9460                 storage_class = sc_none;
9461               }
9462           }
9463       }
9464     else
9465       {
9466         /* It's a variable.  */
9467
9468         /* An uninitialized decl with `extern' is a reference.  */
9469         decl = grokvardecl (type, unqualified_id,
9470                             declspecs,
9471                             initialized,
9472                             (type_quals & TYPE_QUAL_CONST) != 0,
9473                             ctype ? ctype : in_namespace);
9474         bad_specifiers (decl, "variable", virtualp,
9475                         memfn_quals != TYPE_UNQUALIFIED,
9476                         inlinep, friendp, raises != NULL_TREE);
9477
9478         if (ctype)
9479           {
9480             DECL_CONTEXT (decl) = ctype;
9481             if (staticp == 1)
9482               {
9483                 permerror (input_location, "%<static%> may not be used when defining "
9484                            "(as opposed to declaring) a static data member");
9485                 staticp = 0;
9486                 storage_class = sc_none;
9487               }
9488             if (storage_class == sc_register && TREE_STATIC (decl))
9489               {
9490                 error ("static member %qD declared %<register%>", decl);
9491                 storage_class = sc_none;
9492               }
9493             if (storage_class == sc_extern && pedantic)
9494               {
9495                 pedwarn (input_location, OPT_pedantic, 
9496                          "cannot explicitly declare member %q#D to have "
9497                          "extern linkage", decl);
9498                 storage_class = sc_none;
9499               }
9500           }
9501       }
9502
9503     if (storage_class == sc_extern && initialized && !funcdef_flag)
9504       {
9505         if (toplevel_bindings_p ())
9506           {
9507             /* It's common practice (and completely valid) to have a const
9508                be initialized and declared extern.  */
9509             if (!(type_quals & TYPE_QUAL_CONST))
9510               warning (0, "%qs initialized and declared %<extern%>", name);
9511           }
9512         else
9513           {
9514             error ("%qs has both %<extern%> and initializer", name);
9515             return error_mark_node;
9516           }
9517       }
9518
9519     /* Record `register' declaration for warnings on &
9520        and in case doing stupid register allocation.  */
9521
9522     if (storage_class == sc_register)
9523       DECL_REGISTER (decl) = 1;
9524     else if (storage_class == sc_extern)
9525       DECL_THIS_EXTERN (decl) = 1;
9526     else if (storage_class == sc_static)
9527       DECL_THIS_STATIC (decl) = 1;
9528
9529     /* Record constancy and volatility on the DECL itself .  There's
9530        no need to do this when processing a template; we'll do this
9531        for the instantiated declaration based on the type of DECL.  */
9532     if (!processing_template_decl)
9533       cp_apply_type_quals_to_decl (type_quals, decl);
9534
9535     return decl;
9536   }
9537 }
9538 \f
9539 /* Subroutine of start_function.  Ensure that each of the parameter
9540    types (as listed in PARMS) is complete, as is required for a
9541    function definition.  */
9542
9543 static void
9544 require_complete_types_for_parms (tree parms)
9545 {
9546   for (; parms; parms = TREE_CHAIN (parms))
9547     {
9548       if (dependent_type_p (TREE_TYPE (parms)))
9549         continue;
9550       if (!VOID_TYPE_P (TREE_TYPE (parms))
9551           && complete_type_or_else (TREE_TYPE (parms), parms))
9552         {
9553           relayout_decl (parms);
9554           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9555         }
9556       else
9557         /* grokparms or complete_type_or_else will have already issued
9558            an error.  */
9559         TREE_TYPE (parms) = error_mark_node;
9560     }
9561 }
9562
9563 /* Returns nonzero if T is a local variable.  */
9564
9565 int
9566 local_variable_p (const_tree t)
9567 {
9568   if ((TREE_CODE (t) == VAR_DECL
9569        /* A VAR_DECL with a context that is a _TYPE is a static data
9570           member.  */
9571        && !TYPE_P (CP_DECL_CONTEXT (t))
9572        /* Any other non-local variable must be at namespace scope.  */
9573        && !DECL_NAMESPACE_SCOPE_P (t))
9574       || (TREE_CODE (t) == PARM_DECL))
9575     return 1;
9576
9577   return 0;
9578 }
9579
9580 /* Like local_variable_p, but suitable for use as a tree-walking
9581    function.  */
9582
9583 static tree
9584 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9585                          void *data ATTRIBUTE_UNUSED)
9586 {
9587   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9588     return *tp;
9589   else if (TYPE_P (*tp))
9590     *walk_subtrees = 0;
9591
9592   return NULL_TREE;
9593 }
9594
9595
9596 /* Check that ARG, which is a default-argument expression for a
9597    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
9598    something goes wrong.  DECL may also be a _TYPE node, rather than a
9599    DECL, if there is no DECL available.  */
9600
9601 tree
9602 check_default_argument (tree decl, tree arg)
9603 {
9604   tree var;
9605   tree decl_type;
9606
9607   if (TREE_CODE (arg) == DEFAULT_ARG)
9608     /* We get a DEFAULT_ARG when looking at an in-class declaration
9609        with a default argument.  Ignore the argument for now; we'll
9610        deal with it after the class is complete.  */
9611     return arg;
9612
9613   if (TYPE_P (decl))
9614     {
9615       decl_type = decl;
9616       decl = NULL_TREE;
9617     }
9618   else
9619     decl_type = TREE_TYPE (decl);
9620
9621   if (arg == error_mark_node
9622       || decl == error_mark_node
9623       || TREE_TYPE (arg) == error_mark_node
9624       || decl_type == error_mark_node)
9625     /* Something already went wrong.  There's no need to check
9626        further.  */
9627     return error_mark_node;
9628
9629   /* [dcl.fct.default]
9630
9631      A default argument expression is implicitly converted to the
9632      parameter type.  */
9633   if (!TREE_TYPE (arg)
9634       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9635     {
9636       if (decl)
9637         error ("default argument for %q#D has type %qT",
9638                decl, TREE_TYPE (arg));
9639       else
9640         error ("default argument for parameter of type %qT has type %qT",
9641                decl_type, TREE_TYPE (arg));
9642
9643       return error_mark_node;
9644     }
9645
9646   /* [dcl.fct.default]
9647
9648      Local variables shall not be used in default argument
9649      expressions.
9650
9651      The keyword `this' shall not be used in a default argument of a
9652      member function.  */
9653   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9654   if (var)
9655     {
9656       error ("default argument %qE uses local variable %qD", arg, var);
9657       return error_mark_node;
9658     }
9659
9660   /* All is well.  */
9661   return arg;
9662 }
9663
9664 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
9665
9666 static tree
9667 type_is_deprecated (tree type)
9668 {
9669   enum tree_code code;
9670   if (TREE_DEPRECATED (type))
9671     return type;
9672   if (TYPE_NAME (type)
9673       && TREE_DEPRECATED (TYPE_NAME (type)))
9674     return type;
9675
9676   code = TREE_CODE (type);
9677
9678   if (code == POINTER_TYPE || code == REFERENCE_TYPE
9679       || code == OFFSET_TYPE || code == FUNCTION_TYPE
9680       || code == METHOD_TYPE || code == ARRAY_TYPE)
9681     return type_is_deprecated (TREE_TYPE (type));
9682
9683   if (TYPE_PTRMEMFUNC_P (type))
9684     return type_is_deprecated
9685       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9686
9687   return NULL_TREE;
9688 }
9689
9690 /* Decode the list of parameter types for a function type.
9691    Given the list of things declared inside the parens,
9692    return a list of types.
9693
9694    If this parameter does not end with an ellipsis, we append
9695    void_list_node.
9696
9697    *PARMS is set to the chain of PARM_DECLs created.  */
9698
9699 static tree
9700 grokparms (tree parmlist, tree *parms)
9701 {
9702   tree result = NULL_TREE;
9703   tree decls = NULL_TREE;
9704   tree parm;
9705   int any_error = 0;
9706
9707   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9708     {
9709       tree type = NULL_TREE;
9710       tree init = TREE_PURPOSE (parm);
9711       tree decl = TREE_VALUE (parm);
9712
9713       if (parm == void_list_node)
9714         break;
9715
9716       if (! decl || TREE_TYPE (decl) == error_mark_node)
9717         continue;
9718
9719       type = TREE_TYPE (decl);
9720       if (VOID_TYPE_P (type))
9721         {
9722           if (same_type_p (type, void_type_node)
9723               && DECL_SELF_REFERENCE_P (type)
9724               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9725             /* this is a parmlist of `(void)', which is ok.  */
9726             break;
9727           cxx_incomplete_type_error (decl, type);
9728           /* It's not a good idea to actually create parameters of
9729              type `void'; other parts of the compiler assume that a
9730              void type terminates the parameter list.  */
9731           type = error_mark_node;
9732           TREE_TYPE (decl) = error_mark_node;
9733         }
9734
9735       if (type != error_mark_node
9736           && TYPE_FOR_JAVA (type)
9737           && MAYBE_CLASS_TYPE_P (type))
9738         {
9739           error ("parameter %qD has Java class type", decl);
9740           type = error_mark_node;
9741           TREE_TYPE (decl) = error_mark_node;
9742           init = NULL_TREE;
9743         }
9744
9745       if (type != error_mark_node)
9746         {
9747           if (deprecated_state != DEPRECATED_SUPPRESS)
9748             {
9749               tree deptype = type_is_deprecated (type);
9750               if (deptype)
9751                 warn_deprecated_use (deptype);
9752             }
9753
9754           /* Top-level qualifiers on the parameters are
9755              ignored for function types.  */
9756           type = cp_build_qualified_type (type, 0);
9757           if (TREE_CODE (type) == METHOD_TYPE)
9758             {
9759               error ("parameter %qD invalidly declared method type", decl);
9760               type = build_pointer_type (type);
9761               TREE_TYPE (decl) = type;
9762             }
9763           else if (abstract_virtuals_error (decl, type))
9764             any_error = 1;  /* Seems like a good idea.  */
9765           else if (POINTER_TYPE_P (type))
9766             {
9767               /* [dcl.fct]/6, parameter types cannot contain pointers
9768                  (references) to arrays of unknown bound.  */
9769               tree t = TREE_TYPE (type);
9770               int ptr = TYPE_PTR_P (type);
9771
9772               while (1)
9773                 {
9774                   if (TYPE_PTR_P (t))
9775                     ptr = 1;
9776                   else if (TREE_CODE (t) != ARRAY_TYPE)
9777                     break;
9778                   else if (!TYPE_DOMAIN (t))
9779                     break;
9780                   t = TREE_TYPE (t);
9781                 }
9782               if (TREE_CODE (t) == ARRAY_TYPE)
9783                 error ("parameter %qD includes %s to array of unknown "
9784                        "bound %qT",
9785                        decl, ptr ? "pointer" : "reference", t);
9786             }
9787
9788           if (any_error)
9789             init = NULL_TREE;
9790           else if (init && !processing_template_decl)
9791             init = check_default_argument (decl, init);
9792         }
9793
9794       if (TREE_CODE (decl) == PARM_DECL
9795           && FUNCTION_PARAMETER_PACK_P (decl)
9796           && TREE_CHAIN (parm)
9797           && TREE_CHAIN (parm) != void_list_node)
9798         error ("parameter packs must be at the end of the parameter list");
9799
9800       TREE_CHAIN (decl) = decls;
9801       decls = decl;
9802       result = tree_cons (init, type, result);
9803     }
9804   decls = nreverse (decls);
9805   result = nreverse (result);
9806   if (parm)
9807     result = chainon (result, void_list_node);
9808   *parms = decls;
9809
9810   return result;
9811 }
9812
9813 \f
9814 /* D is a constructor or overloaded `operator='.
9815
9816    Let T be the class in which D is declared. Then, this function
9817    returns:
9818
9819    -1 if D's is an ill-formed constructor or copy assignment operator
9820       whose first parameter is of type `T'.
9821    0  if D is not a copy constructor or copy assignment
9822       operator.
9823    1  if D is a copy constructor or copy assignment operator whose
9824       first parameter is a reference to const qualified T.
9825    2  if D is a copy constructor or copy assignment operator whose
9826       first parameter is a reference to non-const qualified T.
9827
9828    This function can be used as a predicate. Positive values indicate
9829    a copy constructor and nonzero values indicate a copy assignment
9830    operator.  */
9831
9832 int
9833 copy_fn_p (const_tree d)
9834 {
9835   tree args;
9836   tree arg_type;
9837   int result = 1;
9838
9839   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9840
9841   if (TREE_CODE (d) == TEMPLATE_DECL
9842       || (DECL_TEMPLATE_INFO (d)
9843           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9844     /* Instantiations of template member functions are never copy
9845        functions.  Note that member functions of templated classes are
9846        represented as template functions internally, and we must
9847        accept those as copy functions.  */
9848     return 0;
9849
9850   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9851   if (!args)
9852     return 0;
9853
9854   arg_type = TREE_VALUE (args);
9855   if (arg_type == error_mark_node)
9856     return 0;
9857
9858   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9859     {
9860       /* Pass by value copy assignment operator.  */
9861       result = -1;
9862     }
9863   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
9864            && !TYPE_REF_IS_RVALUE (arg_type)
9865            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9866     {
9867       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9868         result = 2;
9869     }
9870   else
9871     return 0;
9872
9873   args = TREE_CHAIN (args);
9874
9875   if (args && args != void_list_node && !TREE_PURPOSE (args))
9876     /* There are more non-optional args.  */
9877     return 0;
9878
9879   return result;
9880 }
9881
9882 /* D is a constructor or overloaded `operator='.
9883
9884    Let T be the class in which D is declared. Then, this function
9885    returns true when D is a move constructor or move assignment
9886    operator, false otherwise.  */
9887
9888 bool
9889 move_fn_p (const_tree d)
9890 {
9891   tree args;
9892   tree arg_type;
9893   bool result = false;
9894
9895   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9896
9897   if (cxx_dialect == cxx98)
9898     /* There are no move constructors if we are in C++98 mode.  */
9899     return false;
9900
9901   if (TREE_CODE (d) == TEMPLATE_DECL
9902       || (DECL_TEMPLATE_INFO (d)
9903          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9904     /* Instantiations of template member functions are never copy
9905        functions.  Note that member functions of templated classes are
9906        represented as template functions internally, and we must
9907        accept those as copy functions.  */
9908     return 0;
9909
9910   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9911   if (!args)
9912     return 0;
9913
9914   arg_type = TREE_VALUE (args);
9915   if (arg_type == error_mark_node)
9916     return 0;
9917
9918   if (TREE_CODE (arg_type) == REFERENCE_TYPE
9919       && TYPE_REF_IS_RVALUE (arg_type)
9920       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9921                       DECL_CONTEXT (d)))
9922     result = true;
9923
9924   args = TREE_CHAIN (args);
9925
9926   if (args && args != void_list_node && !TREE_PURPOSE (args))
9927     /* There are more non-optional args.  */
9928     return false;
9929
9930   return result;
9931 }
9932
9933 /* Remember any special properties of member function DECL.  */
9934
9935 #define DECL_DEFAULTED_IN_CLASS_P(DECL)                                 \
9936  (DECL_DEFAULTED_FN (DECL)                                              \
9937   && (DECL_ARTIFICIAL (DECL) || DECL_INITIALIZED_IN_CLASS_P (DECL)))
9938
9939 void
9940 grok_special_member_properties (tree decl)
9941 {
9942   tree class_type;
9943
9944   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9945     return;
9946
9947   class_type = DECL_CONTEXT (decl);
9948   if (DECL_CONSTRUCTOR_P (decl))
9949     {
9950       int ctor = copy_fn_p (decl);
9951
9952       if (!DECL_ARTIFICIAL (decl))
9953         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
9954
9955       if (ctor > 0)
9956         {
9957           /* [class.copy]
9958
9959              A non-template constructor for class X is a copy
9960              constructor if its first parameter is of type X&, const
9961              X&, volatile X& or const volatile X&, and either there
9962              are no other parameters or else all other parameters have
9963              default arguments.  */
9964           TYPE_HAS_INIT_REF (class_type) = 1;
9965           if (!DECL_DEFAULTED_IN_CLASS_P (decl))
9966             TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
9967           if (ctor > 1)
9968             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
9969         }
9970       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
9971         {
9972           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
9973           if (TREE_CODE (decl) == TEMPLATE_DECL
9974               || !DECL_DEFAULTED_IN_CLASS_P (decl))
9975             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
9976         }
9977       else if (is_list_ctor (decl))
9978         TYPE_HAS_LIST_CTOR (class_type) = 1;
9979     }
9980   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9981     {
9982       /* [class.copy]
9983
9984          A non-template assignment operator for class X is a copy
9985          assignment operator if its parameter is of type X, X&, const
9986          X&, volatile X& or const volatile X&.  */
9987
9988       int assop = copy_fn_p (decl);
9989
9990       if (assop)
9991         {
9992           TYPE_HAS_ASSIGN_REF (class_type) = 1;
9993           if (!DECL_DEFAULTED_IN_CLASS_P (decl))
9994             TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
9995           if (assop != 1)
9996             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
9997         }
9998     }
9999 }
10000
10001 /* Check a constructor DECL has the correct form.  Complains
10002    if the class has a constructor of the form X(X).  */
10003
10004 int
10005 grok_ctor_properties (const_tree ctype, const_tree decl)
10006 {
10007   int ctor_parm = copy_fn_p (decl);
10008
10009   if (ctor_parm < 0)
10010     {
10011       /* [class.copy]
10012
10013          A declaration of a constructor for a class X is ill-formed if
10014          its first parameter is of type (optionally cv-qualified) X
10015          and either there are no other parameters or else all other
10016          parameters have default arguments.
10017
10018          We *don't* complain about member template instantiations that
10019          have this form, though; they can occur as we try to decide
10020          what constructor to use during overload resolution.  Since
10021          overload resolution will never prefer such a constructor to
10022          the non-template copy constructor (which is either explicitly
10023          or implicitly defined), there's no need to worry about their
10024          existence.  Theoretically, they should never even be
10025          instantiated, but that's hard to forestall.  */
10026       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10027                 ctype, ctype);
10028       return 0;
10029     }
10030
10031   return 1;
10032 }
10033
10034 /* An operator with this code is unary, but can also be binary.  */
10035
10036 static int
10037 ambi_op_p (enum tree_code code)
10038 {
10039   return (code == INDIRECT_REF
10040           || code == ADDR_EXPR
10041           || code == UNARY_PLUS_EXPR
10042           || code == NEGATE_EXPR
10043           || code == PREINCREMENT_EXPR
10044           || code == PREDECREMENT_EXPR);
10045 }
10046
10047 /* An operator with this name can only be unary.  */
10048
10049 static int
10050 unary_op_p (enum tree_code code)
10051 {
10052   return (code == TRUTH_NOT_EXPR
10053           || code == BIT_NOT_EXPR
10054           || code == COMPONENT_REF
10055           || code == TYPE_EXPR);
10056 }
10057
10058 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10059    errors are issued for invalid declarations.  */
10060
10061 bool
10062 grok_op_properties (tree decl, bool complain)
10063 {
10064   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10065   tree argtype;
10066   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10067   tree name = DECL_NAME (decl);
10068   enum tree_code operator_code;
10069   int arity;
10070   bool ellipsis_p;
10071   tree class_type;
10072
10073   /* Count the number of arguments and check for ellipsis.  */
10074   for (argtype = argtypes, arity = 0;
10075        argtype && argtype != void_list_node;
10076        argtype = TREE_CHAIN (argtype))
10077     ++arity;
10078   ellipsis_p = !argtype;
10079
10080   class_type = DECL_CONTEXT (decl);
10081   if (class_type && !CLASS_TYPE_P (class_type))
10082     class_type = NULL_TREE;
10083
10084   if (DECL_CONV_FN_P (decl))
10085     operator_code = TYPE_EXPR;
10086   else
10087     do
10088       {
10089 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10090         if (ansi_opname (CODE) == name)                         \
10091           {                                                     \
10092             operator_code = (CODE);                             \
10093             break;                                              \
10094           }                                                     \
10095         else if (ansi_assopname (CODE) == name)                 \
10096           {                                                     \
10097             operator_code = (CODE);                             \
10098             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10099             break;                                              \
10100           }
10101
10102 #include "operators.def"
10103 #undef DEF_OPERATOR
10104
10105         gcc_unreachable ();
10106       }
10107     while (0);
10108   gcc_assert (operator_code != MAX_TREE_CODES);
10109   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10110
10111   if (class_type)
10112     switch (operator_code)
10113       {
10114       case NEW_EXPR:
10115         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10116         break;
10117
10118       case DELETE_EXPR:
10119         TYPE_GETS_DELETE (class_type) |= 1;
10120         break;
10121
10122       case VEC_NEW_EXPR:
10123         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10124         break;
10125
10126       case VEC_DELETE_EXPR:
10127         TYPE_GETS_DELETE (class_type) |= 2;
10128         break;
10129
10130       default:
10131         break;
10132       }
10133
10134     /* [basic.std.dynamic.allocation]/1:
10135
10136        A program is ill-formed if an allocation function is declared
10137        in a namespace scope other than global scope or declared static
10138        in global scope.
10139
10140        The same also holds true for deallocation functions.  */
10141   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10142       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10143     {
10144       if (DECL_NAMESPACE_SCOPE_P (decl))
10145         {
10146           if (CP_DECL_CONTEXT (decl) != global_namespace)
10147             {
10148               error ("%qD may not be declared within a namespace", decl);
10149               return false;
10150             }
10151           else if (!TREE_PUBLIC (decl))
10152             {
10153               error ("%qD may not be declared as static", decl);
10154               return false;
10155             }
10156         }
10157     }
10158
10159   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10160     {
10161       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10162       DECL_IS_OPERATOR_NEW (decl) = 1;
10163     }
10164   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10165     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10166   else
10167     {
10168       /* An operator function must either be a non-static member function
10169          or have at least one parameter of a class, a reference to a class,
10170          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10171       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10172         {
10173           if (operator_code == TYPE_EXPR
10174               || operator_code == CALL_EXPR
10175               || operator_code == COMPONENT_REF
10176               || operator_code == ARRAY_REF
10177               || operator_code == NOP_EXPR)
10178             {
10179               error ("%qD must be a nonstatic member function", decl);
10180               return false;
10181             }
10182           else
10183             {
10184               tree p;
10185
10186               if (DECL_STATIC_FUNCTION_P (decl))
10187                 {
10188                   error ("%qD must be either a non-static member "
10189                          "function or a non-member function", decl);
10190                   return false;
10191                 }
10192
10193               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10194                 {
10195                   tree arg = non_reference (TREE_VALUE (p));
10196                   if (arg == error_mark_node)
10197                     return false;
10198
10199                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10200                      because these checks are performed even on
10201                      template functions.  */
10202                   if (MAYBE_CLASS_TYPE_P (arg)
10203                       || TREE_CODE (arg) == ENUMERAL_TYPE)
10204                     break;
10205                 }
10206
10207               if (!p || p == void_list_node)
10208                 {
10209                   if (complain)
10210                     error ("%qD must have an argument of class or "
10211                            "enumerated type", decl);
10212                   return false;
10213                 }
10214             }
10215         }
10216
10217       /* There are no restrictions on the arguments to an overloaded
10218          "operator ()".  */
10219       if (operator_code == CALL_EXPR)
10220         return true;
10221
10222       /* Warn about conversion operators that will never be used.  */
10223       if (IDENTIFIER_TYPENAME_P (name)
10224           && ! DECL_TEMPLATE_INFO (decl)
10225           && warn_conversion
10226           /* Warn only declaring the function; there is no need to
10227              warn again about out-of-class definitions.  */
10228           && class_type == current_class_type)
10229         {
10230           tree t = TREE_TYPE (name);
10231           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10232           const char *what = 0;
10233
10234           if (ref)
10235             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10236
10237           if (TREE_CODE (t) == VOID_TYPE)
10238             what = "void";
10239           else if (class_type)
10240             {
10241               if (t == class_type)
10242                 what = "the same type";
10243               /* Don't force t to be complete here.  */
10244               else if (MAYBE_CLASS_TYPE_P (t)
10245                        && COMPLETE_TYPE_P (t)
10246                        && DERIVED_FROM_P (t, class_type))
10247                 what = "a base class";
10248             }
10249
10250           if (what)
10251             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
10252                      "conversion operator",
10253                      ref ? "a reference to " : "", what);
10254         }
10255
10256       if (operator_code == COND_EXPR)
10257         {
10258           /* 13.4.0.3 */
10259           error ("ISO C++ prohibits overloading operator ?:");
10260           return false;
10261         }
10262       else if (ellipsis_p)
10263         {
10264           error ("%qD must not have variable number of arguments", decl);
10265           return false;
10266         }
10267       else if (ambi_op_p (operator_code))
10268         {
10269           if (arity == 1)
10270             /* We pick the one-argument operator codes by default, so
10271                we don't have to change anything.  */
10272             ;
10273           else if (arity == 2)
10274             {
10275               /* If we thought this was a unary operator, we now know
10276                  it to be a binary operator.  */
10277               switch (operator_code)
10278                 {
10279                 case INDIRECT_REF:
10280                   operator_code = MULT_EXPR;
10281                   break;
10282
10283                 case ADDR_EXPR:
10284                   operator_code = BIT_AND_EXPR;
10285                   break;
10286
10287                 case UNARY_PLUS_EXPR:
10288                   operator_code = PLUS_EXPR;
10289                   break;
10290
10291                 case NEGATE_EXPR:
10292                   operator_code = MINUS_EXPR;
10293                   break;
10294
10295                 case PREINCREMENT_EXPR:
10296                   operator_code = POSTINCREMENT_EXPR;
10297                   break;
10298
10299                 case PREDECREMENT_EXPR:
10300                   operator_code = POSTDECREMENT_EXPR;
10301                   break;
10302
10303                 default:
10304                   gcc_unreachable ();
10305                 }
10306
10307               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10308
10309               if ((operator_code == POSTINCREMENT_EXPR
10310                    || operator_code == POSTDECREMENT_EXPR)
10311                   && ! processing_template_decl
10312                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10313                 {
10314                   if (methodp)
10315                     error ("postfix %qD must take %<int%> as its argument",
10316                            decl);
10317                   else
10318                     error ("postfix %qD must take %<int%> as its second "
10319                            "argument", decl);
10320                   return false;
10321                 }
10322             }
10323           else
10324             {
10325               if (methodp)
10326                 error ("%qD must take either zero or one argument", decl);
10327               else
10328                 error ("%qD must take either one or two arguments", decl);
10329               return false;
10330             }
10331
10332           /* More Effective C++ rule 6.  */
10333           if (warn_ecpp
10334               && (operator_code == POSTINCREMENT_EXPR
10335                   || operator_code == POSTDECREMENT_EXPR
10336                   || operator_code == PREINCREMENT_EXPR
10337                   || operator_code == PREDECREMENT_EXPR))
10338             {
10339               tree arg = TREE_VALUE (argtypes);
10340               tree ret = TREE_TYPE (TREE_TYPE (decl));
10341               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10342                 arg = TREE_TYPE (arg);
10343               arg = TYPE_MAIN_VARIANT (arg);
10344               if (operator_code == PREINCREMENT_EXPR
10345                   || operator_code == PREDECREMENT_EXPR)
10346                 {
10347                   if (TREE_CODE (ret) != REFERENCE_TYPE
10348                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10349                                        arg))
10350                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10351                              build_reference_type (arg));
10352                 }
10353               else
10354                 {
10355                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10356                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10357                 }
10358             }
10359         }
10360       else if (unary_op_p (operator_code))
10361         {
10362           if (arity != 1)
10363             {
10364               if (methodp)
10365                 error ("%qD must take %<void%>", decl);
10366               else
10367                 error ("%qD must take exactly one argument", decl);
10368               return false;
10369             }
10370         }
10371       else /* if (binary_op_p (operator_code)) */
10372         {
10373           if (arity != 2)
10374             {
10375               if (methodp)
10376                 error ("%qD must take exactly one argument", decl);
10377               else
10378                 error ("%qD must take exactly two arguments", decl);
10379               return false;
10380             }
10381
10382           /* More Effective C++ rule 7.  */
10383           if (warn_ecpp
10384               && (operator_code == TRUTH_ANDIF_EXPR
10385                   || operator_code == TRUTH_ORIF_EXPR
10386                   || operator_code == COMPOUND_EXPR))
10387             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10388                      decl);
10389         }
10390
10391       /* Effective C++ rule 23.  */
10392       if (warn_ecpp
10393           && arity == 2
10394           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10395           && (operator_code == PLUS_EXPR
10396               || operator_code == MINUS_EXPR
10397               || operator_code == TRUNC_DIV_EXPR
10398               || operator_code == MULT_EXPR
10399               || operator_code == TRUNC_MOD_EXPR)
10400           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10401         warning (OPT_Weffc__, "%qD should return by value", decl);
10402
10403       /* [over.oper]/8 */
10404       for (; argtypes && argtypes != void_list_node;
10405           argtypes = TREE_CHAIN (argtypes))
10406         if (TREE_PURPOSE (argtypes))
10407           {
10408             TREE_PURPOSE (argtypes) = NULL_TREE;
10409             if (operator_code == POSTINCREMENT_EXPR
10410                 || operator_code == POSTDECREMENT_EXPR)
10411               {
10412                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
10413                          decl);
10414               }
10415             else
10416               {
10417                 error ("%qD cannot have default arguments", decl);
10418                 return false;
10419               }
10420           }
10421     }
10422   return true;
10423 }
10424 \f
10425 /* Return a string giving the keyword associate with CODE.  */
10426
10427 static const char *
10428 tag_name (enum tag_types code)
10429 {
10430   switch (code)
10431     {
10432     case record_type:
10433       return "struct";
10434     case class_type:
10435       return "class";
10436     case union_type:
10437       return "union";
10438     case enum_type:
10439       return "enum";
10440     case typename_type:
10441       return "typename";
10442     default:
10443       gcc_unreachable ();
10444     }
10445 }
10446
10447 /* Name lookup in an elaborated-type-specifier (after the keyword
10448    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
10449    elaborated-type-specifier is invalid, issue a diagnostic and return
10450    error_mark_node; otherwise, return the *_TYPE to which it referred.
10451    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
10452
10453 tree
10454 check_elaborated_type_specifier (enum tag_types tag_code,
10455                                  tree decl,
10456                                  bool allow_template_p)
10457 {
10458   tree type;
10459
10460   /* In the case of:
10461
10462        struct S { struct S *p; };
10463
10464      name lookup will find the TYPE_DECL for the implicit "S::S"
10465      typedef.  Adjust for that here.  */
10466   if (DECL_SELF_REFERENCE_P (decl))
10467     decl = TYPE_NAME (TREE_TYPE (decl));
10468
10469   type = TREE_TYPE (decl);
10470
10471   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10472      is false for this case as well.  */
10473   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10474     {
10475       error ("using template type parameter %qT after %qs",
10476              type, tag_name (tag_code));
10477       return error_mark_node;
10478     }
10479   /*   [dcl.type.elab]
10480
10481        If the identifier resolves to a typedef-name or a template
10482        type-parameter, the elaborated-type-specifier is ill-formed.
10483
10484      In other words, the only legitimate declaration to use in the
10485      elaborated type specifier is the implicit typedef created when
10486      the type is declared.  */
10487   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10488            && tag_code != typename_type)
10489     {
10490       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10491       error ("%q+D has a previous declaration here", decl);
10492       return error_mark_node;
10493     }
10494   else if (TREE_CODE (type) != RECORD_TYPE
10495            && TREE_CODE (type) != UNION_TYPE
10496            && tag_code != enum_type
10497            && tag_code != typename_type)
10498     {
10499       error ("%qT referred to as %qs", type, tag_name (tag_code));
10500       error ("%q+T has a previous declaration here", type);
10501       return error_mark_node;
10502     }
10503   else if (TREE_CODE (type) != ENUMERAL_TYPE
10504            && tag_code == enum_type)
10505     {
10506       error ("%qT referred to as enum", type);
10507       error ("%q+T has a previous declaration here", type);
10508       return error_mark_node;
10509     }
10510   else if (!allow_template_p
10511            && TREE_CODE (type) == RECORD_TYPE
10512            && CLASSTYPE_IS_TEMPLATE (type))
10513     {
10514       /* If a class template appears as elaborated type specifier
10515          without a template header such as:
10516
10517            template <class T> class C {};
10518            void f(class C);             // No template header here
10519
10520          then the required template argument is missing.  */
10521       error ("template argument required for %<%s %T%>",
10522              tag_name (tag_code),
10523              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10524       return error_mark_node;
10525     }
10526
10527   return type;
10528 }
10529
10530 /* Lookup NAME in elaborate type specifier in scope according to
10531    SCOPE and issue diagnostics if necessary.
10532    Return *_TYPE node upon success, NULL_TREE when the NAME is not
10533    found, and ERROR_MARK_NODE for type error.  */
10534
10535 static tree
10536 lookup_and_check_tag (enum tag_types tag_code, tree name,
10537                       tag_scope scope, bool template_header_p)
10538 {
10539   tree t;
10540   tree decl;
10541   if (scope == ts_global)
10542     {
10543       /* First try ordinary name lookup, ignoring hidden class name
10544          injected via friend declaration.  */
10545       decl = lookup_name_prefer_type (name, 2);
10546       /* If that fails, the name will be placed in the smallest
10547          non-class, non-function-prototype scope according to 3.3.1/5.
10548          We may already have a hidden name declared as friend in this
10549          scope.  So lookup again but not ignoring hidden names.
10550          If we find one, that name will be made visible rather than
10551          creating a new tag.  */
10552       if (!decl)
10553         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10554     }
10555   else
10556     decl = lookup_type_scope (name, scope);
10557
10558   if (decl && DECL_CLASS_TEMPLATE_P (decl))
10559     decl = DECL_TEMPLATE_RESULT (decl);
10560
10561   if (decl && TREE_CODE (decl) == TYPE_DECL)
10562     {
10563       /* Look for invalid nested type:
10564            class C {
10565              class C {};
10566            };  */
10567       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10568         {
10569           error ("%qD has the same name as the class in which it is "
10570                  "declared",
10571                  decl);
10572           return error_mark_node;
10573         }
10574
10575       /* Two cases we need to consider when deciding if a class
10576          template is allowed as an elaborated type specifier:
10577          1. It is a self reference to its own class.
10578          2. It comes with a template header.
10579
10580          For example:
10581
10582            template <class T> class C {
10583              class C *c1;               // DECL_SELF_REFERENCE_P is true
10584              class D;
10585            };
10586            template <class U> class C; // template_header_p is true
10587            template <class T> class C<T>::D {
10588              class C *c2;               // DECL_SELF_REFERENCE_P is true
10589            };  */
10590
10591       t = check_elaborated_type_specifier (tag_code,
10592                                            decl,
10593                                            template_header_p
10594                                            | DECL_SELF_REFERENCE_P (decl));
10595       return t;
10596     }
10597   else if (decl && TREE_CODE (decl) == TREE_LIST)
10598     {
10599       error ("reference to %qD is ambiguous", name);
10600       print_candidates (decl);
10601       return error_mark_node;
10602     }
10603   else
10604     return NULL_TREE;
10605 }
10606
10607 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10608    Define the tag as a forward-reference if it is not defined.
10609
10610    If a declaration is given, process it here, and report an error if
10611    multiple declarations are not identical.
10612
10613    SCOPE is TS_CURRENT when this is also a definition.  Only look in
10614    the current frame for the name (since C++ allows new names in any
10615    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10616    declaration.  Only look beginning from the current scope outward up
10617    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
10618
10619    TEMPLATE_HEADER_P is true when this declaration is preceded by
10620    a set of template parameters.  */
10621
10622 tree
10623 xref_tag (enum tag_types tag_code, tree name,
10624           tag_scope scope, bool template_header_p)
10625 {
10626   enum tree_code code;
10627   tree t;
10628   tree context = NULL_TREE;
10629
10630   timevar_push (TV_NAME_LOOKUP);
10631
10632   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10633
10634   switch (tag_code)
10635     {
10636     case record_type:
10637     case class_type:
10638       code = RECORD_TYPE;
10639       break;
10640     case union_type:
10641       code = UNION_TYPE;
10642       break;
10643     case enum_type:
10644       code = ENUMERAL_TYPE;
10645       break;
10646     default:
10647       gcc_unreachable ();
10648     }
10649
10650   /* In case of anonymous name, xref_tag is only called to
10651      make type node and push name.  Name lookup is not required.  */
10652   if (ANON_AGGRNAME_P (name))
10653     t = NULL_TREE;
10654   else
10655     t = lookup_and_check_tag  (tag_code, name,
10656                                scope, template_header_p);
10657
10658   if (t == error_mark_node)
10659     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10660
10661   if (scope != ts_current && t && current_class_type
10662       && template_class_depth (current_class_type)
10663       && template_header_p)
10664     {
10665       /* Since SCOPE is not TS_CURRENT, we are not looking at a
10666          definition of this tag.  Since, in addition, we are currently
10667          processing a (member) template declaration of a template
10668          class, we must be very careful; consider:
10669
10670            template <class X>
10671            struct S1
10672
10673            template <class U>
10674            struct S2
10675            { template <class V>
10676            friend struct S1; };
10677
10678          Here, the S2::S1 declaration should not be confused with the
10679          outer declaration.  In particular, the inner version should
10680          have a template parameter of level 2, not level 1.  This
10681          would be particularly important if the member declaration
10682          were instead:
10683
10684            template <class V = U> friend struct S1;
10685
10686          say, when we should tsubst into `U' when instantiating
10687          S2.  On the other hand, when presented with:
10688
10689            template <class T>
10690            struct S1 {
10691              template <class U>
10692              struct S2 {};
10693              template <class U>
10694              friend struct S2;
10695            };
10696
10697          we must find the inner binding eventually.  We
10698          accomplish this by making sure that the new type we
10699          create to represent this declaration has the right
10700          TYPE_CONTEXT.  */
10701       context = TYPE_CONTEXT (t);
10702       t = NULL_TREE;
10703     }
10704
10705   if (! t)
10706     {
10707       /* If no such tag is yet defined, create a forward-reference node
10708          and record it as the "definition".
10709          When a real declaration of this type is found,
10710          the forward-reference will be altered into a real type.  */
10711       if (code == ENUMERAL_TYPE)
10712         {
10713           error ("use of enum %q#D without previous declaration", name);
10714           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10715         }
10716       else
10717         {
10718           t = make_class_type (code);
10719           TYPE_CONTEXT (t) = context;
10720           t = pushtag (name, t, scope);
10721         }
10722     }
10723   else
10724     {
10725       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10726         {
10727           if (!redeclare_class_template (t, current_template_parms))
10728             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10729         }
10730       else if (!processing_template_decl
10731                && CLASS_TYPE_P (t)
10732                && CLASSTYPE_IS_TEMPLATE (t))
10733         {
10734           error ("redeclaration of %qT as a non-template", t);
10735           error ("previous declaration %q+D", t);
10736           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10737         }
10738
10739       /* Make injected friend class visible.  */
10740       if (scope != ts_within_enclosing_non_class
10741           && hidden_name_p (TYPE_NAME (t)))
10742         {
10743           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10744           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10745
10746           if (TYPE_TEMPLATE_INFO (t))
10747             {
10748               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10749               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10750             }
10751         }
10752     }
10753
10754   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10755 }
10756
10757 tree
10758 xref_tag_from_type (tree old, tree id, tag_scope scope)
10759 {
10760   enum tag_types tag_kind;
10761
10762   if (TREE_CODE (old) == RECORD_TYPE)
10763     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10764   else
10765     tag_kind  = union_type;
10766
10767   if (id == NULL_TREE)
10768     id = TYPE_IDENTIFIER (old);
10769
10770   return xref_tag (tag_kind, id, scope, false);
10771 }
10772
10773 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10774    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
10775    access_* node, and the TREE_VALUE is the type of the base-class.
10776    Non-NULL TREE_TYPE indicates virtual inheritance.  
10777  
10778    Returns true if the binfo hierarchy was successfully created,
10779    false if an error was detected. */
10780
10781 bool
10782 xref_basetypes (tree ref, tree base_list)
10783 {
10784   tree *basep;
10785   tree binfo, base_binfo;
10786   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
10787   unsigned max_bases = 0;  /* Maximum direct bases.  */
10788   int i;
10789   tree default_access;
10790   tree igo_prev; /* Track Inheritance Graph Order.  */
10791
10792   if (ref == error_mark_node)
10793     return false;
10794
10795   /* The base of a derived class is private by default, all others are
10796      public.  */
10797   default_access = (TREE_CODE (ref) == RECORD_TYPE
10798                     && CLASSTYPE_DECLARED_CLASS (ref)
10799                     ? access_private_node : access_public_node);
10800
10801   /* First, make sure that any templates in base-classes are
10802      instantiated.  This ensures that if we call ourselves recursively
10803      we do not get confused about which classes are marked and which
10804      are not.  */
10805   basep = &base_list;
10806   while (*basep)
10807     {
10808       tree basetype = TREE_VALUE (*basep);
10809
10810       if (!(processing_template_decl && uses_template_parms (basetype))
10811           && !complete_type_or_else (basetype, NULL))
10812         /* An incomplete type.  Remove it from the list.  */
10813         *basep = TREE_CHAIN (*basep);
10814       else
10815         {
10816           max_bases++;
10817           if (TREE_TYPE (*basep))
10818             max_vbases++;
10819           if (CLASS_TYPE_P (basetype))
10820             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10821           basep = &TREE_CHAIN (*basep);
10822         }
10823     }
10824
10825   TYPE_MARKED_P (ref) = 1;
10826
10827   /* The binfo slot should be empty, unless this is an (ill-formed)
10828      redefinition.  */
10829   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10830   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10831
10832   binfo = make_tree_binfo (max_bases);
10833
10834   TYPE_BINFO (ref) = binfo;
10835   BINFO_OFFSET (binfo) = size_zero_node;
10836   BINFO_TYPE (binfo) = ref;
10837
10838   if (max_bases)
10839     {
10840       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
10841       /* An aggregate cannot have baseclasses.  */
10842       CLASSTYPE_NON_AGGREGATE (ref) = 1;
10843
10844       if (TREE_CODE (ref) == UNION_TYPE)
10845         {
10846           error ("derived union %qT invalid", ref);
10847           return false;
10848         }
10849     }
10850
10851   if (max_bases > 1)
10852     {
10853       if (TYPE_FOR_JAVA (ref))
10854         {
10855           error ("Java class %qT cannot have multiple bases", ref);
10856           return false;
10857         }
10858     }
10859
10860   if (max_vbases)
10861     {
10862       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
10863
10864       if (TYPE_FOR_JAVA (ref))
10865         {
10866           error ("Java class %qT cannot have virtual bases", ref);
10867           return false;
10868         }
10869     }
10870
10871   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10872     {
10873       tree access = TREE_PURPOSE (base_list);
10874       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10875       tree basetype = TREE_VALUE (base_list);
10876
10877       if (access == access_default_node)
10878         access = default_access;
10879
10880       if (PACK_EXPANSION_P (basetype))
10881         basetype = PACK_EXPANSION_PATTERN (basetype);
10882       if (TREE_CODE (basetype) == TYPE_DECL)
10883         basetype = TREE_TYPE (basetype);
10884       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
10885         {
10886           error ("base type %qT fails to be a struct or class type",
10887                  basetype);
10888           return false;
10889         }
10890
10891       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10892         TYPE_FOR_JAVA (ref) = 1;
10893
10894       base_binfo = NULL_TREE;
10895       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
10896         {
10897           base_binfo = TYPE_BINFO (basetype);
10898           /* The original basetype could have been a typedef'd type.  */
10899           basetype = BINFO_TYPE (base_binfo);
10900
10901           /* Inherit flags from the base.  */
10902           TYPE_HAS_NEW_OPERATOR (ref)
10903             |= TYPE_HAS_NEW_OPERATOR (basetype);
10904           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10905             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10906           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
10907           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
10908           CLASSTYPE_DIAMOND_SHAPED_P (ref)
10909             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10910           CLASSTYPE_REPEATED_BASE_P (ref)
10911             |= CLASSTYPE_REPEATED_BASE_P (basetype);
10912         }
10913
10914       /* We must do this test after we've seen through a typedef
10915          type.  */
10916       if (TYPE_MARKED_P (basetype))
10917         {
10918           if (basetype == ref)
10919             error ("recursive type %qT undefined", basetype);
10920           else
10921             error ("duplicate base type %qT invalid", basetype);
10922           return false;
10923         }
10924
10925       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10926         /* Regenerate the pack expansion for the bases. */
10927         basetype = make_pack_expansion (basetype);
10928
10929       TYPE_MARKED_P (basetype) = 1;
10930
10931       base_binfo = copy_binfo (base_binfo, basetype, ref,
10932                                &igo_prev, via_virtual);
10933       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10934         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
10935
10936       BINFO_BASE_APPEND (binfo, base_binfo);
10937       BINFO_BASE_ACCESS_APPEND (binfo, access);
10938     }
10939
10940   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10941     /* If we have space in the vbase vector, we must have shared at
10942        least one of them, and are therefore diamond shaped.  */
10943     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10944
10945   /* Unmark all the types.  */
10946   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
10947     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10948   TYPE_MARKED_P (ref) = 0;
10949
10950   /* Now see if we have a repeated base type.  */
10951   if (!CLASSTYPE_REPEATED_BASE_P (ref))
10952     {
10953       for (base_binfo = binfo; base_binfo;
10954            base_binfo = TREE_CHAIN (base_binfo))
10955         {
10956           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10957             {
10958               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10959               break;
10960             }
10961           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10962         }
10963       for (base_binfo = binfo; base_binfo;
10964            base_binfo = TREE_CHAIN (base_binfo))
10965         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10966           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10967         else
10968           break;
10969     }
10970
10971   return true;
10972 }
10973
10974 \f
10975 /* Begin compiling the definition of an enumeration type.
10976    NAME is its name, 
10977
10978    UNDERLYING_TYPE is the type that will be used as the storage for
10979    the enumeration type. This should be NULL_TREE if no storage type
10980    was specified.
10981
10982    SCOPED_ENUM_P is true if this is a scoped enumeration type.
10983
10984    Returns the type object, as yet incomplete.
10985    Also records info about it so that build_enumerator
10986    may be used to declare the individual values as they are read.  */
10987
10988 tree
10989 start_enum (tree name, tree underlying_type, bool scoped_enum_p)
10990 {
10991   tree enumtype;
10992
10993   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10994
10995   /* If this is the real definition for a previous forward reference,
10996      fill in the contents in the same object that used to be the
10997      forward reference.  */
10998
10999   enumtype = lookup_and_check_tag (enum_type, name,
11000                                    /*tag_scope=*/ts_current,
11001                                    /*template_header_p=*/false);
11002
11003   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11004     {
11005       error ("multiple definition of %q#T", enumtype);
11006       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
11007       /* Clear out TYPE_VALUES, and start again.  */
11008       TYPE_VALUES (enumtype) = NULL_TREE;
11009     }
11010   else
11011     {
11012       /* In case of error, make a dummy enum to allow parsing to
11013          continue.  */
11014       if (enumtype == error_mark_node)
11015         name = make_anon_name ();
11016
11017       enumtype = make_node (ENUMERAL_TYPE);
11018       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11019     }
11020
11021   if (enumtype == error_mark_node)
11022     return enumtype;
11023
11024   if (scoped_enum_p)
11025     {
11026       SET_SCOPED_ENUM_P (enumtype, 1);
11027       begin_scope (sk_scoped_enum, enumtype);
11028
11029       /* [C++0x dcl.enum]p5: 
11030
11031           If not explicitly specified, the underlying type of a scoped
11032           enumeration type is int.  */
11033       if (!underlying_type)
11034         underlying_type = integer_type_node;
11035     }
11036
11037   if (underlying_type)
11038     {
11039       if (CP_INTEGRAL_TYPE_P (underlying_type))
11040         {
11041           TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11042           TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11043           TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11044           TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11045           SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11046           TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11047           TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11048           TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11049           TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11050           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11051         }
11052       else if (!dependent_type_p (underlying_type))
11053         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11054                underlying_type, enumtype);
11055     }
11056
11057   return enumtype;
11058 }
11059
11060 /* After processing and defining all the values of an enumeration type,
11061    install their decls in the enumeration type and finish it off.
11062    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
11063
11064 void
11065 finish_enum (tree enumtype)
11066 {
11067   tree values;
11068   tree decl;
11069   tree minnode;
11070   tree maxnode;
11071   tree value;
11072   tree t;
11073   bool unsignedp;
11074   bool use_short_enum;
11075   int lowprec;
11076   int highprec;
11077   int precision;
11078   integer_type_kind itk;
11079   tree underlying_type = NULL_TREE;
11080   bool fixed_underlying_type_p 
11081     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11082
11083   /* We built up the VALUES in reverse order.  */
11084   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11085
11086   /* For an enum defined in a template, just set the type of the values;
11087      all further processing is postponed until the template is
11088      instantiated.  We need to set the type so that tsubst of a CONST_DECL
11089      works.  */
11090   if (processing_template_decl)
11091     {
11092       for (values = TYPE_VALUES (enumtype);
11093            values;
11094            values = TREE_CHAIN (values))
11095         TREE_TYPE (TREE_VALUE (values)) = enumtype;
11096       if (at_function_scope_p ())
11097         add_stmt (build_min (TAG_DEFN, enumtype));
11098       if (SCOPED_ENUM_P (enumtype))
11099         finish_scope ();
11100       return;
11101     }
11102
11103   /* Determine the minimum and maximum values of the enumerators.  */
11104   if (TYPE_VALUES (enumtype))
11105     {
11106       minnode = maxnode = NULL_TREE;
11107
11108       for (values = TYPE_VALUES (enumtype);
11109            values;
11110            values = TREE_CHAIN (values))
11111         {
11112           decl = TREE_VALUE (values);
11113
11114           /* [dcl.enum]: Following the closing brace of an enum-specifier,
11115              each enumerator has the type of its enumeration.  Prior to the
11116              closing brace, the type of each enumerator is the type of its
11117              initializing value.  */
11118           TREE_TYPE (decl) = enumtype;
11119
11120           /* Update the minimum and maximum values, if appropriate.  */
11121           value = DECL_INITIAL (decl);
11122           if (value == error_mark_node)
11123             value = integer_zero_node;
11124           /* Figure out what the minimum and maximum values of the
11125              enumerators are.  */
11126           if (!minnode)
11127             minnode = maxnode = value;
11128           else if (tree_int_cst_lt (maxnode, value))
11129             maxnode = value;
11130           else if (tree_int_cst_lt (value, minnode))
11131             minnode = value;
11132         }
11133     }
11134   else
11135     /* [dcl.enum]
11136        
11137        If the enumerator-list is empty, the underlying type is as if
11138        the enumeration had a single enumerator with value 0.  */
11139     minnode = maxnode = integer_zero_node;
11140
11141   /* Compute the number of bits require to represent all values of the
11142      enumeration.  We must do this before the type of MINNODE and
11143      MAXNODE are transformed, since tree_int_cst_min_precision relies
11144      on the TREE_TYPE of the value it is passed.  */
11145   unsignedp = tree_int_cst_sgn (minnode) >= 0;
11146   lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11147   highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11148   precision = MAX (lowprec, highprec);
11149
11150   if (!fixed_underlying_type_p)
11151     {
11152       /* Determine the underlying type of the enumeration.
11153
11154          [dcl.enum]
11155
11156          The underlying type of an enumeration is an integral type that
11157          can represent all the enumerator values defined in the
11158          enumeration.  It is implementation-defined which integral type is
11159          used as the underlying type for an enumeration except that the
11160          underlying type shall not be larger than int unless the value of
11161          an enumerator cannot fit in an int or unsigned int.
11162
11163          We use "int" or an "unsigned int" as the underlying type, even if
11164          a smaller integral type would work, unless the user has
11165          explicitly requested that we use the smallest possible type.  The
11166          user can request that for all enumerations with a command line
11167          flag, or for just one enumeration with an attribute.  */
11168
11169       use_short_enum = flag_short_enums
11170         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11171
11172       for (itk = (use_short_enum ? itk_char : itk_int);
11173            itk != itk_none;
11174            itk++)
11175         {
11176           underlying_type = integer_types[itk];
11177           if (TYPE_PRECISION (underlying_type) >= precision
11178               && TYPE_UNSIGNED (underlying_type) == unsignedp)
11179             break;
11180         }
11181       if (itk == itk_none)
11182         {
11183           /* DR 377
11184
11185              IF no integral type can represent all the enumerator values, the
11186              enumeration is ill-formed.  */
11187           error ("no integral type can represent all of the enumerator values "
11188                  "for %qT", enumtype);
11189           precision = TYPE_PRECISION (long_long_integer_type_node);
11190           underlying_type = integer_types[itk_unsigned_long_long];
11191         }
11192
11193       /* [dcl.enum]
11194
11195          The value of sizeof() applied to an enumeration type, an object
11196          of an enumeration type, or an enumerator, is the value of sizeof()
11197          applied to the underlying type.  */
11198       TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11199       TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11200       SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11201       TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11202       TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11203       TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11204
11205       /* Set the underlying type of the enumeration type to the
11206          computed enumeration type, restricted to the enumerator
11207          values. */
11208       ENUM_UNDERLYING_TYPE (enumtype) = copy_node (underlying_type);
11209       set_min_and_max_values_for_integral_type 
11210         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11211     }
11212   else
11213     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11214
11215   /* Compute the minimum and maximum values for the type.
11216
11217      [dcl.enum]
11218
11219      For an enumeration where emin is the smallest enumerator and emax
11220      is the largest, the values of the enumeration are the values of the
11221      underlying type in the range bmin to bmax, where bmin and bmax are,
11222      respectively, the smallest and largest values of the smallest bit-
11223      field that can store emin and emax.  */
11224   
11225   /* The middle-end currently assumes that types with TYPE_PRECISION
11226      narrower than their underlying type are suitably zero or sign
11227      extended to fill their mode.  g++ doesn't make these guarantees.
11228      Until the middle-end can represent such paradoxical types, we
11229      set the TYPE_PRECISION to the width of the underlying type.  */
11230   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11231   
11232   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
11233   
11234   /* Convert each of the enumerators to the type of the underlying
11235      type of the enumeration.  */
11236   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11237     {
11238       location_t saved_location;
11239
11240       decl = TREE_VALUE (values);
11241       saved_location = input_location;
11242       input_location = DECL_SOURCE_LOCATION (decl);
11243       if (fixed_underlying_type_p)
11244         /* If the enumeration type has a fixed underlying type, we
11245            already checked all of the enumerator values.  */
11246         value = DECL_INITIAL (decl);
11247       else
11248         value = perform_implicit_conversion (underlying_type,
11249                                              DECL_INITIAL (decl),
11250                                              tf_warning_or_error);
11251       input_location = saved_location;
11252
11253       /* Do not clobber shared ints.  */
11254       value = copy_node (value);
11255
11256       TREE_TYPE (value) = enumtype;
11257       DECL_INITIAL (decl) = value;
11258     }
11259
11260   /* Fix up all variant types of this enum type.  */
11261   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11262     {
11263       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11264       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11265       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11266       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11267       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11268       SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11269       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11270       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11271       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11272       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11273       ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11274     }
11275
11276   /* Finish up the scope of a scoped enumeration.  */
11277   if (SCOPED_ENUM_P (enumtype))
11278     finish_scope ();
11279
11280   /* Finish debugging output for this type.  */
11281   rest_of_type_compilation (enumtype, namespace_bindings_p ());
11282 }
11283
11284 /* Build and install a CONST_DECL for an enumeration constant of the
11285    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11286    Assignment of sequential values by default is handled here.  */
11287
11288 void
11289 build_enumerator (tree name, tree value, tree enumtype)
11290 {
11291   tree decl;
11292   tree context;
11293   tree type;
11294
11295   /* If the VALUE was erroneous, pretend it wasn't there; that will
11296      result in the enum being assigned the next value in sequence.  */
11297   if (value == error_mark_node)
11298     value = NULL_TREE;
11299
11300   /* Remove no-op casts from the value.  */
11301   if (value)
11302     STRIP_TYPE_NOPS (value);
11303
11304   if (! processing_template_decl)
11305     {
11306       /* Validate and default VALUE.  */
11307       if (value != NULL_TREE)
11308         {
11309           value = integral_constant_value (value);
11310
11311           if (TREE_CODE (value) == INTEGER_CST)
11312             {
11313               value = perform_integral_promotions (value);
11314               constant_expression_warning (value);
11315             }
11316           else
11317             {
11318               error ("enumerator value for %qD is not an integer constant", name);
11319               value = NULL_TREE;
11320             }
11321         }
11322
11323       /* Default based on previous value.  */
11324       if (value == NULL_TREE)
11325         {
11326           if (TYPE_VALUES (enumtype))
11327             {
11328               HOST_WIDE_INT hi;
11329               unsigned HOST_WIDE_INT lo;
11330               tree prev_value;
11331               bool overflowed;
11332
11333               /* The next value is the previous value plus one.
11334                  add_double doesn't know the type of the target expression,
11335                  so we must check with int_fits_type_p as well.  */
11336               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11337               if (error_operand_p (prev_value))
11338                 value = error_mark_node;
11339               else
11340                 {
11341                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11342                                            TREE_INT_CST_HIGH (prev_value),
11343                                            1, 0, &lo, &hi);
11344                   value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11345                   overflowed
11346                     |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11347
11348                   if (overflowed)
11349                     {
11350                       error ("overflow in enumeration values at %qD", name);
11351                       value = error_mark_node;
11352                     }
11353                 }
11354             }
11355           else
11356             value = integer_zero_node;
11357         }
11358
11359       /* Remove no-op casts from the value.  */
11360       STRIP_TYPE_NOPS (value);
11361
11362       /* If the underlying type of the enum is fixed, check whether
11363          the enumerator values fits in the underlying type.  If it
11364          does not fit, the program is ill-formed [C++0x dcl.enum].  */
11365       if (ENUM_UNDERLYING_TYPE (enumtype)
11366           && value
11367           && TREE_CODE (value) == INTEGER_CST
11368           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11369         {
11370           error ("enumerator value %E is too large for underlying type %<%T%>",
11371                  value, ENUM_UNDERLYING_TYPE (enumtype));
11372
11373           /* Silently convert the value so that we can continue.  */
11374           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11375                                                value, tf_none);
11376         }
11377     }
11378
11379   /* C++ associates enums with global, function, or class declarations.  */
11380   context = current_scope ();
11381
11382   /* Build the actual enumeration constant.  Note that the enumeration
11383      constants have the underlying type of the enum (if it is fixed)
11384      or the type of their initializer (if the underlying type of the
11385      enum is not fixed):
11386
11387       [ C++0x dcl.enum ]
11388
11389         If the underlying type is fixed, the type of each enumerator
11390         prior to the closing brace is the underlying type; if the
11391         initializing value of an enumerator cannot be represented by
11392         the underlying type, the program is ill-formed. If the
11393         underlying type is not fixed, the type of each enumerator is
11394         the type of its initializing value.
11395
11396     If the underlying type is not fixed, it will be computed by
11397     finish_enum and we will reset the type of this enumerator.  Of
11398     course, if we're processing a template, there may be no value.  */
11399   type = value ? TREE_TYPE (value) : NULL_TREE;
11400
11401   if (context && context == current_class_type)
11402     /* This enum declaration is local to the class.  We need the full
11403        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
11404     decl = build_lang_decl (CONST_DECL, name, type);
11405   else
11406     /* It's a global enum, or it's local to a function.  (Note local to
11407       a function could mean local to a class method.  */
11408     decl = build_decl (CONST_DECL, name, type);
11409
11410   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11411   TREE_CONSTANT (decl) = 1;
11412   TREE_READONLY (decl) = 1;
11413   DECL_INITIAL (decl) = value;
11414
11415   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
11416     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11417        on the TYPE_FIELDS list for `S'.  (That's so that you can say
11418        things like `S::i' later.)  */
11419     finish_member_declaration (decl);
11420   else
11421     pushdecl (decl);
11422
11423   /* Add this enumeration constant to the list for this type.  */
11424   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11425 }
11426
11427 /* Look for an enumerator with the given NAME within the enumeration
11428    type ENUMTYPE.  This routine is used primarily for qualified name
11429    lookup into an enumerator in C++0x, e.g.,
11430
11431      enum class Color { Red, Green, Blue };
11432
11433      Color color = Color::Red;
11434
11435    Returns the value corresponding to the enumerator, or
11436    NULL_TREE if no such enumerator was found.  */
11437 tree
11438 lookup_enumerator (tree enumtype, tree name)
11439 {
11440   tree e;
11441   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11442
11443   e = purpose_member (name, TYPE_VALUES (enumtype));
11444   return e? TREE_VALUE (e) : NULL_TREE;
11445 }
11446
11447 \f
11448 /* We're defining DECL.  Make sure that it's type is OK.  */
11449
11450 static void
11451 check_function_type (tree decl, tree current_function_parms)
11452 {
11453   tree fntype = TREE_TYPE (decl);
11454   tree return_type = complete_type (TREE_TYPE (fntype));
11455
11456   /* In a function definition, arg types must be complete.  */
11457   require_complete_types_for_parms (current_function_parms);
11458
11459   if (dependent_type_p (return_type))
11460     return;
11461   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11462       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11463     {
11464       tree args = TYPE_ARG_TYPES (fntype);
11465
11466       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11467         error ("return type %q#T is incomplete", return_type);
11468       else
11469         error ("return type has Java class type %q#T", return_type);
11470
11471       /* Make it return void instead.  */
11472       if (TREE_CODE (fntype) == METHOD_TYPE)
11473         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11474                                              void_type_node,
11475                                              TREE_CHAIN (args));
11476       else
11477         fntype = build_function_type (void_type_node, args);
11478       TREE_TYPE (decl)
11479         = build_exception_variant (fntype,
11480                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11481     }
11482   else
11483     abstract_virtuals_error (decl, TREE_TYPE (fntype));
11484 }
11485
11486 /* Create the FUNCTION_DECL for a function definition.
11487    DECLSPECS and DECLARATOR are the parts of the declaration;
11488    they describe the function's name and the type it returns,
11489    but twisted together in a fashion that parallels the syntax of C.
11490
11491    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11492    DECLARATOR is really the DECL for the function we are about to
11493    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11494    indicating that the function is an inline defined in-class.
11495
11496    This function creates a binding context for the function body
11497    as well as setting up the FUNCTION_DECL in current_function_decl.
11498
11499    For C++, we must first check whether that datum makes any sense.
11500    For example, "class A local_a(1,2);" means that variable local_a
11501    is an aggregate of type A, which should have a constructor
11502    applied to it with the argument list [1, 2].
11503
11504    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11505    or may be a BLOCK if the function has been defined previously
11506    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
11507    error_mark_node if the function has never been defined, or
11508    a BLOCK if the function has been defined somewhere.  */
11509
11510 void
11511 start_preparsed_function (tree decl1, tree attrs, int flags)
11512 {
11513   tree ctype = NULL_TREE;
11514   tree fntype;
11515   tree restype;
11516   int doing_friend = 0;
11517   struct cp_binding_level *bl;
11518   tree current_function_parms;
11519   struct c_fileinfo *finfo
11520     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11521   bool honor_interface;
11522
11523   /* Sanity check.  */
11524   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11525   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11526
11527   fntype = TREE_TYPE (decl1);
11528   if (TREE_CODE (fntype) == METHOD_TYPE)
11529     ctype = TYPE_METHOD_BASETYPE (fntype);
11530
11531   /* ISO C++ 11.4/5.  A friend function defined in a class is in
11532      the (lexical) scope of the class in which it is defined.  */
11533   if (!ctype && DECL_FRIEND_P (decl1))
11534     {
11535       ctype = DECL_FRIEND_CONTEXT (decl1);
11536
11537       /* CTYPE could be null here if we're dealing with a template;
11538          for example, `inline friend float foo()' inside a template
11539          will have no CTYPE set.  */
11540       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11541         ctype = NULL_TREE;
11542       else
11543         doing_friend = 1;
11544     }
11545
11546   if (DECL_DECLARED_INLINE_P (decl1)
11547       && lookup_attribute ("noinline", attrs))
11548     warning (0, "inline function %q+D given attribute noinline", decl1);
11549
11550   /* Handle gnu_inline attribute.  */
11551   if (GNU_INLINE_P (decl1))
11552     {
11553       DECL_EXTERNAL (decl1) = 1;
11554       DECL_NOT_REALLY_EXTERN (decl1) = 0;
11555       DECL_INTERFACE_KNOWN (decl1) = 1;
11556       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11557     }
11558
11559   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11560     /* This is a constructor, we must ensure that any default args
11561        introduced by this definition are propagated to the clones
11562        now. The clones are used directly in overload resolution.  */
11563     adjust_clone_args (decl1);
11564
11565   /* Sometimes we don't notice that a function is a static member, and
11566      build a METHOD_TYPE for it.  Fix that up now.  */
11567   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11568       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11569     {
11570       revert_static_member_fn (decl1);
11571       ctype = NULL_TREE;
11572     }
11573
11574   /* Set up current_class_type, and enter the scope of the class, if
11575      appropriate.  */
11576   if (ctype)
11577     push_nested_class (ctype);
11578   else if (DECL_STATIC_FUNCTION_P (decl1))
11579     push_nested_class (DECL_CONTEXT (decl1));
11580
11581   /* Now that we have entered the scope of the class, we must restore
11582      the bindings for any template parameters surrounding DECL1, if it
11583      is an inline member template.  (Order is important; consider the
11584      case where a template parameter has the same name as a field of
11585      the class.)  It is not until after this point that
11586      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
11587   if (flags & SF_INCLASS_INLINE)
11588     maybe_begin_member_template_processing (decl1);
11589
11590   /* Effective C++ rule 15.  */
11591   if (warn_ecpp
11592       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11593       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11594     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11595
11596   /* Make the init_value nonzero so pushdecl knows this is not tentative.
11597      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11598   if (!DECL_INITIAL (decl1))
11599     DECL_INITIAL (decl1) = error_mark_node;
11600
11601   /* This function exists in static storage.
11602      (This does not mean `static' in the C sense!)  */
11603   TREE_STATIC (decl1) = 1;
11604
11605   /* We must call push_template_decl after current_class_type is set
11606      up.  (If we are processing inline definitions after exiting a
11607      class scope, current_class_type will be NULL_TREE until set above
11608      by push_nested_class.)  */
11609   if (processing_template_decl)
11610     {
11611       /* FIXME: Handle error_mark_node more gracefully.  */
11612       tree newdecl1 = push_template_decl (decl1);
11613       if (newdecl1 != error_mark_node)
11614         decl1 = newdecl1;
11615     }
11616
11617   /* We are now in the scope of the function being defined.  */
11618   current_function_decl = decl1;
11619
11620   /* Save the parm names or decls from this function's declarator
11621      where store_parm_decls will find them.  */
11622   current_function_parms = DECL_ARGUMENTS (decl1);
11623
11624   /* Make sure the parameter and return types are reasonable.  When
11625      you declare a function, these types can be incomplete, but they
11626      must be complete when you define the function.  */
11627   check_function_type (decl1, current_function_parms);
11628
11629   /* Build the return declaration for the function.  */
11630   restype = TREE_TYPE (fntype);
11631   if (DECL_RESULT (decl1) == NULL_TREE)
11632     {
11633       tree resdecl;
11634
11635       resdecl = build_decl (RESULT_DECL, 0, restype);
11636       DECL_ARTIFICIAL (resdecl) = 1;
11637       DECL_IGNORED_P (resdecl) = 1;
11638       DECL_RESULT (decl1) = resdecl;
11639
11640       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11641     }
11642
11643   /* Let the user know we're compiling this function.  */
11644   announce_function (decl1);
11645
11646   /* Record the decl so that the function name is defined.
11647      If we already have a decl for this name, and it is a FUNCTION_DECL,
11648      use the old decl.  */
11649   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11650     {
11651       /* A specialization is not used to guide overload resolution.  */
11652       if (!DECL_FUNCTION_MEMBER_P (decl1)
11653           && !(DECL_USE_TEMPLATE (decl1) &&
11654                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11655         {
11656           tree olddecl = pushdecl (decl1);
11657
11658           if (olddecl == error_mark_node)
11659             /* If something went wrong when registering the declaration,
11660                use DECL1; we have to have a FUNCTION_DECL to use when
11661                parsing the body of the function.  */
11662             ;
11663           else
11664             {
11665               /* Otherwise, OLDDECL is either a previous declaration
11666                  of the same function or DECL1 itself.  */
11667
11668               if (warn_missing_declarations
11669                   && olddecl == decl1
11670                   && !DECL_MAIN_P (decl1)
11671                   && TREE_PUBLIC (decl1)
11672                   && !DECL_DECLARED_INLINE_P (decl1))
11673                 {
11674                   tree context;
11675
11676                   /* Check whether DECL1 is in an anonymous
11677                      namespace.  */
11678                   for (context = DECL_CONTEXT (decl1);
11679                        context;
11680                        context = DECL_CONTEXT (context))
11681                     {
11682                       if (TREE_CODE (context) == NAMESPACE_DECL
11683                           && DECL_NAME (context) == NULL_TREE)
11684                         break;
11685                     }
11686
11687                   if (context == NULL)
11688                     warning (OPT_Wmissing_declarations,
11689                              "no previous declaration for %q+D", decl1);
11690                 }
11691
11692               decl1 = olddecl;
11693             }
11694         }
11695       else
11696         {
11697           /* We need to set the DECL_CONTEXT.  */
11698           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11699             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11700         }
11701       fntype = TREE_TYPE (decl1);
11702
11703       /* If #pragma weak applies, mark the decl appropriately now.
11704          The pragma only applies to global functions.  Because
11705          determining whether or not the #pragma applies involves
11706          computing the mangled name for the declaration, we cannot
11707          apply the pragma until after we have merged this declaration
11708          with any previous declarations; if the original declaration
11709          has a linkage specification, that specification applies to
11710          the definition as well, and may affect the mangled name.  */
11711       if (!DECL_CONTEXT (decl1))
11712         maybe_apply_pragma_weak (decl1);
11713     }
11714
11715   /* Reset this in case the call to pushdecl changed it.  */
11716   current_function_decl = decl1;
11717
11718   gcc_assert (DECL_INITIAL (decl1));
11719
11720   /* This function may already have been parsed, in which case just
11721      return; our caller will skip over the body without parsing.  */
11722   if (DECL_INITIAL (decl1) != error_mark_node)
11723     return;
11724
11725   /* Initialize RTL machinery.  We cannot do this until
11726      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
11727      even when processing a template; this is how we get
11728      CFUN set up, and our per-function variables initialized.
11729      FIXME factor out the non-RTL stuff.  */
11730   bl = current_binding_level;
11731   allocate_struct_function (decl1, processing_template_decl);
11732
11733   /* Initialize the language data structures.  Whenever we start
11734      a new function, we destroy temporaries in the usual way.  */
11735   cfun->language = GGC_CNEW (struct language_function);
11736   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11737   current_binding_level = bl;
11738
11739   /* Even though we're inside a function body, we still don't want to
11740      call expand_expr to calculate the size of a variable-sized array.
11741      We haven't necessarily assigned RTL to all variables yet, so it's
11742      not safe to try to expand expressions involving them.  */
11743   cfun->dont_save_pending_sizes_p = 1;
11744
11745   /* Start the statement-tree, start the tree now.  */
11746   DECL_SAVED_TREE (decl1) = push_stmt_list ();
11747
11748   /* If we are (erroneously) defining a function that we have already
11749      defined before, wipe out what we knew before.  */
11750   if (!DECL_PENDING_INLINE_P (decl1))
11751     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11752
11753   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11754     {
11755       /* We know that this was set up by `grokclassfn'.  We do not
11756          wait until `store_parm_decls', since evil parse errors may
11757          never get us to that point.  Here we keep the consistency
11758          between `current_class_type' and `current_class_ptr'.  */
11759       tree t = DECL_ARGUMENTS (decl1);
11760
11761       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11762       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11763
11764       cp_function_chain->x_current_class_ref
11765         = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
11766       cp_function_chain->x_current_class_ptr = t;
11767
11768       /* Constructors and destructors need to know whether they're "in
11769          charge" of initializing virtual base classes.  */
11770       t = TREE_CHAIN (t);
11771       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11772         {
11773           current_in_charge_parm = t;
11774           t = TREE_CHAIN (t);
11775         }
11776       if (DECL_HAS_VTT_PARM_P (decl1))
11777         {
11778           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11779           current_vtt_parm = t;
11780         }
11781     }
11782
11783   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11784                      /* Implicitly-defined methods (like the
11785                         destructor for a class in which no destructor
11786                         is explicitly declared) must not be defined
11787                         until their definition is needed.  So, we
11788                         ignore interface specifications for
11789                         compiler-generated functions.  */
11790                      && !DECL_ARTIFICIAL (decl1));
11791
11792   if (DECL_INTERFACE_KNOWN (decl1))
11793     {
11794       tree ctx = decl_function_context (decl1);
11795
11796       if (DECL_NOT_REALLY_EXTERN (decl1))
11797         DECL_EXTERNAL (decl1) = 0;
11798
11799       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11800           && TREE_PUBLIC (ctx))
11801         /* This is a function in a local class in an extern inline
11802            function.  */
11803         comdat_linkage (decl1);
11804     }
11805   /* If this function belongs to an interface, it is public.
11806      If it belongs to someone else's interface, it is also external.
11807      This only affects inlines and template instantiations.  */
11808   else if (!finfo->interface_unknown && honor_interface)
11809     {
11810       if (DECL_DECLARED_INLINE_P (decl1)
11811           || DECL_TEMPLATE_INSTANTIATION (decl1)
11812           || processing_template_decl)
11813         {
11814           DECL_EXTERNAL (decl1)
11815             = (finfo->interface_only
11816                || (DECL_DECLARED_INLINE_P (decl1)
11817                    && ! flag_implement_inlines
11818                    && !DECL_VINDEX (decl1)));
11819
11820           /* For WIN32 we also want to put these in linkonce sections.  */
11821           maybe_make_one_only (decl1);
11822         }
11823       else
11824         DECL_EXTERNAL (decl1) = 0;
11825       DECL_INTERFACE_KNOWN (decl1) = 1;
11826       /* If this function is in an interface implemented in this file,
11827          make sure that the back end knows to emit this function
11828          here.  */
11829       if (!DECL_EXTERNAL (decl1))
11830         mark_needed (decl1);
11831     }
11832   else if (finfo->interface_unknown && finfo->interface_only
11833            && honor_interface)
11834     {
11835       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
11836          interface, we will have both finfo->interface_unknown and
11837          finfo->interface_only set.  In that case, we don't want to
11838          use the normal heuristics because someone will supply a
11839          #pragma implementation elsewhere, and deducing it here would
11840          produce a conflict.  */
11841       comdat_linkage (decl1);
11842       DECL_EXTERNAL (decl1) = 0;
11843       DECL_INTERFACE_KNOWN (decl1) = 1;
11844       DECL_DEFER_OUTPUT (decl1) = 1;
11845     }
11846   else
11847     {
11848       /* This is a definition, not a reference.
11849          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
11850       if (!GNU_INLINE_P (decl1))
11851         DECL_EXTERNAL (decl1) = 0;
11852
11853       if ((DECL_DECLARED_INLINE_P (decl1)
11854            || DECL_TEMPLATE_INSTANTIATION (decl1))
11855           && ! DECL_INTERFACE_KNOWN (decl1)
11856           /* Don't try to defer nested functions for now.  */
11857           && ! decl_function_context (decl1))
11858         DECL_DEFER_OUTPUT (decl1) = 1;
11859       else
11860         DECL_INTERFACE_KNOWN (decl1) = 1;
11861     }
11862
11863   /* Determine the ELF visibility attribute for the function.  We must not
11864      do this before calling "pushdecl", as we must allow "duplicate_decls"
11865      to merge any attributes appropriately.  We also need to wait until
11866      linkage is set.  */
11867   if (!DECL_CLONED_FUNCTION_P (decl1))
11868     determine_visibility (decl1);
11869
11870   begin_scope (sk_function_parms, decl1);
11871
11872   ++function_depth;
11873
11874   if (DECL_DESTRUCTOR_P (decl1)
11875       || (DECL_CONSTRUCTOR_P (decl1)
11876           && targetm.cxx.cdtor_returns_this ()))
11877     {
11878       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11879       DECL_CONTEXT (cdtor_label) = current_function_decl;
11880     }
11881
11882   start_fname_decls ();
11883
11884   store_parm_decls (current_function_parms);
11885 }
11886
11887
11888 /* Like start_preparsed_function, except that instead of a
11889    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11890
11891    Returns 1 on success.  If the DECLARATOR is not suitable for a function
11892    (it defines a datum instead), we return 0, which tells
11893    yyparse to report a parse error.  */
11894
11895 int
11896 start_function (cp_decl_specifier_seq *declspecs,
11897                 const cp_declarator *declarator,
11898                 tree attrs)
11899 {
11900   tree decl1;
11901
11902   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11903   if (decl1 == error_mark_node)
11904     return 0;
11905   /* If the declarator is not suitable for a function definition,
11906      cause a syntax error.  */
11907   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11908     {
11909       error ("invalid function declaration");
11910       return 0;
11911     }
11912
11913   if (DECL_MAIN_P (decl1))
11914     /* main must return int.  grokfndecl should have corrected it
11915        (and issued a diagnostic) if the user got it wrong.  */
11916     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11917                              integer_type_node));
11918
11919   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
11920
11921   return 1;
11922 }
11923 \f
11924 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11925    FN.  */
11926
11927 static bool
11928 use_eh_spec_block (tree fn)
11929 {
11930   return (flag_exceptions && flag_enforce_eh_specs
11931           && !processing_template_decl
11932           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11933           /* We insert the EH_SPEC_BLOCK only in the original
11934              function; then, it is copied automatically to the
11935              clones.  */
11936           && !DECL_CLONED_FUNCTION_P (fn)
11937           /* Implicitly-generated constructors and destructors have
11938              exception specifications.  However, those specifications
11939              are the union of the possible exceptions specified by the
11940              constructors/destructors for bases and members, so no
11941              unallowed exception will ever reach this function.  By
11942              not creating the EH_SPEC_BLOCK we save a little memory,
11943              and we avoid spurious warnings about unreachable
11944              code.  */
11945           && !DECL_ARTIFICIAL (fn));
11946 }
11947
11948 /* Store the parameter declarations into the current function declaration.
11949    This is called after parsing the parameter declarations, before
11950    digesting the body of the function.
11951
11952    Also install to binding contour return value identifier, if any.  */
11953
11954 static void
11955 store_parm_decls (tree current_function_parms)
11956 {
11957   tree fndecl = current_function_decl;
11958   tree parm;
11959
11960   /* This is a chain of any other decls that came in among the parm
11961      declarations.  If a parm is declared with  enum {foo, bar} x;
11962      then CONST_DECLs for foo and bar are put here.  */
11963   tree nonparms = NULL_TREE;
11964
11965   if (current_function_parms)
11966     {
11967       /* This case is when the function was defined with an ANSI prototype.
11968          The parms already have decls, so we need not do anything here
11969          except record them as in effect
11970          and complain if any redundant old-style parm decls were written.  */
11971
11972       tree specparms = current_function_parms;
11973       tree next;
11974
11975       /* Must clear this because it might contain TYPE_DECLs declared
11976              at class level.  */
11977       current_binding_level->names = NULL;
11978
11979       /* If we're doing semantic analysis, then we'll call pushdecl
11980              for each of these.  We must do them in reverse order so that
11981              they end in the correct forward order.  */
11982       specparms = nreverse (specparms);
11983
11984       for (parm = specparms; parm; parm = next)
11985         {
11986           next = TREE_CHAIN (parm);
11987           if (TREE_CODE (parm) == PARM_DECL)
11988             {
11989               if (DECL_NAME (parm) == NULL_TREE
11990                   || TREE_CODE (parm) != VOID_TYPE)
11991                 pushdecl (parm);
11992               else
11993                 error ("parameter %qD declared void", parm);
11994             }
11995           else
11996             {
11997               /* If we find an enum constant or a type tag,
11998                  put it aside for the moment.  */
11999               TREE_CHAIN (parm) = NULL_TREE;
12000               nonparms = chainon (nonparms, parm);
12001             }
12002         }
12003
12004       /* Get the decls in their original chain order and record in the
12005          function.  This is all and only the PARM_DECLs that were
12006          pushed into scope by the loop above.  */
12007       DECL_ARGUMENTS (fndecl) = getdecls ();
12008     }
12009   else
12010     DECL_ARGUMENTS (fndecl) = NULL_TREE;
12011
12012   /* Now store the final chain of decls for the arguments
12013      as the decl-chain of the current lexical scope.
12014      Put the enumerators in as well, at the front so that
12015      DECL_ARGUMENTS is not modified.  */
12016   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12017
12018   if (use_eh_spec_block (current_function_decl))
12019     current_eh_spec_block = begin_eh_spec_block ();
12020 }
12021
12022 \f
12023 /* We have finished doing semantic analysis on DECL, but have not yet
12024    generated RTL for its body.  Save away our current state, so that
12025    when we want to generate RTL later we know what to do.  */
12026
12027 static void
12028 save_function_data (tree decl)
12029 {
12030   struct language_function *f;
12031
12032   /* Save the language-specific per-function data so that we can
12033      get it back when we really expand this function.  */
12034   gcc_assert (!DECL_PENDING_INLINE_P (decl));
12035
12036   /* Make a copy.  */
12037   f = GGC_NEW (struct language_function);
12038   memcpy (f, cp_function_chain, sizeof (struct language_function));
12039   DECL_SAVED_FUNCTION_DATA (decl) = f;
12040
12041   /* Clear out the bits we don't need.  */
12042   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12043   f->bindings = NULL;
12044   f->x_local_names = NULL;
12045 }
12046
12047
12048 /* Set the return value of the constructor (if present).  */
12049
12050 static void
12051 finish_constructor_body (void)
12052 {
12053   tree val;
12054   tree exprstmt;
12055
12056   if (targetm.cxx.cdtor_returns_this ()
12057       && (! TYPE_FOR_JAVA (current_class_type)))
12058     {
12059       /* Any return from a constructor will end up here.  */
12060       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
12061
12062       val = DECL_ARGUMENTS (current_function_decl);
12063       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12064                     DECL_RESULT (current_function_decl), val);
12065       /* Return the address of the object.  */
12066       exprstmt = build_stmt (RETURN_EXPR, val);
12067       add_stmt (exprstmt);
12068     }
12069 }
12070
12071 /* Do all the processing for the beginning of a destructor; set up the
12072    vtable pointers and cleanups for bases and members.  */
12073
12074 static void
12075 begin_destructor_body (void)
12076 {
12077   tree compound_stmt;
12078
12079   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12080      issued an error message.  We still want to try to process the
12081      body of the function, but initialize_vtbl_ptrs will crash if
12082      TYPE_BINFO is NULL.  */
12083   if (COMPLETE_TYPE_P (current_class_type))
12084     {
12085       compound_stmt = begin_compound_stmt (0);
12086       /* Make all virtual function table pointers in non-virtual base
12087          classes point to CURRENT_CLASS_TYPE's virtual function
12088          tables.  */
12089       initialize_vtbl_ptrs (current_class_ptr);
12090       finish_compound_stmt (compound_stmt);
12091
12092       /* And insert cleanups for our bases and members so that they
12093          will be properly destroyed if we throw.  */
12094       push_base_cleanups ();
12095     }
12096 }
12097
12098 /* At the end of every destructor we generate code to delete the object if
12099    necessary.  Do that now.  */
12100
12101 static void
12102 finish_destructor_body (void)
12103 {
12104   tree exprstmt;
12105
12106   /* Any return from a destructor will end up here; that way all base
12107      and member cleanups will be run when the function returns.  */
12108   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
12109
12110   /* In a virtual destructor, we must call delete.  */
12111   if (DECL_VIRTUAL_P (current_function_decl))
12112     {
12113       tree if_stmt;
12114       tree virtual_size = cxx_sizeof (current_class_type);
12115
12116       /* [class.dtor]
12117
12118       At the point of definition of a virtual destructor (including
12119       an implicit definition), non-placement operator delete shall
12120       be looked up in the scope of the destructor's class and if
12121       found shall be accessible and unambiguous.  */
12122       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12123                                       virtual_size,
12124                                       /*global_p=*/false,
12125                                       /*placement=*/NULL_TREE,
12126                                       /*alloc_fn=*/NULL_TREE);
12127
12128       if_stmt = begin_if_stmt ();
12129       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12130                                    current_in_charge_parm,
12131                                    integer_one_node),
12132                            if_stmt);
12133       finish_expr_stmt (exprstmt);
12134       finish_then_clause (if_stmt);
12135       finish_if_stmt (if_stmt);
12136     }
12137
12138   if (targetm.cxx.cdtor_returns_this ())
12139     {
12140       tree val;
12141
12142       val = DECL_ARGUMENTS (current_function_decl);
12143       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12144                     DECL_RESULT (current_function_decl), val);
12145       /* Return the address of the object.  */
12146       exprstmt = build_stmt (RETURN_EXPR, val);
12147       add_stmt (exprstmt);
12148     }
12149 }
12150
12151 /* Do the necessary processing for the beginning of a function body, which
12152    in this case includes member-initializers, but not the catch clauses of
12153    a function-try-block.  Currently, this means opening a binding level
12154    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
12155
12156 tree
12157 begin_function_body (void)
12158 {
12159   tree stmt;
12160
12161   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12162     return NULL_TREE;
12163
12164   if (processing_template_decl)
12165     /* Do nothing now.  */;
12166   else
12167     /* Always keep the BLOCK node associated with the outermost pair of
12168        curly braces of a function.  These are needed for correct
12169        operation of dwarfout.c.  */
12170     keep_next_level (true);
12171
12172   stmt = begin_compound_stmt (BCS_FN_BODY);
12173
12174   if (processing_template_decl)
12175     /* Do nothing now.  */;
12176   else if (DECL_DESTRUCTOR_P (current_function_decl))
12177     begin_destructor_body ();
12178
12179   return stmt;
12180 }
12181
12182 /* Do the processing for the end of a function body.  Currently, this means
12183    closing out the cleanups for fully-constructed bases and members, and in
12184    the case of the destructor, deleting the object if desired.  Again, this
12185    is only meaningful for [cd]tors, since they are the only functions where
12186    there is a significant distinction between the main body and any
12187    function catch clauses.  Handling, say, main() return semantics here
12188    would be wrong, as flowing off the end of a function catch clause for
12189    main() would also need to return 0.  */
12190
12191 void
12192 finish_function_body (tree compstmt)
12193 {
12194   if (compstmt == NULL_TREE)
12195     return;
12196
12197   /* Close the block.  */
12198   finish_compound_stmt (compstmt);
12199
12200   if (processing_template_decl)
12201     /* Do nothing now.  */;
12202   else if (DECL_CONSTRUCTOR_P (current_function_decl))
12203     finish_constructor_body ();
12204   else if (DECL_DESTRUCTOR_P (current_function_decl))
12205     finish_destructor_body ();
12206 }
12207
12208 /* Given a function, returns the BLOCK corresponding to the outermost level
12209    of curly braces, skipping the artificial block created for constructor
12210    initializers.  */
12211
12212 tree
12213 outer_curly_brace_block (tree fndecl)
12214 {
12215   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12216   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12217     /* Skip the artificial function body block.  */
12218     block = BLOCK_SUBBLOCKS (block);
12219   return block;
12220 }
12221
12222 /* Finish up a function declaration and compile that function
12223    all the way to assembler language output.  The free the storage
12224    for the function definition.
12225
12226    FLAGS is a bitwise or of the following values:
12227      2 - INCLASS_INLINE
12228        We just finished processing the body of an in-class inline
12229        function definition.  (This processing will have taken place
12230        after the class definition is complete.)  */
12231
12232 tree
12233 finish_function (int flags)
12234 {
12235   tree fndecl = current_function_decl;
12236   tree fntype, ctype = NULL_TREE;
12237   int inclass_inline = (flags & 2) != 0;
12238   int nested;
12239
12240   /* When we get some parse errors, we can end up without a
12241      current_function_decl, so cope.  */
12242   if (fndecl == NULL_TREE)
12243     return error_mark_node;
12244
12245   gcc_assert (!defer_mark_used_calls);
12246   defer_mark_used_calls = true;
12247
12248   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12249       && DECL_VIRTUAL_P (fndecl)
12250       && !processing_template_decl)
12251     {
12252       tree fnclass = DECL_CONTEXT (fndecl);
12253       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12254         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12255     }
12256
12257   nested = function_depth > 1;
12258   fntype = TREE_TYPE (fndecl);
12259
12260   /*  TREE_READONLY (fndecl) = 1;
12261       This caused &foo to be of type ptr-to-const-function
12262       which then got a warning when stored in a ptr-to-function variable.  */
12263
12264   gcc_assert (building_stmt_tree ());
12265   /* The current function is being defined, so its DECL_INITIAL should
12266      be set, and unless there's a multiple definition, it should be
12267      error_mark_node.  */
12268   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12269
12270   /* For a cloned function, we've already got all the code we need;
12271      there's no need to add any extra bits.  */
12272   if (!DECL_CLONED_FUNCTION_P (fndecl))
12273     {
12274       if (DECL_MAIN_P (current_function_decl))
12275         {
12276           tree stmt;
12277
12278           /* Make it so that `main' always returns 0 by default (or
12279              1 for VMS).  */
12280 #if VMS_TARGET
12281           stmt = finish_return_stmt (integer_one_node);
12282 #else
12283           stmt = finish_return_stmt (integer_zero_node);
12284 #endif
12285           /* Hack.  We don't want the middle-end to warn that this
12286              return is unreachable, so put the statement on the
12287              special line 0.  */
12288           {
12289             location_t linezero = linemap_line_start (line_table, 0, 1);
12290             SET_EXPR_LOCATION (stmt, linezero);
12291           }
12292         }
12293
12294       if (use_eh_spec_block (current_function_decl))
12295         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12296                               (TREE_TYPE (current_function_decl)),
12297                               current_eh_spec_block);
12298     }
12299
12300   /* If we're saving up tree structure, tie off the function now.  */
12301   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12302
12303   finish_fname_decls ();
12304
12305   /* If this function can't throw any exceptions, remember that.  */
12306   if (!processing_template_decl
12307       && !cp_function_chain->can_throw
12308       && !flag_non_call_exceptions
12309       && !DECL_REPLACEABLE_P (fndecl))
12310     TREE_NOTHROW (fndecl) = 1;
12311
12312   /* This must come after expand_function_end because cleanups might
12313      have declarations (from inline functions) that need to go into
12314      this function's blocks.  */
12315
12316   /* If the current binding level isn't the outermost binding level
12317      for this function, either there is a bug, or we have experienced
12318      syntax errors and the statement tree is malformed.  */
12319   if (current_binding_level->kind != sk_function_parms)
12320     {
12321       /* Make sure we have already experienced errors.  */
12322       gcc_assert (errorcount);
12323
12324       /* Throw away the broken statement tree and extra binding
12325          levels.  */
12326       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12327
12328       while (current_binding_level->kind != sk_function_parms)
12329         {
12330           if (current_binding_level->kind == sk_class)
12331             pop_nested_class ();
12332           else
12333             poplevel (0, 0, 0);
12334         }
12335     }
12336   poplevel (1, 0, 1);
12337
12338   /* Statements should always be full-expressions at the outermost set
12339      of curly braces for a function.  */
12340   gcc_assert (stmts_are_full_exprs_p ());
12341
12342   /* Set up the named return value optimization, if we can.  Candidate
12343      variables are selected in check_return_expr.  */
12344   if (current_function_return_value)
12345     {
12346       tree r = current_function_return_value;
12347       tree outer;
12348
12349       if (r != error_mark_node
12350           /* This is only worth doing for fns that return in memory--and
12351              simpler, since we don't have to worry about promoted modes.  */
12352           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12353           /* Only allow this for variables declared in the outer scope of
12354              the function so we know that their lifetime always ends with a
12355              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
12356              we were to do this optimization in tree-ssa.  */
12357           && (outer = outer_curly_brace_block (fndecl))
12358           && chain_member (r, BLOCK_VARS (outer)))
12359         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12360
12361       current_function_return_value = NULL_TREE;
12362     }
12363
12364   /* Remember that we were in class scope.  */
12365   if (current_class_name)
12366     ctype = current_class_type;
12367
12368   /* Must mark the RESULT_DECL as being in this function.  */
12369   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12370
12371   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12372      to the FUNCTION_DECL node itself.  */
12373   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12374
12375   /* Save away current state, if appropriate.  */
12376   if (!processing_template_decl)
12377     save_function_data (fndecl);
12378
12379   /* Complain if there's just no return statement.  */
12380   if (warn_return_type
12381       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12382       && !dependent_type_p (TREE_TYPE (fntype))
12383       && !current_function_returns_value && !current_function_returns_null
12384       /* Don't complain if we abort or throw.  */
12385       && !current_function_returns_abnormally
12386       /* Don't complain if we are declared noreturn.  */
12387       && !TREE_THIS_VOLATILE (fndecl)
12388       && !DECL_NAME (DECL_RESULT (fndecl))
12389       && !TREE_NO_WARNING (fndecl)
12390       /* Structor return values (if any) are set by the compiler.  */
12391       && !DECL_CONSTRUCTOR_P (fndecl)
12392       && !DECL_DESTRUCTOR_P (fndecl))
12393     {
12394       warning (OPT_Wreturn_type,
12395                "no return statement in function returning non-void");
12396       TREE_NO_WARNING (fndecl) = 1;
12397     }
12398
12399   /* Store the end of the function, so that we get good line number
12400      info for the epilogue.  */
12401   cfun->function_end_locus = input_location;
12402
12403   /* Genericize before inlining.  */
12404   if (!processing_template_decl)
12405     {
12406       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12407       cp_genericize (fndecl);
12408       /* Clear out the bits we don't need.  */
12409       f->x_current_class_ptr = NULL;
12410       f->x_current_class_ref = NULL;
12411       f->x_eh_spec_block = NULL;
12412       f->x_in_charge_parm = NULL;
12413       f->x_vtt_parm = NULL;
12414       f->x_return_value = NULL;
12415       f->bindings = NULL;
12416       f->extern_decl_map = NULL;
12417
12418       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
12419       c_warn_unused_result (gimple_body (fndecl));
12420     }
12421   /* Clear out the bits we don't need.  */
12422   local_names = NULL;
12423
12424   /* We're leaving the context of this function, so zap cfun.  It's still in
12425      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
12426   set_cfun (NULL);
12427   current_function_decl = NULL;
12428
12429   /* If this is an in-class inline definition, we may have to pop the
12430      bindings for the template parameters that we added in
12431      maybe_begin_member_template_processing when start_function was
12432      called.  */
12433   if (inclass_inline)
12434     maybe_end_member_template_processing ();
12435
12436   /* Leave the scope of the class.  */
12437   if (ctype)
12438     pop_nested_class ();
12439
12440   --function_depth;
12441
12442   /* Clean up.  */
12443   if (! nested)
12444     /* Let the error reporting routines know that we're outside a
12445        function.  For a nested function, this value is used in
12446        cxx_pop_function_context and then reset via pop_function_context.  */
12447     current_function_decl = NULL_TREE;
12448
12449   defer_mark_used_calls = false;
12450   if (deferred_mark_used_calls)
12451     {
12452       unsigned int i;
12453       tree decl;
12454
12455       for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12456         mark_used (decl);
12457       VEC_free (tree, gc, deferred_mark_used_calls);
12458     }
12459
12460   return fndecl;
12461 }
12462 \f
12463 /* Create the FUNCTION_DECL for a function definition.
12464    DECLSPECS and DECLARATOR are the parts of the declaration;
12465    they describe the return type and the name of the function,
12466    but twisted together in a fashion that parallels the syntax of C.
12467
12468    This function creates a binding context for the function body
12469    as well as setting up the FUNCTION_DECL in current_function_decl.
12470
12471    Returns a FUNCTION_DECL on success.
12472
12473    If the DECLARATOR is not suitable for a function (it defines a datum
12474    instead), we return 0, which tells yyparse to report a parse error.
12475
12476    May return void_type_node indicating that this method is actually
12477    a friend.  See grokfield for more details.
12478
12479    Came here with a `.pushlevel' .
12480
12481    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12482    CHANGES TO CODE IN `grokfield'.  */
12483
12484 tree
12485 start_method (cp_decl_specifier_seq *declspecs,
12486               const cp_declarator *declarator, tree attrlist)
12487 {
12488   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12489                                 &attrlist);
12490
12491   if (fndecl == error_mark_node)
12492     return error_mark_node;
12493
12494   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12495     {
12496       error ("invalid member function declaration");
12497       return error_mark_node;
12498     }
12499
12500   if (attrlist)
12501     cplus_decl_attributes (&fndecl, attrlist, 0);
12502
12503   /* Pass friends other than inline friend functions back.  */
12504   if (fndecl == void_type_node)
12505     return fndecl;
12506
12507   if (DECL_IN_AGGR_P (fndecl))
12508     {
12509       if (DECL_CONTEXT (fndecl)
12510           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12511         error ("%qD is already defined in class %qT", fndecl,
12512                DECL_CONTEXT (fndecl));
12513       return error_mark_node;
12514     }
12515
12516   check_template_shadow (fndecl);
12517
12518   DECL_DECLARED_INLINE_P (fndecl) = 1;
12519   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12520
12521   /* We process method specializations in finish_struct_1.  */
12522   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12523     {
12524       fndecl = push_template_decl (fndecl);
12525       if (fndecl == error_mark_node)
12526         return fndecl;
12527     }
12528
12529   if (! DECL_FRIEND_P (fndecl))
12530     {
12531       if (TREE_CHAIN (fndecl))
12532         {
12533           fndecl = copy_node (fndecl);
12534           TREE_CHAIN (fndecl) = NULL_TREE;
12535         }
12536     }
12537
12538   finish_decl (fndecl, NULL_TREE, NULL_TREE);
12539
12540   /* Make a place for the parms.  */
12541   begin_scope (sk_function_parms, fndecl);
12542
12543   DECL_IN_AGGR_P (fndecl) = 1;
12544   return fndecl;
12545 }
12546
12547 /* Go through the motions of finishing a function definition.
12548    We don't compile this method until after the whole class has
12549    been processed.
12550
12551    FINISH_METHOD must return something that looks as though it
12552    came from GROKFIELD (since we are defining a method, after all).
12553
12554    This is called after parsing the body of the function definition.
12555    STMTS is the chain of statements that makes up the function body.
12556
12557    DECL is the ..._DECL that `start_method' provided.  */
12558
12559 tree
12560 finish_method (tree decl)
12561 {
12562   tree fndecl = decl;
12563   tree old_initial;
12564
12565   tree link;
12566
12567   if (decl == void_type_node)
12568     return decl;
12569
12570   old_initial = DECL_INITIAL (fndecl);
12571
12572   /* Undo the level for the parms (from start_method).
12573      This is like poplevel, but it causes nothing to be
12574      saved.  Saving information here confuses symbol-table
12575      output routines.  Besides, this information will
12576      be correctly output when this method is actually
12577      compiled.  */
12578
12579   /* Clear out the meanings of the local variables of this level;
12580      also record in each decl which block it belongs to.  */
12581
12582   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12583     {
12584       if (DECL_NAME (link) != NULL_TREE)
12585         pop_binding (DECL_NAME (link), link);
12586       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
12587       DECL_CONTEXT (link) = NULL_TREE;
12588     }
12589
12590   poplevel (0, 0, 0);
12591
12592   DECL_INITIAL (fndecl) = old_initial;
12593
12594   /* We used to check if the context of FNDECL was different from
12595      current_class_type as another way to get inside here.  This didn't work
12596      for String.cc in libg++.  */
12597   if (DECL_FRIEND_P (fndecl))
12598     {
12599       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
12600                      fndecl);
12601       decl = void_type_node;
12602     }
12603
12604   return decl;
12605 }
12606 \f
12607
12608 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
12609    we can lay it out later, when and if its type becomes complete.  */
12610
12611 void
12612 maybe_register_incomplete_var (tree var)
12613 {
12614   gcc_assert (TREE_CODE (var) == VAR_DECL);
12615
12616   /* Keep track of variables with incomplete types.  */
12617   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12618       && DECL_EXTERNAL (var))
12619     {
12620       tree inner_type = TREE_TYPE (var);
12621
12622       while (TREE_CODE (inner_type) == ARRAY_TYPE)
12623         inner_type = TREE_TYPE (inner_type);
12624       inner_type = TYPE_MAIN_VARIANT (inner_type);
12625
12626       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12627           /* RTTI TD entries are created while defining the type_info.  */
12628           || (TYPE_LANG_SPECIFIC (inner_type)
12629               && TYPE_BEING_DEFINED (inner_type)))
12630         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12631     }
12632 }
12633
12634 /* Called when a class type (given by TYPE) is defined.  If there are
12635    any existing VAR_DECLs whose type has been completed by this
12636    declaration, update them now.  */
12637
12638 void
12639 complete_vars (tree type)
12640 {
12641   tree *list = &incomplete_vars;
12642
12643   gcc_assert (CLASS_TYPE_P (type));
12644   while (*list)
12645     {
12646       if (same_type_p (type, TREE_PURPOSE (*list)))
12647         {
12648           tree var = TREE_VALUE (*list);
12649           tree type = TREE_TYPE (var);
12650           /* Complete the type of the variable.  The VAR_DECL itself
12651              will be laid out in expand_expr.  */
12652           complete_type (type);
12653           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12654           /* Remove this entry from the list.  */
12655           *list = TREE_CHAIN (*list);
12656         }
12657       else
12658         list = &TREE_CHAIN (*list);
12659     }
12660
12661   /* Check for pending declarations which may have abstract type.  */
12662   complete_type_check_abstract (type);
12663 }
12664
12665 /* If DECL is of a type which needs a cleanup, build and return an
12666    expression to perform that cleanup here.  Return NULL_TREE if no
12667    cleanup need be done.  */
12668
12669 tree
12670 cxx_maybe_build_cleanup (tree decl)
12671 {
12672   tree type;
12673   tree attr;
12674   tree cleanup;
12675
12676   /* Assume no cleanup is required.  */
12677   cleanup = NULL_TREE;
12678
12679   if (error_operand_p (decl))
12680     return cleanup;
12681
12682   /* Handle "__attribute__((cleanup))".  We run the cleanup function
12683      before the destructor since the destructor is what actually
12684      terminates the lifetime of the object.  */
12685   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12686   if (attr)
12687     {
12688       tree id;
12689       tree fn;
12690       tree arg;
12691
12692       /* Get the name specified by the user for the cleanup function.  */
12693       id = TREE_VALUE (TREE_VALUE (attr));
12694       /* Look up the name to find the cleanup function to call.  It is
12695          important to use lookup_name here because that is what is
12696          used in c-common.c:handle_cleanup_attribute when performing
12697          initial checks on the attribute.  Note that those checks
12698          include ensuring that the function found is not an overloaded
12699          function, or an object with an overloaded call operator,
12700          etc.; we can rely on the fact that the function found is an
12701          ordinary FUNCTION_DECL.  */
12702       fn = lookup_name (id);
12703       arg = build_address (decl);
12704       mark_used (decl);
12705       cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12706                                                              arg),
12707                                         tf_warning_or_error);
12708     }
12709   /* Handle ordinary C++ destructors.  */
12710   type = TREE_TYPE (decl);
12711   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12712     {
12713       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12714       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12715                          && CLASSTYPE_VBASECLASSES (type));
12716       tree addr;
12717       tree call;
12718
12719       if (TREE_CODE (type) == ARRAY_TYPE)
12720         addr = decl;
12721       else
12722         addr = build_address (decl);
12723
12724       /* Optimize for space over speed here.  */
12725       if (!has_vbases || flag_expensive_optimizations)
12726         flags |= LOOKUP_NONVIRTUAL;
12727
12728       call = build_delete (TREE_TYPE (addr), addr,
12729                            sfk_complete_destructor, flags, 0);
12730       if (cleanup)
12731         cleanup = build_compound_expr (cleanup, call);
12732       else
12733         cleanup = call;
12734     }
12735
12736   return cleanup;
12737 }
12738 \f
12739 /* When a stmt has been parsed, this function is called.  */
12740
12741 void
12742 finish_stmt (void)
12743 {
12744 }
12745
12746 /* DECL was originally constructed as a non-static member function,
12747    but turned out to be static.  Update it accordingly.  */
12748
12749 void
12750 revert_static_member_fn (tree decl)
12751 {
12752   tree tmp;
12753   tree function = TREE_TYPE (decl);
12754   tree args = TYPE_ARG_TYPES (function);
12755
12756   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
12757       != TYPE_UNQUALIFIED)
12758     error ("static member function %q#D declared with type qualifiers", decl);
12759
12760   args = TREE_CHAIN (args);
12761   tmp = build_function_type (TREE_TYPE (function), args);
12762   tmp = build_qualified_type (tmp, cp_type_quals (function));
12763   tmp = build_exception_variant (tmp,
12764                                  TYPE_RAISES_EXCEPTIONS (function));
12765   TREE_TYPE (decl) = tmp;
12766   if (DECL_ARGUMENTS (decl))
12767     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12768   DECL_STATIC_FUNCTION_P (decl) = 1;
12769 }
12770
12771 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12772    one of the language-independent trees.  */
12773
12774 enum cp_tree_node_structure_enum
12775 cp_tree_node_structure (union lang_tree_node * t)
12776 {
12777   switch (TREE_CODE (&t->generic))
12778     {
12779     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
12780     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
12781     case OVERLOAD:              return TS_CP_OVERLOAD;
12782     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
12783     case PTRMEM_CST:            return TS_CP_PTRMEM;
12784     case BASELINK:              return TS_CP_BASELINK;
12785     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
12786     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
12787     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
12788     default:                    return TS_CP_GENERIC;
12789     }
12790 }
12791
12792 /* Build the void_list_node (void_type_node having been created).  */
12793 tree
12794 build_void_list_node (void)
12795 {
12796   tree t = build_tree_list (NULL_TREE, void_type_node);
12797   return t;
12798 }
12799
12800 bool
12801 cp_missing_noreturn_ok_p (tree decl)
12802 {
12803   /* A missing noreturn is ok for the `main' function.  */
12804   return DECL_MAIN_P (decl);
12805 }
12806
12807 /* Return the COMDAT group into which DECL should be placed.  */
12808
12809 const char *
12810 cxx_comdat_group (tree decl)
12811 {
12812   tree name;
12813
12814   /* Virtual tables, construction virtual tables, and virtual table
12815      tables all go in a single COMDAT group, named after the primary
12816      virtual table.  */
12817   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12818     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12819   /* For all other DECLs, the COMDAT group is the mangled name of the
12820      declaration itself.  */
12821   else
12822     {
12823       while (DECL_THUNK_P (decl))
12824         {
12825           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12826              into the same section as the target function.  In that case
12827              we must return target's name.  */
12828           tree target = THUNK_TARGET (decl);
12829           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12830               && DECL_SECTION_NAME (target) != NULL
12831               && DECL_ONE_ONLY (target))
12832             decl = target;
12833           else
12834             break;
12835         }
12836       name = DECL_ASSEMBLER_NAME (decl);
12837     }
12838
12839   return IDENTIFIER_POINTER (name);
12840 }
12841
12842 #include "gt-cp-decl.h"