OSDN Git Service

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