OSDN Git Service

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