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