OSDN Git Service

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