OSDN Git Service

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