target.h (targetm.cxx.use_atexit_for_cxa_atexit): New target hook.
[platform/upstream/gcc.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 && !targetm.cxx.use_atexit_for_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   bool use_cxa_atexit = flag_use_cxa_atexit
5440                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
5441
5442   push_to_top_level ();
5443
5444   /* No need to mangle this.  */
5445   push_lang_context (lang_name_c);
5446
5447   /* Build the parameter-types.  */
5448   parmtypes = void_list_node;
5449   /* Functions passed to __cxa_atexit take an additional parameter.
5450      We'll just ignore it.  After we implement the new calling
5451      convention for destructors, we can eliminate the use of
5452      additional cleanup functions entirely in the -fnew-abi case.  */
5453   if (use_cxa_atexit)
5454     parmtypes = tree_cons (NULL_TREE, ptr_type_node, parmtypes);
5455   /* Build the function type itself.  */
5456   fntype = build_function_type (void_type_node, parmtypes);
5457   /* Build the name of the function.  */
5458   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
5459   /* Build the function declaration.  */
5460   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
5461   /* It's a function with internal linkage, generated by the
5462      compiler.  */
5463   TREE_PUBLIC (fndecl) = 0;
5464   DECL_ARTIFICIAL (fndecl) = 1;
5465   /* Make the function `inline' so that it is only emitted if it is
5466      actually needed.  It is unlikely that it will be inlined, since
5467      it is only called via a function pointer, but we avoid unnecessary
5468      emissions this way.  */
5469   DECL_INLINE (fndecl) = 1;
5470   DECL_DECLARED_INLINE_P (fndecl) = 1;
5471   DECL_INTERFACE_KNOWN (fndecl) = 1;
5472   /* Build the parameter.  */
5473   if (use_cxa_atexit)
5474     {
5475       tree parmdecl;
5476
5477       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
5478       DECL_CONTEXT (parmdecl) = fndecl;
5479       TREE_USED (parmdecl) = 1;
5480       DECL_ARGUMENTS (fndecl) = parmdecl;
5481     }
5482
5483   pushdecl (fndecl);
5484   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
5485
5486   pop_lang_context ();
5487
5488   return current_function_decl;
5489 }
5490
5491 /* Finish the cleanup function begun by start_cleanup_fn.  */
5492
5493 static void
5494 end_cleanup_fn (void)
5495 {
5496   expand_or_defer_fn (finish_function (0));
5497
5498   pop_from_top_level ();
5499 }
5500
5501 /* Generate code to handle the destruction of DECL, an object with
5502    static storage duration.  */
5503
5504 tree
5505 register_dtor_fn (tree decl)
5506 {
5507   tree cleanup;
5508   tree compound_stmt;
5509   tree args;
5510   tree fcall;
5511
5512   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5513     return void_zero_node;
5514
5515   /* Call build_cleanup before we enter the anonymous function so that
5516      any access checks will be done relative to the current scope,
5517      rather than the scope of the anonymous function.  */
5518   build_cleanup (decl);
5519
5520   /* Now start the function.  */
5521   cleanup = start_cleanup_fn ();
5522
5523   /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
5524      to the original function, rather than the anonymous one.  That
5525      will make the back-end think that nested functions are in use,
5526      which causes confusion.  */
5527
5528   push_deferring_access_checks (dk_no_check);
5529   fcall = build_cleanup (decl);
5530   pop_deferring_access_checks ();
5531
5532   /* Create the body of the anonymous function.  */
5533   compound_stmt = begin_compound_stmt (BCS_FN_BODY);
5534   finish_expr_stmt (fcall);
5535   finish_compound_stmt (compound_stmt);
5536   end_cleanup_fn ();
5537
5538   /* Call atexit with the cleanup function.  */
5539   cxx_mark_addressable (cleanup);
5540   mark_used (cleanup);
5541   cleanup = build_unary_op (ADDR_EXPR, cleanup, 0);
5542   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
5543     {
5544       args = tree_cons (NULL_TREE,
5545                         build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0),
5546                         NULL_TREE);
5547       if (targetm.cxx.use_aeabi_atexit ())
5548         {
5549           args = tree_cons (NULL_TREE, cleanup, args);
5550           args = tree_cons (NULL_TREE, null_pointer_node, args);
5551         }
5552       else
5553         {
5554           args = tree_cons (NULL_TREE, null_pointer_node, args);
5555           args = tree_cons (NULL_TREE, cleanup, args);
5556         }
5557     }
5558   else
5559     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
5560   return build_function_call (get_atexit_node (), args);
5561 }
5562
5563 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
5564    is its initializer.  Generate code to handle the construction
5565    and destruction of DECL.  */
5566
5567 static void
5568 expand_static_init (tree decl, tree init)
5569 {
5570   gcc_assert (TREE_CODE (decl) == VAR_DECL);
5571   gcc_assert (TREE_STATIC (decl));
5572
5573   /* Some variables require no initialization.  */
5574   if (!init
5575       && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
5576       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
5577     return;
5578
5579   if (DECL_FUNCTION_SCOPE_P (decl))
5580     {
5581       /* Emit code to perform this initialization but once.  */
5582       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
5583       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
5584       tree guard, guard_addr, guard_addr_list;
5585       tree acquire_fn, release_fn, abort_fn;
5586       tree flag, begin;
5587
5588       /* Emit code to perform this initialization but once.  This code
5589          looks like:
5590
5591            static <type> guard;
5592            if (!guard.first_byte) {
5593              if (__cxa_guard_acquire (&guard)) {
5594                bool flag = false;
5595                try {
5596                  // Do initialization.
5597                  flag = true; __cxa_guard_release (&guard);
5598                  // Register variable for destruction at end of program.
5599                } catch {
5600                  if (!flag) __cxa_guard_abort (&guard);
5601                }
5602            }
5603
5604          Note that the `flag' variable is only set to 1 *after* the
5605          initialization is complete.  This ensures that an exception,
5606          thrown during the construction, will cause the variable to
5607          reinitialized when we pass through this code again, as per:
5608
5609            [stmt.dcl]
5610
5611            If the initialization exits by throwing an exception, the
5612            initialization is not complete, so it will be tried again
5613            the next time control enters the declaration.
5614
5615          This process should be thread-safe, too; multiple threads
5616          should not be able to initialize the variable more than
5617          once.  */
5618
5619       /* Create the guard variable.  */
5620       guard = get_guard (decl);
5621
5622       /* This optimization isn't safe on targets with relaxed memory
5623          consistency.  On such targets we force synchronization in
5624          __cxa_guard_acquire.  */
5625       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5626         {
5627           /* Begin the conditional initialization.  */
5628           if_stmt = begin_if_stmt ();
5629           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
5630           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5631         }
5632
5633       if (flag_threadsafe_statics)
5634         {
5635           guard_addr = build_address (guard);
5636           guard_addr_list = build_tree_list (NULL_TREE, guard_addr);
5637
5638           acquire_fn = get_identifier ("__cxa_guard_acquire");
5639           release_fn = get_identifier ("__cxa_guard_release");
5640           abort_fn = get_identifier ("__cxa_guard_abort");
5641           if (!get_global_value_if_present (acquire_fn, &acquire_fn))
5642             {
5643               tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
5644                                          void_list_node);
5645               tree vfntype = build_function_type (void_type_node, argtypes);
5646               acquire_fn = push_library_fn
5647                 (acquire_fn, build_function_type (integer_type_node, argtypes));
5648               release_fn = push_library_fn (release_fn, vfntype);
5649               abort_fn = push_library_fn (abort_fn, vfntype);
5650             }
5651           else
5652             {
5653               release_fn = identifier_global_value (release_fn);
5654               abort_fn = identifier_global_value (abort_fn);
5655             }
5656
5657           inner_if_stmt = begin_if_stmt ();
5658           finish_if_stmt_cond (build_call (acquire_fn, guard_addr_list),
5659                                inner_if_stmt);
5660
5661           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
5662           begin = get_target_expr (boolean_false_node);
5663           flag = TARGET_EXPR_SLOT (begin);
5664
5665           TARGET_EXPR_CLEANUP (begin)
5666             = build3 (COND_EXPR, void_type_node, flag,
5667                       void_zero_node,
5668                       build_call (abort_fn, guard_addr_list));
5669           CLEANUP_EH_ONLY (begin) = 1;
5670
5671           /* Do the initialization itself.  */
5672           init = add_stmt_to_compound (begin, init);
5673           init = add_stmt_to_compound
5674             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
5675           init = add_stmt_to_compound
5676             (init, build_call (release_fn, guard_addr_list));
5677         }
5678       else
5679         init = add_stmt_to_compound (init, set_guard (guard));
5680
5681       /* Use atexit to register a function for destroying this static
5682          variable.  */
5683       init = add_stmt_to_compound (init, register_dtor_fn (decl));
5684
5685       finish_expr_stmt (init);
5686
5687       if (flag_threadsafe_statics)
5688         {
5689           finish_compound_stmt (inner_then_clause);
5690           finish_then_clause (inner_if_stmt);
5691           finish_if_stmt (inner_if_stmt);
5692         }
5693
5694       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
5695         {
5696           finish_compound_stmt (then_clause);
5697           finish_then_clause (if_stmt);
5698           finish_if_stmt (if_stmt);
5699         }
5700     }
5701   else
5702     static_aggregates = tree_cons (init, decl, static_aggregates);
5703 }
5704
5705 \f
5706 /* Make TYPE a complete type based on INITIAL_VALUE.
5707    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
5708    2 if there was no information (in which case assume 0 if DO_DEFAULT),
5709    3 if the initializer list is empty (in pedantic mode). */
5710
5711 int
5712 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
5713 {
5714   int failure;
5715   tree type, elt_type;
5716
5717   if (initial_value)
5718     {
5719       /* An array of character type can be initialized from a
5720          brace-enclosed string constant.
5721
5722          FIXME: this code is duplicated from reshape_init. Probably
5723          we should just call reshape_init here?  */
5724       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
5725           && TREE_CODE (initial_value) == CONSTRUCTOR
5726           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
5727         {
5728           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
5729           tree value = VEC_index (constructor_elt, v, 0)->value;
5730
5731           if (TREE_CODE (value) == STRING_CST
5732               && VEC_length (constructor_elt, v) == 1)
5733             initial_value = value;
5734         }
5735     }
5736
5737   failure = complete_array_type (ptype, initial_value, do_default);
5738
5739   /* We can create the array before the element type is complete, which
5740      means that we didn't have these two bits set in the original type
5741      either.  In completing the type, we are expected to propagate these
5742      bits.  See also complete_type which does the same thing for arrays
5743      of fixed size.  */
5744   type = *ptype;
5745   if (TYPE_DOMAIN (type))
5746     {
5747       elt_type = TREE_TYPE (type);
5748       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
5749       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
5750         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
5751     }
5752
5753   return failure;
5754 }
5755 \f
5756 /* Return zero if something is declared to be a member of type
5757    CTYPE when in the context of CUR_TYPE.  STRING is the error
5758    message to print in that case.  Otherwise, quietly return 1.  */
5759
5760 static int
5761 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
5762 {
5763   if (ctype && ctype != cur_type)
5764     {
5765       if (flags == DTOR_FLAG)
5766         error ("destructor for alien class %qT cannot be a member", ctype);
5767       else
5768         error ("constructor for alien class %qT cannot be a member", ctype);
5769       return 0;
5770     }
5771   return 1;
5772 }
5773 \f
5774 /* Subroutine of `grokdeclarator'.  */
5775
5776 /* Generate errors possibly applicable for a given set of specifiers.
5777    This is for ARM $7.1.2.  */
5778
5779 static void
5780 bad_specifiers (tree object,
5781                 const char* type,
5782                 int virtualp,
5783                 int quals,
5784                 int inlinep,
5785                 int friendp,
5786                 int raises)
5787 {
5788   if (virtualp)
5789     error ("%qD declared as a %<virtual%> %s", object, type);
5790   if (inlinep)
5791     error ("%qD declared as an %<inline%> %s", object, type);
5792   if (quals)
5793     error ("%<const%> and %<volatile%> function specifiers on "
5794            "%qD invalid in %s declaration",
5795            object, type);
5796   if (friendp)
5797     error ("%q+D declared as a friend", object);
5798   if (raises
5799       && (TREE_CODE (object) == TYPE_DECL
5800           || (!TYPE_PTRFN_P (TREE_TYPE (object))
5801               && !TYPE_REFFN_P (TREE_TYPE (object))
5802               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
5803     error ("%q+D declared with an exception specification", object);
5804 }
5805
5806 /* DECL is a member function or static data member and is presently
5807    being defined.  Check that the definition is taking place in a
5808    valid namespace.  */
5809
5810 static void
5811 check_class_member_definition_namespace (tree decl)
5812 {
5813   /* These checks only apply to member functions and static data
5814      members.  */
5815   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
5816               || TREE_CODE (decl) == VAR_DECL);
5817   /* We check for problems with specializations in pt.c in
5818      check_specialization_namespace, where we can issue better
5819      diagnostics.  */
5820   if (processing_specialization)
5821     return;
5822   /* There are no restrictions on the placement of
5823      explicit instantiations.  */
5824   if (processing_explicit_instantiation)
5825     return;
5826   /* [class.mfct]
5827
5828      A member function definition that appears outside of the
5829      class definition shall appear in a namespace scope enclosing
5830      the class definition.
5831
5832      [class.static.data]
5833
5834      The definition for a static data member shall appear in a
5835      namespace scope enclosing the member's class definition.  */
5836   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
5837     pedwarn ("definition of %qD is not in namespace enclosing %qT",
5838              decl, DECL_CONTEXT (decl));
5839 }
5840
5841 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
5842    METHOD_TYPE for a non-static member function; QUALS are the
5843    cv-qualifiers that apply to the function.  */
5844
5845 tree
5846 build_this_parm (tree type, cp_cv_quals quals)
5847 {
5848   tree this_type;
5849   tree qual_type;
5850   tree parm;
5851   cp_cv_quals this_quals;
5852
5853   this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
5854   /* The `this' parameter is implicitly `const'; it cannot be
5855      assigned to.  */
5856   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
5857   qual_type = cp_build_qualified_type (this_type, this_quals);
5858   parm = build_artificial_parm (this_identifier, qual_type);
5859   cp_apply_type_quals_to_decl (this_quals, parm);
5860   return parm;
5861 }
5862
5863 /* CTYPE is class type, or null if non-class.
5864    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
5865    or METHOD_TYPE.
5866    DECLARATOR is the function's name.
5867    PARMS is a chain of PARM_DECLs for the function.
5868    VIRTUALP is truthvalue of whether the function is virtual or not.
5869    FLAGS are to be passed through to `grokclassfn'.
5870    QUALS are qualifiers indicating whether the function is `const'
5871    or `volatile'.
5872    RAISES is a list of exceptions that this function can raise.
5873    CHECK is 1 if we must find this method in CTYPE, 0 if we should
5874    not look, and -1 if we should not call `grokclassfn' at all.
5875
5876    SFK is the kind of special function (if any) for the new function.
5877
5878    Returns `NULL_TREE' if something goes wrong, after issuing
5879    applicable error messages.  */
5880
5881 static tree
5882 grokfndecl (tree ctype,
5883             tree type,
5884             tree declarator,
5885             tree parms,
5886             tree orig_declarator,
5887             int virtualp,
5888             enum overload_flags flags,
5889             cp_cv_quals quals,
5890             tree raises,
5891             int check,
5892             int friendp,
5893             int publicp,
5894             int inlinep,
5895             special_function_kind sfk,
5896             bool funcdef_flag,
5897             int template_count,
5898             tree in_namespace,
5899             tree* attrlist)
5900 {
5901   tree decl;
5902   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
5903   tree t;
5904
5905   if (raises)
5906     type = build_exception_variant (type, raises);
5907
5908   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
5909   if (TREE_CODE (type) == METHOD_TYPE)
5910     {
5911       tree parm;
5912       parm = build_this_parm (type, quals);
5913       TREE_CHAIN (parm) = parms;
5914       parms = parm;
5915     }
5916   DECL_ARGUMENTS (decl) = parms;
5917   /* Propagate volatile out from type to decl.  */
5918   if (TYPE_VOLATILE (type))
5919     TREE_THIS_VOLATILE (decl) = 1;
5920
5921   if (friendp
5922       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
5923     {
5924       if (funcdef_flag)
5925         error
5926           ("defining explicit specialization %qD in friend declaration",
5927            orig_declarator);
5928       else
5929         {
5930           tree fns = TREE_OPERAND (orig_declarator, 0);
5931           tree args = TREE_OPERAND (orig_declarator, 1);
5932
5933           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
5934             {
5935               /* Something like `template <class T> friend void f<T>()'.  */
5936               error ("invalid use of template-id %qD in declaration "
5937                      "of primary template",
5938                      orig_declarator);
5939               return NULL_TREE;
5940             }
5941
5942
5943           /* A friend declaration of the form friend void f<>().  Record
5944              the information in the TEMPLATE_ID_EXPR.  */
5945           SET_DECL_IMPLICIT_INSTANTIATION (decl);
5946
5947           if (TREE_CODE (fns) == COMPONENT_REF)
5948             {
5949               /* Due to bison parser ickiness, we will have already looked
5950                  up an operator_name or PFUNCNAME within the current class
5951                  (see template_id in parse.y). If the current class contains
5952                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
5953
5954               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
5955                           == current_class_type);
5956               fns = TREE_OPERAND (fns, 1);
5957             }
5958           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
5959                       || TREE_CODE (fns) == OVERLOAD);
5960           DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
5961
5962           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
5963             if (TREE_PURPOSE (t)
5964                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
5965             {
5966               error ("default arguments are not allowed in declaration "
5967                      "of friend template specialization %qD",
5968                      decl);
5969               return NULL_TREE;
5970             }
5971
5972           if (inlinep)
5973             {
5974               error ("%<inline%> is not allowed in declaration of friend "
5975                      "template specialization %qD",
5976                      decl);
5977               return NULL_TREE;
5978             }
5979         }
5980     }
5981
5982   /* If this decl has namespace scope, set that up.  */
5983   if (in_namespace)
5984     set_decl_namespace (decl, in_namespace, friendp);
5985   else if (!ctype)
5986     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5987
5988   /* `main' and builtins have implicit 'C' linkage.  */
5989   if ((MAIN_NAME_P (declarator)
5990        || (IDENTIFIER_LENGTH (declarator) > 10
5991            && IDENTIFIER_POINTER (declarator)[0] == '_'
5992            && IDENTIFIER_POINTER (declarator)[1] == '_'
5993            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
5994       && current_lang_name == lang_name_cplusplus
5995       && ctype == NULL_TREE
5996       /* NULL_TREE means global namespace.  */
5997       && DECL_CONTEXT (decl) == NULL_TREE)
5998     SET_DECL_LANGUAGE (decl, lang_c);
5999
6000   /* Should probably propagate const out from type to decl I bet (mrs).  */
6001   if (staticp)
6002     {
6003       DECL_STATIC_FUNCTION_P (decl) = 1;
6004       DECL_CONTEXT (decl) = ctype;
6005     }
6006
6007   if (ctype)
6008     {
6009       DECL_CONTEXT (decl) = ctype;
6010       if (funcdef_flag)
6011         check_class_member_definition_namespace (decl);
6012     }
6013
6014   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6015     {
6016       if (processing_template_decl)
6017         error ("cannot declare %<::main%> to be a template");
6018       if (inlinep)
6019         error ("cannot declare %<::main%> to be inline");
6020       if (!publicp)
6021         error ("cannot declare %<::main%> to be static");
6022       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6023                         integer_type_node))
6024         {
6025           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6026           tree newtype;
6027           error ("%<::main%> must return %<int%>");
6028           newtype =  build_function_type (integer_type_node,
6029                                           oldtypeargs);
6030           TREE_TYPE (decl) = newtype;
6031         }
6032       check_main_parameter_types (decl);
6033       inlinep = 0;
6034       publicp = 1;
6035     }
6036
6037   /* Members of anonymous types and local classes have no linkage; make
6038      them internal.  If a typedef is made later, this will be changed.  */
6039   if (ctype && (TYPE_ANONYMOUS_P (ctype)
6040                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6041     publicp = 0;
6042
6043   if (publicp)
6044     {
6045       /* [basic.link]: A name with no linkage (notably, the name of a class
6046          or enumeration declared in a local scope) shall not be used to
6047          declare an entity with linkage.
6048
6049          Only check this for public decls for now.  See core 319, 389.  */
6050       t = no_linkage_check (TREE_TYPE (decl),
6051                             /*relaxed_p=*/false);
6052       if (t)
6053         {
6054           if (TYPE_ANONYMOUS_P (t))
6055             {
6056               if (DECL_EXTERN_C_P (decl))
6057                 /* Allow this; it's pretty common in C.  */;
6058               else
6059                 {
6060                   pedwarn ("non-local function %q#D uses anonymous type",
6061                               decl);
6062                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6063                     pedwarn ("%q+#D does not refer to the unqualified "
6064                              "type, so it is not used for linkage",
6065                              TYPE_NAME (t));
6066                 }
6067             }
6068           else
6069             pedwarn ("non-local function %q#D uses local type %qT", decl, t);
6070         }
6071     }
6072
6073   TREE_PUBLIC (decl) = publicp;
6074   if (! publicp)
6075     {
6076       DECL_INTERFACE_KNOWN (decl) = 1;
6077       DECL_NOT_REALLY_EXTERN (decl) = 1;
6078     }
6079
6080   /* If the declaration was declared inline, mark it as such.  */
6081   if (inlinep)
6082     DECL_DECLARED_INLINE_P (decl) = 1;
6083   /* We inline functions that are explicitly declared inline, or, when
6084      the user explicitly asks us to, all functions.  */
6085   if (DECL_DECLARED_INLINE_P (decl)
6086       || (flag_inline_trees == 2 && !DECL_INLINE (decl) && funcdef_flag))
6087     DECL_INLINE (decl) = 1;
6088
6089   DECL_EXTERNAL (decl) = 1;
6090   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6091     {
6092       error (ctype
6093              ? G_("static member function %qD cannot have cv-qualifier")
6094              : G_("non-member function %qD cannot have cv-qualifier"),
6095              decl);
6096       quals = TYPE_UNQUALIFIED;
6097     }
6098
6099   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6100       && !grok_op_properties (decl, /*complain=*/true))
6101     return NULL_TREE;
6102
6103   if (ctype && decl_function_context (decl))
6104     DECL_NO_STATIC_CHAIN (decl) = 1;
6105
6106   if (funcdef_flag)
6107     /* Make the init_value nonzero so pushdecl knows this is not
6108        tentative.  error_mark_node is replaced later with the BLOCK.  */
6109     DECL_INITIAL (decl) = error_mark_node;
6110
6111   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6112     TREE_NOTHROW (decl) = 1;
6113
6114   /* Caller will do the rest of this.  */
6115   if (check < 0)
6116     return decl;
6117
6118   if (ctype != NULL_TREE)
6119     {
6120       if (sfk == sfk_constructor)
6121         DECL_CONSTRUCTOR_P (decl) = 1;
6122
6123       grokclassfn (ctype, decl, flags);
6124     }
6125
6126   decl = check_explicit_specialization (orig_declarator, decl,
6127                                         template_count,
6128                                         2 * funcdef_flag +
6129                                         4 * (friendp != 0));
6130   if (decl == error_mark_node)
6131     return NULL_TREE;
6132
6133   if (attrlist)
6134     {
6135       cplus_decl_attributes (&decl, *attrlist, 0);
6136       *attrlist = NULL_TREE;
6137     }
6138
6139   if (ctype != NULL_TREE
6140       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6141       && check)
6142     {
6143       tree old_decl;
6144
6145       old_decl = check_classfn (ctype, decl,
6146                                 (processing_template_decl
6147                                  > template_class_depth (ctype))
6148                                 ? current_template_parms
6149                                 : NULL_TREE);
6150       if (old_decl)
6151         {
6152           tree ok;
6153           tree pushed_scope;
6154
6155           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6156             /* Because grokfndecl is always supposed to return a
6157                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6158                here.  We depend on our callers to figure out that its
6159                really a template that's being returned.  */
6160             old_decl = DECL_TEMPLATE_RESULT (old_decl);
6161
6162           if (DECL_STATIC_FUNCTION_P (old_decl)
6163               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6164             /* Remove the `this' parm added by grokclassfn.
6165                XXX Isn't this done in start_function, too?  */
6166             revert_static_member_fn (decl);
6167           if (DECL_ARTIFICIAL (old_decl))
6168             error ("definition of implicitly-declared %qD", old_decl);
6169
6170           /* Since we've smashed OLD_DECL to its
6171              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
6172           if (TREE_CODE (decl) == TEMPLATE_DECL)
6173             decl = DECL_TEMPLATE_RESULT (decl);
6174
6175           /* Attempt to merge the declarations.  This can fail, in
6176              the case of some invalid specialization declarations.  */
6177           pushed_scope = push_scope (ctype);
6178           ok = duplicate_decls (decl, old_decl, friendp);
6179           if (pushed_scope)
6180             pop_scope (pushed_scope);
6181           if (!ok)
6182             {
6183               error ("no %q#D member function declared in class %qT",
6184                      decl, ctype);
6185               return NULL_TREE;
6186             }
6187           return old_decl;
6188         }
6189     }
6190
6191   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6192     return NULL_TREE;
6193
6194   if (ctype == NULL_TREE || check)
6195     return decl;
6196
6197   if (virtualp)
6198     DECL_VIRTUAL_P (decl) = 1;
6199
6200   return decl;
6201 }
6202
6203 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
6204    the linkage that DECL will receive in the object file.  */
6205
6206 static void
6207 set_linkage_for_static_data_member (tree decl)
6208 {
6209   /* A static data member always has static storage duration and
6210      external linkage.  Note that static data members are forbidden in
6211      local classes -- the only situation in which a class has
6212      non-external linkage.  */
6213   TREE_PUBLIC (decl) = 1;
6214   TREE_STATIC (decl) = 1;
6215   /* For non-template classes, static data members are always put
6216      out in exactly those files where they are defined, just as
6217      with ordinary namespace-scope variables.  */
6218   if (!processing_template_decl)
6219     DECL_INTERFACE_KNOWN (decl) = 1;
6220 }
6221
6222 /* Create a VAR_DECL named NAME with the indicated TYPE.
6223
6224    If SCOPE is non-NULL, it is the class type or namespace containing
6225    the variable.  If SCOPE is NULL, the variable should is created in
6226    the innermost enclosings scope.  */
6227
6228 static tree
6229 grokvardecl (tree type,
6230              tree name,
6231              const cp_decl_specifier_seq *declspecs,
6232              int initialized,
6233              int constp,
6234              tree scope)
6235 {
6236   tree decl;
6237   tree explicit_scope;
6238
6239   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6240
6241   /* Compute the scope in which to place the variable, but remember
6242      whether or not that scope was explicitly specified by the user.   */
6243   explicit_scope = scope;
6244   if (!scope)
6245     {
6246       /* An explicit "extern" specifier indicates a namespace-scope
6247          variable.  */
6248       if (declspecs->storage_class == sc_extern)
6249         scope = current_namespace;
6250       else if (!at_function_scope_p ())
6251         scope = current_scope ();
6252     }
6253
6254   if (scope
6255       && (/* If the variable is a namespace-scope variable declared in a
6256              template, we need DECL_LANG_SPECIFIC.  */
6257           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6258           /* Similarly for namespace-scope variables with language linkage
6259              other than C++.  */
6260           || (TREE_CODE (scope) == NAMESPACE_DECL
6261               && current_lang_name != lang_name_cplusplus)
6262           /* Similarly for static data members.  */
6263           || TYPE_P (scope)))
6264     decl = build_lang_decl (VAR_DECL, name, type);
6265   else
6266     decl = build_decl (VAR_DECL, name, type);
6267
6268   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6269     set_decl_namespace (decl, explicit_scope, 0);
6270   else
6271     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6272
6273   if (declspecs->storage_class == sc_extern)
6274     {
6275       DECL_THIS_EXTERN (decl) = 1;
6276       DECL_EXTERNAL (decl) = !initialized;
6277     }
6278
6279   if (DECL_CLASS_SCOPE_P (decl))
6280     {
6281       set_linkage_for_static_data_member (decl);
6282       /* This function is only called with out-of-class definitions.  */
6283       DECL_EXTERNAL (decl) = 0;
6284       check_class_member_definition_namespace (decl);
6285     }
6286   /* At top level, either `static' or no s.c. makes a definition
6287      (perhaps tentative), and absence of `static' makes it public.  */
6288   else if (toplevel_bindings_p ())
6289     {
6290       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6291                             && (DECL_THIS_EXTERN (decl) || ! constp));
6292       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6293     }
6294   /* Not at top level, only `static' makes a static definition.  */
6295   else
6296     {
6297       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6298       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6299     }
6300
6301   if (declspecs->specs[(int)ds_thread])
6302     {
6303       if (targetm.have_tls)
6304         DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6305       else
6306         /* A mere warning is sure to result in improper semantics
6307            at runtime.  Don't bother to allow this to compile.  */
6308         error ("thread-local storage not supported for this target");
6309     }
6310
6311   if (TREE_PUBLIC (decl))
6312     {
6313       /* [basic.link]: A name with no linkage (notably, the name of a class
6314          or enumeration declared in a local scope) shall not be used to
6315          declare an entity with linkage.
6316
6317          Only check this for public decls for now.  */
6318       tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6319       if (t)
6320         {
6321           if (TYPE_ANONYMOUS_P (t))
6322             {
6323               if (DECL_EXTERN_C_P (decl))
6324                 /* Allow this; it's pretty common in C.  */
6325                   ;
6326               else
6327                 {
6328                   /* DRs 132, 319 and 389 seem to indicate types with
6329                      no linkage can only be used to declare extern "C"
6330                      entities.  Since it's not always an error in the
6331                      ISO C++ 90 Standard, we only issue a warning.  */
6332                   warning (0, "non-local variable %q#D uses anonymous type",
6333                            decl);
6334                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6335                     warning (0, "%q+#D does not refer to the unqualified "
6336                              "type, so it is not used for linkage",
6337                              TYPE_NAME (t));
6338                 }
6339             }
6340           else
6341             warning (0, "non-local variable %q#D uses local type %qT", decl, t);
6342         }
6343     }
6344   else
6345     DECL_INTERFACE_KNOWN (decl) = 1;
6346
6347   return decl;
6348 }
6349
6350 /* Create and return a canonical pointer to member function type, for
6351    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
6352
6353 tree
6354 build_ptrmemfunc_type (tree type)
6355 {
6356   tree field, fields;
6357   tree t;
6358   tree unqualified_variant = NULL_TREE;
6359
6360   if (type == error_mark_node)
6361     return type;
6362
6363   /* If a canonical type already exists for this type, use it.  We use
6364      this method instead of type_hash_canon, because it only does a
6365      simple equality check on the list of field members.  */
6366
6367   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
6368     return t;
6369
6370   /* Make sure that we always have the unqualified pointer-to-member
6371      type first.  */
6372   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6373     unqualified_variant
6374       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
6375
6376   t = make_aggr_type (RECORD_TYPE);
6377   xref_basetypes (t, NULL_TREE);
6378
6379   /* Let the front-end know this is a pointer to member function...  */
6380   TYPE_PTRMEMFUNC_FLAG (t) = 1;
6381   /* ... and not really an aggregate.  */
6382   SET_IS_AGGR_TYPE (t, 0);
6383
6384   field = build_decl (FIELD_DECL, pfn_identifier, type);
6385   fields = field;
6386
6387   field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
6388   TREE_CHAIN (field) = fields;
6389   fields = field;
6390
6391   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
6392
6393   /* Zap out the name so that the back-end will give us the debugging
6394      information for this anonymous RECORD_TYPE.  */
6395   TYPE_NAME (t) = NULL_TREE;
6396
6397   /* If this is not the unqualified form of this pointer-to-member
6398      type, set the TYPE_MAIN_VARIANT for this type to be the
6399      unqualified type.  Since they are actually RECORD_TYPEs that are
6400      not variants of each other, we must do this manually.  */
6401   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
6402     {
6403       t = build_qualified_type (t, cp_type_quals (type));
6404       TYPE_MAIN_VARIANT (t) = unqualified_variant;
6405       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
6406       TYPE_NEXT_VARIANT (unqualified_variant) = t;
6407     }
6408
6409   /* Cache this pointer-to-member type so that we can find it again
6410      later.  */
6411   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
6412
6413   return t;
6414 }
6415
6416 /* Create and return a pointer to data member type.  */
6417
6418 tree
6419 build_ptrmem_type (tree class_type, tree member_type)
6420 {
6421   if (TREE_CODE (member_type) == METHOD_TYPE)
6422     {
6423       tree arg_types;
6424
6425       arg_types = TYPE_ARG_TYPES (member_type);
6426       class_type = (cp_build_qualified_type
6427                     (class_type,
6428                      cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
6429       member_type
6430         = build_method_type_directly (class_type,
6431                                       TREE_TYPE (member_type),
6432                                       TREE_CHAIN (arg_types));
6433       return build_ptrmemfunc_type (build_pointer_type (member_type));
6434     }
6435   else
6436     {
6437       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
6438       return build_offset_type (class_type, member_type);
6439     }
6440 }
6441
6442 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
6443    Check to see that the definition is valid.  Issue appropriate error
6444    messages.  Return 1 if the definition is particularly bad, or 0
6445    otherwise.  */
6446
6447 int
6448 check_static_variable_definition (tree decl, tree type)
6449 {
6450   /* Motion 10 at San Diego: If a static const integral data member is
6451      initialized with an integral constant expression, the initializer
6452      may appear either in the declaration (within the class), or in
6453      the definition, but not both.  If it appears in the class, the
6454      member is a member constant.  The file-scope definition is always
6455      required.  */
6456   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
6457     {
6458       error ("invalid in-class initialization of static data member "
6459              "of non-integral type %qT",
6460              type);
6461       /* If we just return the declaration, crashes will sometimes
6462          occur.  We therefore return void_type_node, as if this were a
6463          friend declaration, to cause callers to completely ignore
6464          this declaration.  */
6465       return 1;
6466     }
6467   else if (!CP_TYPE_CONST_P (type))
6468     error ("ISO C++ forbids in-class initialization of non-const "
6469            "static member %qD",
6470            decl);
6471   else if (pedantic && !INTEGRAL_TYPE_P (type))
6472     pedwarn ("ISO C++ forbids initialization of member constant "
6473              "%qD of non-integral type %qT", decl, type);
6474
6475   return 0;
6476 }
6477
6478 /* Given the SIZE (i.e., number of elements) in an array, compute an
6479    appropriate index type for the array.  If non-NULL, NAME is the
6480    name of the thing being declared.  */
6481
6482 tree
6483 compute_array_index_type (tree name, tree size)
6484 {
6485   tree type;
6486   tree itype;
6487
6488   if (error_operand_p (size))
6489     return error_mark_node;
6490
6491   type = TREE_TYPE (size);
6492   /* The array bound must be an integer type.  */
6493   if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
6494     {
6495       if (name)
6496         error ("size of array %qD has non-integral type %qT", name, type);
6497       else
6498         error ("size of array has non-integral type %qT", type);
6499       size = integer_one_node;
6500       type = TREE_TYPE (size);
6501     }
6502
6503   if (abi_version_at_least (2)
6504       /* We should only handle value dependent expressions specially.  */
6505       ? value_dependent_expression_p (size)
6506       /* But for abi-1, we handled all instances in templates. This
6507          effects the manglings produced.  */
6508       : processing_template_decl)
6509     return build_index_type (build_min (MINUS_EXPR, sizetype,
6510                                         size, integer_one_node));
6511
6512   /* The size might be the result of a cast.  */
6513   STRIP_TYPE_NOPS (size);
6514
6515   /* It might be a const variable or enumeration constant.  */
6516   size = integral_constant_value (size);
6517
6518   /* Normally, the array-bound will be a constant.  */
6519   if (TREE_CODE (size) == INTEGER_CST)
6520     {
6521       /* Check to see if the array bound overflowed.  Make that an
6522          error, no matter how generous we're being.  */
6523       int old_flag_pedantic_errors = flag_pedantic_errors;
6524       int old_pedantic = pedantic;
6525       pedantic = flag_pedantic_errors = 1;
6526       constant_expression_warning (size);
6527       pedantic = old_pedantic;
6528       flag_pedantic_errors = old_flag_pedantic_errors;
6529
6530       /* An array must have a positive number of elements.  */
6531       if (INT_CST_LT (size, integer_zero_node))
6532         {
6533           if (name)
6534             error ("size of array %qD is negative", name);
6535           else
6536             error ("size of array is negative");
6537           size = integer_one_node;
6538         }
6539       /* As an extension we allow zero-sized arrays.  We always allow
6540          them in system headers because glibc uses them.  */
6541       else if (integer_zerop (size) && pedantic && !in_system_header)
6542         {
6543           if (name)
6544             pedwarn ("ISO C++ forbids zero-size array %qD", name);
6545           else
6546             pedwarn ("ISO C++ forbids zero-size array");
6547         }
6548     }
6549   else if (TREE_CONSTANT (size))
6550     {
6551       /* `(int) &fn' is not a valid array bound.  */
6552       if (name)
6553         error ("size of array %qD is not an integral constant-expression",
6554                name);
6555       else
6556         error ("size of array is not an integral constant-expression");
6557       size = integer_one_node;
6558     }
6559   else if (pedantic)
6560     {
6561       if (name)
6562         pedwarn ("ISO C++ forbids variable-size array %qD", name);
6563       else
6564         pedwarn ("ISO C++ forbids variable-size array");
6565     }
6566
6567   if (processing_template_decl && !TREE_CONSTANT (size))
6568     /* A variable sized array.  */
6569     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
6570   else
6571     {
6572       HOST_WIDE_INT saved_processing_template_decl;
6573
6574       /* Compute the index of the largest element in the array.  It is
6575          one less than the number of elements in the array.  We save
6576          and restore PROCESSING_TEMPLATE_DECL so that computations in
6577          cp_build_binary_op will be appropriately folded.  */
6578       saved_processing_template_decl = processing_template_decl;
6579       processing_template_decl = 0;
6580       itype = cp_build_binary_op (MINUS_EXPR,
6581                                   cp_convert (ssizetype, size),
6582                                   cp_convert (ssizetype, integer_one_node));
6583       itype = fold (itype);
6584       processing_template_decl = saved_processing_template_decl;
6585
6586       if (!TREE_CONSTANT (itype))
6587         /* A variable sized array.  */
6588         itype = variable_size (itype);
6589       /* Make sure that there was no overflow when creating to a signed
6590          index type.  (For example, on a 32-bit machine, an array with
6591          size 2^32 - 1 is too big.)  */
6592       else if (TREE_CODE (itype) == INTEGER_CST
6593                && TREE_OVERFLOW (itype))
6594         {
6595           error ("overflow in array dimension");
6596           TREE_OVERFLOW (itype) = 0;
6597         }
6598     }
6599
6600   /* Create and return the appropriate index type.  */
6601   return build_index_type (itype);
6602 }
6603
6604 /* Returns the scope (if any) in which the entity declared by
6605    DECLARATOR will be located.  If the entity was declared with an
6606    unqualified name, NULL_TREE is returned.  */
6607
6608 tree
6609 get_scope_of_declarator (const cp_declarator *declarator)
6610 {
6611   while (declarator && declarator->kind != cdk_id)
6612     declarator = declarator->declarator;
6613
6614   /* If the declarator-id is a SCOPE_REF, the scope in which the
6615      declaration occurs is the first operand.  */
6616   if (declarator
6617       && declarator->u.id.qualifying_scope)
6618     return declarator->u.id.qualifying_scope;
6619
6620   /* Otherwise, the declarator is not a qualified name; the entity will
6621      be declared in the current scope.  */
6622   return NULL_TREE;
6623 }
6624
6625 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
6626    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
6627    with this type.  */
6628
6629 static tree
6630 create_array_type_for_decl (tree name, tree type, tree size)
6631 {
6632   tree itype = NULL_TREE;
6633   const char* error_msg;
6634
6635   /* If things have already gone awry, bail now.  */
6636   if (type == error_mark_node || size == error_mark_node)
6637     return error_mark_node;
6638
6639   /* Assume that everything will go OK.  */
6640   error_msg = NULL;
6641
6642   /* There are some types which cannot be array elements.  */
6643   switch (TREE_CODE (type))
6644     {
6645     case VOID_TYPE:
6646       error_msg = "array of void";
6647       break;
6648
6649     case FUNCTION_TYPE:
6650       error_msg = "array of functions";
6651       break;
6652
6653     case REFERENCE_TYPE:
6654       error_msg = "array of references";
6655       break;
6656
6657     case METHOD_TYPE:
6658       error_msg = "array of function members";
6659       break;
6660
6661     default:
6662       break;
6663     }
6664
6665   /* If something went wrong, issue an error-message and return.  */
6666   if (error_msg)
6667     {
6668       if (name)
6669         error ("declaration of %qD as %s", name, error_msg);
6670       else
6671         error ("creating %s", error_msg);
6672
6673       return error_mark_node;
6674     }
6675
6676   /* [dcl.array]
6677
6678      The constant expressions that specify the bounds of the arrays
6679      can be omitted only for the first member of the sequence.  */
6680   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
6681     {
6682       if (name)
6683         error ("declaration of %qD as multidimensional array must "
6684                "have bounds for all dimensions except the first",
6685                name);
6686       else
6687         error ("multidimensional array must have bounds for all "
6688                "dimensions except the first");
6689
6690       return error_mark_node;
6691     }
6692
6693   /* Figure out the index type for the array.  */
6694   if (size)
6695     itype = compute_array_index_type (name, size);
6696
6697   /* [dcl.array]
6698      T is called the array element type; this type shall not be [...] an
6699      abstract class type.  */
6700   abstract_virtuals_error (name, type);
6701
6702   return build_cplus_array_type (type, itype);
6703 }
6704
6705 /* Check that it's OK to declare a function with the indicated TYPE.
6706    SFK indicates the kind of special function (if any) that this
6707    function is.  OPTYPE is the type given in a conversion operator
6708    declaration, or the class type for a constructor/destructor.
6709    Returns the actual return type of the function; that
6710    may be different than TYPE if an error occurs, or for certain
6711    special functions.  */
6712
6713 static tree
6714 check_special_function_return_type (special_function_kind sfk,
6715                                     tree type,
6716                                     tree optype)
6717 {
6718   switch (sfk)
6719     {
6720     case sfk_constructor:
6721       if (type)
6722         error ("return type specification for constructor invalid");
6723
6724       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6725         type = build_pointer_type (optype);
6726       else
6727         type = void_type_node;
6728       break;
6729
6730     case sfk_destructor:
6731       if (type)
6732         error ("return type specification for destructor invalid");
6733       /* We can't use the proper return type here because we run into
6734          problems with ambiguous bases and covariant returns.
6735          Java classes are left unchanged because (void *) isn't a valid
6736          Java type, and we don't want to change the Java ABI.  */
6737       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
6738         type = build_pointer_type (void_type_node);
6739       else
6740         type = void_type_node;
6741       break;
6742
6743     case sfk_conversion:
6744       if (type && !same_type_p (type, optype))
6745         error ("operator %qT declared to return %qT", optype, type);
6746       else if (type)
6747         pedwarn ("return type specified for %<operator %T%>",  optype);
6748       type = optype;
6749       break;
6750
6751     default:
6752       gcc_unreachable ();
6753     }
6754
6755   return type;
6756 }
6757
6758 /* A variable or data member (whose unqualified name is IDENTIFIER)
6759    has been declared with the indicated TYPE.  If the TYPE is not
6760    acceptable, issue an error message and return a type to use for
6761    error-recovery purposes.  */
6762
6763 tree
6764 check_var_type (tree identifier, tree type)
6765 {
6766   if (VOID_TYPE_P (type))
6767     {
6768       if (!identifier)
6769         error ("unnamed variable or field declared void");
6770       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
6771         {
6772           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
6773           error ("variable or field %qE declared void", identifier);
6774         }
6775       else
6776         error ("variable or field declared void");
6777       type = error_mark_node;
6778     }
6779
6780   return type;
6781 }
6782
6783 /* Given declspecs and a declarator (abstract or otherwise), determine
6784    the name and type of the object declared and construct a DECL node
6785    for it.
6786
6787    DECLSPECS is a chain of tree_list nodes whose value fields
6788     are the storage classes and type specifiers.
6789
6790    DECL_CONTEXT says which syntactic context this declaration is in:
6791      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
6792      FUNCDEF for a function definition.  Like NORMAL but a few different
6793       error messages in each case.  Return value may be zero meaning
6794       this definition is too screwy to try to parse.
6795      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
6796       handle member functions (which have FIELD context).
6797       Return value may be zero meaning this definition is too screwy to
6798       try to parse.
6799      PARM for a parameter declaration (either within a function prototype
6800       or before a function body).  Make a PARM_DECL, or return void_type_node.
6801      CATCHPARM for a parameter declaration before a catch clause.
6802      TYPENAME if for a typename (in a cast or sizeof).
6803       Don't make a DECL node; just return the ..._TYPE node.
6804      FIELD for a struct or union field; make a FIELD_DECL.
6805      BITFIELD for a field with specified width.
6806    INITIALIZED is 1 if the decl has an initializer.
6807
6808    ATTRLIST is a pointer to the list of attributes, which may be NULL
6809    if there are none; *ATTRLIST may be modified if attributes from inside
6810    the declarator should be applied to the declaration.
6811
6812    When this function is called, scoping variables (such as
6813    CURRENT_CLASS_TYPE) should reflect the scope in which the
6814    declaration occurs, not the scope in which the new declaration will
6815    be placed.  For example, on:
6816
6817      void S::f() { ... }
6818
6819    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
6820    should not be `S'.
6821
6822    Returns a DECL (if a declarator is present), a TYPE (if there is no
6823    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
6824    error occurs. */
6825
6826 tree
6827 grokdeclarator (const cp_declarator *declarator,
6828                 const cp_decl_specifier_seq *declspecs,
6829                 enum decl_context decl_context,
6830                 int initialized,
6831                 tree* attrlist)
6832 {
6833   tree type = NULL_TREE;
6834   int longlong = 0;
6835   int virtualp, explicitp, friendp, inlinep, staticp;
6836   int explicit_int = 0;
6837   int explicit_char = 0;
6838   int defaulted_int = 0;
6839   tree dependent_name = NULL_TREE;
6840
6841   tree typedef_decl = NULL_TREE;
6842   const char *name = NULL;
6843   tree typedef_type = NULL_TREE;
6844   /* True if this declarator is a function definition.  */
6845   bool funcdef_flag = false;
6846   cp_declarator_kind innermost_code = cdk_error;
6847   int bitfield = 0;
6848 #if 0
6849   /* See the code below that used this.  */
6850   tree decl_attr = NULL_TREE;
6851 #endif
6852
6853   /* Keep track of what sort of function is being processed
6854      so that we can warn about default return values, or explicit
6855      return values which do not match prescribed defaults.  */
6856   special_function_kind sfk = sfk_none;
6857
6858   tree dname = NULL_TREE;
6859   tree ctor_return_type = NULL_TREE;
6860   enum overload_flags flags = NO_SPECIAL;
6861   /* cv-qualifiers that apply to the declarator, for a declaration of
6862      a member function.  */
6863   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
6864   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
6865   int type_quals;
6866   tree raises = NULL_TREE;
6867   int template_count = 0;
6868   tree returned_attrs = NULL_TREE;
6869   tree parms = NULL_TREE;
6870   const cp_declarator *id_declarator;
6871   /* The unqualified name of the declarator; either an
6872      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
6873   tree unqualified_id;
6874   /* The class type, if any, in which this entity is located,
6875      or NULL_TREE if none.  Note that this value may be different from
6876      the current class type; for example if an attempt is made to declare
6877      "A::f" inside "B", this value will be "A".  */
6878   tree ctype = current_class_type;
6879   /* The NAMESPACE_DECL for the namespace in which this entity is
6880      located.  If an unqualified name is used to declare the entity,
6881      this value will be NULL_TREE, even if the entity is located at
6882      namespace scope.  */
6883   tree in_namespace = NULL_TREE;
6884   cp_storage_class storage_class;
6885   bool unsigned_p, signed_p, short_p, long_p, thread_p;
6886   bool type_was_error_mark_node = false;
6887
6888   signed_p = declspecs->specs[(int)ds_signed];
6889   unsigned_p = declspecs->specs[(int)ds_unsigned];
6890   short_p = declspecs->specs[(int)ds_short];
6891   long_p = declspecs->specs[(int)ds_long];
6892   longlong = declspecs->specs[(int)ds_long] >= 2;
6893   thread_p = declspecs->specs[(int)ds_thread];
6894
6895   if (decl_context == FUNCDEF)
6896     funcdef_flag = true, decl_context = NORMAL;
6897   else if (decl_context == MEMFUNCDEF)
6898     funcdef_flag = true, decl_context = FIELD;
6899   else if (decl_context == BITFIELD)
6900     bitfield = 1, decl_context = FIELD;
6901
6902   /* Look inside a declarator for the name being declared
6903      and get it as a string, for an error message.  */
6904   for (id_declarator = declarator;
6905        id_declarator;
6906        id_declarator = id_declarator->declarator)
6907     {
6908       if (id_declarator->kind != cdk_id)
6909         innermost_code = id_declarator->kind;
6910
6911       switch (id_declarator->kind)
6912         {
6913         case cdk_function:
6914           if (id_declarator->declarator
6915               && id_declarator->declarator->kind == cdk_id)
6916             {
6917               sfk = id_declarator->declarator->u.id.sfk;
6918               if (sfk == sfk_destructor)
6919                 flags = DTOR_FLAG;
6920             }
6921           break;
6922
6923         case cdk_id:
6924           {
6925             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
6926             tree decl = id_declarator->u.id.unqualified_name;
6927             if (!decl)
6928               break;
6929             if (qualifying_scope)
6930               {
6931                 if (at_function_scope_p ())
6932                   {
6933                     /* [dcl.meaning] 
6934
6935                        A declarator-id shall not be qualified except
6936                        for ... 
6937
6938                        None of the cases are permitted in block
6939                        scope.  */
6940                     if (qualifying_scope == global_namespace)
6941                       error ("invalid use of qualified-name %<::%D%>",
6942                              decl);
6943                     else if (TYPE_P (qualifying_scope))
6944                       error ("invalid use of qualified-name %<%T::%D%>",
6945                              qualifying_scope, decl);
6946                     else 
6947                       error ("invalid use of qualified-name %<%D::%D%>",
6948                              qualifying_scope, decl);
6949                     return error_mark_node;
6950                   }
6951                 else if (TYPE_P (qualifying_scope))
6952                   {
6953                     ctype = qualifying_scope;
6954                     if (innermost_code != cdk_function
6955                         && current_class_type
6956                         && !UNIQUELY_DERIVED_FROM_P (ctype,
6957                                                      current_class_type))
6958                       {
6959                         error ("type %qT is not derived from type %qT",
6960                                ctype, current_class_type);
6961                         return error_mark_node;
6962                       }
6963                   }
6964                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
6965                   in_namespace = qualifying_scope;
6966               }
6967             switch (TREE_CODE (decl))
6968               {
6969               case BIT_NOT_EXPR:
6970                 {
6971                   tree type;
6972
6973                   if (innermost_code != cdk_function)
6974                     {
6975                       error ("declaration of %qD as non-function", decl);
6976                       return error_mark_node;
6977                     }
6978                   else if (!qualifying_scope
6979                            && !(current_class_type && at_class_scope_p ()))
6980                     {
6981                       error ("declaration of %qD as non-member", decl);
6982                       return error_mark_node;
6983                     }
6984
6985                   type = TREE_OPERAND (decl, 0);
6986                   name = IDENTIFIER_POINTER (constructor_name (type));
6987                   dname = decl;
6988                 }
6989                 break;
6990
6991               case TEMPLATE_ID_EXPR:
6992                 {
6993                   tree fns = TREE_OPERAND (decl, 0);
6994
6995                   dname = fns;
6996                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
6997                     {
6998                       gcc_assert (is_overloaded_fn (dname));
6999                       dname = DECL_NAME (get_first_fn (dname));
7000                     }
7001                 }
7002                 /* Fall through.  */
7003
7004               case IDENTIFIER_NODE:
7005                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7006                   dname = decl;
7007
7008                 if (C_IS_RESERVED_WORD (dname))
7009                   {
7010                     error ("declarator-id missing; using reserved word %qD",
7011                            dname);
7012                     name = IDENTIFIER_POINTER (dname);
7013                   }
7014                 else if (!IDENTIFIER_TYPENAME_P (dname))
7015                   name = IDENTIFIER_POINTER (dname);
7016                 else
7017                   {
7018                     gcc_assert (flags == NO_SPECIAL);
7019                     flags = TYPENAME_FLAG;
7020                     ctor_return_type = TREE_TYPE (dname);
7021                     sfk = sfk_conversion;
7022                     if (is_typename_at_global_scope (dname))
7023                       name = IDENTIFIER_POINTER (dname);
7024                     else
7025                       name = "<invalid operator>";
7026                   }
7027                 break;
7028
7029               default:
7030                 gcc_unreachable ();
7031               }
7032             break;
7033
7034           case cdk_array:
7035           case cdk_pointer:
7036           case cdk_reference:
7037           case cdk_ptrmem:
7038             break;
7039
7040           case cdk_error:
7041             return error_mark_node;
7042
7043           default:
7044             gcc_unreachable ();
7045           }
7046         }
7047       if (id_declarator->kind == cdk_id)
7048         break;
7049     }
7050
7051   /* [dcl.fct.edf]
7052
7053      The declarator in a function-definition shall have the form
7054      D1 ( parameter-declaration-clause) ...  */
7055   if (funcdef_flag && innermost_code != cdk_function)
7056     {
7057       error ("function definition does not declare parameters");
7058       return error_mark_node;
7059     }
7060
7061   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7062       && innermost_code != cdk_function
7063       && ! (ctype && !declspecs->any_specifiers_p))
7064     {
7065       error ("declaration of %qD as non-function", dname);
7066       return error_mark_node;
7067     }
7068
7069   /* Anything declared one level down from the top level
7070      must be one of the parameters of a function
7071      (because the body is at least two levels down).  */
7072
7073   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7074      by not allowing C++ class definitions to specify their parameters
7075      with xdecls (must be spec.d in the parmlist).
7076
7077      Since we now wait to push a class scope until we are sure that
7078      we are in a legitimate method context, we must set oldcname
7079      explicitly (since current_class_name is not yet alive).
7080
7081      We also want to avoid calling this a PARM if it is in a namespace.  */
7082
7083   if (decl_context == NORMAL && !toplevel_bindings_p ())
7084     {
7085       struct cp_binding_level *b = current_binding_level;
7086       current_binding_level = b->level_chain;
7087       if (current_binding_level != 0 && toplevel_bindings_p ())
7088         decl_context = PARM;
7089       current_binding_level = b;
7090     }
7091
7092   if (name == NULL)
7093     name = decl_context == PARM ? "parameter" : "type name";
7094
7095   /* If there were multiple types specified in the decl-specifier-seq,
7096      issue an error message.  */
7097   if (declspecs->multiple_types_p)
7098     {
7099       error ("two or more data types in declaration of %qs", name);
7100       return error_mark_node;
7101     }
7102
7103   /* Extract the basic type from the decl-specifier-seq.  */
7104   type = declspecs->type;
7105   if (type == error_mark_node)
7106     {
7107       type = NULL_TREE;
7108       type_was_error_mark_node = true;
7109     }
7110   /* If the entire declaration is itself tagged as deprecated then
7111      suppress reports of deprecated items.  */
7112   if (type && TREE_DEPRECATED (type)
7113       && deprecated_state != DEPRECATED_SUPPRESS)
7114     warn_deprecated_use (type);
7115   if (type && TREE_CODE (type) == TYPE_DECL)
7116     {
7117       typedef_decl = type;
7118       type = TREE_TYPE (typedef_decl);
7119     }
7120   /* No type at all: default to `int', and set DEFAULTED_INT
7121      because it was not a user-defined typedef.  */
7122   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7123     {
7124       /* These imply 'int'.  */
7125       type = integer_type_node;
7126       defaulted_int = 1;
7127     }
7128   /* Gather flags.  */
7129   explicit_int = declspecs->explicit_int_p;
7130   explicit_char = declspecs->explicit_char_p;
7131
7132 #if 0
7133   /* See the code below that used this.  */
7134   if (typedef_decl)
7135     decl_attr = DECL_ATTRIBUTES (typedef_decl);
7136 #endif
7137   typedef_type = type;
7138
7139
7140   if (sfk != sfk_conversion)
7141     ctor_return_type = ctype;
7142
7143   if (sfk != sfk_none)
7144     type = check_special_function_return_type (sfk, type,
7145                                                ctor_return_type);
7146   else if (type == NULL_TREE)
7147     {
7148       int is_main;
7149
7150       explicit_int = -1;
7151
7152       /* We handle `main' specially here, because 'main () { }' is so
7153          common.  With no options, it is allowed.  With -Wreturn-type,
7154          it is a warning.  It is only an error with -pedantic-errors.  */
7155       is_main = (funcdef_flag
7156                  && dname && MAIN_NAME_P (dname)
7157                  && ctype == NULL_TREE
7158                  && in_namespace == NULL_TREE
7159                  && current_namespace == global_namespace);
7160
7161       if (type_was_error_mark_node)
7162         /* We've already issued an error, don't complain more.  */;
7163       else if (in_system_header || flag_ms_extensions)
7164         /* Allow it, sigh.  */;
7165       else if (pedantic || ! is_main)
7166         pedwarn ("ISO C++ forbids declaration of %qs with no type", name);
7167       else if (warn_return_type)
7168         warning (0, "ISO C++ forbids declaration of %qs with no type", name);
7169
7170       type = integer_type_node;
7171     }
7172
7173   ctype = NULL_TREE;
7174
7175   /* Now process the modifiers that were specified
7176      and check for invalid combinations.  */
7177
7178   /* Long double is a special combination.  */
7179   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7180     {
7181       long_p = false;
7182       type = build_qualified_type (long_double_type_node,
7183                                    cp_type_quals (type));
7184     }
7185
7186   /* Check all other uses of type modifiers.  */
7187
7188   if (unsigned_p || signed_p || long_p || short_p)
7189     {
7190       int ok = 0;
7191
7192       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7193         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7194       else if (signed_p && unsigned_p)
7195         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7196       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7197         error ("%<long long%> invalid for %qs", name);
7198       else if (long_p && TREE_CODE (type) == REAL_TYPE)
7199         error ("%<long%> invalid for %qs", name);
7200       else if (short_p && TREE_CODE (type) == REAL_TYPE)
7201         error ("%<short%> invalid for %qs", name);
7202       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7203         error ("%<long%> or %<short%> invalid for %qs", name);
7204       else if ((long_p || short_p) && explicit_char)
7205         error ("%<long%> or %<short%> specified with char for %qs", name);
7206       else if (long_p && short_p)
7207         error ("%<long%> and %<short%> specified together for %qs", name);
7208       else
7209         {
7210           ok = 1;
7211           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7212             {
7213               pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7214                        name);
7215               if (flag_pedantic_errors)
7216                 ok = 0;
7217             }
7218         }
7219
7220       /* Discard the type modifiers if they are invalid.  */
7221       if (! ok)
7222         {
7223           unsigned_p = false;
7224           signed_p = false;
7225           long_p = false;
7226           short_p = false;
7227           longlong = 0;
7228         }
7229     }
7230
7231   /* Decide whether an integer type is signed or not.
7232      Optionally treat bitfields as signed by default.  */
7233   if (unsigned_p
7234       /* [class.bit]
7235
7236          It is implementation-defined whether a plain (neither
7237          explicitly signed or unsigned) char, short, int, or long
7238          bit-field is signed or unsigned.
7239
7240          Naturally, we extend this to long long as well.  Note that
7241          this does not include wchar_t.  */
7242       || (bitfield && !flag_signed_bitfields
7243           && !signed_p
7244           /* A typedef for plain `int' without `signed' can be
7245              controlled just like plain `int', but a typedef for
7246              `signed int' cannot be so controlled.  */
7247           && !(typedef_decl
7248                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7249           && TREE_CODE (type) == INTEGER_TYPE
7250           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7251     {
7252       if (longlong)
7253         type = long_long_unsigned_type_node;
7254       else if (long_p)
7255         type = long_unsigned_type_node;
7256       else if (short_p)
7257         type = short_unsigned_type_node;
7258       else if (type == char_type_node)
7259         type = unsigned_char_type_node;
7260       else if (typedef_decl)
7261         type = c_common_unsigned_type (type);
7262       else
7263         type = unsigned_type_node;
7264     }
7265   else if (signed_p && type == char_type_node)
7266     type = signed_char_type_node;
7267   else if (longlong)
7268     type = long_long_integer_type_node;
7269   else if (long_p)
7270     type = long_integer_type_node;
7271   else if (short_p)
7272     type = short_integer_type_node;
7273
7274   if (declspecs->specs[(int)ds_complex])
7275     {
7276       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7277         error ("complex invalid for %qs", name);
7278       /* If we just have "complex", it is equivalent to
7279          "complex double", but if any modifiers at all are specified it is
7280          the complex form of TYPE.  E.g, "complex short" is
7281          "complex short int".  */
7282
7283       else if (defaulted_int && ! longlong
7284                && ! (long_p || short_p || signed_p || unsigned_p))
7285         type = complex_double_type_node;
7286       else if (type == integer_type_node)
7287         type = complex_integer_type_node;
7288       else if (type == float_type_node)
7289         type = complex_float_type_node;
7290       else if (type == double_type_node)
7291         type = complex_double_type_node;
7292       else if (type == long_double_type_node)
7293         type = complex_long_double_type_node;
7294       else
7295         type = build_complex_type (type);
7296     }
7297
7298   type_quals = TYPE_UNQUALIFIED;
7299   if (declspecs->specs[(int)ds_const])
7300     type_quals |= TYPE_QUAL_CONST;
7301   if (declspecs->specs[(int)ds_volatile])
7302     type_quals |= TYPE_QUAL_VOLATILE;
7303   if (declspecs->specs[(int)ds_restrict])
7304     type_quals |= TYPE_QUAL_RESTRICT;
7305   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7306     error ("qualifiers are not allowed on declaration of %<operator %T%>",
7307            ctor_return_type);
7308
7309   if (TREE_CODE (type) == FUNCTION_TYPE
7310       && type_quals != TYPE_UNQUALIFIED)
7311     {
7312       /* This was an error in C++98 (cv-qualifiers cannot be added to
7313          a function type), but DR 295 makes the code well-formed by
7314          dropping the extra qualifiers. */
7315       if (pedantic)
7316         {
7317           tree bad_type = build_qualified_type (type, type_quals);
7318           pedwarn ("ignoring %qV qualifiers added to function type %qT",
7319                    bad_type, type);
7320         }
7321       type_quals = TYPE_UNQUALIFIED;
7322     }
7323   type_quals |= cp_type_quals (type);
7324   type = cp_build_qualified_type_real
7325     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7326                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
7327   /* We might have ignored or rejected some of the qualifiers.  */
7328   type_quals = cp_type_quals (type);
7329
7330   staticp = 0;
7331   inlinep = !! declspecs->specs[(int)ds_inline];
7332   virtualp = !! declspecs->specs[(int)ds_virtual];
7333   explicitp = !! declspecs->specs[(int)ds_explicit];
7334
7335   storage_class = declspecs->storage_class;
7336   if (storage_class == sc_static)
7337     staticp = 1 + (decl_context == FIELD);
7338
7339   if (virtualp && staticp == 2)
7340     {
7341       error ("member %qD cannot be declared both virtual and static", dname);
7342       storage_class = sc_none;
7343       staticp = 0;
7344     }
7345   friendp = !! declspecs->specs[(int)ds_friend];
7346
7347   if (dependent_name && !friendp)
7348     {
7349       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
7350       return error_mark_node;
7351     }
7352
7353   /* Issue errors about use of storage classes for parameters.  */
7354   if (decl_context == PARM)
7355     {
7356       if (declspecs->specs[(int)ds_typedef])
7357         {
7358           error ("typedef declaration invalid in parameter declaration");
7359           return error_mark_node;
7360         }
7361       else if (storage_class == sc_static
7362                || storage_class == sc_extern
7363                || thread_p)
7364         error ("storage class specifiers invalid in parameter declarations");
7365     }
7366
7367   /* Give error if `virtual' is used outside of class declaration.  */
7368   if (virtualp
7369       && (current_class_name == NULL_TREE || decl_context != FIELD))
7370     {
7371       error ("virtual outside class declaration");
7372       virtualp = 0;
7373     }
7374
7375   /* Static anonymous unions are dealt with here.  */
7376   if (staticp && decl_context == TYPENAME
7377       && declspecs->type
7378       && ANON_AGGR_TYPE_P (declspecs->type))
7379     decl_context = FIELD;
7380
7381   /* Warn about storage classes that are invalid for certain
7382      kinds of declarations (parameters, typenames, etc.).  */
7383   if (declspecs->conflicting_specifiers_p)
7384     {
7385       error ("conflicting specifiers in declaration of %qs", name);
7386       storage_class = sc_none;
7387     }
7388   else if (thread_p
7389            && ((storage_class
7390                 && storage_class != sc_extern
7391                 && storage_class != sc_static)
7392                || declspecs->specs[(int)ds_typedef]))
7393     {
7394       error ("multiple storage classes in declaration of %qs", name);
7395       thread_p = false;
7396     }
7397   else if (decl_context != NORMAL
7398            && ((storage_class != sc_none
7399                 && storage_class != sc_mutable)
7400                || thread_p))
7401     {
7402       if ((decl_context == PARM || decl_context == CATCHPARM)
7403           && (storage_class == sc_register
7404               || storage_class == sc_auto))
7405         ;
7406       else if (declspecs->specs[(int)ds_typedef])
7407         ;
7408       else if (decl_context == FIELD
7409                /* C++ allows static class elements.  */
7410                && storage_class == sc_static)
7411         /* C++ also allows inlines and signed and unsigned elements,
7412            but in those cases we don't come in here.  */
7413         ;
7414       else
7415         {
7416           if (decl_context == FIELD)
7417             error ("storage class specified for %qs", name);
7418           else
7419             {
7420               if (decl_context == PARM || decl_context == CATCHPARM)
7421                 error ("storage class specified for parameter %qs", name);
7422               else
7423                 error ("storage class specified for typename");
7424             }
7425           if (storage_class == sc_register
7426               || storage_class == sc_auto
7427               || storage_class == sc_extern
7428               || thread_p)
7429             storage_class = sc_none;
7430         }
7431     }
7432   else if (storage_class == sc_extern && initialized
7433            && !funcdef_flag)
7434     {
7435       if (toplevel_bindings_p ())
7436         {
7437           /* It's common practice (and completely valid) to have a const
7438              be initialized and declared extern.  */
7439           if (!(type_quals & TYPE_QUAL_CONST))
7440             warning (0, "%qs initialized and declared %<extern%>", name);
7441         }
7442       else
7443         error ("%qs has both %<extern%> and initializer", name);
7444     }
7445   else if (storage_class == sc_extern && funcdef_flag
7446            && ! toplevel_bindings_p ())
7447     error ("nested function %qs declared %<extern%>", name);
7448   else if (toplevel_bindings_p ())
7449     {
7450       if (storage_class == sc_auto)
7451         error ("top-level declaration of %qs specifies %<auto%>", name);
7452     }
7453   else if (thread_p
7454            && storage_class != sc_extern
7455            && storage_class != sc_static)
7456     {
7457       error ("function-scope %qs implicitly auto and declared %<__thread%>",
7458              name);
7459       thread_p = false;
7460     }
7461
7462   if (storage_class && friendp)
7463     error ("storage class specifiers invalid in friend function declarations");
7464
7465   if (!id_declarator)
7466     unqualified_id = NULL_TREE;
7467   else
7468     {
7469       unqualified_id = id_declarator->u.id.unqualified_name;
7470       switch (TREE_CODE (unqualified_id))
7471         {
7472         case BIT_NOT_EXPR:
7473           unqualified_id
7474             = constructor_name (TREE_OPERAND (unqualified_id, 0));
7475           break;
7476
7477         case IDENTIFIER_NODE:
7478         case TEMPLATE_ID_EXPR:
7479           break;
7480
7481         default:
7482           gcc_unreachable ();
7483         }
7484     }
7485
7486   /* Determine the type of the entity declared by recurring on the
7487      declarator.  */
7488   for (; declarator; declarator = declarator->declarator)
7489     {
7490       const cp_declarator *inner_declarator;
7491       tree attrs;
7492
7493       if (type == error_mark_node)
7494         return error_mark_node;
7495
7496       attrs = declarator->attributes;
7497       if (attrs)
7498         {
7499           int attr_flags;
7500
7501           attr_flags = 0;
7502           if (declarator == NULL || declarator->kind == cdk_id)
7503             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7504           if (declarator->kind == cdk_function)
7505             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7506           if (declarator->kind == cdk_array)
7507             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7508           returned_attrs = decl_attributes (&type,
7509                                             chainon (returned_attrs, attrs),
7510                                             attr_flags);
7511         }
7512
7513       if (declarator->kind == cdk_id)
7514         break;
7515
7516       inner_declarator = declarator->declarator;
7517
7518       switch (declarator->kind)
7519         {
7520         case cdk_array:
7521           type = create_array_type_for_decl (dname, type,
7522                                              declarator->u.array.bounds);
7523           break;
7524
7525         case cdk_function:
7526           {
7527             tree arg_types;
7528             int funcdecl_p;
7529
7530             /* Declaring a function type.
7531                Make sure we have a valid type for the function to return.  */
7532
7533             /* We now know that the TYPE_QUALS don't apply to the
7534                decl, but to its return type.  */
7535             type_quals = TYPE_UNQUALIFIED;
7536
7537             /* Warn about some types functions can't return.  */
7538
7539             if (TREE_CODE (type) == FUNCTION_TYPE)
7540               {
7541                 error ("%qs declared as function returning a function", name);
7542                 type = integer_type_node;
7543               }
7544             if (TREE_CODE (type) == ARRAY_TYPE)
7545               {
7546                 error ("%qs declared as function returning an array", name);
7547                 type = integer_type_node;
7548               }
7549
7550             /* Pick up type qualifiers which should be applied to `this'.  */
7551             memfn_quals = declarator->u.function.qualifiers;
7552
7553             /* Pick up the exception specifications.  */
7554             raises = declarator->u.function.exception_specification;
7555
7556             /* Say it's a definition only for the CALL_EXPR
7557                closest to the identifier.  */
7558             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7559
7560             if (ctype == NULL_TREE
7561                 && decl_context == FIELD
7562                 && funcdecl_p
7563                 && (friendp == 0 || dname == current_class_name))
7564               ctype = current_class_type;
7565
7566             if (ctype && (sfk == sfk_constructor
7567                           || sfk == sfk_destructor))
7568               {
7569                 /* We are within a class's scope. If our declarator name
7570                    is the same as the class name, and we are defining
7571                    a function, then it is a constructor/destructor, and
7572                    therefore returns a void type.  */
7573
7574                 /* ISO C++ 12.4/2.  A destructor may not be declared
7575                    const or volatile.  A destructor may not be
7576                    static.
7577
7578                    ISO C++ 12.1.  A constructor may not be declared
7579                    const or volatile.  A constructor may not be
7580                    virtual.  A constructor may not be static.  */
7581                 if (staticp == 2)
7582                   error ((flags == DTOR_FLAG)
7583                          ? "destructor cannot be static member function"
7584                          : "constructor cannot be static member function");
7585                 if (memfn_quals)
7586                   {
7587                     error ((flags == DTOR_FLAG)
7588                            ? "destructors may not be cv-qualified"
7589                            : "constructors may not be cv-qualified");
7590                     memfn_quals = TYPE_UNQUALIFIED;
7591                   }
7592
7593                 if (decl_context == FIELD
7594                     && !member_function_or_else (ctype,
7595                                                  current_class_type,
7596                                                  flags))
7597                   return error_mark_node;
7598
7599                 if (flags != DTOR_FLAG)
7600                   {
7601                     /* It's a constructor.  */
7602                     if (explicitp == 1)
7603                       explicitp = 2;
7604                     if (virtualp)
7605                       {
7606                         pedwarn ("constructors cannot be declared virtual");
7607                         virtualp = 0;
7608                       }
7609                     if (decl_context == FIELD
7610                         && sfk != sfk_constructor)
7611                       return error_mark_node;
7612                   }
7613                 if (decl_context == FIELD)
7614                   staticp = 0;
7615               }
7616             else if (friendp)
7617               {
7618                 if (initialized)
7619                   error ("can't initialize friend function %qs", name);
7620                 if (virtualp)
7621                   {
7622                     /* Cannot be both friend and virtual.  */
7623                     error ("virtual functions cannot be friends");
7624                     friendp = 0;
7625                   }
7626                 if (decl_context == NORMAL)
7627                   error ("friend declaration not in class definition");
7628                 if (current_function_decl && funcdef_flag)
7629                   error ("can't define friend function %qs in a local "
7630                          "class definition",
7631                          name);
7632               }
7633
7634             arg_types = grokparms (declarator->u.function.parameters,
7635                                    &parms);
7636
7637             if (inner_declarator
7638                 && inner_declarator->kind == cdk_id
7639                 && inner_declarator->u.id.sfk == sfk_destructor
7640                 && arg_types != void_list_node)
7641               {
7642                 error ("destructors may not have parameters");
7643                 arg_types = void_list_node;
7644                 parms = NULL_TREE;
7645               }
7646
7647             type = build_function_type (type, arg_types);
7648           }
7649           break;
7650
7651         case cdk_pointer:
7652         case cdk_reference:
7653         case cdk_ptrmem:
7654           /* Filter out pointers-to-references and references-to-references.
7655              We can get these if a TYPE_DECL is used.  */
7656
7657           if (TREE_CODE (type) == REFERENCE_TYPE)
7658             {
7659               error (declarator->kind == cdk_reference
7660                      ? "cannot declare reference to %q#T"
7661                      : "cannot declare pointer to %q#T", type);
7662               type = TREE_TYPE (type);
7663             }
7664           else if (VOID_TYPE_P (type))
7665             {
7666               if (declarator->kind == cdk_reference)
7667                 error ("cannot declare reference to %q#T", type);
7668               else if (declarator->kind == cdk_ptrmem)
7669                 error ("cannot declare pointer to %q#T member", type);
7670             }
7671
7672           /* We now know that the TYPE_QUALS don't apply to the decl,
7673              but to the target of the pointer.  */
7674           type_quals = TYPE_UNQUALIFIED;
7675
7676           if (declarator->kind == cdk_ptrmem
7677               && (TREE_CODE (type) == FUNCTION_TYPE || memfn_quals))
7678             {
7679               memfn_quals |= cp_type_quals (type);
7680               type = build_memfn_type (type,
7681                                        declarator->u.pointer.class_type,
7682                                        memfn_quals);
7683               memfn_quals = TYPE_UNQUALIFIED;
7684             }
7685
7686           if (declarator->kind == cdk_reference)
7687             {
7688               if (!VOID_TYPE_P (type))
7689                 type = build_reference_type (type);
7690             }
7691           else if (TREE_CODE (type) == METHOD_TYPE)
7692             type = build_ptrmemfunc_type (build_pointer_type (type));
7693           else if (declarator->kind == cdk_ptrmem)
7694             {
7695               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
7696                           != NAMESPACE_DECL);
7697               if (declarator->u.pointer.class_type == error_mark_node)
7698                 /* We will already have complained.  */
7699                 type = error_mark_node;
7700               else
7701                 type = build_ptrmem_type (declarator->u.pointer.class_type,
7702                                           type);
7703             }
7704           else
7705             type = build_pointer_type (type);
7706
7707           /* Process a list of type modifier keywords (such as
7708              const or volatile) that were given inside the `*' or `&'.  */
7709
7710           if (declarator->u.pointer.qualifiers)
7711             {
7712               type
7713                 = cp_build_qualified_type (type,
7714                                            declarator->u.pointer.qualifiers);
7715               type_quals = cp_type_quals (type);
7716             }
7717           ctype = NULL_TREE;
7718           break;
7719
7720         case cdk_error:
7721           break;
7722
7723         default:
7724           gcc_unreachable ();
7725         }
7726     }
7727
7728   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7729       && TREE_CODE (type) != FUNCTION_TYPE
7730       && TREE_CODE (type) != METHOD_TYPE)
7731     {
7732       error ("template-id %qD used as a declarator",
7733              unqualified_id);
7734       unqualified_id = dname;
7735     }
7736
7737   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7738      qualified with a class-name, turn it into a METHOD_TYPE, unless
7739      we know that the function is static.  We take advantage of this
7740      opportunity to do other processing that pertains to entities
7741      explicitly declared to be class members.  Note that if DECLARATOR
7742      is non-NULL, we know it is a cdk_id declarator; otherwise, we
7743      would not have exited the loop above.  */
7744   if (declarator
7745       && declarator->u.id.qualifying_scope
7746       && TYPE_P (declarator->u.id.qualifying_scope))
7747     {
7748       tree t;
7749
7750       ctype = declarator->u.id.qualifying_scope;
7751       ctype = TYPE_MAIN_VARIANT (ctype);
7752       t = ctype;
7753       while (t != NULL_TREE && CLASS_TYPE_P (t))
7754         {
7755           /* You're supposed to have one `template <...>' for every
7756              template class, but you don't need one for a full
7757              specialization.  For example:
7758
7759                template <class T> struct S{};
7760                template <> struct S<int> { void f(); };
7761                void S<int>::f () {}
7762
7763              is correct; there shouldn't be a `template <>' for the
7764              definition of `S<int>::f'.  */
7765           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7766               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7767             /* T is an explicit (not partial) specialization.  All
7768                containing classes must therefore also be explicitly
7769                specialized.  */
7770             break;
7771           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7772               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7773             template_count += 1;
7774
7775           t = TYPE_MAIN_DECL (t);
7776           t = DECL_CONTEXT (t);
7777         }
7778
7779       if (ctype == current_class_type)
7780         {
7781           if (friendp)
7782             pedwarn ("member functions are implicitly friends of their class");
7783           else
7784             pedwarn ("extra qualification %<%T::%> on member %qs",
7785                      ctype, name);
7786         }
7787       else if (/* If the qualifying type is already complete, then we
7788                   can skip the following checks.  */
7789                !COMPLETE_TYPE_P (ctype)
7790                && (/* If the function is being defined, then
7791                       qualifying type must certainly be complete.  */
7792                    funcdef_flag
7793                    /* A friend declaration of "T::f" is OK, even if
7794                       "T" is a template parameter.  But, if this
7795                       function is not a friend, the qualifying type
7796                       must be a class.  */
7797                    || (!friendp && !CLASS_TYPE_P (ctype))
7798                    /* For a declaration, the type need not be
7799                       complete, if either it is dependent (since there
7800                       is no meaningful definition of complete in that
7801                       case) or the qualifying class is currently being
7802                       defined.  */
7803                    || !(dependent_type_p (ctype)
7804                         || currently_open_class (ctype)))
7805                /* Check that the qualifying type is complete.  */
7806                && !complete_type_or_else (ctype, NULL_TREE))
7807         return error_mark_node;
7808       else if (TREE_CODE (type) == FUNCTION_TYPE)
7809         {
7810           tree sname = declarator->u.id.unqualified_name;
7811
7812           if (current_class_type
7813               && (!friendp || funcdef_flag))
7814             {
7815               error (funcdef_flag
7816                      ? "cannot define member function %<%T::%s%> within %<%T%>"
7817                      : "cannot declare member function %<%T::%s%> within %<%T%>",
7818                      ctype, name, current_class_type);
7819               return error_mark_node;
7820             }
7821
7822           if (TREE_CODE (sname) == IDENTIFIER_NODE
7823               && NEW_DELETE_OPNAME_P (sname))
7824             /* Overloaded operator new and operator delete
7825                are always static functions.  */
7826             ;
7827           else
7828             type = build_memfn_type (type, ctype, memfn_quals);
7829         }
7830       else if (declspecs->specs[(int)ds_typedef]
7831                && current_class_type)
7832         {
7833           error ("cannot declare member %<%T::%s%> within %qT",
7834                  ctype, name, current_class_type);
7835           return error_mark_node;
7836         }
7837     }
7838
7839   /* Now TYPE has the actual type.  */
7840
7841   if (returned_attrs)
7842     {
7843       if (attrlist)
7844         *attrlist = chainon (returned_attrs, *attrlist);
7845       else
7846         attrlist = &returned_attrs;
7847     }
7848
7849   /* Did array size calculations overflow?  */
7850
7851   if (TREE_CODE (type) == ARRAY_TYPE
7852       && COMPLETE_TYPE_P (type)
7853       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7854       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7855     {
7856       error ("size of array %qs is too large", name);
7857       /* If we proceed with the array type as it is, we'll eventually
7858          crash in tree_low_cst().  */
7859       type = error_mark_node;
7860     }
7861
7862   if ((decl_context == FIELD || decl_context == PARM)
7863       && !processing_template_decl
7864       && variably_modified_type_p (type, NULL_TREE))
7865     {
7866       if (decl_context == FIELD)
7867         error ("data member may not have variably modified type %qT", type);
7868       else
7869         error ("parameter may not have variably modified type %qT", type);
7870       type = error_mark_node;
7871     }
7872
7873   if (explicitp == 1 || (explicitp && friendp))
7874     {
7875       /* [dcl.fct.spec] The explicit specifier shall only be used in
7876          declarations of constructors within a class definition.  */
7877       error ("only declarations of constructors can be %<explicit%>");
7878       explicitp = 0;
7879     }
7880
7881   if (storage_class == sc_mutable)
7882     {
7883       if (decl_context != FIELD || friendp)
7884         {
7885           error ("non-member %qs cannot be declared %<mutable%>", name);
7886           storage_class = sc_none;
7887         }
7888       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7889         {
7890           error ("non-object member %qs cannot be declared %<mutable%>", name);
7891           storage_class = sc_none;
7892         }
7893       else if (TREE_CODE (type) == FUNCTION_TYPE
7894                || TREE_CODE (type) == METHOD_TYPE)
7895         {
7896           error ("function %qs cannot be declared %<mutable%>", name);
7897           storage_class = sc_none;
7898         }
7899       else if (staticp)
7900         {
7901           error ("static %qs cannot be declared %<mutable%>", name);
7902           storage_class = sc_none;
7903         }
7904       else if (type_quals & TYPE_QUAL_CONST)
7905         {
7906           error ("const %qs cannot be declared %<mutable%>", name);
7907           storage_class = sc_none;
7908         }
7909     }
7910
7911   /* If this is declaring a typedef name, return a TYPE_DECL.  */
7912   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
7913     {
7914       tree decl;
7915
7916       /* Note that the grammar rejects storage classes
7917          in typenames, fields or parameters.  */
7918       if (current_lang_name == lang_name_java)
7919         TYPE_FOR_JAVA (type) = 1;
7920
7921       /* This declaration:
7922
7923            typedef void f(int) const;
7924
7925          declares a function type which is not a member of any
7926          particular class, but which is cv-qualified; for
7927          example "f S::*" declares a pointer to a const-qualified
7928          member function of S.  We record the cv-qualification in the
7929          function type.  */
7930       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
7931         type = cp_build_qualified_type (type, memfn_quals);
7932
7933       if (decl_context == FIELD)
7934         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
7935       else
7936         decl = build_decl (TYPE_DECL, unqualified_id, type);
7937       if (id_declarator && declarator->u.id.qualifying_scope)
7938         error ("%Jtypedef name may not be a nested-name-specifier", decl);
7939
7940       if (decl_context != FIELD)
7941         {
7942           if (!current_function_decl)
7943             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
7944           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
7945                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
7946                        (current_function_decl)))
7947             /* The TYPE_DECL is "abstract" because there will be
7948                clones of this constructor/destructor, and there will
7949                be copies of this TYPE_DECL generated in those
7950                clones.  */
7951             DECL_ABSTRACT (decl) = 1;
7952         }
7953       else if (constructor_name_p (unqualified_id, current_class_type))
7954         pedwarn ("ISO C++ forbids nested type %qD with same name "
7955                  "as enclosing class",
7956                  unqualified_id);
7957
7958       /* If the user declares "typedef struct {...} foo" then the
7959          struct will have an anonymous name.  Fill that name in now.
7960          Nothing can refer to it, so nothing needs know about the name
7961          change.  */
7962       if (type != error_mark_node
7963           && unqualified_id
7964           && TYPE_NAME (type)
7965           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7966           && TYPE_ANONYMOUS_P (type)
7967           /* Don't do this if there are attributes.  */
7968           && (!attrlist || !*attrlist)
7969           && cp_type_quals (type) == TYPE_UNQUALIFIED)
7970         {
7971           tree oldname = TYPE_NAME (type);
7972           tree t;
7973
7974           /* Replace the anonymous name with the real name everywhere.  */
7975           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
7976             if (TYPE_NAME (t) == oldname)
7977               TYPE_NAME (t) = decl;
7978
7979           if (TYPE_LANG_SPECIFIC (type))
7980             TYPE_WAS_ANONYMOUS (type) = 1;
7981
7982           /* If this is a typedef within a template class, the nested
7983              type is a (non-primary) template.  The name for the
7984              template needs updating as well.  */
7985           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
7986             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
7987               = TYPE_IDENTIFIER (type);
7988
7989           /* FIXME remangle member functions; member functions of a
7990              type with external linkage have external linkage.  */
7991         }
7992
7993         /* Any qualifiers on a function type typedef have already been
7994            dealt with. */
7995       if (memfn_quals && !ctype && TREE_CODE (type) == FUNCTION_TYPE)
7996         memfn_quals = TYPE_UNQUALIFIED;
7997
7998       if (signed_p
7999           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8000         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8001
8002       bad_specifiers (decl, "type", virtualp,
8003                       memfn_quals != TYPE_UNQUALIFIED,
8004                       inlinep, friendp, raises != NULL_TREE);
8005
8006       return decl;
8007     }
8008
8009   /* Detect the case of an array type of unspecified size
8010      which came, as such, direct from a typedef name.
8011      We must copy the type, so that the array's domain can be
8012      individually set by the object's initializer.  */
8013
8014   if (type && typedef_type
8015       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
8016       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8017     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8018
8019   /* Detect where we're using a typedef of function type to declare a
8020      function. PARMS will not be set, so we must create it now.  */
8021
8022   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8023     {
8024       tree decls = NULL_TREE;
8025       tree args;
8026
8027       for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8028         {
8029           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
8030
8031           TREE_CHAIN (decl) = decls;
8032           decls = decl;
8033         }
8034
8035       parms = nreverse (decls);
8036
8037       if (decl_context != TYPENAME)
8038         {
8039           /* A cv-qualifier-seq shall only be part of the function type
8040              for a non-static member function. [8.3.5/4 dcl.fct] */
8041           if (cp_type_quals (type) != TYPE_UNQUALIFIED
8042               && (current_class_type == NULL_TREE || staticp) )
8043             {
8044               error (staticp
8045                      ? G_("qualified function types cannot be used to "
8046                           "declare static member functions")
8047                      : G_("qualified function types cannot be used to "
8048                           "declare free functions"));
8049               type = TYPE_MAIN_VARIANT (type);
8050             }
8051
8052           /* The qualifiers on the function type become the qualifiers on
8053              the non-static member function. */
8054           memfn_quals |= cp_type_quals (type);
8055         }
8056     }
8057
8058   /* If this is a type name (such as, in a cast or sizeof),
8059      compute the type and return it now.  */
8060
8061   if (decl_context == TYPENAME)
8062     {
8063       /* Note that the grammar rejects storage classes
8064          in typenames, fields or parameters.  */
8065       if (type_quals != TYPE_UNQUALIFIED)
8066         type_quals = TYPE_UNQUALIFIED;
8067
8068       /* Special case: "friend class foo" looks like a TYPENAME context.  */
8069       if (friendp)
8070         {
8071           if (type_quals != TYPE_UNQUALIFIED)
8072             {
8073               error ("type qualifiers specified for friend class declaration");
8074               type_quals = TYPE_UNQUALIFIED;
8075             }
8076           if (inlinep)
8077             {
8078               error ("%<inline%> specified for friend class declaration");
8079               inlinep = 0;
8080             }
8081
8082           if (!current_aggr)
8083             {
8084               /* Don't allow friend declaration without a class-key.  */
8085               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8086                 pedwarn ("template parameters cannot be friends");
8087               else if (TREE_CODE (type) == TYPENAME_TYPE)
8088                 pedwarn ("friend declaration requires class-key, "
8089                          "i.e. %<friend class %T::%D%>",
8090                          TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8091               else
8092                 pedwarn ("friend declaration requires class-key, "
8093                          "i.e. %<friend %#T%>",
8094                          type);
8095             }
8096
8097           /* Only try to do this stuff if we didn't already give up.  */
8098           if (type != integer_type_node)
8099             {
8100               /* A friendly class?  */
8101               if (current_class_type)
8102                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8103                                    /*complain=*/true);
8104               else
8105                 error ("trying to make class %qT a friend of global scope",
8106                        type);
8107
8108               type = void_type_node;
8109             }
8110         }
8111       else if (memfn_quals)
8112         {
8113           if (ctype == NULL_TREE)
8114             {
8115               if (TREE_CODE (type) != METHOD_TYPE)
8116                 error ("invalid qualifiers on non-member function type");
8117               else
8118                 ctype = TYPE_METHOD_BASETYPE (type);
8119             }
8120           if (ctype)
8121             type = build_memfn_type (type, ctype, memfn_quals);
8122         }
8123
8124       return type;
8125     }
8126   else if (unqualified_id == NULL_TREE && decl_context != PARM
8127            && decl_context != CATCHPARM
8128            && TREE_CODE (type) != UNION_TYPE
8129            && ! bitfield)
8130     {
8131       error ("abstract declarator %qT used as declaration", type);
8132       return error_mark_node;
8133     }
8134
8135   /* Only functions may be declared using an operator-function-id.  */
8136   if (unqualified_id
8137       && IDENTIFIER_OPNAME_P (unqualified_id)
8138       && TREE_CODE (type) != FUNCTION_TYPE
8139       && TREE_CODE (type) != METHOD_TYPE)
8140     {
8141       error ("declaration of %qD as non-function", unqualified_id);
8142       return error_mark_node;
8143     }
8144
8145   /* We don't check parameter types here because we can emit a better
8146      error message later.  */
8147   if (decl_context != PARM)
8148     {
8149       type = check_var_type (unqualified_id, type);
8150       if (type == error_mark_node)
8151         return error_mark_node;
8152     }
8153
8154   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8155      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
8156
8157   if (decl_context == PARM || decl_context == CATCHPARM)
8158     {
8159       if (ctype || in_namespace)
8160         error ("cannot use %<::%> in parameter declaration");
8161
8162       /* A parameter declared as an array of T is really a pointer to T.
8163          One declared as a function is really a pointer to a function.
8164          One declared as a member is really a pointer to member.  */
8165
8166       if (TREE_CODE (type) == ARRAY_TYPE)
8167         {
8168           /* Transfer const-ness of array into that of type pointed to.  */
8169           type = build_pointer_type (TREE_TYPE (type));
8170           type_quals = TYPE_UNQUALIFIED;
8171         }
8172       else if (TREE_CODE (type) == FUNCTION_TYPE)
8173         type = build_pointer_type (type);
8174     }
8175
8176   {
8177     tree decl;
8178
8179     if (decl_context == PARM)
8180       {
8181         decl = cp_build_parm_decl (unqualified_id, type);
8182
8183         bad_specifiers (decl, "parameter", virtualp,
8184                         memfn_quals != TYPE_UNQUALIFIED,
8185                         inlinep, friendp, raises != NULL_TREE);
8186       }
8187     else if (decl_context == FIELD)
8188       {
8189         /* The C99 flexible array extension.  */
8190         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8191             && TYPE_DOMAIN (type) == NULL_TREE)
8192           {
8193             tree itype = compute_array_index_type (dname, integer_zero_node);
8194             type = build_cplus_array_type (TREE_TYPE (type), itype);
8195           }
8196
8197         if (type == error_mark_node)
8198           {
8199             /* Happens when declaring arrays of sizes which
8200                are error_mark_node, for example.  */
8201             decl = NULL_TREE;
8202           }
8203         else if (in_namespace && !friendp)
8204           {
8205             /* Something like struct S { int N::j; };  */
8206             error ("invalid use of %<::%>");
8207             return error_mark_node;
8208           }
8209         else if (TREE_CODE (type) == FUNCTION_TYPE)
8210           {
8211             int publicp = 0;
8212             tree function_context;
8213
8214             if (friendp == 0)
8215               {
8216                 if (ctype == NULL_TREE)
8217                   ctype = current_class_type;
8218
8219                 if (ctype == NULL_TREE)
8220                   {
8221                     error ("can't make %qD into a method -- not in a class",
8222                            unqualified_id);
8223                     return error_mark_node;
8224                   }
8225
8226                 /* ``A union may [ ... ] not [ have ] virtual functions.''
8227                    ARM 9.5 */
8228                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8229                   {
8230                     error ("function %qD declared virtual inside a union",
8231                            unqualified_id);
8232                     return error_mark_node;
8233                   }
8234
8235                 if (NEW_DELETE_OPNAME_P (unqualified_id))
8236                   {
8237                     if (virtualp)
8238                       {
8239                         error ("%qD cannot be declared virtual, since it "
8240                                "is always static",
8241                                unqualified_id);
8242                         virtualp = 0;
8243                       }
8244                   }
8245                 else if (staticp < 2)
8246                   type = build_memfn_type (type, ctype, memfn_quals);
8247               }
8248
8249             /* Check that the name used for a destructor makes sense.  */
8250             if (sfk == sfk_destructor)
8251               {
8252                 if (!ctype)
8253                   {
8254                     gcc_assert (friendp);
8255                     error ("expected qualified name in friend declaration "
8256                            "for destructor %qD",
8257                            id_declarator->u.id.unqualified_name);
8258                     return error_mark_node;
8259                   }
8260
8261                 if (!same_type_p (TREE_OPERAND
8262                                   (id_declarator->u.id.unqualified_name, 0),
8263                                   ctype))
8264                   {
8265                     error ("declaration of %qD as member of %qT",
8266                            id_declarator->u.id.unqualified_name, ctype);
8267                     return error_mark_node;
8268                   }
8269               }
8270
8271             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
8272             function_context = (ctype != NULL_TREE) ?
8273               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8274             publicp = (! friendp || ! staticp)
8275               && function_context == NULL_TREE;
8276             decl = grokfndecl (ctype, type,
8277                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8278                                ? unqualified_id : dname,
8279                                parms,
8280                                unqualified_id,
8281                                virtualp, flags, memfn_quals, raises,
8282                                friendp ? -1 : 0, friendp, publicp, inlinep,
8283                                sfk,
8284                                funcdef_flag, template_count, in_namespace, attrlist);
8285             if (decl == NULL_TREE)
8286               return error_mark_node;
8287 #if 0
8288             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
8289             /* The decl and setting of decl_attr is also turned off.  */
8290             decl = build_decl_attribute_variant (decl, decl_attr);
8291 #endif
8292
8293             /* [class.conv.ctor]
8294
8295                A constructor declared without the function-specifier
8296                explicit that can be called with a single parameter
8297                specifies a conversion from the type of its first
8298                parameter to the type of its class.  Such a constructor
8299                is called a converting constructor.  */
8300             if (explicitp == 2)
8301               DECL_NONCONVERTING_P (decl) = 1;
8302             else if (DECL_CONSTRUCTOR_P (decl))
8303               {
8304                 /* The constructor can be called with exactly one
8305                    parameter if there is at least one parameter, and
8306                    any subsequent parameters have default arguments.
8307                    Ignore any compiler-added parms.  */
8308                 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8309
8310                 if (arg_types == void_list_node
8311                     || (arg_types
8312                         && TREE_CHAIN (arg_types)
8313                         && TREE_CHAIN (arg_types) != void_list_node
8314                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8315                   DECL_NONCONVERTING_P (decl) = 1;
8316               }
8317           }
8318         else if (TREE_CODE (type) == METHOD_TYPE)
8319           {
8320             /* We only get here for friend declarations of
8321                members of other classes.  */
8322             /* All method decls are public, so tell grokfndecl to set
8323                TREE_PUBLIC, also.  */
8324             decl = grokfndecl (ctype, type,
8325                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8326                                ? unqualified_id : dname,
8327                                parms,
8328                                unqualified_id,
8329                                virtualp, flags, memfn_quals, raises,
8330                                friendp ? -1 : 0, friendp, 1, 0, sfk,
8331                                funcdef_flag, template_count, in_namespace,
8332                                attrlist);
8333             if (decl == NULL_TREE)
8334               return error_mark_node;
8335           }
8336         else if (!staticp && !dependent_type_p (type)
8337                  && !COMPLETE_TYPE_P (complete_type (type))
8338                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8339           {
8340             if (unqualified_id)
8341               error ("field %qD has incomplete type", unqualified_id);
8342             else
8343               error ("name %qT has incomplete type", type);
8344
8345             /* If we're instantiating a template, tell them which
8346                instantiation made the field's type be incomplete.  */
8347             if (current_class_type
8348                 && TYPE_NAME (current_class_type)
8349                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8350                 && declspecs->type
8351                 && declspecs->type == type)
8352               error ("  in instantiation of template %qT",
8353                      current_class_type);
8354
8355             return error_mark_node;
8356           }
8357         else
8358           {
8359             if (friendp)
8360               {
8361                 error ("%qE is neither function nor member function; "
8362                        "cannot be declared friend", unqualified_id);
8363                 friendp = 0;
8364               }
8365             decl = NULL_TREE;
8366           }
8367
8368         if (friendp)
8369           {
8370             /* Friends are treated specially.  */
8371             if (ctype == current_class_type)
8372               ;  /* We already issued a pedwarn.  */
8373             else if (decl && DECL_NAME (decl))
8374               {
8375                 if (template_class_depth (current_class_type) == 0)
8376                   {
8377                     decl = check_explicit_specialization
8378                       (unqualified_id, decl, template_count,
8379                        2 * funcdef_flag + 4);
8380                     if (decl == error_mark_node)
8381                       return error_mark_node;
8382                   }
8383
8384                 decl = do_friend (ctype, unqualified_id, decl,
8385                                   *attrlist, flags,
8386                                   funcdef_flag);
8387                 return decl;
8388               }
8389             else
8390               return error_mark_node;
8391           }
8392
8393         /* Structure field.  It may not be a function, except for C++.  */
8394
8395         if (decl == NULL_TREE)
8396           {
8397             if (initialized)
8398               {
8399                 if (!staticp)
8400                   {
8401                     /* An attempt is being made to initialize a non-static
8402                        member.  But, from [class.mem]:
8403
8404                        4 A member-declarator can contain a
8405                        constant-initializer only if it declares a static
8406                        member (_class.static_) of integral or enumeration
8407                        type, see _class.static.data_.
8408
8409                        This used to be relatively common practice, but
8410                        the rest of the compiler does not correctly
8411                        handle the initialization unless the member is
8412                        static so we make it static below.  */
8413                     pedwarn ("ISO C++ forbids initialization of member %qD",
8414                              unqualified_id);
8415                     pedwarn ("making %qD static", unqualified_id);
8416                     staticp = 1;
8417                   }
8418
8419                 if (uses_template_parms (type))
8420                   /* We'll check at instantiation time.  */
8421                   ;
8422                 else if (check_static_variable_definition (unqualified_id,
8423                                                            type))
8424                   /* If we just return the declaration, crashes
8425                      will sometimes occur.  We therefore return
8426                      void_type_node, as if this was a friend
8427                      declaration, to cause callers to completely
8428                      ignore this declaration.  */
8429                   return error_mark_node;
8430               }
8431
8432             if (staticp)
8433               {
8434                 /* C++ allows static class members.  All other work
8435                    for this is done by grokfield.  */
8436                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8437                 set_linkage_for_static_data_member (decl);
8438                 /* Even if there is an in-class initialization, DECL
8439                    is considered undefined until an out-of-class
8440                    definition is provided.  */
8441                 DECL_EXTERNAL (decl) = 1;
8442
8443                 if (thread_p)
8444                   {
8445                     if (targetm.have_tls)
8446                       DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8447                     else
8448                       /* A mere warning is sure to result in improper
8449                          semantics at runtime.  Don't bother to allow this to
8450                          compile.  */
8451                       error ("thread-local storage not supported for this target");
8452                   }
8453               }
8454             else
8455               {
8456                 decl = build_decl (FIELD_DECL, unqualified_id, type);
8457                 DECL_NONADDRESSABLE_P (decl) = bitfield;
8458                 if (storage_class == sc_mutable)
8459                   {
8460                     DECL_MUTABLE_P (decl) = 1;
8461                     storage_class = sc_none;
8462                   }
8463               }
8464
8465             bad_specifiers (decl, "field", virtualp,
8466                             memfn_quals != TYPE_UNQUALIFIED,
8467                             inlinep, friendp, raises != NULL_TREE);
8468           }
8469       }
8470     else if (TREE_CODE (type) == FUNCTION_TYPE
8471              || TREE_CODE (type) == METHOD_TYPE)
8472       {
8473         tree original_name;
8474         int publicp = 0;
8475
8476         if (!unqualified_id)
8477           return error_mark_node;
8478
8479         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8480           original_name = dname;
8481         else
8482           original_name = unqualified_id;
8483
8484         if (storage_class == sc_auto)
8485           error ("storage class %<auto%> invalid for function %qs", name);
8486         else if (storage_class == sc_register)
8487           error ("storage class %<register%> invalid for function %qs", name);
8488         else if (thread_p)
8489           error ("storage class %<__thread%> invalid for function %qs", name);
8490
8491         /* Function declaration not at top level.
8492            Storage classes other than `extern' are not allowed
8493            and `extern' makes no difference.  */
8494         if (! toplevel_bindings_p ()
8495             && (storage_class == sc_static
8496                 || declspecs->specs[(int)ds_inline])
8497             && pedantic)
8498           {
8499             if (storage_class == sc_static)
8500               pedwarn ("%<static%> specified invalid for function %qs "
8501                        "declared out of global scope", name);
8502             else
8503               pedwarn ("%<inline%> specifier invalid for function %qs "
8504                        "declared out of global scope", name);
8505           }
8506
8507         if (ctype == NULL_TREE)
8508           {
8509             if (virtualp)
8510               {
8511                 error ("virtual non-class function %qs", name);
8512                 virtualp = 0;
8513               }
8514           }
8515         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8516                  && !NEW_DELETE_OPNAME_P (original_name))
8517           type = build_method_type_directly (ctype,
8518                                              TREE_TYPE (type),
8519                                              TYPE_ARG_TYPES (type));
8520
8521         /* Record presence of `static'.  */
8522         publicp = (ctype != NULL_TREE
8523                    || storage_class == sc_extern
8524                    || storage_class != sc_static);
8525
8526         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8527                            virtualp, flags, memfn_quals, raises,
8528                            1, friendp,
8529                            publicp, inlinep, sfk, funcdef_flag,
8530                            template_count, in_namespace, attrlist);
8531         if (decl == NULL_TREE)
8532           return error_mark_node;
8533
8534         if (staticp == 1)
8535           {
8536             int invalid_static = 0;
8537
8538             /* Don't allow a static member function in a class, and forbid
8539                declaring main to be static.  */
8540             if (TREE_CODE (type) == METHOD_TYPE)
8541               {
8542                 pedwarn ("cannot declare member function %qD to have "
8543                          "static linkage", decl);
8544                 invalid_static = 1;
8545               }
8546             else if (current_function_decl)
8547               {
8548                 /* FIXME need arm citation */
8549                 error ("cannot declare static function inside another function");
8550                 invalid_static = 1;
8551               }
8552
8553             if (invalid_static)
8554               {
8555                 staticp = 0;
8556                 storage_class = sc_none;
8557               }
8558           }
8559       }
8560     else
8561       {
8562         /* It's a variable.  */
8563
8564         /* An uninitialized decl with `extern' is a reference.  */
8565         decl = grokvardecl (type, unqualified_id,
8566                             declspecs,
8567                             initialized,
8568                             (type_quals & TYPE_QUAL_CONST) != 0,
8569                             ctype ? ctype : in_namespace);
8570         bad_specifiers (decl, "variable", virtualp,
8571                         memfn_quals != TYPE_UNQUALIFIED,
8572                         inlinep, friendp, raises != NULL_TREE);
8573
8574         if (ctype)
8575           {
8576             DECL_CONTEXT (decl) = ctype;
8577             if (staticp == 1)
8578               {
8579                 pedwarn ("%<static%> may not be used when defining "
8580                          "(as opposed to declaring) a static data member");
8581                 staticp = 0;
8582                 storage_class = sc_none;
8583               }
8584             if (storage_class == sc_register && TREE_STATIC (decl))
8585               {
8586                 error ("static member %qD declared %<register%>", decl);
8587                 storage_class = sc_none;
8588               }
8589             if (storage_class == sc_extern && pedantic)
8590               {
8591                 pedwarn ("cannot explicitly declare member %q#D to have "
8592                          "extern linkage",
8593                          decl);
8594                 storage_class = sc_none;
8595               }
8596           }
8597       }
8598
8599     /* Record `register' declaration for warnings on &
8600        and in case doing stupid register allocation.  */
8601
8602     if (storage_class == sc_register)
8603       DECL_REGISTER (decl) = 1;
8604     else if (storage_class == sc_extern)
8605       DECL_THIS_EXTERN (decl) = 1;
8606     else if (storage_class == sc_static)
8607       DECL_THIS_STATIC (decl) = 1;
8608
8609     /* Record constancy and volatility.  There's no need to do this
8610        when processing a template; we'll do this for the instantiated
8611        declaration based on the type of DECL.  */
8612     if (!processing_template_decl)
8613       cp_apply_type_quals_to_decl (type_quals, decl);
8614
8615     return decl;
8616   }
8617 }
8618 \f
8619 /* Subroutine of start_function.  Ensure that each of the parameter
8620    types (as listed in PARMS) is complete, as is required for a
8621    function definition.  */
8622
8623 static void
8624 require_complete_types_for_parms (tree parms)
8625 {
8626   for (; parms; parms = TREE_CHAIN (parms))
8627     {
8628       if (dependent_type_p (TREE_TYPE (parms)))
8629         continue;
8630       if (!VOID_TYPE_P (TREE_TYPE (parms))
8631           && complete_type_or_else (TREE_TYPE (parms), parms))
8632         {
8633           relayout_decl (parms);
8634           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8635         }
8636       else
8637         /* grokparms or complete_type_or_else will have already issued
8638            an error.  */
8639         TREE_TYPE (parms) = error_mark_node;
8640     }
8641 }
8642
8643 /* Returns nonzero if T is a local variable.  */
8644
8645 int
8646 local_variable_p (tree t)
8647 {
8648   if ((TREE_CODE (t) == VAR_DECL
8649        /* A VAR_DECL with a context that is a _TYPE is a static data
8650           member.  */
8651        && !TYPE_P (CP_DECL_CONTEXT (t))
8652        /* Any other non-local variable must be at namespace scope.  */
8653        && !DECL_NAMESPACE_SCOPE_P (t))
8654       || (TREE_CODE (t) == PARM_DECL))
8655     return 1;
8656
8657   return 0;
8658 }
8659
8660 /* Returns nonzero if T is an automatic local variable or a label.
8661    (These are the declarations that need to be remapped when the code
8662    containing them is duplicated.)  */
8663
8664 int
8665 nonstatic_local_decl_p (tree t)
8666 {
8667   return ((local_variable_p (t) && !TREE_STATIC (t))
8668           || TREE_CODE (t) == LABEL_DECL
8669           || TREE_CODE (t) == RESULT_DECL);
8670 }
8671
8672 /* Like local_variable_p, but suitable for use as a tree-walking
8673    function.  */
8674
8675 static tree
8676 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8677                          void *data ATTRIBUTE_UNUSED)
8678 {
8679   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8680     return *tp;
8681   else if (TYPE_P (*tp))
8682     *walk_subtrees = 0;
8683
8684   return NULL_TREE;
8685 }
8686
8687
8688 /* Check that ARG, which is a default-argument expression for a
8689    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
8690    something goes wrong.  DECL may also be a _TYPE node, rather than a
8691    DECL, if there is no DECL available.  */
8692
8693 tree
8694 check_default_argument (tree decl, tree arg)
8695 {
8696   tree var;
8697   tree decl_type;
8698
8699   if (TREE_CODE (arg) == DEFAULT_ARG)
8700     /* We get a DEFAULT_ARG when looking at an in-class declaration
8701        with a default argument.  Ignore the argument for now; we'll
8702        deal with it after the class is complete.  */
8703     return arg;
8704
8705   if (TYPE_P (decl))
8706     {
8707       decl_type = decl;
8708       decl = NULL_TREE;
8709     }
8710   else
8711     decl_type = TREE_TYPE (decl);
8712
8713   if (arg == error_mark_node
8714       || decl == error_mark_node
8715       || TREE_TYPE (arg) == error_mark_node
8716       || decl_type == error_mark_node)
8717     /* Something already went wrong.  There's no need to check
8718        further.  */
8719     return error_mark_node;
8720
8721   /* [dcl.fct.default]
8722
8723      A default argument expression is implicitly converted to the
8724      parameter type.  */
8725   if (!TREE_TYPE (arg)
8726       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8727     {
8728       if (decl)
8729         error ("default argument for %q#D has type %qT",
8730                decl, TREE_TYPE (arg));
8731       else
8732         error ("default argument for parameter of type %qT has type %qT",
8733                decl_type, TREE_TYPE (arg));
8734
8735       return error_mark_node;
8736     }
8737
8738   /* [dcl.fct.default]
8739
8740      Local variables shall not be used in default argument
8741      expressions.
8742
8743      The keyword `this' shall not be used in a default argument of a
8744      member function.  */
8745   var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8746                                       NULL);
8747   if (var)
8748     {
8749       error ("default argument %qE uses local variable %qD", arg, var);
8750       return error_mark_node;
8751     }
8752
8753   /* All is well.  */
8754   return arg;
8755 }
8756
8757 /* Decode the list of parameter types for a function type.
8758    Given the list of things declared inside the parens,
8759    return a list of types.
8760
8761    If this parameter does not end with an ellipsis, we append
8762    void_list_node.
8763
8764    *PARMS is set to the chain of PARM_DECLs created.  */
8765
8766 static tree
8767 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8768 {
8769   tree result = NULL_TREE;
8770   tree decls = NULL_TREE;
8771   int ellipsis = !first_parm || first_parm->ellipsis_p;
8772   cp_parameter_declarator *parm;
8773   int any_error = 0;
8774
8775   for (parm = first_parm; parm != NULL; parm = parm->next)
8776     {
8777       tree type = NULL_TREE;
8778       tree init = parm->default_argument;
8779       tree attrs;
8780       tree decl;
8781
8782       if (parm == no_parameters)
8783         break;
8784
8785       attrs = parm->decl_specifiers.attributes;
8786       parm->decl_specifiers.attributes = NULL_TREE;
8787       decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8788                              PARM, init != NULL_TREE, &attrs);
8789       if (! decl || TREE_TYPE (decl) == error_mark_node)
8790         continue;
8791
8792       if (attrs)
8793         cplus_decl_attributes (&decl, attrs, 0);
8794
8795       type = TREE_TYPE (decl);
8796       if (VOID_TYPE_P (type))
8797         {
8798           if (same_type_p (type, void_type_node)
8799               && DECL_SELF_REFERENCE_P (type)
8800               && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8801             /* this is a parmlist of `(void)', which is ok.  */
8802             break;
8803           cxx_incomplete_type_error (decl, type);
8804           /* It's not a good idea to actually create parameters of
8805              type `void'; other parts of the compiler assume that a
8806              void type terminates the parameter list.  */
8807           type = error_mark_node;
8808           TREE_TYPE (decl) = error_mark_node;
8809         }
8810
8811       if (type != error_mark_node)
8812         {
8813           /* Top-level qualifiers on the parameters are
8814              ignored for function types.  */
8815           type = cp_build_qualified_type (type, 0);
8816           if (TREE_CODE (type) == METHOD_TYPE)
8817             {
8818               error ("parameter %qD invalidly declared method type", decl);
8819               type = build_pointer_type (type);
8820               TREE_TYPE (decl) = type;
8821             }
8822           else if (abstract_virtuals_error (decl, type))
8823             any_error = 1;  /* Seems like a good idea.  */
8824           else if (POINTER_TYPE_P (type))
8825             {
8826               /* [dcl.fct]/6, parameter types cannot contain pointers
8827                  (references) to arrays of unknown bound.  */
8828               tree t = TREE_TYPE (type);
8829               int ptr = TYPE_PTR_P (type);
8830
8831               while (1)
8832                 {
8833                   if (TYPE_PTR_P (t))
8834                     ptr = 1;
8835                   else if (TREE_CODE (t) != ARRAY_TYPE)
8836                     break;
8837                   else if (!TYPE_DOMAIN (t))
8838                     break;
8839                   t = TREE_TYPE (t);
8840                 }
8841               if (TREE_CODE (t) == ARRAY_TYPE)
8842                 error ("parameter %qD includes %s to array of unknown "
8843                        "bound %qT",
8844                        decl, ptr ? "pointer" : "reference", t);
8845             }
8846
8847           if (any_error)
8848             init = NULL_TREE;
8849           else if (init && !processing_template_decl)
8850             init = check_default_argument (decl, init);
8851         }
8852
8853       TREE_CHAIN (decl) = decls;
8854       decls = decl;
8855       result = tree_cons (init, type, result);
8856     }
8857   decls = nreverse (decls);
8858   result = nreverse (result);
8859   if (!ellipsis)
8860     result = chainon (result, void_list_node);
8861   *parms = decls;
8862
8863   return result;
8864 }
8865
8866 \f
8867 /* D is a constructor or overloaded `operator='.
8868
8869    Let T be the class in which D is declared. Then, this function
8870    returns:
8871
8872    -1 if D's is an ill-formed constructor or copy assignment operator
8873       whose first parameter is of type `T'.
8874    0  if D is not a copy constructor or copy assignment
8875       operator.
8876    1  if D is a copy constructor or copy assignment operator whose
8877       first parameter is a reference to const qualified T.
8878    2  if D is a copy constructor or copy assignment operator whose
8879       first parameter is a reference to non-const qualified T.
8880
8881    This function can be used as a predicate. Positive values indicate
8882    a copy constructor and nonzero values indicate a copy assignment
8883    operator.  */
8884
8885 int
8886 copy_fn_p (tree d)
8887 {
8888   tree args;
8889   tree arg_type;
8890   int result = 1;
8891
8892   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8893
8894   if (TREE_CODE (d) == TEMPLATE_DECL
8895       || (DECL_TEMPLATE_INFO (d)
8896           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
8897     /* Instantiations of template member functions are never copy
8898        functions.  Note that member functions of templated classes are
8899        represented as template functions internally, and we must
8900        accept those as copy functions.  */
8901     return 0;
8902
8903   args = FUNCTION_FIRST_USER_PARMTYPE (d);
8904   if (!args)
8905     return 0;
8906
8907   arg_type = TREE_VALUE (args);
8908   if (arg_type == error_mark_node)
8909     return 0;
8910
8911   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
8912     {
8913       /* Pass by value copy assignment operator.  */
8914       result = -1;
8915     }
8916   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
8917            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
8918     {
8919       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
8920         result = 2;
8921     }
8922   else
8923     return 0;
8924
8925   args = TREE_CHAIN (args);
8926
8927   if (args && args != void_list_node && !TREE_PURPOSE (args))
8928     /* There are more non-optional args.  */
8929     return 0;
8930
8931   return result;
8932 }
8933
8934 /* Remember any special properties of member function DECL.  */
8935
8936 void grok_special_member_properties (tree decl)
8937 {
8938   tree class_type;
8939
8940   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
8941     return;
8942
8943   class_type = DECL_CONTEXT (decl);
8944   if (DECL_CONSTRUCTOR_P (decl))
8945     {
8946       int ctor = copy_fn_p (decl);
8947
8948       TYPE_HAS_CONSTRUCTOR (class_type) = 1;
8949
8950       if (ctor > 0)
8951         {
8952           /* [class.copy]
8953
8954              A non-template constructor for class X is a copy
8955              constructor if its first parameter is of type X&, const
8956              X&, volatile X& or const volatile X&, and either there
8957              are no other parameters or else all other parameters have
8958              default arguments.  */
8959           TYPE_HAS_INIT_REF (class_type) = 1;
8960           if (ctor > 1)
8961             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
8962         }
8963       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
8964         TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
8965     }
8966   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
8967     {
8968       /* [class.copy]
8969
8970          A non-template assignment operator for class X is a copy
8971          assignment operator if its parameter is of type X, X&, const
8972          X&, volatile X& or const volatile X&.  */
8973
8974       int assop = copy_fn_p (decl);
8975
8976       if (assop)
8977         {
8978           TYPE_HAS_ASSIGN_REF (class_type) = 1;
8979           if (assop != 1)
8980             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
8981         }
8982     }
8983 }
8984
8985 /* Check a constructor DECL has the correct form.  Complains
8986    if the class has a constructor of the form X(X).  */
8987
8988 int
8989 grok_ctor_properties (tree ctype, tree decl)
8990 {
8991   int ctor_parm = copy_fn_p (decl);
8992
8993   if (ctor_parm < 0)
8994     {
8995       /* [class.copy]
8996
8997          A declaration of a constructor for a class X is ill-formed if
8998          its first parameter is of type (optionally cv-qualified) X
8999          and either there are no other parameters or else all other
9000          parameters have default arguments.
9001
9002          We *don't* complain about member template instantiations that
9003          have this form, though; they can occur as we try to decide
9004          what constructor to use during overload resolution.  Since
9005          overload resolution will never prefer such a constructor to
9006          the non-template copy constructor (which is either explicitly
9007          or implicitly defined), there's no need to worry about their
9008          existence.  Theoretically, they should never even be
9009          instantiated, but that's hard to forestall.  */
9010       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
9011                 ctype, ctype);
9012       return 0;
9013     }
9014
9015   return 1;
9016 }
9017
9018 /* An operator with this code is unary, but can also be binary.  */
9019
9020 static int
9021 ambi_op_p (enum tree_code code)
9022 {
9023   return (code == INDIRECT_REF
9024           || code == ADDR_EXPR
9025           || code == UNARY_PLUS_EXPR
9026           || code == NEGATE_EXPR
9027           || code == PREINCREMENT_EXPR
9028           || code == PREDECREMENT_EXPR);
9029 }
9030
9031 /* An operator with this name can only be unary.  */
9032
9033 static int
9034 unary_op_p (enum tree_code code)
9035 {
9036   return (code == TRUTH_NOT_EXPR
9037           || code == BIT_NOT_EXPR
9038           || code == COMPONENT_REF
9039           || code == TYPE_EXPR);
9040 }
9041
9042 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
9043    errors are issued for invalid declarations.  */
9044
9045 bool
9046 grok_op_properties (tree decl, bool complain)
9047 {
9048   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
9049   tree argtype;
9050   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9051   tree name = DECL_NAME (decl);
9052   enum tree_code operator_code;
9053   int arity;
9054   bool ellipsis_p;
9055   tree class_type;
9056
9057   /* Count the number of arguments and check for ellipsis.  */
9058   for (argtype = argtypes, arity = 0;
9059        argtype && argtype != void_list_node;
9060        argtype = TREE_CHAIN (argtype))
9061     ++arity;
9062   ellipsis_p = !argtype;
9063
9064   class_type = DECL_CONTEXT (decl);
9065   if (class_type && !CLASS_TYPE_P (class_type))
9066     class_type = NULL_TREE;
9067
9068   if (DECL_CONV_FN_P (decl))
9069     operator_code = TYPE_EXPR;
9070   else
9071     do
9072       {
9073 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
9074         if (ansi_opname (CODE) == name)                         \
9075           {                                                     \
9076             operator_code = (CODE);                             \
9077             break;                                              \
9078           }                                                     \
9079         else if (ansi_assopname (CODE) == name)                 \
9080           {                                                     \
9081             operator_code = (CODE);                             \
9082             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
9083             break;                                              \
9084           }
9085
9086 #include "operators.def"
9087 #undef DEF_OPERATOR
9088
9089         gcc_unreachable ();
9090       }
9091     while (0);
9092   gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9093   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9094
9095   if (class_type)
9096     switch (operator_code)
9097       {
9098       case NEW_EXPR:
9099         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9100         break;
9101
9102       case DELETE_EXPR:
9103         TYPE_GETS_DELETE (class_type) |= 1;
9104         break;
9105
9106       case VEC_NEW_EXPR:
9107         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9108         break;
9109
9110       case VEC_DELETE_EXPR:
9111         TYPE_GETS_DELETE (class_type) |= 2;
9112         break;
9113
9114       default:
9115         break;
9116       }
9117
9118     /* [basic.std.dynamic.allocation]/1:
9119
9120        A program is ill-formed if an allocation function is declared
9121        in a namespace scope other than global scope or declared static
9122        in global scope.
9123
9124        The same also holds true for deallocation functions.  */
9125   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9126       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9127     {
9128       if (DECL_NAMESPACE_SCOPE_P (decl))
9129         {
9130           if (CP_DECL_CONTEXT (decl) != global_namespace)
9131             {
9132               error ("%qD may not be declared within a namespace", decl);
9133               return false;
9134             }
9135           else if (!TREE_PUBLIC (decl))
9136             {
9137               error ("%qD may not be declared as static", decl);
9138               return false;
9139             }
9140         }
9141     }
9142
9143   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9144     TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9145   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9146     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9147   else
9148     {
9149       /* An operator function must either be a non-static member function
9150          or have at least one parameter of a class, a reference to a class,
9151          an enumeration, or a reference to an enumeration.  13.4.0.6 */
9152       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9153         {
9154           if (operator_code == TYPE_EXPR
9155               || operator_code == CALL_EXPR
9156               || operator_code == COMPONENT_REF
9157               || operator_code == ARRAY_REF
9158               || operator_code == NOP_EXPR)
9159             {
9160               error ("%qD must be a nonstatic member function", decl);
9161               return false;
9162             }
9163           else
9164             {
9165               tree p;
9166
9167               if (DECL_STATIC_FUNCTION_P (decl))
9168                 {
9169                   error ("%qD must be either a non-static member "
9170                          "function or a non-member function", decl);
9171                   return false;
9172                 }
9173
9174               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9175                 {
9176                   tree arg = non_reference (TREE_VALUE (p));
9177                   if (arg == error_mark_node)
9178                     return false;
9179
9180                   /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9181                      because these checks are performed even on
9182                      template functions.  */
9183                   if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9184                     break;
9185                 }
9186
9187               if (!p || p == void_list_node)
9188                 {
9189                   if (complain)
9190                     error ("%qD must have an argument of class or "
9191                            "enumerated type", decl);
9192                   return false;
9193                 }
9194             }
9195         }
9196
9197       /* There are no restrictions on the arguments to an overloaded
9198          "operator ()".  */
9199       if (operator_code == CALL_EXPR)
9200         return true;
9201
9202       /* Warn about conversion operators that will never be used.  */
9203       if (IDENTIFIER_TYPENAME_P (name)
9204           && ! DECL_TEMPLATE_INFO (decl)
9205           && warn_conversion
9206           /* Warn only declaring the function; there is no need to
9207              warn again about out-of-class definitions.  */
9208           && class_type == current_class_type)
9209         {
9210           tree t = TREE_TYPE (name);
9211           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9212           const char *what = 0;
9213
9214           if (ref)
9215             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9216
9217           if (TREE_CODE (t) == VOID_TYPE)
9218             what = "void";
9219           else if (class_type)
9220             {
9221               if (t == class_type)
9222                 what = "the same type";
9223               /* Don't force t to be complete here.  */
9224               else if (IS_AGGR_TYPE (t)
9225                        && COMPLETE_TYPE_P (t)
9226                        && DERIVED_FROM_P (t, class_type))
9227                 what = "a base class";
9228             }
9229
9230           if (what)
9231             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9232                      "conversion operator",
9233                      ref ? "a reference to " : "", what);
9234         }
9235
9236       if (operator_code == COND_EXPR)
9237         {
9238           /* 13.4.0.3 */
9239           error ("ISO C++ prohibits overloading operator ?:");
9240           return false;
9241         }
9242       else if (ellipsis_p)
9243         {
9244           error ("%qD must not have variable number of arguments", decl);
9245           return false;
9246         }
9247       else if (ambi_op_p (operator_code))
9248         {
9249           if (arity == 1)
9250             /* We pick the one-argument operator codes by default, so
9251                we don't have to change anything.  */
9252             ;
9253           else if (arity == 2)
9254             {
9255               /* If we thought this was a unary operator, we now know
9256                  it to be a binary operator.  */
9257               switch (operator_code)
9258                 {
9259                 case INDIRECT_REF:
9260                   operator_code = MULT_EXPR;
9261                   break;
9262
9263                 case ADDR_EXPR:
9264                   operator_code = BIT_AND_EXPR;
9265                   break;
9266
9267                 case UNARY_PLUS_EXPR:
9268                   operator_code = PLUS_EXPR;
9269                   break;
9270
9271                 case NEGATE_EXPR:
9272                   operator_code = MINUS_EXPR;
9273                   break;
9274
9275                 case PREINCREMENT_EXPR:
9276                   operator_code = POSTINCREMENT_EXPR;
9277                   break;
9278
9279                 case PREDECREMENT_EXPR:
9280                   operator_code = POSTDECREMENT_EXPR;
9281                   break;
9282
9283                 default:
9284                   gcc_unreachable ();
9285                 }
9286
9287               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9288
9289               if ((operator_code == POSTINCREMENT_EXPR
9290                    || operator_code == POSTDECREMENT_EXPR)
9291                   && ! processing_template_decl
9292                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9293                 {
9294                   if (methodp)
9295                     error ("postfix %qD must take %<int%> as its argument",
9296                            decl);
9297                   else
9298                     error ("postfix %qD must take %<int%> as its second "
9299                            "argument", decl);
9300                   return false;
9301                 }
9302             }
9303           else
9304             {
9305               if (methodp)
9306                 error ("%qD must take either zero or one argument", decl);
9307               else
9308                 error ("%qD must take either one or two arguments", decl);
9309               return false;
9310             }
9311
9312           /* More Effective C++ rule 6.  */
9313           if (warn_ecpp
9314               && (operator_code == POSTINCREMENT_EXPR
9315                   || operator_code == POSTDECREMENT_EXPR
9316                   || operator_code == PREINCREMENT_EXPR
9317                   || operator_code == PREDECREMENT_EXPR))
9318             {
9319               tree arg = TREE_VALUE (argtypes);
9320               tree ret = TREE_TYPE (TREE_TYPE (decl));
9321               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9322                 arg = TREE_TYPE (arg);
9323               arg = TYPE_MAIN_VARIANT (arg);
9324               if (operator_code == PREINCREMENT_EXPR
9325                   || operator_code == PREDECREMENT_EXPR)
9326                 {
9327                   if (TREE_CODE (ret) != REFERENCE_TYPE
9328                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9329                                        arg))
9330                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9331                              build_reference_type (arg));
9332                 }
9333               else
9334                 {
9335                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9336                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
9337                 }
9338             }
9339         }
9340       else if (unary_op_p (operator_code))
9341         {
9342           if (arity != 1)
9343             {
9344               if (methodp)
9345                 error ("%qD must take %<void%>", decl);
9346               else
9347                 error ("%qD must take exactly one argument", decl);
9348               return false;
9349             }
9350         }
9351       else /* if (binary_op_p (operator_code)) */
9352         {
9353           if (arity != 2)
9354             {
9355               if (methodp)
9356                 error ("%qD must take exactly one argument", decl);
9357               else
9358                 error ("%qD must take exactly two arguments", decl);
9359               return false;
9360             }
9361
9362           /* More Effective C++ rule 7.  */
9363           if (warn_ecpp
9364               && (operator_code == TRUTH_ANDIF_EXPR
9365                   || operator_code == TRUTH_ORIF_EXPR
9366                   || operator_code == COMPOUND_EXPR))
9367             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
9368                      decl);
9369         }
9370
9371       /* Effective C++ rule 23.  */
9372       if (warn_ecpp
9373           && arity == 2
9374           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9375           && (operator_code == PLUS_EXPR
9376               || operator_code == MINUS_EXPR
9377               || operator_code == TRUNC_DIV_EXPR
9378               || operator_code == MULT_EXPR
9379               || operator_code == TRUNC_MOD_EXPR)
9380           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9381         warning (OPT_Weffc__, "%qD should return by value", decl);
9382
9383       /* [over.oper]/8 */
9384       for (; argtypes && argtypes != void_list_node;
9385           argtypes = TREE_CHAIN (argtypes))
9386         if (TREE_PURPOSE (argtypes))
9387           {
9388             TREE_PURPOSE (argtypes) = NULL_TREE;
9389             if (operator_code == POSTINCREMENT_EXPR
9390                 || operator_code == POSTDECREMENT_EXPR)
9391               {
9392                 if (pedantic)
9393                   pedwarn ("%qD cannot have default arguments", decl);
9394               }
9395             else
9396               {
9397                 error ("%qD cannot have default arguments", decl);
9398                 return false;
9399               }
9400           }
9401     }
9402   return true;
9403 }
9404 \f
9405 /* Return a string giving the keyword associate with CODE.  */
9406
9407 static const char *
9408 tag_name (enum tag_types code)
9409 {
9410   switch (code)
9411     {
9412     case record_type:
9413       return "struct";
9414     case class_type:
9415       return "class";
9416     case union_type:
9417       return "union";
9418     case enum_type:
9419       return "enum";
9420     case typename_type:
9421       return "typename";
9422     default:
9423       gcc_unreachable ();
9424     }
9425 }
9426
9427 /* Name lookup in an elaborated-type-specifier (after the keyword
9428    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
9429    elaborated-type-specifier is invalid, issue a diagnostic and return
9430    error_mark_node; otherwise, return the *_TYPE to which it referred.
9431    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
9432
9433 tree
9434 check_elaborated_type_specifier (enum tag_types tag_code,
9435                                  tree decl,
9436                                  bool allow_template_p)
9437 {
9438   tree type;
9439
9440   /* In the case of:
9441
9442        struct S { struct S *p; };
9443
9444      name lookup will find the TYPE_DECL for the implicit "S::S"
9445      typedef.  Adjust for that here.  */
9446   if (DECL_SELF_REFERENCE_P (decl))
9447     decl = TYPE_NAME (TREE_TYPE (decl));
9448
9449   type = TREE_TYPE (decl);
9450
9451   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9452      is false for this case as well.  */
9453   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9454     {
9455       error ("using template type parameter %qT after %qs",
9456              type, tag_name (tag_code));
9457       return error_mark_node;
9458     }
9459   /*   [dcl.type.elab]
9460
9461        If the identifier resolves to a typedef-name or a template
9462        type-parameter, the elaborated-type-specifier is ill-formed.
9463
9464      In other words, the only legitimate declaration to use in the
9465      elaborated type specifier is the implicit typedef created when
9466      the type is declared.  */
9467   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9468            && tag_code != typename_type)
9469     {
9470       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9471       error ("%q+D has a previous declaration here", decl);
9472       return error_mark_node;
9473     }
9474   else if (TREE_CODE (type) != RECORD_TYPE
9475            && TREE_CODE (type) != UNION_TYPE
9476            && tag_code != enum_type
9477            && tag_code != typename_type)
9478     {
9479       error ("%qT referred to as %qs", type, tag_name (tag_code));
9480       error ("%q+T has a previous declaration here", type);
9481       return error_mark_node;
9482     }
9483   else if (TREE_CODE (type) != ENUMERAL_TYPE
9484            && tag_code == enum_type)
9485     {
9486       error ("%qT referred to as enum", type);
9487       error ("%q+T has a previous declaration here", type);
9488       return error_mark_node;
9489     }
9490   else if (!allow_template_p
9491            && TREE_CODE (type) == RECORD_TYPE
9492            && CLASSTYPE_IS_TEMPLATE (type))
9493     {
9494       /* If a class template appears as elaborated type specifier
9495          without a template header such as:
9496
9497            template <class T> class C {};
9498            void f(class C);             // No template header here
9499
9500          then the required template argument is missing.  */
9501       error ("template argument required for %<%s %T%>",
9502              tag_name (tag_code),
9503              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9504       return error_mark_node;
9505     }
9506
9507   return type;
9508 }
9509
9510 /* Lookup NAME in elaborate type specifier in scope according to
9511    SCOPE and issue diagnostics if necessary.
9512    Return *_TYPE node upon success, NULL_TREE when the NAME is not
9513    found, and ERROR_MARK_NODE for type error.  */
9514
9515 static tree
9516 lookup_and_check_tag (enum tag_types tag_code, tree name,
9517                       tag_scope scope, bool template_header_p)
9518 {
9519   tree t;
9520   tree decl;
9521   if (scope == ts_global)
9522     {
9523       /* First try ordinary name lookup, ignoring hidden class name
9524          injected via friend declaration.  */
9525       decl = lookup_name_prefer_type (name, 2);
9526       /* If that fails, the name will be placed in the smallest
9527          non-class, non-function-prototype scope according to 3.3.1/5.
9528          We may already have a hidden name declared as friend in this
9529          scope.  So lookup again but not ignoring hidden names.
9530          If we find one, that name will be made visible rather than
9531          creating a new tag.  */
9532       if (!decl)
9533         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9534     }
9535   else
9536     decl = lookup_type_scope (name, scope);
9537
9538   if (decl && DECL_CLASS_TEMPLATE_P (decl))
9539     decl = DECL_TEMPLATE_RESULT (decl);
9540
9541   if (decl && TREE_CODE (decl) == TYPE_DECL)
9542     {
9543       /* Look for invalid nested type:
9544            class C {
9545              class C {};
9546            };  */
9547       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9548         {
9549           error ("%qD has the same name as the class in which it is "
9550                  "declared",
9551                  decl);
9552           return error_mark_node;
9553         }
9554
9555       /* Two cases we need to consider when deciding if a class
9556          template is allowed as an elaborated type specifier:
9557          1. It is a self reference to its own class.
9558          2. It comes with a template header.
9559
9560          For example:
9561
9562            template <class T> class C {
9563              class C *c1;               // DECL_SELF_REFERENCE_P is true
9564              class D;
9565            };
9566            template <class U> class C; // template_header_p is true
9567            template <class T> class C<T>::D {
9568              class C *c2;               // DECL_SELF_REFERENCE_P is true
9569            };  */
9570
9571       t = check_elaborated_type_specifier (tag_code,
9572                                            decl,
9573                                            template_header_p
9574                                            | DECL_SELF_REFERENCE_P (decl));
9575       return t;
9576     }
9577   else
9578     return NULL_TREE;
9579 }
9580
9581 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9582    Define the tag as a forward-reference if it is not defined.
9583
9584    If a declaration is given, process it here, and report an error if
9585    multiple declarations are not identical.
9586
9587    SCOPE is TS_CURRENT when this is also a definition.  Only look in
9588    the current frame for the name (since C++ allows new names in any
9589    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9590    declaration.  Only look beginning from the current scope outward up
9591    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
9592
9593    TEMPLATE_HEADER_P is true when this declaration is preceded by
9594    a set of template parameters.  */
9595
9596 tree
9597 xref_tag (enum tag_types tag_code, tree name,
9598           tag_scope scope, bool template_header_p)
9599 {
9600   enum tree_code code;
9601   tree t;
9602   tree context = NULL_TREE;
9603
9604   timevar_push (TV_NAME_LOOKUP);
9605
9606   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9607
9608   switch (tag_code)
9609     {
9610     case record_type:
9611     case class_type:
9612       code = RECORD_TYPE;
9613       break;
9614     case union_type:
9615       code = UNION_TYPE;
9616       break;
9617     case enum_type:
9618       code = ENUMERAL_TYPE;
9619       break;
9620     default:
9621       gcc_unreachable ();
9622     }
9623
9624   /* In case of anonymous name, xref_tag is only called to
9625      make type node and push name.  Name lookup is not required.  */
9626   if (ANON_AGGRNAME_P (name))
9627     t = NULL_TREE;
9628   else
9629     t = lookup_and_check_tag  (tag_code, name,
9630                                scope, template_header_p);
9631
9632   if (t == error_mark_node)
9633     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9634
9635   if (scope != ts_current && t && current_class_type
9636       && template_class_depth (current_class_type)
9637       && template_header_p)
9638     {
9639       /* Since SCOPE is not TS_CURRENT, we are not looking at a
9640          definition of this tag.  Since, in addition, we are currently
9641          processing a (member) template declaration of a template
9642          class, we must be very careful; consider:
9643
9644            template <class X>
9645            struct S1
9646
9647            template <class U>
9648            struct S2
9649            { template <class V>
9650            friend struct S1; };
9651
9652          Here, the S2::S1 declaration should not be confused with the
9653          outer declaration.  In particular, the inner version should
9654          have a template parameter of level 2, not level 1.  This
9655          would be particularly important if the member declaration
9656          were instead:
9657
9658            template <class V = U> friend struct S1;
9659
9660          say, when we should tsubst into `U' when instantiating
9661          S2.  On the other hand, when presented with:
9662
9663            template <class T>
9664            struct S1 {
9665              template <class U>
9666              struct S2 {};
9667              template <class U>
9668              friend struct S2;
9669            };
9670
9671          we must find the inner binding eventually.  We
9672          accomplish this by making sure that the new type we
9673          create to represent this declaration has the right
9674          TYPE_CONTEXT.  */
9675       context = TYPE_CONTEXT (t);
9676       t = NULL_TREE;
9677     }
9678
9679   if (! t)
9680     {
9681       /* If no such tag is yet defined, create a forward-reference node
9682          and record it as the "definition".
9683          When a real declaration of this type is found,
9684          the forward-reference will be altered into a real type.  */
9685       if (code == ENUMERAL_TYPE)
9686         {
9687           error ("use of enum %q#D without previous declaration", name);
9688           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9689         }
9690       else
9691         {
9692           t = make_aggr_type (code);
9693           TYPE_CONTEXT (t) = context;
9694           t = pushtag (name, t, scope);
9695         }
9696     }
9697   else
9698     {
9699       if (template_header_p && IS_AGGR_TYPE (t))
9700         {
9701           if (!redeclare_class_template (t, current_template_parms))
9702             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9703         }
9704       else if (!processing_template_decl
9705                && CLASS_TYPE_P (t)
9706                && CLASSTYPE_IS_TEMPLATE (t))
9707         {
9708           error ("redeclaration of %qT as a non-template", t);
9709           error ("previous declaration %q+D", t);
9710           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9711         }
9712
9713       /* Make injected friend class visible.  */
9714       if (scope != ts_within_enclosing_non_class
9715           && hidden_name_p (TYPE_NAME (t)))
9716         {
9717           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9718           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9719
9720           if (TYPE_TEMPLATE_INFO (t))
9721             {
9722               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9723               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9724             }
9725         }
9726     }
9727
9728   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9729 }
9730
9731 tree
9732 xref_tag_from_type (tree old, tree id, tag_scope scope)
9733 {
9734   enum tag_types tag_kind;
9735
9736   if (TREE_CODE (old) == RECORD_TYPE)
9737     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9738   else
9739     tag_kind  = union_type;
9740
9741   if (id == NULL_TREE)
9742     id = TYPE_IDENTIFIER (old);
9743
9744   return xref_tag (tag_kind, id, scope, false);
9745 }
9746
9747 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9748    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
9749    access_* node, and the TREE_VALUE is the type of the base-class.
9750    Non-NULL TREE_TYPE indicates virtual inheritance.  
9751  
9752    Returns true if the binfo hierarchy was successfully created,
9753    false if an error was detected. */
9754
9755 bool
9756 xref_basetypes (tree ref, tree base_list)
9757 {
9758   tree *basep;
9759   tree binfo, base_binfo;
9760   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
9761   unsigned max_bases = 0;  /* Maximum direct bases.  */
9762   int i;
9763   tree default_access;
9764   tree igo_prev; /* Track Inheritance Graph Order.  */
9765
9766   if (ref == error_mark_node)
9767     return false;
9768
9769   /* The base of a derived class is private by default, all others are
9770      public.  */
9771   default_access = (TREE_CODE (ref) == RECORD_TYPE
9772                     && CLASSTYPE_DECLARED_CLASS (ref)
9773                     ? access_private_node : access_public_node);
9774
9775   /* First, make sure that any templates in base-classes are
9776      instantiated.  This ensures that if we call ourselves recursively
9777      we do not get confused about which classes are marked and which
9778      are not.  */
9779   basep = &base_list;
9780   while (*basep)
9781     {
9782       tree basetype = TREE_VALUE (*basep);
9783
9784       if (!(processing_template_decl && uses_template_parms (basetype))
9785           && !complete_type_or_else (basetype, NULL))
9786         /* An incomplete type.  Remove it from the list.  */
9787         *basep = TREE_CHAIN (*basep);
9788       else
9789         {
9790           max_bases++;
9791           if (TREE_TYPE (*basep))
9792             max_vbases++;
9793           if (CLASS_TYPE_P (basetype))
9794             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9795           basep = &TREE_CHAIN (*basep);
9796         }
9797     }
9798
9799   TYPE_MARKED_P (ref) = 1;
9800
9801   /* The binfo slot should be empty, unless this is an (ill-formed)
9802      redefinition.  */
9803   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9804   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9805
9806   binfo = make_tree_binfo (max_bases);
9807
9808   TYPE_BINFO (ref) = binfo;
9809   BINFO_OFFSET (binfo) = size_zero_node;
9810   BINFO_TYPE (binfo) = ref;
9811
9812   if (max_bases)
9813     {
9814       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9815       /* An aggregate cannot have baseclasses.  */
9816       CLASSTYPE_NON_AGGREGATE (ref) = 1;
9817
9818       if (TREE_CODE (ref) == UNION_TYPE)
9819         {
9820           error ("derived union %qT invalid", ref);
9821           return false;
9822         }
9823     }
9824
9825   if (max_bases > 1)
9826     {
9827       if (TYPE_FOR_JAVA (ref))
9828         {
9829           error ("Java class %qT cannot have multiple bases", ref);
9830           return false;
9831         }
9832     }
9833
9834   if (max_vbases)
9835     {
9836       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9837
9838       if (TYPE_FOR_JAVA (ref))
9839         {
9840           error ("Java class %qT cannot have virtual bases", ref);
9841           return false;
9842         }
9843     }
9844
9845   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9846     {
9847       tree access = TREE_PURPOSE (base_list);
9848       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9849       tree basetype = TREE_VALUE (base_list);
9850
9851       if (access == access_default_node)
9852         access = default_access;
9853
9854       if (TREE_CODE (basetype) == TYPE_DECL)
9855         basetype = TREE_TYPE (basetype);
9856       if (TREE_CODE (basetype) != RECORD_TYPE
9857           && TREE_CODE (basetype) != TYPENAME_TYPE
9858           && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9859           && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9860         {
9861           error ("base type %qT fails to be a struct or class type",
9862                  basetype);
9863           return false;
9864         }
9865
9866       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9867         TYPE_FOR_JAVA (ref) = 1;
9868
9869       base_binfo = NULL_TREE;
9870       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9871         {
9872           base_binfo = TYPE_BINFO (basetype);
9873           /* The original basetype could have been a typedef'd type.  */
9874           basetype = BINFO_TYPE (base_binfo);
9875
9876           /* Inherit flags from the base.  */
9877           TYPE_HAS_NEW_OPERATOR (ref)
9878             |= TYPE_HAS_NEW_OPERATOR (basetype);
9879           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9880             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9881           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9882           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9883           CLASSTYPE_DIAMOND_SHAPED_P (ref)
9884             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9885           CLASSTYPE_REPEATED_BASE_P (ref)
9886             |= CLASSTYPE_REPEATED_BASE_P (basetype);
9887         }
9888
9889       /* We must do this test after we've seen through a typedef
9890          type.  */
9891       if (TYPE_MARKED_P (basetype))
9892         {
9893           if (basetype == ref)
9894             error ("recursive type %qT undefined", basetype);
9895           else
9896             error ("duplicate base type %qT invalid", basetype);
9897           return false;
9898         }
9899       TYPE_MARKED_P (basetype) = 1;
9900
9901       base_binfo = copy_binfo (base_binfo, basetype, ref,
9902                                &igo_prev, via_virtual);
9903       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
9904         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
9905
9906       BINFO_BASE_APPEND (binfo, base_binfo);
9907       BINFO_BASE_ACCESS_APPEND (binfo, access);
9908     }
9909
9910   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
9911     /* If we have space in the vbase vector, we must have shared at
9912        least one of them, and are therefore diamond shaped.  */
9913     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
9914
9915   /* Unmark all the types.  */
9916   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
9917     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9918   TYPE_MARKED_P (ref) = 0;
9919
9920   /* Now see if we have a repeated base type.  */
9921   if (!CLASSTYPE_REPEATED_BASE_P (ref))
9922     {
9923       for (base_binfo = binfo; base_binfo;
9924            base_binfo = TREE_CHAIN (base_binfo))
9925         {
9926           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9927             {
9928               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
9929               break;
9930             }
9931           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
9932         }
9933       for (base_binfo = binfo; base_binfo;
9934            base_binfo = TREE_CHAIN (base_binfo))
9935         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
9936           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
9937         else
9938           break;
9939     }
9940
9941   return true;
9942 }
9943
9944 \f
9945 /* Begin compiling the definition of an enumeration type.
9946    NAME is its name.
9947    Returns the type object, as yet incomplete.
9948    Also records info about it so that build_enumerator
9949    may be used to declare the individual values as they are read.  */
9950
9951 tree
9952 start_enum (tree name)
9953 {
9954   tree enumtype;
9955
9956   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9957
9958   /* If this is the real definition for a previous forward reference,
9959      fill in the contents in the same object that used to be the
9960      forward reference.  */
9961
9962   enumtype = lookup_and_check_tag (enum_type, name,
9963                                    /*tag_scope=*/ts_current,
9964                                    /*template_header_p=*/false);
9965
9966   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
9967     {
9968       error ("multiple definition of %q#T", enumtype);
9969       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
9970       /* Clear out TYPE_VALUES, and start again.  */
9971       TYPE_VALUES (enumtype) = NULL_TREE;
9972     }
9973   else
9974     {
9975       /* In case of error, make a dummy enum to allow parsing to
9976          continue.  */
9977       if (enumtype == error_mark_node)
9978         name = make_anon_name ();
9979
9980       enumtype = make_node (ENUMERAL_TYPE);
9981       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
9982     }
9983
9984   return enumtype;
9985 }
9986
9987 /* After processing and defining all the values of an enumeration type,
9988    install their decls in the enumeration type and finish it off.
9989    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
9990
9991 void
9992 finish_enum (tree enumtype)
9993 {
9994   tree values;
9995   tree decl;
9996   tree value;
9997   tree minnode;
9998   tree maxnode;
9999   tree t;
10000   bool unsignedp;
10001   bool use_short_enum;
10002   int lowprec;
10003   int highprec;
10004   int precision;
10005   integer_type_kind itk;
10006   tree underlying_type = NULL_TREE;
10007
10008   /* We built up the VALUES in reverse order.  */
10009   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10010
10011   /* For an enum defined in a template, just set the type of the values;
10012      all further processing is postponed until the template is
10013      instantiated.  We need to set the type so that tsubst of a CONST_DECL
10014      works.  */
10015   if (processing_template_decl)
10016     {
10017       for (values = TYPE_VALUES (enumtype);
10018            values;
10019            values = TREE_CHAIN (values))
10020         TREE_TYPE (TREE_VALUE (values)) = enumtype;
10021       if (at_function_scope_p ())
10022         add_stmt (build_min (TAG_DEFN, enumtype));
10023       return;
10024     }
10025
10026   /* Determine the minimum and maximum values of the enumerators.  */
10027   if (TYPE_VALUES (enumtype))
10028     {
10029       minnode = maxnode = NULL_TREE;
10030
10031       for (values = TYPE_VALUES (enumtype);
10032            values;
10033            values = TREE_CHAIN (values))
10034         {
10035           decl = TREE_VALUE (values);
10036
10037           /* [dcl.enum]: Following the closing brace of an enum-specifier,
10038              each enumerator has the type of its enumeration.  Prior to the
10039              closing brace, the type of each enumerator is the type of its
10040              initializing value.  */
10041           TREE_TYPE (decl) = enumtype;
10042
10043           /* Update the minimum and maximum values, if appropriate.  */
10044           value = DECL_INITIAL (decl);
10045           if (value == error_mark_node)
10046             value = integer_zero_node;
10047           /* Figure out what the minimum and maximum values of the
10048              enumerators are.  */
10049           if (!minnode)
10050             minnode = maxnode = value;
10051           else if (tree_int_cst_lt (maxnode, value))
10052             maxnode = value;
10053           else if (tree_int_cst_lt (value, minnode))
10054             minnode = value;
10055         }
10056     }
10057   else
10058     /* [dcl.enum]
10059
10060        If the enumerator-list is empty, the underlying type is as if
10061        the enumeration had a single enumerator with value 0.  */
10062     minnode = maxnode = integer_zero_node;
10063
10064   /* Compute the number of bits require to represent all values of the
10065      enumeration.  We must do this before the type of MINNODE and
10066      MAXNODE are transformed, since min_precision relies on the
10067      TREE_TYPE of the value it is passed.  */
10068   unsignedp = tree_int_cst_sgn (minnode) >= 0;
10069   lowprec = min_precision (minnode, unsignedp);
10070   highprec = min_precision (maxnode, unsignedp);
10071   precision = MAX (lowprec, highprec);
10072
10073   /* Determine the underlying type of the enumeration.
10074
10075        [dcl.enum]
10076
10077        The underlying type of an enumeration is an integral type that
10078        can represent all the enumerator values defined in the
10079        enumeration.  It is implementation-defined which integral type is
10080        used as the underlying type for an enumeration except that the
10081        underlying type shall not be larger than int unless the value of
10082        an enumerator cannot fit in an int or unsigned int.
10083
10084      We use "int" or an "unsigned int" as the underlying type, even if
10085      a smaller integral type would work, unless the user has
10086      explicitly requested that we use the smallest possible type.  The
10087      user can request that for all enumerations with a command line
10088      flag, or for just one enumeration with an attribute.  */
10089
10090   use_short_enum = flag_short_enums
10091     || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
10092
10093   for (itk = (use_short_enum ? itk_char : itk_int);
10094        itk != itk_none;
10095        itk++)
10096     {
10097       underlying_type = integer_types[itk];
10098       if (TYPE_PRECISION (underlying_type) >= precision
10099           && TYPE_UNSIGNED (underlying_type) == unsignedp)
10100         break;
10101     }
10102   if (itk == itk_none)
10103     {
10104       /* DR 377
10105
10106          IF no integral type can represent all the enumerator values, the
10107          enumeration is ill-formed.  */
10108       error ("no integral type can represent all of the enumerator values "
10109              "for %qT", enumtype);
10110       precision = TYPE_PRECISION (long_long_integer_type_node);
10111       underlying_type = integer_types[itk_unsigned_long_long];
10112     }
10113
10114   /* Compute the minium and maximum values for the type.
10115
10116      [dcl.enum]
10117
10118      For an enumeration where emin is the smallest enumerator and emax
10119      is the largest, the values of the enumeration are the values of the
10120      underlying type in the range bmin to bmax, where bmin and bmax are,
10121      respectively, the smallest and largest values of the smallest bit-
10122      field that can store emin and emax.  */
10123
10124   /* The middle-end currently assumes that types with TYPE_PRECISION
10125      narrower than their underlying type are suitably zero or sign
10126      extended to fill their mode.  g++ doesn't make these guarantees.
10127      Until the middle-end can represent such paradoxical types, we
10128      set the TYPE_PRECISION to the width of the underlying type.  */
10129   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10130
10131   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10132
10133   /* [dcl.enum]
10134
10135      The value of sizeof() applied to an enumeration type, an object
10136      of an enumeration type, or an enumerator, is the value of sizeof()
10137      applied to the underlying type.  */
10138   TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10139   TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10140   TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10141   TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10142   TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10143   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10144
10145   /* Convert each of the enumerators to the type of the underlying
10146      type of the enumeration.  */
10147   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10148     {
10149       location_t saved_location;
10150
10151       decl = TREE_VALUE (values);
10152       saved_location = input_location;
10153       input_location = DECL_SOURCE_LOCATION (decl);
10154       value = perform_implicit_conversion (underlying_type,
10155                                            DECL_INITIAL (decl));
10156       input_location = saved_location;
10157
10158       /* Do not clobber shared ints.  */
10159       value = copy_node (value);
10160
10161       TREE_TYPE (value) = enumtype;
10162       DECL_INITIAL (decl) = value;
10163       TREE_VALUE (values) = value;
10164     }
10165
10166   /* Fix up all variant types of this enum type.  */
10167   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10168     {
10169       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10170       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10171       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10172       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10173       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10174       TYPE_MODE (t) = TYPE_MODE (enumtype);
10175       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10176       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10177       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10178       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10179     }
10180
10181   /* Finish debugging output for this type.  */
10182   rest_of_type_compilation (enumtype, namespace_bindings_p ());
10183 }
10184
10185 /* Build and install a CONST_DECL for an enumeration constant of the
10186    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10187    Assignment of sequential values by default is handled here.  */
10188
10189 void
10190 build_enumerator (tree name, tree value, tree enumtype)
10191 {
10192   tree decl;
10193   tree context;
10194   tree type;
10195
10196   /* If the VALUE was erroneous, pretend it wasn't there; that will
10197      result in the enum being assigned the next value in sequence.  */
10198   if (value == error_mark_node)
10199     value = NULL_TREE;
10200
10201   /* Remove no-op casts from the value.  */
10202   if (value)
10203     STRIP_TYPE_NOPS (value);
10204
10205   if (! processing_template_decl)
10206     {
10207       /* Validate and default VALUE.  */
10208       if (value != NULL_TREE)
10209         {
10210           value = integral_constant_value (value);
10211
10212           if (TREE_CODE (value) == INTEGER_CST)
10213             {
10214               value = perform_integral_promotions (value);
10215               constant_expression_warning (value);
10216             }
10217           else
10218             {
10219               error ("enumerator value for %qD not integer constant", name);
10220               value = NULL_TREE;
10221             }
10222         }
10223
10224       /* Default based on previous value.  */
10225       if (value == NULL_TREE)
10226         {
10227           if (TYPE_VALUES (enumtype))
10228             {
10229               HOST_WIDE_INT hi;
10230               unsigned HOST_WIDE_INT lo;
10231               tree prev_value;
10232               bool overflowed;
10233
10234               /* The next value is the previous value plus one.  We can
10235                  safely assume that the previous value is an INTEGER_CST.
10236                  add_double doesn't know the type of the target expression,
10237                  so we must check with int_fits_type_p as well.  */
10238               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10239               overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10240                                        TREE_INT_CST_HIGH (prev_value),
10241                                        1, 0, &lo, &hi);
10242               value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10243               overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10244
10245               if (overflowed)
10246                 {
10247                   error ("overflow in enumeration values at %qD", name);
10248                   value = error_mark_node;
10249                 }
10250             }
10251           else
10252             value = integer_zero_node;
10253         }
10254
10255       /* Remove no-op casts from the value.  */
10256       STRIP_TYPE_NOPS (value);
10257     }
10258
10259   /* C++ associates enums with global, function, or class declarations.  */
10260   context = current_scope ();
10261
10262   /* Build the actual enumeration constant.  Note that the enumeration
10263     constants have the type of their initializers until the
10264     enumeration is complete:
10265
10266       [ dcl.enum ]
10267
10268       Following the closing brace of an enum-specifier, each enumer-
10269       ator has the type of its enumeration.  Prior to the closing
10270       brace, the type of each enumerator is the type of its
10271       initializing value.
10272
10273     In finish_enum we will reset the type.  Of course, if we're
10274     processing a template, there may be no value.  */
10275   type = value ? TREE_TYPE (value) : NULL_TREE;
10276
10277   if (context && context == current_class_type)
10278     /* This enum declaration is local to the class.  We need the full
10279        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
10280     decl = build_lang_decl (CONST_DECL, name, type);
10281   else
10282     /* It's a global enum, or it's local to a function.  (Note local to
10283       a function could mean local to a class method.  */
10284     decl = build_decl (CONST_DECL, name, type);
10285
10286   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10287   TREE_CONSTANT (decl) = 1;
10288   TREE_INVARIANT (decl) = 1;
10289   TREE_READONLY (decl) = 1;
10290   DECL_INITIAL (decl) = value;
10291
10292   if (context && context == current_class_type)
10293     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10294        on the TYPE_FIELDS list for `S'.  (That's so that you can say
10295        things like `S::i' later.)  */
10296     finish_member_declaration (decl);
10297   else
10298     pushdecl (decl);
10299
10300   /* Add this enumeration constant to the list for this type.  */
10301   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10302 }
10303
10304 \f
10305 /* We're defining DECL.  Make sure that it's type is OK.  */
10306
10307 static void
10308 check_function_type (tree decl, tree current_function_parms)
10309 {
10310   tree fntype = TREE_TYPE (decl);
10311   tree return_type = complete_type (TREE_TYPE (fntype));
10312
10313   /* In a function definition, arg types must be complete.  */
10314   require_complete_types_for_parms (current_function_parms);
10315
10316   if (dependent_type_p (return_type))
10317     return;
10318   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10319     {
10320       tree args = TYPE_ARG_TYPES (fntype);
10321
10322       error ("return type %q#T is incomplete", return_type);
10323
10324       /* Make it return void instead.  */
10325       if (TREE_CODE (fntype) == METHOD_TYPE)
10326         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10327                                              void_type_node,
10328                                              TREE_CHAIN (args));
10329       else
10330         fntype = build_function_type (void_type_node, args);
10331       TREE_TYPE (decl)
10332         = build_exception_variant (fntype,
10333                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10334     }
10335   else
10336     abstract_virtuals_error (decl, TREE_TYPE (fntype));
10337 }
10338
10339 /* Create the FUNCTION_DECL for a function definition.
10340    DECLSPECS and DECLARATOR are the parts of the declaration;
10341    they describe the function's name and the type it returns,
10342    but twisted together in a fashion that parallels the syntax of C.
10343
10344    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10345    DECLARATOR is really the DECL for the function we are about to
10346    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10347    indicating that the function is an inline defined in-class.
10348
10349    This function creates a binding context for the function body
10350    as well as setting up the FUNCTION_DECL in current_function_decl.
10351
10352    For C++, we must first check whether that datum makes any sense.
10353    For example, "class A local_a(1,2);" means that variable local_a
10354    is an aggregate of type A, which should have a constructor
10355    applied to it with the argument list [1, 2].  */
10356
10357 void
10358 start_preparsed_function (tree decl1, tree attrs, int flags)
10359 {
10360   tree ctype = NULL_TREE;
10361   tree fntype;
10362   tree restype;
10363   int doing_friend = 0;
10364   struct cp_binding_level *bl;
10365   tree current_function_parms;
10366   struct c_fileinfo *finfo
10367     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
10368   bool honor_interface;
10369
10370   /* Sanity check.  */
10371   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10372   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10373
10374   fntype = TREE_TYPE (decl1);
10375   if (TREE_CODE (fntype) == METHOD_TYPE)
10376     ctype = TYPE_METHOD_BASETYPE (fntype);
10377
10378   /* ISO C++ 11.4/5.  A friend function defined in a class is in
10379      the (lexical) scope of the class in which it is defined.  */
10380   if (!ctype && DECL_FRIEND_P (decl1))
10381     {
10382       ctype = DECL_FRIEND_CONTEXT (decl1);
10383
10384       /* CTYPE could be null here if we're dealing with a template;
10385          for example, `inline friend float foo()' inside a template
10386          will have no CTYPE set.  */
10387       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10388         ctype = NULL_TREE;
10389       else
10390         doing_friend = 1;
10391     }
10392
10393   if (DECL_DECLARED_INLINE_P (decl1)
10394       && lookup_attribute ("noinline", attrs))
10395     warning (0, "inline function %q+D given attribute noinline", decl1);
10396
10397   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10398     /* This is a constructor, we must ensure that any default args
10399        introduced by this definition are propagated to the clones
10400        now. The clones are used directly in overload resolution.  */
10401     adjust_clone_args (decl1);
10402
10403   /* Sometimes we don't notice that a function is a static member, and
10404      build a METHOD_TYPE for it.  Fix that up now.  */
10405   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10406       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10407     {
10408       revert_static_member_fn (decl1);
10409       ctype = NULL_TREE;
10410     }
10411
10412   /* Set up current_class_type, and enter the scope of the class, if
10413      appropriate.  */
10414   if (ctype)
10415     push_nested_class (ctype);
10416   else if (DECL_STATIC_FUNCTION_P (decl1))
10417     push_nested_class (DECL_CONTEXT (decl1));
10418
10419   /* Now that we have entered the scope of the class, we must restore
10420      the bindings for any template parameters surrounding DECL1, if it
10421      is an inline member template.  (Order is important; consider the
10422      case where a template parameter has the same name as a field of
10423      the class.)  It is not until after this point that
10424      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
10425   if (flags & SF_INCLASS_INLINE)
10426     maybe_begin_member_template_processing (decl1);
10427
10428   /* Effective C++ rule 15.  */
10429   if (warn_ecpp
10430       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10431       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10432     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
10433
10434   /* Make the init_value nonzero so pushdecl knows this is not tentative.
10435      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
10436   if (!DECL_INITIAL (decl1))
10437     DECL_INITIAL (decl1) = error_mark_node;
10438
10439   /* This function exists in static storage.
10440      (This does not mean `static' in the C sense!)  */
10441   TREE_STATIC (decl1) = 1;
10442
10443   /* We must call push_template_decl after current_class_type is set
10444      up.  (If we are processing inline definitions after exiting a
10445      class scope, current_class_type will be NULL_TREE until set above
10446      by push_nested_class.)  */
10447   if (processing_template_decl)
10448     {
10449       /* FIXME: Handle error_mark_node more gracefully.  */
10450       tree newdecl1 = push_template_decl (decl1);
10451       if (newdecl1 != error_mark_node)
10452         decl1 = newdecl1;
10453     }
10454
10455   /* We are now in the scope of the function being defined.  */
10456   current_function_decl = decl1;
10457
10458   /* Save the parm names or decls from this function's declarator
10459      where store_parm_decls will find them.  */
10460   current_function_parms = DECL_ARGUMENTS (decl1);
10461
10462   /* Make sure the parameter and return types are reasonable.  When
10463      you declare a function, these types can be incomplete, but they
10464      must be complete when you define the function.  */
10465   check_function_type (decl1, current_function_parms);
10466
10467   /* Build the return declaration for the function.  */
10468   restype = TREE_TYPE (fntype);
10469   /* Promote the value to int before returning it.  */
10470   if (c_promoting_integer_type_p (restype))
10471     restype = type_promotes_to (restype);
10472   if (DECL_RESULT (decl1) == NULL_TREE)
10473     {
10474       tree resdecl;
10475
10476       resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10477       DECL_ARTIFICIAL (resdecl) = 1;
10478       DECL_IGNORED_P (resdecl) = 1;
10479       DECL_RESULT (decl1) = resdecl;
10480
10481       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10482     }
10483
10484   /* Initialize RTL machinery.  We cannot do this until
10485      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
10486      even when processing a template; this is how we get
10487      CFUN set up, and our per-function variables initialized.
10488      FIXME factor out the non-RTL stuff.  */
10489   bl = current_binding_level;
10490   allocate_struct_function (decl1);
10491   current_binding_level = bl;
10492
10493   /* Even though we're inside a function body, we still don't want to
10494      call expand_expr to calculate the size of a variable-sized array.
10495      We haven't necessarily assigned RTL to all variables yet, so it's
10496      not safe to try to expand expressions involving them.  */
10497   cfun->x_dont_save_pending_sizes_p = 1;
10498
10499   /* Start the statement-tree, start the tree now.  */
10500   DECL_SAVED_TREE (decl1) = push_stmt_list ();
10501
10502   /* Let the user know we're compiling this function.  */
10503   announce_function (decl1);
10504
10505   /* Record the decl so that the function name is defined.
10506      If we already have a decl for this name, and it is a FUNCTION_DECL,
10507      use the old decl.  */
10508   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10509     {
10510       /* A specialization is not used to guide overload resolution.  */
10511       if (!DECL_FUNCTION_MEMBER_P (decl1)
10512           && !(DECL_USE_TEMPLATE (decl1) &&
10513                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10514         {
10515           tree olddecl = pushdecl (decl1);
10516
10517           if (olddecl == error_mark_node)
10518             /* If something went wrong when registering the declaration,
10519                use DECL1; we have to have a FUNCTION_DECL to use when
10520                parsing the body of the function.  */
10521             ;
10522           else
10523             /* Otherwise, OLDDECL is either a previous declaration of
10524                the same function or DECL1 itself.  */
10525             decl1 = olddecl;
10526         }
10527       else
10528         {
10529           /* We need to set the DECL_CONTEXT.  */
10530           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10531             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10532         }
10533       fntype = TREE_TYPE (decl1);
10534
10535       /* If #pragma weak applies, mark the decl appropriately now.
10536          The pragma only applies to global functions.  Because
10537          determining whether or not the #pragma applies involves
10538          computing the mangled name for the declaration, we cannot
10539          apply the pragma until after we have merged this declaration
10540          with any previous declarations; if the original declaration
10541          has a linkage specification, that specification applies to
10542          the definition as well, and may affect the mangled name.  */
10543       if (!DECL_CONTEXT (decl1))
10544         maybe_apply_pragma_weak (decl1);
10545     }
10546
10547   /* Reset these in case the call to pushdecl changed them.  */
10548   current_function_decl = decl1;
10549   cfun->decl = decl1;
10550
10551   /* If we are (erroneously) defining a function that we have already
10552      defined before, wipe out what we knew before.  */
10553   if (!DECL_PENDING_INLINE_P (decl1))
10554     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10555
10556   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10557     {
10558       /* We know that this was set up by `grokclassfn'.  We do not
10559          wait until `store_parm_decls', since evil parse errors may
10560          never get us to that point.  Here we keep the consistency
10561          between `current_class_type' and `current_class_ptr'.  */
10562       tree t = DECL_ARGUMENTS (decl1);
10563
10564       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10565       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10566
10567       cp_function_chain->x_current_class_ref
10568         = build_indirect_ref (t, NULL);
10569       cp_function_chain->x_current_class_ptr = t;
10570
10571       /* Constructors and destructors need to know whether they're "in
10572          charge" of initializing virtual base classes.  */
10573       t = TREE_CHAIN (t);
10574       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10575         {
10576           current_in_charge_parm = t;
10577           t = TREE_CHAIN (t);
10578         }
10579       if (DECL_HAS_VTT_PARM_P (decl1))
10580         {
10581           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10582           current_vtt_parm = t;
10583         }
10584     }
10585
10586   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10587                      /* Implicitly-defined methods (like the
10588                         destructor for a class in which no destructor
10589                         is explicitly declared) must not be defined
10590                         until their definition is needed.  So, we
10591                         ignore interface specifications for
10592                         compiler-generated functions.  */
10593                      && !DECL_ARTIFICIAL (decl1));
10594
10595   if (DECL_INTERFACE_KNOWN (decl1))
10596     {
10597       tree ctx = decl_function_context (decl1);
10598
10599       if (DECL_NOT_REALLY_EXTERN (decl1))
10600         DECL_EXTERNAL (decl1) = 0;
10601
10602       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10603           && TREE_PUBLIC (ctx))
10604         /* This is a function in a local class in an extern inline
10605            function.  */
10606         comdat_linkage (decl1);
10607     }
10608   /* If this function belongs to an interface, it is public.
10609      If it belongs to someone else's interface, it is also external.
10610      This only affects inlines and template instantiations.  */
10611   else if (!finfo->interface_unknown && honor_interface)
10612     {
10613       if (DECL_DECLARED_INLINE_P (decl1)
10614           || DECL_TEMPLATE_INSTANTIATION (decl1)
10615           || processing_template_decl)
10616         {
10617           DECL_EXTERNAL (decl1)
10618             = (finfo->interface_only
10619                || (DECL_DECLARED_INLINE_P (decl1)
10620                    && ! flag_implement_inlines
10621                    && !DECL_VINDEX (decl1)));
10622
10623           /* For WIN32 we also want to put these in linkonce sections.  */
10624           maybe_make_one_only (decl1);
10625         }
10626       else
10627         DECL_EXTERNAL (decl1) = 0;
10628       DECL_INTERFACE_KNOWN (decl1) = 1;
10629       /* If this function is in an interface implemented in this file,
10630          make sure that the backend knows to emit this function
10631          here.  */
10632       if (!DECL_EXTERNAL (decl1))
10633         mark_needed (decl1);
10634     }
10635   else if (finfo->interface_unknown && finfo->interface_only
10636            && honor_interface)
10637     {
10638       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10639          interface, we will have both finfo->interface_unknown and
10640          finfo->interface_only set.  In that case, we don't want to
10641          use the normal heuristics because someone will supply a
10642          #pragma implementation elsewhere, and deducing it here would
10643          produce a conflict.  */
10644       comdat_linkage (decl1);
10645       DECL_EXTERNAL (decl1) = 0;
10646       DECL_INTERFACE_KNOWN (decl1) = 1;
10647       DECL_DEFER_OUTPUT (decl1) = 1;
10648     }
10649   else
10650     {
10651       /* This is a definition, not a reference.
10652          So clear DECL_EXTERNAL.  */
10653       DECL_EXTERNAL (decl1) = 0;
10654
10655       if ((DECL_DECLARED_INLINE_P (decl1)
10656            || DECL_TEMPLATE_INSTANTIATION (decl1))
10657           && ! DECL_INTERFACE_KNOWN (decl1)
10658           /* Don't try to defer nested functions for now.  */
10659           && ! decl_function_context (decl1))
10660         DECL_DEFER_OUTPUT (decl1) = 1;
10661       else
10662         DECL_INTERFACE_KNOWN (decl1) = 1;
10663     }
10664
10665   /* Determine the ELF visibility attribute for the function.  We must not
10666      do this before calling "pushdecl", as we must allow "duplicate_decls"
10667      to merge any attributes appropriately.  We also need to wait until
10668      linkage is set.  */
10669   if (!DECL_CLONED_FUNCTION_P (decl1))
10670     determine_visibility (decl1);
10671
10672   begin_scope (sk_function_parms, decl1);
10673
10674   ++function_depth;
10675
10676   if (DECL_DESTRUCTOR_P (decl1)
10677       || (DECL_CONSTRUCTOR_P (decl1)
10678           && targetm.cxx.cdtor_returns_this ()))
10679     {
10680       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10681       DECL_CONTEXT (cdtor_label) = current_function_decl;
10682     }
10683
10684   start_fname_decls ();
10685
10686   store_parm_decls (current_function_parms);
10687 }
10688
10689
10690 /* Like start_preparsed_function, except that instead of a
10691    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10692
10693    Returns 1 on success.  If the DECLARATOR is not suitable for a function
10694    (it defines a datum instead), we return 0, which tells
10695    yyparse to report a parse error.  */
10696
10697 int
10698 start_function (cp_decl_specifier_seq *declspecs,
10699                 const cp_declarator *declarator,
10700                 tree attrs)
10701 {
10702   tree decl1;
10703
10704   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10705   /* If the declarator is not suitable for a function definition,
10706      cause a syntax error.  */
10707   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10708     return 0;
10709
10710   if (DECL_MAIN_P (decl1))
10711     /* main must return int.  grokfndecl should have corrected it
10712        (and issued a diagnostic) if the user got it wrong.  */
10713     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10714                              integer_type_node));
10715
10716   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10717
10718   return 1;
10719 }
10720 \f
10721 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10722    FN.  */
10723
10724 static bool
10725 use_eh_spec_block (tree fn)
10726 {
10727   return (flag_exceptions && flag_enforce_eh_specs
10728           && !processing_template_decl
10729           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10730           /* We insert the EH_SPEC_BLOCK only in the original
10731              function; then, it is copied automatically to the
10732              clones.  */
10733           && !DECL_CLONED_FUNCTION_P (fn)
10734           /* Implicitly-generated constructors and destructors have
10735              exception specifications.  However, those specifications
10736              are the union of the possible exceptions specified by the
10737              constructors/destructors for bases and members, so no
10738              unallowed exception will ever reach this function.  By
10739              not creating the EH_SPEC_BLOCK we save a little memory,
10740              and we avoid spurious warnings about unreachable
10741              code.  */
10742           && !DECL_ARTIFICIAL (fn));
10743 }
10744
10745 /* Store the parameter declarations into the current function declaration.
10746    This is called after parsing the parameter declarations, before
10747    digesting the body of the function.
10748
10749    Also install to binding contour return value identifier, if any.  */
10750
10751 static void
10752 store_parm_decls (tree current_function_parms)
10753 {
10754   tree fndecl = current_function_decl;
10755   tree parm;
10756
10757   /* This is a chain of any other decls that came in among the parm
10758      declarations.  If a parm is declared with  enum {foo, bar} x;
10759      then CONST_DECLs for foo and bar are put here.  */
10760   tree nonparms = NULL_TREE;
10761
10762   if (current_function_parms)
10763     {
10764       /* This case is when the function was defined with an ANSI prototype.
10765          The parms already have decls, so we need not do anything here
10766          except record them as in effect
10767          and complain if any redundant old-style parm decls were written.  */
10768
10769       tree specparms = current_function_parms;
10770       tree next;
10771
10772       /* Must clear this because it might contain TYPE_DECLs declared
10773              at class level.  */
10774       current_binding_level->names = NULL;
10775
10776       /* If we're doing semantic analysis, then we'll call pushdecl
10777              for each of these.  We must do them in reverse order so that
10778              they end in the correct forward order.  */
10779       specparms = nreverse (specparms);
10780
10781       for (parm = specparms; parm; parm = next)
10782         {
10783           next = TREE_CHAIN (parm);
10784           if (TREE_CODE (parm) == PARM_DECL)
10785             {
10786               if (DECL_NAME (parm) == NULL_TREE
10787                   || TREE_CODE (parm) != VOID_TYPE)
10788                 pushdecl (parm);
10789               else
10790                 error ("parameter %qD declared void", parm);
10791             }
10792           else
10793             {
10794               /* If we find an enum constant or a type tag,
10795                  put it aside for the moment.  */
10796               TREE_CHAIN (parm) = NULL_TREE;
10797               nonparms = chainon (nonparms, parm);
10798             }
10799         }
10800
10801       /* Get the decls in their original chain order and record in the
10802          function.  This is all and only the PARM_DECLs that were
10803          pushed into scope by the loop above.  */
10804       DECL_ARGUMENTS (fndecl) = getdecls ();
10805     }
10806   else
10807     DECL_ARGUMENTS (fndecl) = NULL_TREE;
10808
10809   /* Now store the final chain of decls for the arguments
10810      as the decl-chain of the current lexical scope.
10811      Put the enumerators in as well, at the front so that
10812      DECL_ARGUMENTS is not modified.  */
10813   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10814
10815   if (use_eh_spec_block (current_function_decl))
10816     current_eh_spec_block = begin_eh_spec_block ();
10817 }
10818
10819 \f
10820 /* We have finished doing semantic analysis on DECL, but have not yet
10821    generated RTL for its body.  Save away our current state, so that
10822    when we want to generate RTL later we know what to do.  */
10823
10824 static void
10825 save_function_data (tree decl)
10826 {
10827   struct language_function *f;
10828
10829   /* Save the language-specific per-function data so that we can
10830      get it back when we really expand this function.  */
10831   gcc_assert (!DECL_PENDING_INLINE_P (decl));
10832
10833   /* Make a copy.  */
10834   f = GGC_NEW (struct language_function);
10835   memcpy (f, cp_function_chain, sizeof (struct language_function));
10836   DECL_SAVED_FUNCTION_DATA (decl) = f;
10837
10838   /* Clear out the bits we don't need.  */
10839   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10840   f->bindings = NULL;
10841   f->x_local_names = NULL;
10842 }
10843
10844
10845 /* Set the return value of the constructor (if present).  */
10846
10847 static void
10848 finish_constructor_body (void)
10849 {
10850   tree val;
10851   tree exprstmt;
10852
10853   if (targetm.cxx.cdtor_returns_this ())
10854     {
10855       /* Any return from a constructor will end up here.  */
10856       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10857
10858       val = DECL_ARGUMENTS (current_function_decl);
10859       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10860                     DECL_RESULT (current_function_decl), val);
10861       /* Return the address of the object.  */
10862       exprstmt = build_stmt (RETURN_EXPR, val);
10863       add_stmt (exprstmt);
10864     }
10865 }
10866
10867 /* Do all the processing for the beginning of a destructor; set up the
10868    vtable pointers and cleanups for bases and members.  */
10869
10870 static void
10871 begin_destructor_body (void)
10872 {
10873   tree compound_stmt;
10874
10875   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
10876      issued an error message.  We still want to try to process the
10877      body of the function, but initialize_vtbl_ptrs will crash if
10878      TYPE_BINFO is NULL.  */
10879   if (COMPLETE_TYPE_P (current_class_type))
10880     {
10881       compound_stmt = begin_compound_stmt (0);
10882       /* Make all virtual function table pointers in non-virtual base
10883          classes point to CURRENT_CLASS_TYPE's virtual function
10884          tables.  */
10885       initialize_vtbl_ptrs (current_class_ptr);
10886       finish_compound_stmt (compound_stmt);
10887
10888       /* And insert cleanups for our bases and members so that they
10889          will be properly destroyed if we throw.  */
10890       push_base_cleanups ();
10891     }
10892 }
10893
10894 /* At the end of every destructor we generate code to delete the object if
10895    necessary.  Do that now.  */
10896
10897 static void
10898 finish_destructor_body (void)
10899 {
10900   tree exprstmt;
10901
10902   /* Any return from a destructor will end up here; that way all base
10903      and member cleanups will be run when the function returns.  */
10904   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10905
10906   /* In a virtual destructor, we must call delete.  */
10907   if (DECL_VIRTUAL_P (current_function_decl))
10908     {
10909       tree if_stmt;
10910       tree virtual_size = cxx_sizeof (current_class_type);
10911
10912       /* [class.dtor]
10913
10914       At the point of definition of a virtual destructor (including
10915       an implicit definition), non-placement operator delete shall
10916       be looked up in the scope of the destructor's class and if
10917       found shall be accessible and unambiguous.  */
10918       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
10919                                       virtual_size,
10920                                       /*global_p=*/false,
10921                                       /*placement=*/NULL_TREE,
10922                                       /*alloc_fn=*/NULL_TREE);
10923
10924       if_stmt = begin_if_stmt ();
10925       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
10926                                    current_in_charge_parm,
10927                                    integer_one_node),
10928                            if_stmt);
10929       finish_expr_stmt (exprstmt);
10930       finish_then_clause (if_stmt);
10931       finish_if_stmt (if_stmt);
10932     }
10933
10934   if (targetm.cxx.cdtor_returns_this ())
10935     {
10936       tree val;
10937
10938       val = DECL_ARGUMENTS (current_function_decl);
10939       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10940                     DECL_RESULT (current_function_decl), val);
10941       /* Return the address of the object.  */
10942       exprstmt = build_stmt (RETURN_EXPR, val);
10943       add_stmt (exprstmt);
10944     }
10945 }
10946
10947 /* Do the necessary processing for the beginning of a function body, which
10948    in this case includes member-initializers, but not the catch clauses of
10949    a function-try-block.  Currently, this means opening a binding level
10950    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
10951
10952 tree
10953 begin_function_body (void)
10954 {
10955   tree stmt;
10956
10957   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
10958     return NULL_TREE;
10959
10960   if (processing_template_decl)
10961     /* Do nothing now.  */;
10962   else
10963     /* Always keep the BLOCK node associated with the outermost pair of
10964        curly braces of a function.  These are needed for correct
10965        operation of dwarfout.c.  */
10966     keep_next_level (true);
10967
10968   stmt = begin_compound_stmt (BCS_FN_BODY);
10969
10970   if (processing_template_decl)
10971     /* Do nothing now.  */;
10972   else if (DECL_DESTRUCTOR_P (current_function_decl))
10973     begin_destructor_body ();
10974
10975   return stmt;
10976 }
10977
10978 /* Do the processing for the end of a function body.  Currently, this means
10979    closing out the cleanups for fully-constructed bases and members, and in
10980    the case of the destructor, deleting the object if desired.  Again, this
10981    is only meaningful for [cd]tors, since they are the only functions where
10982    there is a significant distinction between the main body and any
10983    function catch clauses.  Handling, say, main() return semantics here
10984    would be wrong, as flowing off the end of a function catch clause for
10985    main() would also need to return 0.  */
10986
10987 void
10988 finish_function_body (tree compstmt)
10989 {
10990   if (compstmt == NULL_TREE)
10991     return;
10992
10993   /* Close the block.  */
10994   finish_compound_stmt (compstmt);
10995
10996   if (processing_template_decl)
10997     /* Do nothing now.  */;
10998   else if (DECL_CONSTRUCTOR_P (current_function_decl))
10999     finish_constructor_body ();
11000   else if (DECL_DESTRUCTOR_P (current_function_decl))
11001     finish_destructor_body ();
11002 }
11003
11004 /* Given a function, returns the BLOCK corresponding to the outermost level
11005    of curly braces, skipping the artificial block created for constructor
11006    initializers.  */
11007
11008 static tree
11009 outer_curly_brace_block (tree fndecl)
11010 {
11011   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
11012   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11013     /* Skip the artificial function body block.  */
11014     block = BLOCK_SUBBLOCKS (block);
11015   return block;
11016 }
11017
11018 /* Finish up a function declaration and compile that function
11019    all the way to assembler language output.  The free the storage
11020    for the function definition.
11021
11022    FLAGS is a bitwise or of the following values:
11023      2 - INCLASS_INLINE
11024        We just finished processing the body of an in-class inline
11025        function definition.  (This processing will have taken place
11026        after the class definition is complete.)  */
11027
11028 tree
11029 finish_function (int flags)
11030 {
11031   tree fndecl = current_function_decl;
11032   tree fntype, ctype = NULL_TREE;
11033   int inclass_inline = (flags & 2) != 0;
11034   int nested;
11035
11036   /* When we get some parse errors, we can end up without a
11037      current_function_decl, so cope.  */
11038   if (fndecl == NULL_TREE)
11039     return error_mark_node;
11040
11041   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
11042       && DECL_VIRTUAL_P (fndecl)
11043       && !processing_template_decl)
11044     {
11045       tree fnclass = DECL_CONTEXT (fndecl);
11046       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
11047         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
11048     }
11049
11050   nested = function_depth > 1;
11051   fntype = TREE_TYPE (fndecl);
11052
11053   /*  TREE_READONLY (fndecl) = 1;
11054       This caused &foo to be of type ptr-to-const-function
11055       which then got a warning when stored in a ptr-to-function variable.  */
11056
11057   gcc_assert (building_stmt_tree ());
11058
11059   /* For a cloned function, we've already got all the code we need;
11060      there's no need to add any extra bits.  */
11061   if (!DECL_CLONED_FUNCTION_P (fndecl))
11062     {
11063       if (DECL_MAIN_P (current_function_decl))
11064         {
11065           tree stmt;
11066
11067           /* Make it so that `main' always returns 0 by default (or
11068              1 for VMS).  */
11069 #if VMS_TARGET
11070           stmt = finish_return_stmt (integer_one_node);
11071 #else
11072           stmt = finish_return_stmt (integer_zero_node);
11073 #endif
11074           /* Hack.  We don't want the middle-end to warn that this
11075              return is unreachable, so put the statement on the
11076              special line 0.  */
11077 #ifdef USE_MAPPED_LOCATION
11078           SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
11079 #else
11080           annotate_with_file_line (stmt, input_filename, 0);
11081 #endif
11082         }
11083
11084       if (use_eh_spec_block (current_function_decl))
11085         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
11086                               (TREE_TYPE (current_function_decl)),
11087                               current_eh_spec_block);
11088     }
11089
11090   /* If we're saving up tree structure, tie off the function now.  */
11091   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11092
11093   finish_fname_decls ();
11094
11095   /* If this function can't throw any exceptions, remember that.  */
11096   if (!processing_template_decl
11097       && !cp_function_chain->can_throw
11098       && !flag_non_call_exceptions
11099       && targetm.binds_local_p (fndecl))
11100     TREE_NOTHROW (fndecl) = 1;
11101
11102   /* This must come after expand_function_end because cleanups might
11103      have declarations (from inline functions) that need to go into
11104      this function's blocks.  */
11105
11106   /* If the current binding level isn't the outermost binding level
11107      for this function, either there is a bug, or we have experienced
11108      syntax errors and the statement tree is malformed.  */
11109   if (current_binding_level->kind != sk_function_parms)
11110     {
11111       /* Make sure we have already experienced errors.  */
11112       gcc_assert (errorcount);
11113
11114       /* Throw away the broken statement tree and extra binding
11115          levels.  */
11116       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11117
11118       while (current_binding_level->kind != sk_function_parms)
11119         {
11120           if (current_binding_level->kind == sk_class)
11121             pop_nested_class ();
11122           else
11123             poplevel (0, 0, 0);
11124         }
11125     }
11126   poplevel (1, 0, 1);
11127
11128   /* Statements should always be full-expressions at the outermost set
11129      of curly braces for a function.  */
11130   gcc_assert (stmts_are_full_exprs_p ());
11131
11132   /* Set up the named return value optimization, if we can.  Candidate
11133      variables are selected in check_return_value.  */
11134   if (current_function_return_value)
11135     {
11136       tree r = current_function_return_value;
11137       tree outer;
11138
11139       if (r != error_mark_node
11140           /* This is only worth doing for fns that return in memory--and
11141              simpler, since we don't have to worry about promoted modes.  */
11142           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11143           /* Only allow this for variables declared in the outer scope of
11144              the function so we know that their lifetime always ends with a
11145              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
11146              we were to do this optimization in tree-ssa.  */
11147           && (outer = outer_curly_brace_block (fndecl))
11148           && chain_member (r, BLOCK_VARS (outer)))
11149         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11150
11151       current_function_return_value = NULL_TREE;
11152     }
11153
11154   /* Remember that we were in class scope.  */
11155   if (current_class_name)
11156     ctype = current_class_type;
11157
11158   /* Must mark the RESULT_DECL as being in this function.  */
11159   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11160
11161   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11162      to the FUNCTION_DECL node itself.  */
11163   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11164
11165   /* Save away current state, if appropriate.  */
11166   if (!processing_template_decl)
11167     save_function_data (fndecl);
11168
11169   /* Complain if there's just no return statement.  */
11170   if (warn_return_type
11171       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11172       && !dependent_type_p (TREE_TYPE (fntype))
11173       && !current_function_returns_value && !current_function_returns_null
11174       /* Don't complain if we abort or throw.  */
11175       && !current_function_returns_abnormally
11176       && !DECL_NAME (DECL_RESULT (fndecl))
11177       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
11178          inline function, as we might never be compiled separately.  */
11179       && (DECL_INLINE (fndecl) || processing_template_decl)
11180       /* Structor return values (if any) are set by the compiler.  */
11181       && !DECL_CONSTRUCTOR_P (fndecl)
11182       && !DECL_DESTRUCTOR_P (fndecl))
11183     warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11184
11185   /* Store the end of the function, so that we get good line number
11186      info for the epilogue.  */
11187   cfun->function_end_locus = input_location;
11188
11189   /* Genericize before inlining.  */
11190   if (!processing_template_decl)
11191     {
11192       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11193       cp_genericize (fndecl);
11194       /* Clear out the bits we don't need.  */
11195       f->x_current_class_ptr = NULL;
11196       f->x_current_class_ref = NULL;
11197       f->x_eh_spec_block = NULL;
11198       f->x_in_charge_parm = NULL;
11199       f->x_vtt_parm = NULL;
11200       f->x_return_value = NULL;
11201       f->bindings = NULL;
11202       f->extern_decl_map = NULL;
11203
11204       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
11205       c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11206     }
11207   /* Clear out the bits we don't need.  */
11208   local_names = NULL;
11209
11210   /* We're leaving the context of this function, so zap cfun.  It's still in
11211      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
11212   cfun = NULL;
11213   current_function_decl = NULL;
11214
11215   /* If this is an in-class inline definition, we may have to pop the
11216      bindings for the template parameters that we added in
11217      maybe_begin_member_template_processing when start_function was
11218      called.  */
11219   if (inclass_inline)
11220     maybe_end_member_template_processing ();
11221
11222   /* Leave the scope of the class.  */
11223   if (ctype)
11224     pop_nested_class ();
11225
11226   --function_depth;
11227
11228   /* Clean up.  */
11229   if (! nested)
11230     /* Let the error reporting routines know that we're outside a
11231        function.  For a nested function, this value is used in
11232        cxx_pop_function_context and then reset via pop_function_context.  */
11233     current_function_decl = NULL_TREE;
11234
11235   return fndecl;
11236 }
11237 \f
11238 /* Create the FUNCTION_DECL for a function definition.
11239    DECLSPECS and DECLARATOR are the parts of the declaration;
11240    they describe the return type and the name of the function,
11241    but twisted together in a fashion that parallels the syntax of C.
11242
11243    This function creates a binding context for the function body
11244    as well as setting up the FUNCTION_DECL in current_function_decl.
11245
11246    Returns a FUNCTION_DECL on success.
11247
11248    If the DECLARATOR is not suitable for a function (it defines a datum
11249    instead), we return 0, which tells yyparse to report a parse error.
11250
11251    May return void_type_node indicating that this method is actually
11252    a friend.  See grokfield for more details.
11253
11254    Came here with a `.pushlevel' .
11255
11256    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11257    CHANGES TO CODE IN `grokfield'.  */
11258
11259 tree
11260 start_method (cp_decl_specifier_seq *declspecs,
11261               const cp_declarator *declarator, tree attrlist)
11262 {
11263   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11264                                 &attrlist);
11265
11266   if (fndecl == error_mark_node)
11267     return error_mark_node;
11268
11269   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11270     {
11271       error ("invalid member function declaration");
11272       return error_mark_node;
11273     }
11274
11275   if (attrlist)
11276     cplus_decl_attributes (&fndecl, attrlist, 0);
11277
11278   /* Pass friends other than inline friend functions back.  */
11279   if (fndecl == void_type_node)
11280     return fndecl;
11281
11282   if (DECL_IN_AGGR_P (fndecl))
11283     {
11284       if (DECL_CONTEXT (fndecl)
11285           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11286         error ("%qD is already defined in class %qT", fndecl,
11287                DECL_CONTEXT (fndecl));
11288       return error_mark_node;
11289     }
11290
11291   check_template_shadow (fndecl);
11292
11293   DECL_DECLARED_INLINE_P (fndecl) = 1;
11294   if (flag_default_inline)
11295     DECL_INLINE (fndecl) = 1;
11296
11297   /* We process method specializations in finish_struct_1.  */
11298   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11299     {
11300       fndecl = push_template_decl (fndecl);
11301       if (fndecl == error_mark_node)
11302         return fndecl;
11303     }
11304
11305   if (! DECL_FRIEND_P (fndecl))
11306     {
11307       if (TREE_CHAIN (fndecl))
11308         {
11309           fndecl = copy_node (fndecl);
11310           TREE_CHAIN (fndecl) = NULL_TREE;
11311         }
11312     }
11313
11314   finish_decl (fndecl, NULL_TREE, NULL_TREE);
11315
11316   /* Make a place for the parms.  */
11317   begin_scope (sk_function_parms, fndecl);
11318
11319   DECL_IN_AGGR_P (fndecl) = 1;
11320   return fndecl;
11321 }
11322
11323 /* Go through the motions of finishing a function definition.
11324    We don't compile this method until after the whole class has
11325    been processed.
11326
11327    FINISH_METHOD must return something that looks as though it
11328    came from GROKFIELD (since we are defining a method, after all).
11329
11330    This is called after parsing the body of the function definition.
11331    STMTS is the chain of statements that makes up the function body.
11332
11333    DECL is the ..._DECL that `start_method' provided.  */
11334
11335 tree
11336 finish_method (tree decl)
11337 {
11338   tree fndecl = decl;
11339   tree old_initial;
11340
11341   tree link;
11342
11343   if (decl == void_type_node)
11344     return decl;
11345
11346   old_initial = DECL_INITIAL (fndecl);
11347
11348   /* Undo the level for the parms (from start_method).
11349      This is like poplevel, but it causes nothing to be
11350      saved.  Saving information here confuses symbol-table
11351      output routines.  Besides, this information will
11352      be correctly output when this method is actually
11353      compiled.  */
11354
11355   /* Clear out the meanings of the local variables of this level;
11356      also record in each decl which block it belongs to.  */
11357
11358   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11359     {
11360       if (DECL_NAME (link) != NULL_TREE)
11361         pop_binding (DECL_NAME (link), link);
11362       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11363       DECL_CONTEXT (link) = NULL_TREE;
11364     }
11365
11366   poplevel (0, 0, 0);
11367
11368   DECL_INITIAL (fndecl) = old_initial;
11369
11370   /* We used to check if the context of FNDECL was different from
11371      current_class_type as another way to get inside here.  This didn't work
11372      for String.cc in libg++.  */
11373   if (DECL_FRIEND_P (fndecl))
11374     {
11375       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11376                      fndecl);
11377       decl = void_type_node;
11378     }
11379
11380   return decl;
11381 }
11382 \f
11383
11384 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
11385    we can lay it out later, when and if its type becomes complete.  */
11386
11387 void
11388 maybe_register_incomplete_var (tree var)
11389 {
11390   gcc_assert (TREE_CODE (var) == VAR_DECL);
11391
11392   /* Keep track of variables with incomplete types.  */
11393   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11394       && DECL_EXTERNAL (var))
11395     {
11396       tree inner_type = TREE_TYPE (var);
11397
11398       while (TREE_CODE (inner_type) == ARRAY_TYPE)
11399         inner_type = TREE_TYPE (inner_type);
11400       inner_type = TYPE_MAIN_VARIANT (inner_type);
11401
11402       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11403           /* RTTI TD entries are created while defining the type_info.  */
11404           || (TYPE_LANG_SPECIFIC (inner_type)
11405               && TYPE_BEING_DEFINED (inner_type)))
11406         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11407     }
11408 }
11409
11410 /* Called when a class type (given by TYPE) is defined.  If there are
11411    any existing VAR_DECLs whose type hsa been completed by this
11412    declaration, update them now.  */
11413
11414 void
11415 complete_vars (tree type)
11416 {
11417   tree *list = &incomplete_vars;
11418
11419   gcc_assert (CLASS_TYPE_P (type));
11420   while (*list)
11421     {
11422       if (same_type_p (type, TREE_PURPOSE (*list)))
11423         {
11424           tree var = TREE_VALUE (*list);
11425           tree type = TREE_TYPE (var);
11426           /* Complete the type of the variable.  The VAR_DECL itself
11427              will be laid out in expand_expr.  */
11428           complete_type (type);
11429           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11430           /* Remove this entry from the list.  */
11431           *list = TREE_CHAIN (*list);
11432         }
11433       else
11434         list = &TREE_CHAIN (*list);
11435     }
11436
11437   /* Check for pending declarations which may have abstract type.  */
11438   complete_type_check_abstract (type);
11439 }
11440
11441 /* If DECL is of a type which needs a cleanup, build that cleanup
11442    here.  */
11443
11444 tree
11445 cxx_maybe_build_cleanup (tree decl)
11446 {
11447   tree type = TREE_TYPE (decl);
11448
11449   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11450     {
11451       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11452       tree rval;
11453       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11454                          && CLASSTYPE_VBASECLASSES (type));
11455
11456       if (TREE_CODE (type) == ARRAY_TYPE)
11457         rval = decl;
11458       else
11459         {
11460           cxx_mark_addressable (decl);
11461           rval = build_unary_op (ADDR_EXPR, decl, 0);
11462         }
11463
11464       /* Optimize for space over speed here.  */
11465       if (!has_vbases || flag_expensive_optimizations)
11466         flags |= LOOKUP_NONVIRTUAL;
11467
11468       rval = build_delete (TREE_TYPE (rval), rval,
11469                            sfk_complete_destructor, flags, 0);
11470
11471       return rval;
11472     }
11473   return NULL_TREE;
11474 }
11475 \f
11476 /* When a stmt has been parsed, this function is called.  */
11477
11478 void
11479 finish_stmt (void)
11480 {
11481 }
11482
11483 /* DECL was originally constructed as a non-static member function,
11484    but turned out to be static.  Update it accordingly.  */
11485
11486 void
11487 revert_static_member_fn (tree decl)
11488 {
11489   tree tmp;
11490   tree function = TREE_TYPE (decl);
11491   tree args = TYPE_ARG_TYPES (function);
11492
11493   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11494       != TYPE_UNQUALIFIED)
11495     error ("static member function %q#D declared with type qualifiers", decl);
11496
11497   args = TREE_CHAIN (args);
11498   tmp = build_function_type (TREE_TYPE (function), args);
11499   tmp = build_qualified_type (tmp, cp_type_quals (function));
11500   tmp = build_exception_variant (tmp,
11501                                  TYPE_RAISES_EXCEPTIONS (function));
11502   TREE_TYPE (decl) = tmp;
11503   if (DECL_ARGUMENTS (decl))
11504     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11505   DECL_STATIC_FUNCTION_P (decl) = 1;
11506 }
11507
11508 /* Initialize the variables used during compilation of a C++
11509    function.  */
11510
11511 void
11512 cxx_push_function_context (struct function * f)
11513 {
11514   struct language_function *p = GGC_CNEW (struct language_function);
11515   f->language = p;
11516
11517   /* Whenever we start a new function, we destroy temporaries in the
11518      usual way.  */
11519   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11520
11521   if (f->decl)
11522     {
11523       tree fn = f->decl;
11524
11525       if (DECL_SAVED_FUNCTION_DATA (fn))
11526         {
11527           /* If we already parsed this function, and we're just expanding it
11528              now, restore saved state.  */
11529           *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11530
11531           /* We don't need the saved data anymore.  Unless this is an inline
11532              function; we need the named return value info for
11533              declare_return_variable.  */
11534           if (! DECL_INLINE (fn))
11535             DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11536         }
11537     }
11538 }
11539
11540 /* Free the language-specific parts of F, now that we've finished
11541    compiling the function.  */
11542
11543 void
11544 cxx_pop_function_context (struct function * f)
11545 {
11546   f->language = 0;
11547 }
11548
11549 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11550    one of the language-independent trees.  */
11551
11552 enum cp_tree_node_structure_enum
11553 cp_tree_node_structure (union lang_tree_node * t)
11554 {
11555   switch (TREE_CODE (&t->generic))
11556     {
11557     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
11558     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
11559     case OVERLOAD:              return TS_CP_OVERLOAD;
11560     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
11561     case TINST_LEVEL:           return TS_CP_TINST_LEVEL;
11562     case PTRMEM_CST:            return TS_CP_PTRMEM;
11563     case BASELINK:              return TS_CP_BASELINK;
11564     default:                    return TS_CP_GENERIC;
11565     }
11566 }
11567
11568 /* Build the void_list_node (void_type_node having been created).  */
11569 tree
11570 build_void_list_node (void)
11571 {
11572   tree t = build_tree_list (NULL_TREE, void_type_node);
11573   return t;
11574 }
11575
11576 bool
11577 cp_missing_noreturn_ok_p (tree decl)
11578 {
11579   /* A missing noreturn is ok for the `main' function.  */
11580   return DECL_MAIN_P (decl);
11581 }
11582
11583 /* Return the COMDAT group into which DECL should be placed.  */
11584
11585 const char *
11586 cxx_comdat_group (tree decl)
11587 {
11588   tree name;
11589
11590   /* Virtual tables, construction virtual tables, and virtual table
11591      tables all go in a single COMDAT group, named after the primary
11592      virtual table.  */
11593   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11594     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11595   /* For all other DECLs, the COMDAT group is the mangled name of the
11596      declaration itself.  */
11597   else
11598     {
11599       while (DECL_THUNK_P (decl))
11600         {
11601           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11602              into the same section as the target function.  In that case
11603              we must return target's name.  */
11604           tree target = THUNK_TARGET (decl);
11605           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11606               && DECL_SECTION_NAME (target) != NULL
11607               && DECL_ONE_ONLY (target))
11608             decl = target;
11609           else
11610             break;
11611         }
11612       name = DECL_ASSEMBLER_NAME (decl);
11613     }
11614
11615   return IDENTIFIER_POINTER (name);
11616 }
11617
11618 #include "gt-cp-decl.h"