OSDN Git Service

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