OSDN Git Service

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