OSDN Git Service

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