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