OSDN Git Service

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