OSDN Git Service

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