OSDN Git Service

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