OSDN Git Service

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