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