OSDN Git Service

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