OSDN Git Service

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