OSDN Git Service

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