OSDN Git Service

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