OSDN Git Service

cea649ad7316d9282bcd0ccaea1e690bcc893e3b
[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 is a chain of tree_list nodes whose value fields
6877     are the storage classes and type specifiers.
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 if (warn_return_type)
7258         warning (0, "ISO C++ forbids declaration of %qs with no type", name);
7259
7260       type = integer_type_node;
7261     }
7262
7263   ctype = NULL_TREE;
7264
7265   /* Now process the modifiers that were specified
7266      and check for invalid combinations.  */
7267
7268   /* Long double is a special combination.  */
7269   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7270     {
7271       long_p = false;
7272       type = build_qualified_type (long_double_type_node,
7273                                    cp_type_quals (type));
7274     }
7275
7276   /* Check all other uses of type modifiers.  */
7277
7278   if (unsigned_p || signed_p || long_p || short_p)
7279     {
7280       int ok = 0;
7281
7282       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7283         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7284       else if (signed_p && unsigned_p)
7285         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7286       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7287         error ("%<long long%> invalid for %qs", name);
7288       else if (long_p && TREE_CODE (type) == REAL_TYPE)
7289         error ("%<long%> invalid for %qs", name);
7290       else if (short_p && TREE_CODE (type) == REAL_TYPE)
7291         error ("%<short%> invalid for %qs", name);
7292       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7293         error ("%<long%> or %<short%> invalid for %qs", name);
7294       else if ((long_p || short_p) && explicit_char)
7295         error ("%<long%> or %<short%> specified with char for %qs", name);
7296       else if (long_p && short_p)
7297         error ("%<long%> and %<short%> specified together for %qs", name);
7298       else
7299         {
7300           ok = 1;
7301           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7302             {
7303               pedwarn ("long, short, signed or unsigned used invalidly for %qs",
7304                        name);
7305               if (flag_pedantic_errors)
7306                 ok = 0;
7307             }
7308         }
7309
7310       /* Discard the type modifiers if they are invalid.  */
7311       if (! ok)
7312         {
7313           unsigned_p = false;
7314           signed_p = false;
7315           long_p = false;
7316           short_p = false;
7317           longlong = 0;
7318         }
7319     }
7320
7321   /* Decide whether an integer type is signed or not.
7322      Optionally treat bitfields as signed by default.  */
7323   if (unsigned_p
7324       /* [class.bit]
7325
7326          It is implementation-defined whether a plain (neither
7327          explicitly signed or unsigned) char, short, int, or long
7328          bit-field is signed or unsigned.
7329
7330          Naturally, we extend this to long long as well.  Note that
7331          this does not include wchar_t.  */
7332       || (bitfield && !flag_signed_bitfields
7333           && !signed_p
7334           /* A typedef for plain `int' without `signed' can be
7335              controlled just like plain `int', but a typedef for
7336              `signed int' cannot be so controlled.  */
7337           && !(typedef_decl
7338                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
7339           && TREE_CODE (type) == INTEGER_TYPE
7340           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
7341     {
7342       if (longlong)
7343         type = long_long_unsigned_type_node;
7344       else if (long_p)
7345         type = long_unsigned_type_node;
7346       else if (short_p)
7347         type = short_unsigned_type_node;
7348       else if (type == char_type_node)
7349         type = unsigned_char_type_node;
7350       else if (typedef_decl)
7351         type = c_common_unsigned_type (type);
7352       else
7353         type = unsigned_type_node;
7354     }
7355   else if (signed_p && type == char_type_node)
7356     type = signed_char_type_node;
7357   else if (longlong)
7358     type = long_long_integer_type_node;
7359   else if (long_p)
7360     type = long_integer_type_node;
7361   else if (short_p)
7362     type = short_integer_type_node;
7363
7364   if (declspecs->specs[(int)ds_complex])
7365     {
7366       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
7367         error ("complex invalid for %qs", name);
7368       /* If we just have "complex", it is equivalent to
7369          "complex double", but if any modifiers at all are specified it is
7370          the complex form of TYPE.  E.g, "complex short" is
7371          "complex short int".  */
7372
7373       else if (defaulted_int && ! longlong
7374                && ! (long_p || short_p || signed_p || unsigned_p))
7375         type = complex_double_type_node;
7376       else if (type == integer_type_node)
7377         type = complex_integer_type_node;
7378       else if (type == float_type_node)
7379         type = complex_float_type_node;
7380       else if (type == double_type_node)
7381         type = complex_double_type_node;
7382       else if (type == long_double_type_node)
7383         type = complex_long_double_type_node;
7384       else
7385         type = build_complex_type (type);
7386     }
7387
7388   type_quals = TYPE_UNQUALIFIED;
7389   if (declspecs->specs[(int)ds_const])
7390     type_quals |= TYPE_QUAL_CONST;
7391   if (declspecs->specs[(int)ds_volatile])
7392     type_quals |= TYPE_QUAL_VOLATILE;
7393   if (declspecs->specs[(int)ds_restrict])
7394     type_quals |= TYPE_QUAL_RESTRICT;
7395   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
7396     error ("qualifiers are not allowed on declaration of %<operator %T%>",
7397            ctor_return_type);
7398
7399   if (TREE_CODE (type) == FUNCTION_TYPE
7400       && type_quals != TYPE_UNQUALIFIED)
7401     {
7402       /* This was an error in C++98 (cv-qualifiers cannot be added to
7403          a function type), but DR 295 makes the code well-formed by
7404          dropping the extra qualifiers. */
7405       if (pedantic)
7406         {
7407           tree bad_type = build_qualified_type (type, type_quals);
7408           pedwarn ("ignoring %qV qualifiers added to function type %qT",
7409                    bad_type, type);
7410         }
7411       type_quals = TYPE_UNQUALIFIED;
7412     }
7413   type_quals |= cp_type_quals (type);
7414   type = cp_build_qualified_type_real
7415     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
7416                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
7417   /* We might have ignored or rejected some of the qualifiers.  */
7418   type_quals = cp_type_quals (type);
7419
7420   staticp = 0;
7421   inlinep = !! declspecs->specs[(int)ds_inline];
7422   virtualp = !! declspecs->specs[(int)ds_virtual];
7423   explicitp = !! declspecs->specs[(int)ds_explicit];
7424
7425   storage_class = declspecs->storage_class;
7426   if (storage_class == sc_static)
7427     staticp = 1 + (decl_context == FIELD);
7428
7429   if (virtualp && staticp == 2)
7430     {
7431       error ("member %qD cannot be declared both virtual and static", dname);
7432       storage_class = sc_none;
7433       staticp = 0;
7434     }
7435   friendp = !! declspecs->specs[(int)ds_friend];
7436
7437   if (dependent_name && !friendp)
7438     {
7439       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
7440       return error_mark_node;
7441     }
7442
7443   /* Issue errors about use of storage classes for parameters.  */
7444   if (decl_context == PARM)
7445     {
7446       if (declspecs->specs[(int)ds_typedef])
7447         {
7448           error ("typedef declaration invalid in parameter declaration");
7449           return error_mark_node;
7450         }
7451       else if (storage_class == sc_static
7452                || storage_class == sc_extern
7453                || thread_p)
7454         error ("storage class specifiers invalid in parameter declarations");
7455     }
7456
7457   /* Give error if `virtual' is used outside of class declaration.  */
7458   if (virtualp
7459       && (current_class_name == NULL_TREE || decl_context != FIELD))
7460     {
7461       error ("virtual outside class declaration");
7462       virtualp = 0;
7463     }
7464
7465   /* Static anonymous unions are dealt with here.  */
7466   if (staticp && decl_context == TYPENAME
7467       && declspecs->type
7468       && ANON_AGGR_TYPE_P (declspecs->type))
7469     decl_context = FIELD;
7470
7471   /* Warn about storage classes that are invalid for certain
7472      kinds of declarations (parameters, typenames, etc.).  */
7473   if (declspecs->conflicting_specifiers_p)
7474     {
7475       error ("conflicting specifiers in declaration of %qs", name);
7476       storage_class = sc_none;
7477     }
7478   else if (thread_p
7479            && ((storage_class
7480                 && storage_class != sc_extern
7481                 && storage_class != sc_static)
7482                || declspecs->specs[(int)ds_typedef]))
7483     {
7484       error ("multiple storage classes in declaration of %qs", name);
7485       thread_p = false;
7486     }
7487   else if (decl_context != NORMAL
7488            && ((storage_class != sc_none
7489                 && storage_class != sc_mutable)
7490                || thread_p))
7491     {
7492       if ((decl_context == PARM || decl_context == CATCHPARM)
7493           && (storage_class == sc_register
7494               || storage_class == sc_auto))
7495         ;
7496       else if (declspecs->specs[(int)ds_typedef])
7497         ;
7498       else if (decl_context == FIELD
7499                /* C++ allows static class elements.  */
7500                && storage_class == sc_static)
7501         /* C++ also allows inlines and signed and unsigned elements,
7502            but in those cases we don't come in here.  */
7503         ;
7504       else
7505         {
7506           if (decl_context == FIELD)
7507             error ("storage class specified for %qs", name);
7508           else
7509             {
7510               if (decl_context == PARM || decl_context == CATCHPARM)
7511                 error ("storage class specified for parameter %qs", name);
7512               else
7513                 error ("storage class specified for typename");
7514             }
7515           if (storage_class == sc_register
7516               || storage_class == sc_auto
7517               || storage_class == sc_extern
7518               || thread_p)
7519             storage_class = sc_none;
7520         }
7521     }
7522   else if (storage_class == sc_extern && initialized
7523            && !funcdef_flag)
7524     {
7525       if (toplevel_bindings_p ())
7526         {
7527           /* It's common practice (and completely valid) to have a const
7528              be initialized and declared extern.  */
7529           if (!(type_quals & TYPE_QUAL_CONST))
7530             warning (0, "%qs initialized and declared %<extern%>", name);
7531         }
7532       else
7533         error ("%qs has both %<extern%> and initializer", name);
7534     }
7535   else if (storage_class == sc_extern && funcdef_flag
7536            && ! toplevel_bindings_p ())
7537     error ("nested function %qs declared %<extern%>", name);
7538   else if (toplevel_bindings_p ())
7539     {
7540       if (storage_class == sc_auto)
7541         error ("top-level declaration of %qs specifies %<auto%>", name);
7542     }
7543   else if (thread_p
7544            && storage_class != sc_extern
7545            && storage_class != sc_static)
7546     {
7547       error ("function-scope %qs implicitly auto and declared %<__thread%>",
7548              name);
7549       thread_p = false;
7550     }
7551
7552   if (storage_class && friendp)
7553     error ("storage class specifiers invalid in friend function declarations");
7554
7555   if (!id_declarator)
7556     unqualified_id = NULL_TREE;
7557   else
7558     {
7559       unqualified_id = id_declarator->u.id.unqualified_name;
7560       switch (TREE_CODE (unqualified_id))
7561         {
7562         case BIT_NOT_EXPR:
7563           unqualified_id
7564             = constructor_name (TREE_OPERAND (unqualified_id, 0));
7565           break;
7566
7567         case IDENTIFIER_NODE:
7568         case TEMPLATE_ID_EXPR:
7569           break;
7570
7571         default:
7572           gcc_unreachable ();
7573         }
7574     }
7575
7576   /* Determine the type of the entity declared by recurring on the
7577      declarator.  */
7578   for (; declarator; declarator = declarator->declarator)
7579     {
7580       const cp_declarator *inner_declarator;
7581       tree attrs;
7582
7583       if (type == error_mark_node)
7584         return error_mark_node;
7585
7586       attrs = declarator->attributes;
7587       if (attrs)
7588         {
7589           int attr_flags;
7590
7591           attr_flags = 0;
7592           if (declarator == NULL || declarator->kind == cdk_id)
7593             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
7594           if (declarator->kind == cdk_function)
7595             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
7596           if (declarator->kind == cdk_array)
7597             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
7598           returned_attrs = decl_attributes (&type,
7599                                             chainon (returned_attrs, attrs),
7600                                             attr_flags);
7601         }
7602
7603       if (declarator->kind == cdk_id)
7604         break;
7605
7606       inner_declarator = declarator->declarator;
7607
7608       switch (declarator->kind)
7609         {
7610         case cdk_array:
7611           type = create_array_type_for_decl (dname, type,
7612                                              declarator->u.array.bounds);
7613           break;
7614
7615         case cdk_function:
7616           {
7617             tree arg_types;
7618             int funcdecl_p;
7619
7620             /* Declaring a function type.
7621                Make sure we have a valid type for the function to return.  */
7622
7623             if (type_quals != TYPE_UNQUALIFIED)
7624               {
7625                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
7626                   warning (OPT_Wreturn_type,
7627                            "type qualifiers ignored on function return type");
7628                 /* We now know that the TYPE_QUALS don't apply to the
7629                    decl, but to its return type.  */
7630                 type_quals = TYPE_UNQUALIFIED;
7631                 set_no_warning = true;
7632               }
7633
7634             /* Warn about some types functions can't return.  */
7635
7636             if (TREE_CODE (type) == FUNCTION_TYPE)
7637               {
7638                 error ("%qs declared as function returning a function", name);
7639                 type = integer_type_node;
7640               }
7641             if (TREE_CODE (type) == ARRAY_TYPE)
7642               {
7643                 error ("%qs declared as function returning an array", name);
7644                 type = integer_type_node;
7645               }
7646
7647             /* Pick up type qualifiers which should be applied to `this'.  */
7648             memfn_quals = declarator->u.function.qualifiers;
7649
7650             /* Pick up the exception specifications.  */
7651             raises = declarator->u.function.exception_specification;
7652
7653             /* Say it's a definition only for the CALL_EXPR
7654                closest to the identifier.  */
7655             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
7656
7657             if (ctype == NULL_TREE
7658                 && decl_context == FIELD
7659                 && funcdecl_p
7660                 && (friendp == 0 || dname == current_class_name))
7661               ctype = current_class_type;
7662
7663             if (ctype && (sfk == sfk_constructor
7664                           || sfk == sfk_destructor))
7665               {
7666                 /* We are within a class's scope. If our declarator name
7667                    is the same as the class name, and we are defining
7668                    a function, then it is a constructor/destructor, and
7669                    therefore returns a void type.  */
7670
7671                 /* ISO C++ 12.4/2.  A destructor may not be declared
7672                    const or volatile.  A destructor may not be
7673                    static.
7674
7675                    ISO C++ 12.1.  A constructor may not be declared
7676                    const or volatile.  A constructor may not be
7677                    virtual.  A constructor may not be static.  */
7678                 if (staticp == 2)
7679                   error ((flags == DTOR_FLAG)
7680                          ? "destructor cannot be static member function"
7681                          : "constructor cannot be static member function");
7682                 if (memfn_quals)
7683                   {
7684                     error ((flags == DTOR_FLAG)
7685                            ? "destructors may not be cv-qualified"
7686                            : "constructors may not be cv-qualified");
7687                     memfn_quals = TYPE_UNQUALIFIED;
7688                   }
7689
7690                 if (decl_context == FIELD
7691                     && !member_function_or_else (ctype,
7692                                                  current_class_type,
7693                                                  flags))
7694                   return error_mark_node;
7695
7696                 if (flags != DTOR_FLAG)
7697                   {
7698                     /* It's a constructor.  */
7699                     if (explicitp == 1)
7700                       explicitp = 2;
7701                     if (virtualp)
7702                       {
7703                         pedwarn ("constructors cannot be declared virtual");
7704                         virtualp = 0;
7705                       }
7706                     if (decl_context == FIELD
7707                         && sfk != sfk_constructor)
7708                       return error_mark_node;
7709                   }
7710                 if (decl_context == FIELD)
7711                   staticp = 0;
7712               }
7713             else if (friendp)
7714               {
7715                 if (initialized)
7716                   error ("can't initialize friend function %qs", name);
7717                 if (virtualp)
7718                   {
7719                     /* Cannot be both friend and virtual.  */
7720                     error ("virtual functions cannot be friends");
7721                     friendp = 0;
7722                   }
7723                 if (decl_context == NORMAL)
7724                   error ("friend declaration not in class definition");
7725                 if (current_function_decl && funcdef_flag)
7726                   error ("can't define friend function %qs in a local "
7727                          "class definition",
7728                          name);
7729               }
7730
7731             arg_types = grokparms (declarator->u.function.parameters,
7732                                    &parms);
7733
7734             if (inner_declarator
7735                 && inner_declarator->kind == cdk_id
7736                 && inner_declarator->u.id.sfk == sfk_destructor
7737                 && arg_types != void_list_node)
7738               {
7739                 error ("destructors may not have parameters");
7740                 arg_types = void_list_node;
7741                 parms = NULL_TREE;
7742               }
7743
7744             type = build_function_type (type, arg_types);
7745           }
7746           break;
7747
7748         case cdk_pointer:
7749         case cdk_reference:
7750         case cdk_ptrmem:
7751           /* Filter out pointers-to-references and references-to-references.
7752              We can get these if a TYPE_DECL is used.  */
7753
7754           if (TREE_CODE (type) == REFERENCE_TYPE)
7755             {
7756               error (declarator->kind == cdk_reference
7757                      ? "cannot declare reference to %q#T"
7758                      : "cannot declare pointer to %q#T", type);
7759               type = TREE_TYPE (type);
7760             }
7761           else if (VOID_TYPE_P (type))
7762             {
7763               if (declarator->kind == cdk_reference)
7764                 error ("cannot declare reference to %q#T", type);
7765               else if (declarator->kind == cdk_ptrmem)
7766                 error ("cannot declare pointer to %q#T member", type);
7767             }
7768
7769           /* We now know that the TYPE_QUALS don't apply to the decl,
7770              but to the target of the pointer.  */
7771           type_quals = TYPE_UNQUALIFIED;
7772
7773           if (declarator->kind == cdk_ptrmem
7774               && (TREE_CODE (type) == FUNCTION_TYPE || memfn_quals))
7775             {
7776               memfn_quals |= cp_type_quals (type);
7777               type = build_memfn_type (type,
7778                                        declarator->u.pointer.class_type,
7779                                        memfn_quals);
7780               memfn_quals = TYPE_UNQUALIFIED;
7781             }
7782
7783           if (declarator->kind == cdk_reference)
7784             {
7785               if (!VOID_TYPE_P (type))
7786                 type = build_reference_type (type);
7787             }
7788           else if (TREE_CODE (type) == METHOD_TYPE)
7789             type = build_ptrmemfunc_type (build_pointer_type (type));
7790           else if (declarator->kind == cdk_ptrmem)
7791             {
7792               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
7793                           != NAMESPACE_DECL);
7794               if (declarator->u.pointer.class_type == error_mark_node)
7795                 /* We will already have complained.  */
7796                 type = error_mark_node;
7797               else
7798                 type = build_ptrmem_type (declarator->u.pointer.class_type,
7799                                           type);
7800             }
7801           else
7802             type = build_pointer_type (type);
7803
7804           /* Process a list of type modifier keywords (such as
7805              const or volatile) that were given inside the `*' or `&'.  */
7806
7807           if (declarator->u.pointer.qualifiers)
7808             {
7809               type
7810                 = cp_build_qualified_type (type,
7811                                            declarator->u.pointer.qualifiers);
7812               type_quals = cp_type_quals (type);
7813             }
7814           ctype = NULL_TREE;
7815           break;
7816
7817         case cdk_error:
7818           break;
7819
7820         default:
7821           gcc_unreachable ();
7822         }
7823     }
7824
7825   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
7826       && TREE_CODE (type) != FUNCTION_TYPE
7827       && TREE_CODE (type) != METHOD_TYPE)
7828     {
7829       error ("template-id %qD used as a declarator",
7830              unqualified_id);
7831       unqualified_id = dname;
7832     }
7833
7834   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
7835      qualified with a class-name, turn it into a METHOD_TYPE, unless
7836      we know that the function is static.  We take advantage of this
7837      opportunity to do other processing that pertains to entities
7838      explicitly declared to be class members.  Note that if DECLARATOR
7839      is non-NULL, we know it is a cdk_id declarator; otherwise, we
7840      would not have exited the loop above.  */
7841   if (declarator
7842       && declarator->u.id.qualifying_scope
7843       && TYPE_P (declarator->u.id.qualifying_scope))
7844     {
7845       tree t;
7846
7847       ctype = declarator->u.id.qualifying_scope;
7848       ctype = TYPE_MAIN_VARIANT (ctype);
7849       t = ctype;
7850       while (t != NULL_TREE && CLASS_TYPE_P (t))
7851         {
7852           /* You're supposed to have one `template <...>' for every
7853              template class, but you don't need one for a full
7854              specialization.  For example:
7855
7856                template <class T> struct S{};
7857                template <> struct S<int> { void f(); };
7858                void S<int>::f () {}
7859
7860              is correct; there shouldn't be a `template <>' for the
7861              definition of `S<int>::f'.  */
7862           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
7863               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
7864             /* T is an explicit (not partial) specialization.  All
7865                containing classes must therefore also be explicitly
7866                specialized.  */
7867             break;
7868           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
7869               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
7870             template_count += 1;
7871
7872           t = TYPE_MAIN_DECL (t);
7873           t = DECL_CONTEXT (t);
7874         }
7875
7876       if (ctype == current_class_type)
7877         {
7878           if (friendp)
7879             pedwarn ("member functions are implicitly friends of their class");
7880           else
7881             pedwarn ("extra qualification %<%T::%> on member %qs",
7882                      ctype, name);
7883         }
7884       else if (/* If the qualifying type is already complete, then we
7885                   can skip the following checks.  */
7886                !COMPLETE_TYPE_P (ctype)
7887                && (/* If the function is being defined, then
7888                       qualifying type must certainly be complete.  */
7889                    funcdef_flag
7890                    /* A friend declaration of "T::f" is OK, even if
7891                       "T" is a template parameter.  But, if this
7892                       function is not a friend, the qualifying type
7893                       must be a class.  */
7894                    || (!friendp && !CLASS_TYPE_P (ctype))
7895                    /* For a declaration, the type need not be
7896                       complete, if either it is dependent (since there
7897                       is no meaningful definition of complete in that
7898                       case) or the qualifying class is currently being
7899                       defined.  */
7900                    || !(dependent_type_p (ctype)
7901                         || currently_open_class (ctype)))
7902                /* Check that the qualifying type is complete.  */
7903                && !complete_type_or_else (ctype, NULL_TREE))
7904         return error_mark_node;
7905       else if (TREE_CODE (type) == FUNCTION_TYPE)
7906         {
7907           tree sname = declarator->u.id.unqualified_name;
7908
7909           if (current_class_type
7910               && (!friendp || funcdef_flag))
7911             {
7912               error (funcdef_flag
7913                      ? "cannot define member function %<%T::%s%> within %<%T%>"
7914                      : "cannot declare member function %<%T::%s%> within %<%T%>",
7915                      ctype, name, current_class_type);
7916               return error_mark_node;
7917             }
7918
7919           if (TREE_CODE (sname) == IDENTIFIER_NODE
7920               && NEW_DELETE_OPNAME_P (sname))
7921             /* Overloaded operator new and operator delete
7922                are always static functions.  */
7923             ;
7924           else
7925             type = build_memfn_type (type, ctype, memfn_quals);
7926         }
7927       else if (declspecs->specs[(int)ds_typedef]
7928                && current_class_type)
7929         {
7930           error ("cannot declare member %<%T::%s%> within %qT",
7931                  ctype, name, current_class_type);
7932           return error_mark_node;
7933         }
7934     }
7935
7936   /* Now TYPE has the actual type.  */
7937
7938   if (returned_attrs)
7939     {
7940       if (attrlist)
7941         *attrlist = chainon (returned_attrs, *attrlist);
7942       else
7943         attrlist = &returned_attrs;
7944     }
7945
7946   /* Did array size calculations overflow?  */
7947
7948   if (TREE_CODE (type) == ARRAY_TYPE
7949       && COMPLETE_TYPE_P (type)
7950       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
7951       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
7952     {
7953       error ("size of array %qs is too large", name);
7954       /* If we proceed with the array type as it is, we'll eventually
7955          crash in tree_low_cst().  */
7956       type = error_mark_node;
7957     }
7958
7959   if ((decl_context == FIELD || decl_context == PARM)
7960       && !processing_template_decl
7961       && variably_modified_type_p (type, NULL_TREE))
7962     {
7963       if (decl_context == FIELD)
7964         error ("data member may not have variably modified type %qT", type);
7965       else
7966         error ("parameter may not have variably modified type %qT", type);
7967       type = error_mark_node;
7968     }
7969
7970   if (explicitp == 1 || (explicitp && friendp))
7971     {
7972       /* [dcl.fct.spec] The explicit specifier shall only be used in
7973          declarations of constructors within a class definition.  */
7974       error ("only declarations of constructors can be %<explicit%>");
7975       explicitp = 0;
7976     }
7977
7978   if (storage_class == sc_mutable)
7979     {
7980       if (decl_context != FIELD || friendp)
7981         {
7982           error ("non-member %qs cannot be declared %<mutable%>", name);
7983           storage_class = sc_none;
7984         }
7985       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
7986         {
7987           error ("non-object member %qs cannot be declared %<mutable%>", name);
7988           storage_class = sc_none;
7989         }
7990       else if (TREE_CODE (type) == FUNCTION_TYPE
7991                || TREE_CODE (type) == METHOD_TYPE)
7992         {
7993           error ("function %qs cannot be declared %<mutable%>", name);
7994           storage_class = sc_none;
7995         }
7996       else if (staticp)
7997         {
7998           error ("static %qs cannot be declared %<mutable%>", name);
7999           storage_class = sc_none;
8000         }
8001       else if (type_quals & TYPE_QUAL_CONST)
8002         {
8003           error ("const %qs cannot be declared %<mutable%>", name);
8004           storage_class = sc_none;
8005         }
8006     }
8007
8008   /* If this is declaring a typedef name, return a TYPE_DECL.  */
8009   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8010     {
8011       tree decl;
8012
8013       /* Note that the grammar rejects storage classes
8014          in typenames, fields or parameters.  */
8015       if (current_lang_name == lang_name_java)
8016         TYPE_FOR_JAVA (type) = 1;
8017
8018       /* This declaration:
8019
8020            typedef void f(int) const;
8021
8022          declares a function type which is not a member of any
8023          particular class, but which is cv-qualified; for
8024          example "f S::*" declares a pointer to a const-qualified
8025          member function of S.  We record the cv-qualification in the
8026          function type.  */
8027       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8028         type = cp_build_qualified_type (type, memfn_quals);
8029
8030       if (decl_context == FIELD)
8031         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8032       else
8033         decl = build_decl (TYPE_DECL, unqualified_id, type);
8034       if (id_declarator && declarator->u.id.qualifying_scope)
8035         error ("%Jtypedef name may not be a nested-name-specifier", decl);
8036
8037       if (decl_context != FIELD)
8038         {
8039           if (!current_function_decl)
8040             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8041           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8042                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8043                        (current_function_decl)))
8044             /* The TYPE_DECL is "abstract" because there will be
8045                clones of this constructor/destructor, and there will
8046                be copies of this TYPE_DECL generated in those
8047                clones.  */
8048             DECL_ABSTRACT (decl) = 1;
8049         }
8050       else if (constructor_name_p (unqualified_id, current_class_type))
8051         pedwarn ("ISO C++ forbids nested type %qD with same name "
8052                  "as enclosing class",
8053                  unqualified_id);
8054
8055       /* If the user declares "typedef struct {...} foo" then the
8056          struct will have an anonymous name.  Fill that name in now.
8057          Nothing can refer to it, so nothing needs know about the name
8058          change.  */
8059       if (type != error_mark_node
8060           && unqualified_id
8061           && TYPE_NAME (type)
8062           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8063           && TYPE_ANONYMOUS_P (type)
8064           /* Don't do this if there are attributes.  */
8065           && (!attrlist || !*attrlist)
8066           && cp_type_quals (type) == TYPE_UNQUALIFIED)
8067         {
8068           tree oldname = TYPE_NAME (type);
8069           tree t;
8070
8071           /* Replace the anonymous name with the real name everywhere.  */
8072           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8073             if (TYPE_NAME (t) == oldname)
8074               TYPE_NAME (t) = decl;
8075
8076           if (TYPE_LANG_SPECIFIC (type))
8077             TYPE_WAS_ANONYMOUS (type) = 1;
8078
8079           /* If this is a typedef within a template class, the nested
8080              type is a (non-primary) template.  The name for the
8081              template needs updating as well.  */
8082           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
8083             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
8084               = TYPE_IDENTIFIER (type);
8085
8086           /* FIXME remangle member functions; member functions of a
8087              type with external linkage have external linkage.  */
8088         }
8089
8090         /* Any qualifiers on a function type typedef have already been
8091            dealt with. */
8092       if (memfn_quals && !ctype && TREE_CODE (type) == FUNCTION_TYPE)
8093         memfn_quals = TYPE_UNQUALIFIED;
8094
8095       if (signed_p
8096           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8097         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8098
8099       bad_specifiers (decl, "type", virtualp,
8100                       memfn_quals != TYPE_UNQUALIFIED,
8101                       inlinep, friendp, raises != NULL_TREE);
8102
8103       return decl;
8104     }
8105
8106   /* Detect the case of an array type of unspecified size
8107      which came, as such, direct from a typedef name.
8108      We must copy the type, so that the array's domain can be
8109      individually set by the object's initializer.  */
8110
8111   if (type && typedef_type
8112       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
8113       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8114     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8115
8116   /* Detect where we're using a typedef of function type to declare a
8117      function. PARMS will not be set, so we must create it now.  */
8118
8119   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8120     {
8121       tree decls = NULL_TREE;
8122       tree args;
8123
8124       for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8125         {
8126           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
8127
8128           TREE_CHAIN (decl) = decls;
8129           decls = decl;
8130         }
8131
8132       parms = nreverse (decls);
8133
8134       if (decl_context != TYPENAME)
8135         {
8136           /* A cv-qualifier-seq shall only be part of the function type
8137              for a non-static member function. [8.3.5/4 dcl.fct] */
8138           if (cp_type_quals (type) != TYPE_UNQUALIFIED
8139               && (current_class_type == NULL_TREE || staticp) )
8140             {
8141               error (staticp
8142                      ? G_("qualified function types cannot be used to "
8143                           "declare static member functions")
8144                      : G_("qualified function types cannot be used to "
8145                           "declare free functions"));
8146               type = TYPE_MAIN_VARIANT (type);
8147             }
8148
8149           /* The qualifiers on the function type become the qualifiers on
8150              the non-static member function. */
8151           memfn_quals |= cp_type_quals (type);
8152         }
8153     }
8154
8155   /* If this is a type name (such as, in a cast or sizeof),
8156      compute the type and return it now.  */
8157
8158   if (decl_context == TYPENAME)
8159     {
8160       /* Note that the grammar rejects storage classes
8161          in typenames, fields or parameters.  */
8162       if (type_quals != TYPE_UNQUALIFIED)
8163         type_quals = TYPE_UNQUALIFIED;
8164
8165       /* Special case: "friend class foo" looks like a TYPENAME context.  */
8166       if (friendp)
8167         {
8168           if (type_quals != TYPE_UNQUALIFIED)
8169             {
8170               error ("type qualifiers specified for friend class declaration");
8171               type_quals = TYPE_UNQUALIFIED;
8172             }
8173           if (inlinep)
8174             {
8175               error ("%<inline%> specified for friend class declaration");
8176               inlinep = 0;
8177             }
8178
8179           if (!current_aggr)
8180             {
8181               /* Don't allow friend declaration without a class-key.  */
8182               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8183                 pedwarn ("template parameters cannot be friends");
8184               else if (TREE_CODE (type) == TYPENAME_TYPE)
8185                 pedwarn ("friend declaration requires class-key, "
8186                          "i.e. %<friend class %T::%D%>",
8187                          TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8188               else
8189                 pedwarn ("friend declaration requires class-key, "
8190                          "i.e. %<friend %#T%>",
8191                          type);
8192             }
8193
8194           /* Only try to do this stuff if we didn't already give up.  */
8195           if (type != integer_type_node)
8196             {
8197               /* A friendly class?  */
8198               if (current_class_type)
8199                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8200                                    /*complain=*/true);
8201               else
8202                 error ("trying to make class %qT a friend of global scope",
8203                        type);
8204
8205               type = void_type_node;
8206             }
8207         }
8208       else if (memfn_quals)
8209         {
8210           if (ctype == NULL_TREE)
8211             {
8212               if (TREE_CODE (type) != METHOD_TYPE)
8213                 error ("invalid qualifiers on non-member function type");
8214               else
8215                 ctype = TYPE_METHOD_BASETYPE (type);
8216             }
8217           if (ctype)
8218             type = build_memfn_type (type, ctype, memfn_quals);
8219         }
8220
8221       return type;
8222     }
8223   else if (unqualified_id == NULL_TREE && decl_context != PARM
8224            && decl_context != CATCHPARM
8225            && TREE_CODE (type) != UNION_TYPE
8226            && ! bitfield)
8227     {
8228       error ("abstract declarator %qT used as declaration", type);
8229       return error_mark_node;
8230     }
8231
8232   /* Only functions may be declared using an operator-function-id.  */
8233   if (unqualified_id
8234       && IDENTIFIER_OPNAME_P (unqualified_id)
8235       && TREE_CODE (type) != FUNCTION_TYPE
8236       && TREE_CODE (type) != METHOD_TYPE)
8237     {
8238       error ("declaration of %qD as non-function", unqualified_id);
8239       return error_mark_node;
8240     }
8241
8242   /* We don't check parameter types here because we can emit a better
8243      error message later.  */
8244   if (decl_context != PARM)
8245     {
8246       type = check_var_type (unqualified_id, type);
8247       if (type == error_mark_node)
8248         return error_mark_node;
8249     }
8250
8251   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
8252      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
8253
8254   if (decl_context == PARM || decl_context == CATCHPARM)
8255     {
8256       if (ctype || in_namespace)
8257         error ("cannot use %<::%> in parameter declaration");
8258
8259       /* A parameter declared as an array of T is really a pointer to T.
8260          One declared as a function is really a pointer to a function.
8261          One declared as a member is really a pointer to member.  */
8262
8263       if (TREE_CODE (type) == ARRAY_TYPE)
8264         {
8265           /* Transfer const-ness of array into that of type pointed to.  */
8266           type = build_pointer_type (TREE_TYPE (type));
8267           type_quals = TYPE_UNQUALIFIED;
8268         }
8269       else if (TREE_CODE (type) == FUNCTION_TYPE)
8270         type = build_pointer_type (type);
8271     }
8272
8273   {
8274     tree decl;
8275
8276     if (decl_context == PARM)
8277       {
8278         decl = cp_build_parm_decl (unqualified_id, type);
8279
8280         bad_specifiers (decl, "parameter", virtualp,
8281                         memfn_quals != TYPE_UNQUALIFIED,
8282                         inlinep, friendp, raises != NULL_TREE);
8283       }
8284     else if (decl_context == FIELD)
8285       {
8286         /* The C99 flexible array extension.  */
8287         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
8288             && TYPE_DOMAIN (type) == NULL_TREE)
8289           {
8290             tree itype = compute_array_index_type (dname, integer_zero_node);
8291             type = build_cplus_array_type (TREE_TYPE (type), itype);
8292           }
8293
8294         if (type == error_mark_node)
8295           {
8296             /* Happens when declaring arrays of sizes which
8297                are error_mark_node, for example.  */
8298             decl = NULL_TREE;
8299           }
8300         else if (in_namespace && !friendp)
8301           {
8302             /* Something like struct S { int N::j; };  */
8303             error ("invalid use of %<::%>");
8304             return error_mark_node;
8305           }
8306         else if (TREE_CODE (type) == FUNCTION_TYPE)
8307           {
8308             int publicp = 0;
8309             tree function_context;
8310
8311             if (friendp == 0)
8312               {
8313                 if (ctype == NULL_TREE)
8314                   ctype = current_class_type;
8315
8316                 if (ctype == NULL_TREE)
8317                   {
8318                     error ("can't make %qD into a method -- not in a class",
8319                            unqualified_id);
8320                     return error_mark_node;
8321                   }
8322
8323                 /* ``A union may [ ... ] not [ have ] virtual functions.''
8324                    ARM 9.5 */
8325                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
8326                   {
8327                     error ("function %qD declared virtual inside a union",
8328                            unqualified_id);
8329                     return error_mark_node;
8330                   }
8331
8332                 if (NEW_DELETE_OPNAME_P (unqualified_id))
8333                   {
8334                     if (virtualp)
8335                       {
8336                         error ("%qD cannot be declared virtual, since it "
8337                                "is always static",
8338                                unqualified_id);
8339                         virtualp = 0;
8340                       }
8341                   }
8342                 else if (staticp < 2)
8343                   type = build_memfn_type (type, ctype, memfn_quals);
8344               }
8345
8346             /* Check that the name used for a destructor makes sense.  */
8347             if (sfk == sfk_destructor)
8348               {
8349                 if (!ctype)
8350                   {
8351                     gcc_assert (friendp);
8352                     error ("expected qualified name in friend declaration "
8353                            "for destructor %qD",
8354                            id_declarator->u.id.unqualified_name);
8355                     return error_mark_node;
8356                   }
8357
8358                 if (!same_type_p (TREE_OPERAND
8359                                   (id_declarator->u.id.unqualified_name, 0),
8360                                   ctype))
8361                   {
8362                     error ("declaration of %qD as member of %qT",
8363                            id_declarator->u.id.unqualified_name, ctype);
8364                     return error_mark_node;
8365                   }
8366               }
8367
8368             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
8369             function_context = (ctype != NULL_TREE) ?
8370               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8371             publicp = (! friendp || ! staticp)
8372               && function_context == NULL_TREE;
8373             decl = grokfndecl (ctype, type,
8374                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8375                                ? unqualified_id : dname,
8376                                parms,
8377                                unqualified_id,
8378                                virtualp, flags, memfn_quals, raises,
8379                                friendp ? -1 : 0, friendp, publicp, inlinep,
8380                                sfk,
8381                                funcdef_flag, template_count, in_namespace, attrlist);
8382             if (decl == NULL_TREE)
8383               return error_mark_node;
8384 #if 0
8385             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
8386             /* The decl and setting of decl_attr is also turned off.  */
8387             decl = build_decl_attribute_variant (decl, decl_attr);
8388 #endif
8389
8390             /* [class.conv.ctor]
8391
8392                A constructor declared without the function-specifier
8393                explicit that can be called with a single parameter
8394                specifies a conversion from the type of its first
8395                parameter to the type of its class.  Such a constructor
8396                is called a converting constructor.  */
8397             if (explicitp == 2)
8398               DECL_NONCONVERTING_P (decl) = 1;
8399             else if (DECL_CONSTRUCTOR_P (decl))
8400               {
8401                 /* The constructor can be called with exactly one
8402                    parameter if there is at least one parameter, and
8403                    any subsequent parameters have default arguments.
8404                    Ignore any compiler-added parms.  */
8405                 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8406
8407                 if (arg_types == void_list_node
8408                     || (arg_types
8409                         && TREE_CHAIN (arg_types)
8410                         && TREE_CHAIN (arg_types) != void_list_node
8411                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8412                   DECL_NONCONVERTING_P (decl) = 1;
8413               }
8414           }
8415         else if (TREE_CODE (type) == METHOD_TYPE)
8416           {
8417             /* We only get here for friend declarations of
8418                members of other classes.  */
8419             /* All method decls are public, so tell grokfndecl to set
8420                TREE_PUBLIC, also.  */
8421             decl = grokfndecl (ctype, type,
8422                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8423                                ? unqualified_id : dname,
8424                                parms,
8425                                unqualified_id,
8426                                virtualp, flags, memfn_quals, raises,
8427                                friendp ? -1 : 0, friendp, 1, 0, sfk,
8428                                funcdef_flag, template_count, in_namespace,
8429                                attrlist);
8430             if (decl == NULL_TREE)
8431               return error_mark_node;
8432           }
8433         else if (!staticp && !dependent_type_p (type)
8434                  && !COMPLETE_TYPE_P (complete_type (type))
8435                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8436           {
8437             if (unqualified_id)
8438               error ("field %qD has incomplete type", unqualified_id);
8439             else
8440               error ("name %qT has incomplete type", type);
8441
8442             /* If we're instantiating a template, tell them which
8443                instantiation made the field's type be incomplete.  */
8444             if (current_class_type
8445                 && TYPE_NAME (current_class_type)
8446                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8447                 && declspecs->type
8448                 && declspecs->type == type)
8449               error ("  in instantiation of template %qT",
8450                      current_class_type);
8451
8452             return error_mark_node;
8453           }
8454         else
8455           {
8456             if (friendp)
8457               {
8458                 error ("%qE is neither function nor member function; "
8459                        "cannot be declared friend", unqualified_id);
8460                 friendp = 0;
8461               }
8462             decl = NULL_TREE;
8463           }
8464
8465         if (friendp)
8466           {
8467             /* Friends are treated specially.  */
8468             if (ctype == current_class_type)
8469               ;  /* We already issued a pedwarn.  */
8470             else if (decl && DECL_NAME (decl))
8471               {
8472                 if (template_class_depth (current_class_type) == 0)
8473                   {
8474                     decl = check_explicit_specialization
8475                       (unqualified_id, decl, template_count,
8476                        2 * funcdef_flag + 4);
8477                     if (decl == error_mark_node)
8478                       return error_mark_node;
8479                   }
8480
8481                 decl = do_friend (ctype, unqualified_id, decl,
8482                                   *attrlist, flags,
8483                                   funcdef_flag);
8484                 return decl;
8485               }
8486             else
8487               return error_mark_node;
8488           }
8489
8490         /* Structure field.  It may not be a function, except for C++.  */
8491
8492         if (decl == NULL_TREE)
8493           {
8494             if (initialized)
8495               {
8496                 if (!staticp)
8497                   {
8498                     /* An attempt is being made to initialize a non-static
8499                        member.  But, from [class.mem]:
8500
8501                        4 A member-declarator can contain a
8502                        constant-initializer only if it declares a static
8503                        member (_class.static_) of integral or enumeration
8504                        type, see _class.static.data_.
8505
8506                        This used to be relatively common practice, but
8507                        the rest of the compiler does not correctly
8508                        handle the initialization unless the member is
8509                        static so we make it static below.  */
8510                     pedwarn ("ISO C++ forbids initialization of member %qD",
8511                              unqualified_id);
8512                     pedwarn ("making %qD static", unqualified_id);
8513                     staticp = 1;
8514                   }
8515
8516                 if (uses_template_parms (type))
8517                   /* We'll check at instantiation time.  */
8518                   ;
8519                 else if (check_static_variable_definition (unqualified_id,
8520                                                            type))
8521                   /* If we just return the declaration, crashes
8522                      will sometimes occur.  We therefore return
8523                      void_type_node, as if this was a friend
8524                      declaration, to cause callers to completely
8525                      ignore this declaration.  */
8526                   return error_mark_node;
8527               }
8528
8529             if (staticp)
8530               {
8531                 /* C++ allows static class members.  All other work
8532                    for this is done by grokfield.  */
8533                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8534                 set_linkage_for_static_data_member (decl);
8535                 /* Even if there is an in-class initialization, DECL
8536                    is considered undefined until an out-of-class
8537                    definition is provided.  */
8538                 DECL_EXTERNAL (decl) = 1;
8539
8540                 if (thread_p)
8541                   {
8542                     if (targetm.have_tls)
8543                       DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8544                     else
8545                       /* A mere warning is sure to result in improper
8546                          semantics at runtime.  Don't bother to allow this to
8547                          compile.  */
8548                       error ("thread-local storage not supported for this target");
8549                   }
8550               }
8551             else
8552               {
8553                 decl = build_decl (FIELD_DECL, unqualified_id, type);
8554                 DECL_NONADDRESSABLE_P (decl) = bitfield;
8555                 if (storage_class == sc_mutable)
8556                   {
8557                     DECL_MUTABLE_P (decl) = 1;
8558                     storage_class = sc_none;
8559                   }
8560               }
8561
8562             bad_specifiers (decl, "field", virtualp,
8563                             memfn_quals != TYPE_UNQUALIFIED,
8564                             inlinep, friendp, raises != NULL_TREE);
8565           }
8566       }
8567     else if (TREE_CODE (type) == FUNCTION_TYPE
8568              || TREE_CODE (type) == METHOD_TYPE)
8569       {
8570         tree original_name;
8571         int publicp = 0;
8572
8573         if (!unqualified_id)
8574           return error_mark_node;
8575
8576         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
8577           original_name = dname;
8578         else
8579           original_name = unqualified_id;
8580
8581         if (storage_class == sc_auto)
8582           error ("storage class %<auto%> invalid for function %qs", name);
8583         else if (storage_class == sc_register)
8584           error ("storage class %<register%> invalid for function %qs", name);
8585         else if (thread_p)
8586           error ("storage class %<__thread%> invalid for function %qs", name);
8587
8588         /* Function declaration not at top level.
8589            Storage classes other than `extern' are not allowed
8590            and `extern' makes no difference.  */
8591         if (! toplevel_bindings_p ()
8592             && (storage_class == sc_static
8593                 || declspecs->specs[(int)ds_inline])
8594             && pedantic)
8595           {
8596             if (storage_class == sc_static)
8597               pedwarn ("%<static%> specified invalid for function %qs "
8598                        "declared out of global scope", name);
8599             else
8600               pedwarn ("%<inline%> specifier invalid for function %qs "
8601                        "declared out of global scope", name);
8602           }
8603
8604         if (ctype == NULL_TREE)
8605           {
8606             if (virtualp)
8607               {
8608                 error ("virtual non-class function %qs", name);
8609                 virtualp = 0;
8610               }
8611           }
8612         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
8613                  && !NEW_DELETE_OPNAME_P (original_name))
8614           type = build_method_type_directly (ctype,
8615                                              TREE_TYPE (type),
8616                                              TYPE_ARG_TYPES (type));
8617
8618         /* Record presence of `static'.  */
8619         publicp = (ctype != NULL_TREE
8620                    || storage_class == sc_extern
8621                    || storage_class != sc_static);
8622
8623         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
8624                            virtualp, flags, memfn_quals, raises,
8625                            1, friendp,
8626                            publicp, inlinep, sfk, funcdef_flag,
8627                            template_count, in_namespace, attrlist);
8628         if (decl == NULL_TREE)
8629           return error_mark_node;
8630
8631         if (staticp == 1)
8632           {
8633             int invalid_static = 0;
8634
8635             /* Don't allow a static member function in a class, and forbid
8636                declaring main to be static.  */
8637             if (TREE_CODE (type) == METHOD_TYPE)
8638               {
8639                 pedwarn ("cannot declare member function %qD to have "
8640                          "static linkage", decl);
8641                 invalid_static = 1;
8642               }
8643             else if (current_function_decl)
8644               {
8645                 /* FIXME need arm citation */
8646                 error ("cannot declare static function inside another function");
8647                 invalid_static = 1;
8648               }
8649
8650             if (invalid_static)
8651               {
8652                 staticp = 0;
8653                 storage_class = sc_none;
8654               }
8655           }
8656       }
8657     else
8658       {
8659         /* It's a variable.  */
8660
8661         /* An uninitialized decl with `extern' is a reference.  */
8662         decl = grokvardecl (type, unqualified_id,
8663                             declspecs,
8664                             initialized,
8665                             (type_quals & TYPE_QUAL_CONST) != 0,
8666                             ctype ? ctype : in_namespace);
8667         bad_specifiers (decl, "variable", virtualp,
8668                         memfn_quals != TYPE_UNQUALIFIED,
8669                         inlinep, friendp, raises != NULL_TREE);
8670
8671         if (ctype)
8672           {
8673             DECL_CONTEXT (decl) = ctype;
8674             if (staticp == 1)
8675               {
8676                 pedwarn ("%<static%> may not be used when defining "
8677                          "(as opposed to declaring) a static data member");
8678                 staticp = 0;
8679                 storage_class = sc_none;
8680               }
8681             if (storage_class == sc_register && TREE_STATIC (decl))
8682               {
8683                 error ("static member %qD declared %<register%>", decl);
8684                 storage_class = sc_none;
8685               }
8686             if (storage_class == sc_extern && pedantic)
8687               {
8688                 pedwarn ("cannot explicitly declare member %q#D to have "
8689                          "extern linkage",
8690                          decl);
8691                 storage_class = sc_none;
8692               }
8693           }
8694       }
8695
8696     /* Record `register' declaration for warnings on &
8697        and in case doing stupid register allocation.  */
8698
8699     if (storage_class == sc_register)
8700       DECL_REGISTER (decl) = 1;
8701     else if (storage_class == sc_extern)
8702       DECL_THIS_EXTERN (decl) = 1;
8703     else if (storage_class == sc_static)
8704       DECL_THIS_STATIC (decl) = 1;
8705
8706     /* Record constancy and volatility.  There's no need to do this
8707        when processing a template; we'll do this for the instantiated
8708        declaration based on the type of DECL.  */
8709     if (!processing_template_decl)
8710       cp_apply_type_quals_to_decl (type_quals, decl);
8711
8712     if (set_no_warning)
8713         TREE_NO_WARNING (decl) = 1;
8714
8715     return decl;
8716   }
8717 }
8718 \f
8719 /* Subroutine of start_function.  Ensure that each of the parameter
8720    types (as listed in PARMS) is complete, as is required for a
8721    function definition.  */
8722
8723 static void
8724 require_complete_types_for_parms (tree parms)
8725 {
8726   for (; parms; parms = TREE_CHAIN (parms))
8727     {
8728       if (dependent_type_p (TREE_TYPE (parms)))
8729         continue;
8730       if (!VOID_TYPE_P (TREE_TYPE (parms))
8731           && complete_type_or_else (TREE_TYPE (parms), parms))
8732         {
8733           relayout_decl (parms);
8734           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
8735         }
8736       else
8737         /* grokparms or complete_type_or_else will have already issued
8738            an error.  */
8739         TREE_TYPE (parms) = error_mark_node;
8740     }
8741 }
8742
8743 /* Returns nonzero if T is a local variable.  */
8744
8745 int
8746 local_variable_p (tree t)
8747 {
8748   if ((TREE_CODE (t) == VAR_DECL
8749        /* A VAR_DECL with a context that is a _TYPE is a static data
8750           member.  */
8751        && !TYPE_P (CP_DECL_CONTEXT (t))
8752        /* Any other non-local variable must be at namespace scope.  */
8753        && !DECL_NAMESPACE_SCOPE_P (t))
8754       || (TREE_CODE (t) == PARM_DECL))
8755     return 1;
8756
8757   return 0;
8758 }
8759
8760 /* Returns nonzero if T is an automatic local variable or a label.
8761    (These are the declarations that need to be remapped when the code
8762    containing them is duplicated.)  */
8763
8764 int
8765 nonstatic_local_decl_p (tree t)
8766 {
8767   return ((local_variable_p (t) && !TREE_STATIC (t))
8768           || TREE_CODE (t) == LABEL_DECL
8769           || TREE_CODE (t) == RESULT_DECL);
8770 }
8771
8772 /* Like local_variable_p, but suitable for use as a tree-walking
8773    function.  */
8774
8775 static tree
8776 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
8777                          void *data ATTRIBUTE_UNUSED)
8778 {
8779   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
8780     return *tp;
8781   else if (TYPE_P (*tp))
8782     *walk_subtrees = 0;
8783
8784   return NULL_TREE;
8785 }
8786
8787
8788 /* Check that ARG, which is a default-argument expression for a
8789    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
8790    something goes wrong.  DECL may also be a _TYPE node, rather than a
8791    DECL, if there is no DECL available.  */
8792
8793 tree
8794 check_default_argument (tree decl, tree arg)
8795 {
8796   tree var;
8797   tree decl_type;
8798
8799   if (TREE_CODE (arg) == DEFAULT_ARG)
8800     /* We get a DEFAULT_ARG when looking at an in-class declaration
8801        with a default argument.  Ignore the argument for now; we'll
8802        deal with it after the class is complete.  */
8803     return arg;
8804
8805   if (TYPE_P (decl))
8806     {
8807       decl_type = decl;
8808       decl = NULL_TREE;
8809     }
8810   else
8811     decl_type = TREE_TYPE (decl);
8812
8813   if (arg == error_mark_node
8814       || decl == error_mark_node
8815       || TREE_TYPE (arg) == error_mark_node
8816       || decl_type == error_mark_node)
8817     /* Something already went wrong.  There's no need to check
8818        further.  */
8819     return error_mark_node;
8820
8821   /* [dcl.fct.default]
8822
8823      A default argument expression is implicitly converted to the
8824      parameter type.  */
8825   if (!TREE_TYPE (arg)
8826       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
8827     {
8828       if (decl)
8829         error ("default argument for %q#D has type %qT",
8830                decl, TREE_TYPE (arg));
8831       else
8832         error ("default argument for parameter of type %qT has type %qT",
8833                decl_type, TREE_TYPE (arg));
8834
8835       return error_mark_node;
8836     }
8837
8838   /* [dcl.fct.default]
8839
8840      Local variables shall not be used in default argument
8841      expressions.
8842
8843      The keyword `this' shall not be used in a default argument of a
8844      member function.  */
8845   var = walk_tree_without_duplicates (&arg, local_variable_p_walkfn,
8846                                       NULL);
8847   if (var)
8848     {
8849       error ("default argument %qE uses local variable %qD", arg, var);
8850       return error_mark_node;
8851     }
8852
8853   /* All is well.  */
8854   return arg;
8855 }
8856
8857 /* Decode the list of parameter types for a function type.
8858    Given the list of things declared inside the parens,
8859    return a list of types.
8860
8861    If this parameter does not end with an ellipsis, we append
8862    void_list_node.
8863
8864    *PARMS is set to the chain of PARM_DECLs created.  */
8865
8866 static tree
8867 grokparms (cp_parameter_declarator *first_parm, tree *parms)
8868 {
8869   tree result = NULL_TREE;
8870   tree decls = NULL_TREE;
8871   int ellipsis = !first_parm || first_parm->ellipsis_p;
8872   cp_parameter_declarator *parm;
8873   int any_error = 0;
8874
8875   for (parm = first_parm; parm != NULL; parm = parm->next)
8876     {
8877       tree type = NULL_TREE;
8878       tree init = parm->default_argument;
8879       tree attrs;
8880       tree decl;
8881
8882       if (parm == no_parameters)
8883         break;
8884
8885       attrs = parm->decl_specifiers.attributes;
8886       parm->decl_specifiers.attributes = NULL_TREE;
8887       decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
8888                              PARM, init != NULL_TREE, &attrs);
8889       if (! decl || TREE_TYPE (decl) == error_mark_node)
8890         continue;
8891
8892       if (attrs)
8893         cplus_decl_attributes (&decl, attrs, 0);
8894
8895       type = TREE_TYPE (decl);
8896       if (VOID_TYPE_P (type))
8897         {
8898           if (same_type_p (type, void_type_node)
8899               && DECL_SELF_REFERENCE_P (type)
8900               && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
8901             /* this is a parmlist of `(void)', which is ok.  */
8902             break;
8903           cxx_incomplete_type_error (decl, type);
8904           /* It's not a good idea to actually create parameters of
8905              type `void'; other parts of the compiler assume that a
8906              void type terminates the parameter list.  */
8907           type = error_mark_node;
8908           TREE_TYPE (decl) = error_mark_node;
8909         }
8910
8911       if (type != error_mark_node)
8912         {
8913           /* Top-level qualifiers on the parameters are
8914              ignored for function types.  */
8915           type = cp_build_qualified_type (type, 0);
8916           if (TREE_CODE (type) == METHOD_TYPE)
8917             {
8918               error ("parameter %qD invalidly declared method type", decl);
8919               type = build_pointer_type (type);
8920               TREE_TYPE (decl) = type;
8921             }
8922           else if (abstract_virtuals_error (decl, type))
8923             any_error = 1;  /* Seems like a good idea.  */
8924           else if (POINTER_TYPE_P (type))
8925             {
8926               /* [dcl.fct]/6, parameter types cannot contain pointers
8927                  (references) to arrays of unknown bound.  */
8928               tree t = TREE_TYPE (type);
8929               int ptr = TYPE_PTR_P (type);
8930
8931               while (1)
8932                 {
8933                   if (TYPE_PTR_P (t))
8934                     ptr = 1;
8935                   else if (TREE_CODE (t) != ARRAY_TYPE)
8936                     break;
8937                   else if (!TYPE_DOMAIN (t))
8938                     break;
8939                   t = TREE_TYPE (t);
8940                 }
8941               if (TREE_CODE (t) == ARRAY_TYPE)
8942                 error ("parameter %qD includes %s to array of unknown "
8943                        "bound %qT",
8944                        decl, ptr ? "pointer" : "reference", t);
8945             }
8946
8947           if (any_error)
8948             init = NULL_TREE;
8949           else if (init && !processing_template_decl)
8950             init = check_default_argument (decl, init);
8951         }
8952
8953       TREE_CHAIN (decl) = decls;
8954       decls = decl;
8955       result = tree_cons (init, type, result);
8956     }
8957   decls = nreverse (decls);
8958   result = nreverse (result);
8959   if (!ellipsis)
8960     result = chainon (result, void_list_node);
8961   *parms = decls;
8962
8963   return result;
8964 }
8965
8966 \f
8967 /* D is a constructor or overloaded `operator='.
8968
8969    Let T be the class in which D is declared. Then, this function
8970    returns:
8971
8972    -1 if D's is an ill-formed constructor or copy assignment operator
8973       whose first parameter is of type `T'.
8974    0  if D is not a copy constructor or copy assignment
8975       operator.
8976    1  if D is a copy constructor or copy assignment operator whose
8977       first parameter is a reference to const qualified T.
8978    2  if D is a copy constructor or copy assignment operator whose
8979       first parameter is a reference to non-const qualified T.
8980
8981    This function can be used as a predicate. Positive values indicate
8982    a copy constructor and nonzero values indicate a copy assignment
8983    operator.  */
8984
8985 int
8986 copy_fn_p (tree d)
8987 {
8988   tree args;
8989   tree arg_type;
8990   int result = 1;
8991
8992   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
8993
8994   if (TREE_CODE (d) == TEMPLATE_DECL
8995       || (DECL_TEMPLATE_INFO (d)
8996           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
8997     /* Instantiations of template member functions are never copy
8998        functions.  Note that member functions of templated classes are
8999        represented as template functions internally, and we must
9000        accept those as copy functions.  */
9001     return 0;
9002
9003   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9004   if (!args)
9005     return 0;
9006
9007   arg_type = TREE_VALUE (args);
9008   if (arg_type == error_mark_node)
9009     return 0;
9010
9011   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9012     {
9013       /* Pass by value copy assignment operator.  */
9014       result = -1;
9015     }
9016   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
9017            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9018     {
9019       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9020         result = 2;
9021     }
9022   else
9023     return 0;
9024
9025   args = TREE_CHAIN (args);
9026
9027   if (args && args != void_list_node && !TREE_PURPOSE (args))
9028     /* There are more non-optional args.  */
9029     return 0;
9030
9031   return result;
9032 }
9033
9034 /* Remember any special properties of member function DECL.  */
9035
9036 void grok_special_member_properties (tree decl)
9037 {
9038   tree class_type;
9039
9040   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9041     return;
9042
9043   class_type = DECL_CONTEXT (decl);
9044   if (DECL_CONSTRUCTOR_P (decl))
9045     {
9046       int ctor = copy_fn_p (decl);
9047
9048       TYPE_HAS_CONSTRUCTOR (class_type) = 1;
9049
9050       if (ctor > 0)
9051         {
9052           /* [class.copy]
9053
9054              A non-template constructor for class X is a copy
9055              constructor if its first parameter is of type X&, const
9056              X&, volatile X& or const volatile X&, and either there
9057              are no other parameters or else all other parameters have
9058              default arguments.  */
9059           TYPE_HAS_INIT_REF (class_type) = 1;
9060           if (ctor > 1)
9061             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
9062         }
9063       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
9064         TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
9065     }
9066   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9067     {
9068       /* [class.copy]
9069
9070          A non-template assignment operator for class X is a copy
9071          assignment operator if its parameter is of type X, X&, const
9072          X&, volatile X& or const volatile X&.  */
9073
9074       int assop = copy_fn_p (decl);
9075
9076       if (assop)
9077         {
9078           TYPE_HAS_ASSIGN_REF (class_type) = 1;
9079           if (assop != 1)
9080             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
9081         }
9082     }
9083 }
9084
9085 /* Check a constructor DECL has the correct form.  Complains
9086    if the class has a constructor of the form X(X).  */
9087
9088 int
9089 grok_ctor_properties (tree ctype, tree decl)
9090 {
9091   int ctor_parm = copy_fn_p (decl);
9092
9093   if (ctor_parm < 0)
9094     {
9095       /* [class.copy]
9096
9097          A declaration of a constructor for a class X is ill-formed if
9098          its first parameter is of type (optionally cv-qualified) X
9099          and either there are no other parameters or else all other
9100          parameters have default arguments.
9101
9102          We *don't* complain about member template instantiations that
9103          have this form, though; they can occur as we try to decide
9104          what constructor to use during overload resolution.  Since
9105          overload resolution will never prefer such a constructor to
9106          the non-template copy constructor (which is either explicitly
9107          or implicitly defined), there's no need to worry about their
9108          existence.  Theoretically, they should never even be
9109          instantiated, but that's hard to forestall.  */
9110       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
9111                 ctype, ctype);
9112       return 0;
9113     }
9114
9115   return 1;
9116 }
9117
9118 /* An operator with this code is unary, but can also be binary.  */
9119
9120 static int
9121 ambi_op_p (enum tree_code code)
9122 {
9123   return (code == INDIRECT_REF
9124           || code == ADDR_EXPR
9125           || code == UNARY_PLUS_EXPR
9126           || code == NEGATE_EXPR
9127           || code == PREINCREMENT_EXPR
9128           || code == PREDECREMENT_EXPR);
9129 }
9130
9131 /* An operator with this name can only be unary.  */
9132
9133 static int
9134 unary_op_p (enum tree_code code)
9135 {
9136   return (code == TRUTH_NOT_EXPR
9137           || code == BIT_NOT_EXPR
9138           || code == COMPONENT_REF
9139           || code == TYPE_EXPR);
9140 }
9141
9142 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
9143    errors are issued for invalid declarations.  */
9144
9145 bool
9146 grok_op_properties (tree decl, bool complain)
9147 {
9148   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
9149   tree argtype;
9150   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9151   tree name = DECL_NAME (decl);
9152   enum tree_code operator_code;
9153   int arity;
9154   bool ellipsis_p;
9155   tree class_type;
9156
9157   /* Count the number of arguments and check for ellipsis.  */
9158   for (argtype = argtypes, arity = 0;
9159        argtype && argtype != void_list_node;
9160        argtype = TREE_CHAIN (argtype))
9161     ++arity;
9162   ellipsis_p = !argtype;
9163
9164   class_type = DECL_CONTEXT (decl);
9165   if (class_type && !CLASS_TYPE_P (class_type))
9166     class_type = NULL_TREE;
9167
9168   if (DECL_CONV_FN_P (decl))
9169     operator_code = TYPE_EXPR;
9170   else
9171     do
9172       {
9173 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
9174         if (ansi_opname (CODE) == name)                         \
9175           {                                                     \
9176             operator_code = (CODE);                             \
9177             break;                                              \
9178           }                                                     \
9179         else if (ansi_assopname (CODE) == name)                 \
9180           {                                                     \
9181             operator_code = (CODE);                             \
9182             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
9183             break;                                              \
9184           }
9185
9186 #include "operators.def"
9187 #undef DEF_OPERATOR
9188
9189         gcc_unreachable ();
9190       }
9191     while (0);
9192   gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9193   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9194
9195   if (class_type)
9196     switch (operator_code)
9197       {
9198       case NEW_EXPR:
9199         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9200         break;
9201
9202       case DELETE_EXPR:
9203         TYPE_GETS_DELETE (class_type) |= 1;
9204         break;
9205
9206       case VEC_NEW_EXPR:
9207         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9208         break;
9209
9210       case VEC_DELETE_EXPR:
9211         TYPE_GETS_DELETE (class_type) |= 2;
9212         break;
9213
9214       default:
9215         break;
9216       }
9217
9218     /* [basic.std.dynamic.allocation]/1:
9219
9220        A program is ill-formed if an allocation function is declared
9221        in a namespace scope other than global scope or declared static
9222        in global scope.
9223
9224        The same also holds true for deallocation functions.  */
9225   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9226       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9227     {
9228       if (DECL_NAMESPACE_SCOPE_P (decl))
9229         {
9230           if (CP_DECL_CONTEXT (decl) != global_namespace)
9231             {
9232               error ("%qD may not be declared within a namespace", decl);
9233               return false;
9234             }
9235           else if (!TREE_PUBLIC (decl))
9236             {
9237               error ("%qD may not be declared as static", decl);
9238               return false;
9239             }
9240         }
9241     }
9242
9243   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9244     TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9245   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9246     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9247   else
9248     {
9249       /* An operator function must either be a non-static member function
9250          or have at least one parameter of a class, a reference to a class,
9251          an enumeration, or a reference to an enumeration.  13.4.0.6 */
9252       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9253         {
9254           if (operator_code == TYPE_EXPR
9255               || operator_code == CALL_EXPR
9256               || operator_code == COMPONENT_REF
9257               || operator_code == ARRAY_REF
9258               || operator_code == NOP_EXPR)
9259             {
9260               error ("%qD must be a nonstatic member function", decl);
9261               return false;
9262             }
9263           else
9264             {
9265               tree p;
9266
9267               if (DECL_STATIC_FUNCTION_P (decl))
9268                 {
9269                   error ("%qD must be either a non-static member "
9270                          "function or a non-member function", decl);
9271                   return false;
9272                 }
9273
9274               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9275                 {
9276                   tree arg = non_reference (TREE_VALUE (p));
9277                   if (arg == error_mark_node)
9278                     return false;
9279
9280                   /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9281                      because these checks are performed even on
9282                      template functions.  */
9283                   if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9284                     break;
9285                 }
9286
9287               if (!p || p == void_list_node)
9288                 {
9289                   if (complain)
9290                     error ("%qD must have an argument of class or "
9291                            "enumerated type", decl);
9292                   return false;
9293                 }
9294             }
9295         }
9296
9297       /* There are no restrictions on the arguments to an overloaded
9298          "operator ()".  */
9299       if (operator_code == CALL_EXPR)
9300         return true;
9301
9302       /* Warn about conversion operators that will never be used.  */
9303       if (IDENTIFIER_TYPENAME_P (name)
9304           && ! DECL_TEMPLATE_INFO (decl)
9305           && warn_conversion
9306           /* Warn only declaring the function; there is no need to
9307              warn again about out-of-class definitions.  */
9308           && class_type == current_class_type)
9309         {
9310           tree t = TREE_TYPE (name);
9311           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9312           const char *what = 0;
9313
9314           if (ref)
9315             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9316
9317           if (TREE_CODE (t) == VOID_TYPE)
9318             what = "void";
9319           else if (class_type)
9320             {
9321               if (t == class_type)
9322                 what = "the same type";
9323               /* Don't force t to be complete here.  */
9324               else if (IS_AGGR_TYPE (t)
9325                        && COMPLETE_TYPE_P (t)
9326                        && DERIVED_FROM_P (t, class_type))
9327                 what = "a base class";
9328             }
9329
9330           if (what)
9331             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9332                      "conversion operator",
9333                      ref ? "a reference to " : "", what);
9334         }
9335
9336       if (operator_code == COND_EXPR)
9337         {
9338           /* 13.4.0.3 */
9339           error ("ISO C++ prohibits overloading operator ?:");
9340           return false;
9341         }
9342       else if (ellipsis_p)
9343         {
9344           error ("%qD must not have variable number of arguments", decl);
9345           return false;
9346         }
9347       else if (ambi_op_p (operator_code))
9348         {
9349           if (arity == 1)
9350             /* We pick the one-argument operator codes by default, so
9351                we don't have to change anything.  */
9352             ;
9353           else if (arity == 2)
9354             {
9355               /* If we thought this was a unary operator, we now know
9356                  it to be a binary operator.  */
9357               switch (operator_code)
9358                 {
9359                 case INDIRECT_REF:
9360                   operator_code = MULT_EXPR;
9361                   break;
9362
9363                 case ADDR_EXPR:
9364                   operator_code = BIT_AND_EXPR;
9365                   break;
9366
9367                 case UNARY_PLUS_EXPR:
9368                   operator_code = PLUS_EXPR;
9369                   break;
9370
9371                 case NEGATE_EXPR:
9372                   operator_code = MINUS_EXPR;
9373                   break;
9374
9375                 case PREINCREMENT_EXPR:
9376                   operator_code = POSTINCREMENT_EXPR;
9377                   break;
9378
9379                 case PREDECREMENT_EXPR:
9380                   operator_code = POSTDECREMENT_EXPR;
9381                   break;
9382
9383                 default:
9384                   gcc_unreachable ();
9385                 }
9386
9387               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9388
9389               if ((operator_code == POSTINCREMENT_EXPR
9390                    || operator_code == POSTDECREMENT_EXPR)
9391                   && ! processing_template_decl
9392                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9393                 {
9394                   if (methodp)
9395                     error ("postfix %qD must take %<int%> as its argument",
9396                            decl);
9397                   else
9398                     error ("postfix %qD must take %<int%> as its second "
9399                            "argument", decl);
9400                   return false;
9401                 }
9402             }
9403           else
9404             {
9405               if (methodp)
9406                 error ("%qD must take either zero or one argument", decl);
9407               else
9408                 error ("%qD must take either one or two arguments", decl);
9409               return false;
9410             }
9411
9412           /* More Effective C++ rule 6.  */
9413           if (warn_ecpp
9414               && (operator_code == POSTINCREMENT_EXPR
9415                   || operator_code == POSTDECREMENT_EXPR
9416                   || operator_code == PREINCREMENT_EXPR
9417                   || operator_code == PREDECREMENT_EXPR))
9418             {
9419               tree arg = TREE_VALUE (argtypes);
9420               tree ret = TREE_TYPE (TREE_TYPE (decl));
9421               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9422                 arg = TREE_TYPE (arg);
9423               arg = TYPE_MAIN_VARIANT (arg);
9424               if (operator_code == PREINCREMENT_EXPR
9425                   || operator_code == PREDECREMENT_EXPR)
9426                 {
9427                   if (TREE_CODE (ret) != REFERENCE_TYPE
9428                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9429                                        arg))
9430                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9431                              build_reference_type (arg));
9432                 }
9433               else
9434                 {
9435                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9436                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
9437                 }
9438             }
9439         }
9440       else if (unary_op_p (operator_code))
9441         {
9442           if (arity != 1)
9443             {
9444               if (methodp)
9445                 error ("%qD must take %<void%>", decl);
9446               else
9447                 error ("%qD must take exactly one argument", decl);
9448               return false;
9449             }
9450         }
9451       else /* if (binary_op_p (operator_code)) */
9452         {
9453           if (arity != 2)
9454             {
9455               if (methodp)
9456                 error ("%qD must take exactly one argument", decl);
9457               else
9458                 error ("%qD must take exactly two arguments", decl);
9459               return false;
9460             }
9461
9462           /* More Effective C++ rule 7.  */
9463           if (warn_ecpp
9464               && (operator_code == TRUTH_ANDIF_EXPR
9465                   || operator_code == TRUTH_ORIF_EXPR
9466                   || operator_code == COMPOUND_EXPR))
9467             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
9468                      decl);
9469         }
9470
9471       /* Effective C++ rule 23.  */
9472       if (warn_ecpp
9473           && arity == 2
9474           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9475           && (operator_code == PLUS_EXPR
9476               || operator_code == MINUS_EXPR
9477               || operator_code == TRUNC_DIV_EXPR
9478               || operator_code == MULT_EXPR
9479               || operator_code == TRUNC_MOD_EXPR)
9480           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9481         warning (OPT_Weffc__, "%qD should return by value", decl);
9482
9483       /* [over.oper]/8 */
9484       for (; argtypes && argtypes != void_list_node;
9485           argtypes = TREE_CHAIN (argtypes))
9486         if (TREE_PURPOSE (argtypes))
9487           {
9488             TREE_PURPOSE (argtypes) = NULL_TREE;
9489             if (operator_code == POSTINCREMENT_EXPR
9490                 || operator_code == POSTDECREMENT_EXPR)
9491               {
9492                 if (pedantic)
9493                   pedwarn ("%qD cannot have default arguments", decl);
9494               }
9495             else
9496               {
9497                 error ("%qD cannot have default arguments", decl);
9498                 return false;
9499               }
9500           }
9501     }
9502   return true;
9503 }
9504 \f
9505 /* Return a string giving the keyword associate with CODE.  */
9506
9507 static const char *
9508 tag_name (enum tag_types code)
9509 {
9510   switch (code)
9511     {
9512     case record_type:
9513       return "struct";
9514     case class_type:
9515       return "class";
9516     case union_type:
9517       return "union";
9518     case enum_type:
9519       return "enum";
9520     case typename_type:
9521       return "typename";
9522     default:
9523       gcc_unreachable ();
9524     }
9525 }
9526
9527 /* Name lookup in an elaborated-type-specifier (after the keyword
9528    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
9529    elaborated-type-specifier is invalid, issue a diagnostic and return
9530    error_mark_node; otherwise, return the *_TYPE to which it referred.
9531    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
9532
9533 tree
9534 check_elaborated_type_specifier (enum tag_types tag_code,
9535                                  tree decl,
9536                                  bool allow_template_p)
9537 {
9538   tree type;
9539
9540   /* In the case of:
9541
9542        struct S { struct S *p; };
9543
9544      name lookup will find the TYPE_DECL for the implicit "S::S"
9545      typedef.  Adjust for that here.  */
9546   if (DECL_SELF_REFERENCE_P (decl))
9547     decl = TYPE_NAME (TREE_TYPE (decl));
9548
9549   type = TREE_TYPE (decl);
9550
9551   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
9552      is false for this case as well.  */
9553   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9554     {
9555       error ("using template type parameter %qT after %qs",
9556              type, tag_name (tag_code));
9557       return error_mark_node;
9558     }
9559   /*   [dcl.type.elab]
9560
9561        If the identifier resolves to a typedef-name or a template
9562        type-parameter, the elaborated-type-specifier is ill-formed.
9563
9564      In other words, the only legitimate declaration to use in the
9565      elaborated type specifier is the implicit typedef created when
9566      the type is declared.  */
9567   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
9568            && tag_code != typename_type)
9569     {
9570       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
9571       error ("%q+D has a previous declaration here", decl);
9572       return error_mark_node;
9573     }
9574   else if (TREE_CODE (type) != RECORD_TYPE
9575            && TREE_CODE (type) != UNION_TYPE
9576            && tag_code != enum_type
9577            && tag_code != typename_type)
9578     {
9579       error ("%qT referred to as %qs", type, tag_name (tag_code));
9580       error ("%q+T has a previous declaration here", type);
9581       return error_mark_node;
9582     }
9583   else if (TREE_CODE (type) != ENUMERAL_TYPE
9584            && tag_code == enum_type)
9585     {
9586       error ("%qT referred to as enum", type);
9587       error ("%q+T has a previous declaration here", type);
9588       return error_mark_node;
9589     }
9590   else if (!allow_template_p
9591            && TREE_CODE (type) == RECORD_TYPE
9592            && CLASSTYPE_IS_TEMPLATE (type))
9593     {
9594       /* If a class template appears as elaborated type specifier
9595          without a template header such as:
9596
9597            template <class T> class C {};
9598            void f(class C);             // No template header here
9599
9600          then the required template argument is missing.  */
9601       error ("template argument required for %<%s %T%>",
9602              tag_name (tag_code),
9603              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
9604       return error_mark_node;
9605     }
9606
9607   return type;
9608 }
9609
9610 /* Lookup NAME in elaborate type specifier in scope according to
9611    SCOPE and issue diagnostics if necessary.
9612    Return *_TYPE node upon success, NULL_TREE when the NAME is not
9613    found, and ERROR_MARK_NODE for type error.  */
9614
9615 static tree
9616 lookup_and_check_tag (enum tag_types tag_code, tree name,
9617                       tag_scope scope, bool template_header_p)
9618 {
9619   tree t;
9620   tree decl;
9621   if (scope == ts_global)
9622     {
9623       /* First try ordinary name lookup, ignoring hidden class name
9624          injected via friend declaration.  */
9625       decl = lookup_name_prefer_type (name, 2);
9626       /* If that fails, the name will be placed in the smallest
9627          non-class, non-function-prototype scope according to 3.3.1/5.
9628          We may already have a hidden name declared as friend in this
9629          scope.  So lookup again but not ignoring hidden names.
9630          If we find one, that name will be made visible rather than
9631          creating a new tag.  */
9632       if (!decl)
9633         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
9634     }
9635   else
9636     decl = lookup_type_scope (name, scope);
9637
9638   if (decl && DECL_CLASS_TEMPLATE_P (decl))
9639     decl = DECL_TEMPLATE_RESULT (decl);
9640
9641   if (decl && TREE_CODE (decl) == TYPE_DECL)
9642     {
9643       /* Look for invalid nested type:
9644            class C {
9645              class C {};
9646            };  */
9647       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
9648         {
9649           error ("%qD has the same name as the class in which it is "
9650                  "declared",
9651                  decl);
9652           return error_mark_node;
9653         }
9654
9655       /* Two cases we need to consider when deciding if a class
9656          template is allowed as an elaborated type specifier:
9657          1. It is a self reference to its own class.
9658          2. It comes with a template header.
9659
9660          For example:
9661
9662            template <class T> class C {
9663              class C *c1;               // DECL_SELF_REFERENCE_P is true
9664              class D;
9665            };
9666            template <class U> class C; // template_header_p is true
9667            template <class T> class C<T>::D {
9668              class C *c2;               // DECL_SELF_REFERENCE_P is true
9669            };  */
9670
9671       t = check_elaborated_type_specifier (tag_code,
9672                                            decl,
9673                                            template_header_p
9674                                            | DECL_SELF_REFERENCE_P (decl));
9675       return t;
9676     }
9677   else
9678     return NULL_TREE;
9679 }
9680
9681 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
9682    Define the tag as a forward-reference if it is not defined.
9683
9684    If a declaration is given, process it here, and report an error if
9685    multiple declarations are not identical.
9686
9687    SCOPE is TS_CURRENT when this is also a definition.  Only look in
9688    the current frame for the name (since C++ allows new names in any
9689    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
9690    declaration.  Only look beginning from the current scope outward up
9691    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
9692
9693    TEMPLATE_HEADER_P is true when this declaration is preceded by
9694    a set of template parameters.  */
9695
9696 tree
9697 xref_tag (enum tag_types tag_code, tree name,
9698           tag_scope scope, bool template_header_p)
9699 {
9700   enum tree_code code;
9701   tree t;
9702   tree context = NULL_TREE;
9703
9704   timevar_push (TV_NAME_LOOKUP);
9705
9706   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
9707
9708   switch (tag_code)
9709     {
9710     case record_type:
9711     case class_type:
9712       code = RECORD_TYPE;
9713       break;
9714     case union_type:
9715       code = UNION_TYPE;
9716       break;
9717     case enum_type:
9718       code = ENUMERAL_TYPE;
9719       break;
9720     default:
9721       gcc_unreachable ();
9722     }
9723
9724   /* In case of anonymous name, xref_tag is only called to
9725      make type node and push name.  Name lookup is not required.  */
9726   if (ANON_AGGRNAME_P (name))
9727     t = NULL_TREE;
9728   else
9729     t = lookup_and_check_tag  (tag_code, name,
9730                                scope, template_header_p);
9731
9732   if (t == error_mark_node)
9733     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9734
9735   if (scope != ts_current && t && current_class_type
9736       && template_class_depth (current_class_type)
9737       && template_header_p)
9738     {
9739       /* Since SCOPE is not TS_CURRENT, we are not looking at a
9740          definition of this tag.  Since, in addition, we are currently
9741          processing a (member) template declaration of a template
9742          class, we must be very careful; consider:
9743
9744            template <class X>
9745            struct S1
9746
9747            template <class U>
9748            struct S2
9749            { template <class V>
9750            friend struct S1; };
9751
9752          Here, the S2::S1 declaration should not be confused with the
9753          outer declaration.  In particular, the inner version should
9754          have a template parameter of level 2, not level 1.  This
9755          would be particularly important if the member declaration
9756          were instead:
9757
9758            template <class V = U> friend struct S1;
9759
9760          say, when we should tsubst into `U' when instantiating
9761          S2.  On the other hand, when presented with:
9762
9763            template <class T>
9764            struct S1 {
9765              template <class U>
9766              struct S2 {};
9767              template <class U>
9768              friend struct S2;
9769            };
9770
9771          we must find the inner binding eventually.  We
9772          accomplish this by making sure that the new type we
9773          create to represent this declaration has the right
9774          TYPE_CONTEXT.  */
9775       context = TYPE_CONTEXT (t);
9776       t = NULL_TREE;
9777     }
9778
9779   if (! t)
9780     {
9781       /* If no such tag is yet defined, create a forward-reference node
9782          and record it as the "definition".
9783          When a real declaration of this type is found,
9784          the forward-reference will be altered into a real type.  */
9785       if (code == ENUMERAL_TYPE)
9786         {
9787           error ("use of enum %q#D without previous declaration", name);
9788           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9789         }
9790       else
9791         {
9792           t = make_aggr_type (code);
9793           TYPE_CONTEXT (t) = context;
9794           t = pushtag (name, t, scope);
9795         }
9796     }
9797   else
9798     {
9799       if (template_header_p && IS_AGGR_TYPE (t))
9800         {
9801           if (!redeclare_class_template (t, current_template_parms))
9802             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9803         }
9804       else if (!processing_template_decl
9805                && CLASS_TYPE_P (t)
9806                && CLASSTYPE_IS_TEMPLATE (t))
9807         {
9808           error ("redeclaration of %qT as a non-template", t);
9809           error ("previous declaration %q+D", t);
9810           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
9811         }
9812
9813       /* Make injected friend class visible.  */
9814       if (scope != ts_within_enclosing_non_class
9815           && hidden_name_p (TYPE_NAME (t)))
9816         {
9817           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
9818           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
9819
9820           if (TYPE_TEMPLATE_INFO (t))
9821             {
9822               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
9823               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
9824             }
9825         }
9826     }
9827
9828   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
9829 }
9830
9831 tree
9832 xref_tag_from_type (tree old, tree id, tag_scope scope)
9833 {
9834   enum tag_types tag_kind;
9835
9836   if (TREE_CODE (old) == RECORD_TYPE)
9837     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
9838   else
9839     tag_kind  = union_type;
9840
9841   if (id == NULL_TREE)
9842     id = TYPE_IDENTIFIER (old);
9843
9844   return xref_tag (tag_kind, id, scope, false);
9845 }
9846
9847 /* Create the binfo hierarchy for REF with (possibly NULL) base list
9848    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
9849    access_* node, and the TREE_VALUE is the type of the base-class.
9850    Non-NULL TREE_TYPE indicates virtual inheritance.  
9851  
9852    Returns true if the binfo hierarchy was successfully created,
9853    false if an error was detected. */
9854
9855 bool
9856 xref_basetypes (tree ref, tree base_list)
9857 {
9858   tree *basep;
9859   tree binfo, base_binfo;
9860   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
9861   unsigned max_bases = 0;  /* Maximum direct bases.  */
9862   int i;
9863   tree default_access;
9864   tree igo_prev; /* Track Inheritance Graph Order.  */
9865
9866   if (ref == error_mark_node)
9867     return false;
9868
9869   /* The base of a derived class is private by default, all others are
9870      public.  */
9871   default_access = (TREE_CODE (ref) == RECORD_TYPE
9872                     && CLASSTYPE_DECLARED_CLASS (ref)
9873                     ? access_private_node : access_public_node);
9874
9875   /* First, make sure that any templates in base-classes are
9876      instantiated.  This ensures that if we call ourselves recursively
9877      we do not get confused about which classes are marked and which
9878      are not.  */
9879   basep = &base_list;
9880   while (*basep)
9881     {
9882       tree basetype = TREE_VALUE (*basep);
9883
9884       if (!(processing_template_decl && uses_template_parms (basetype))
9885           && !complete_type_or_else (basetype, NULL))
9886         /* An incomplete type.  Remove it from the list.  */
9887         *basep = TREE_CHAIN (*basep);
9888       else
9889         {
9890           max_bases++;
9891           if (TREE_TYPE (*basep))
9892             max_vbases++;
9893           if (CLASS_TYPE_P (basetype))
9894             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
9895           basep = &TREE_CHAIN (*basep);
9896         }
9897     }
9898
9899   TYPE_MARKED_P (ref) = 1;
9900
9901   /* The binfo slot should be empty, unless this is an (ill-formed)
9902      redefinition.  */
9903   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
9904   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
9905
9906   binfo = make_tree_binfo (max_bases);
9907
9908   TYPE_BINFO (ref) = binfo;
9909   BINFO_OFFSET (binfo) = size_zero_node;
9910   BINFO_TYPE (binfo) = ref;
9911
9912   if (max_bases)
9913     {
9914       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
9915       /* An aggregate cannot have baseclasses.  */
9916       CLASSTYPE_NON_AGGREGATE (ref) = 1;
9917
9918       if (TREE_CODE (ref) == UNION_TYPE)
9919         {
9920           error ("derived union %qT invalid", ref);
9921           return false;
9922         }
9923     }
9924
9925   if (max_bases > 1)
9926     {
9927       if (TYPE_FOR_JAVA (ref))
9928         {
9929           error ("Java class %qT cannot have multiple bases", ref);
9930           return false;
9931         }
9932     }
9933
9934   if (max_vbases)
9935     {
9936       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
9937
9938       if (TYPE_FOR_JAVA (ref))
9939         {
9940           error ("Java class %qT cannot have virtual bases", ref);
9941           return false;
9942         }
9943     }
9944
9945   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
9946     {
9947       tree access = TREE_PURPOSE (base_list);
9948       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
9949       tree basetype = TREE_VALUE (base_list);
9950
9951       if (access == access_default_node)
9952         access = default_access;
9953
9954       if (TREE_CODE (basetype) == TYPE_DECL)
9955         basetype = TREE_TYPE (basetype);
9956       if (TREE_CODE (basetype) != RECORD_TYPE
9957           && TREE_CODE (basetype) != TYPENAME_TYPE
9958           && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
9959           && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
9960         {
9961           error ("base type %qT fails to be a struct or class type",
9962                  basetype);
9963           return false;
9964         }
9965
9966       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
9967         TYPE_FOR_JAVA (ref) = 1;
9968
9969       base_binfo = NULL_TREE;
9970       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
9971         {
9972           base_binfo = TYPE_BINFO (basetype);
9973           /* The original basetype could have been a typedef'd type.  */
9974           basetype = BINFO_TYPE (base_binfo);
9975
9976           /* Inherit flags from the base.  */
9977           TYPE_HAS_NEW_OPERATOR (ref)
9978             |= TYPE_HAS_NEW_OPERATOR (basetype);
9979           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
9980             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
9981           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
9982           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
9983           CLASSTYPE_DIAMOND_SHAPED_P (ref)
9984             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
9985           CLASSTYPE_REPEATED_BASE_P (ref)
9986             |= CLASSTYPE_REPEATED_BASE_P (basetype);
9987         }
9988
9989       /* We must do this test after we've seen through a typedef
9990          type.  */
9991       if (TYPE_MARKED_P (basetype))
9992         {
9993           if (basetype == ref)
9994             error ("recursive type %qT undefined", basetype);
9995           else
9996             error ("duplicate base type %qT invalid", basetype);
9997           return false;
9998         }
9999       TYPE_MARKED_P (basetype) = 1;
10000
10001       base_binfo = copy_binfo (base_binfo, basetype, ref,
10002                                &igo_prev, via_virtual);
10003       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10004         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
10005
10006       BINFO_BASE_APPEND (binfo, base_binfo);
10007       BINFO_BASE_ACCESS_APPEND (binfo, access);
10008     }
10009
10010   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10011     /* If we have space in the vbase vector, we must have shared at
10012        least one of them, and are therefore diamond shaped.  */
10013     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10014
10015   /* Unmark all the types.  */
10016   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
10017     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10018   TYPE_MARKED_P (ref) = 0;
10019
10020   /* Now see if we have a repeated base type.  */
10021   if (!CLASSTYPE_REPEATED_BASE_P (ref))
10022     {
10023       for (base_binfo = binfo; base_binfo;
10024            base_binfo = TREE_CHAIN (base_binfo))
10025         {
10026           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10027             {
10028               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10029               break;
10030             }
10031           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10032         }
10033       for (base_binfo = binfo; base_binfo;
10034            base_binfo = TREE_CHAIN (base_binfo))
10035         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10036           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10037         else
10038           break;
10039     }
10040
10041   return true;
10042 }
10043
10044 \f
10045 /* Begin compiling the definition of an enumeration type.
10046    NAME is its name.
10047    Returns the type object, as yet incomplete.
10048    Also records info about it so that build_enumerator
10049    may be used to declare the individual values as they are read.  */
10050
10051 tree
10052 start_enum (tree name)
10053 {
10054   tree enumtype;
10055
10056   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10057
10058   /* If this is the real definition for a previous forward reference,
10059      fill in the contents in the same object that used to be the
10060      forward reference.  */
10061
10062   enumtype = lookup_and_check_tag (enum_type, name,
10063                                    /*tag_scope=*/ts_current,
10064                                    /*template_header_p=*/false);
10065
10066   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
10067     {
10068       error ("multiple definition of %q#T", enumtype);
10069       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
10070       /* Clear out TYPE_VALUES, and start again.  */
10071       TYPE_VALUES (enumtype) = NULL_TREE;
10072     }
10073   else
10074     {
10075       /* In case of error, make a dummy enum to allow parsing to
10076          continue.  */
10077       if (enumtype == error_mark_node)
10078         name = make_anon_name ();
10079
10080       enumtype = make_node (ENUMERAL_TYPE);
10081       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
10082     }
10083
10084   return enumtype;
10085 }
10086
10087 /* After processing and defining all the values of an enumeration type,
10088    install their decls in the enumeration type and finish it off.
10089    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
10090
10091 void
10092 finish_enum (tree enumtype)
10093 {
10094   tree values;
10095   tree decl;
10096   tree value;
10097   tree minnode;
10098   tree maxnode;
10099   tree t;
10100   bool unsignedp;
10101   bool use_short_enum;
10102   int lowprec;
10103   int highprec;
10104   int precision;
10105   integer_type_kind itk;
10106   tree underlying_type = NULL_TREE;
10107
10108   /* We built up the VALUES in reverse order.  */
10109   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10110
10111   /* For an enum defined in a template, just set the type of the values;
10112      all further processing is postponed until the template is
10113      instantiated.  We need to set the type so that tsubst of a CONST_DECL
10114      works.  */
10115   if (processing_template_decl)
10116     {
10117       for (values = TYPE_VALUES (enumtype);
10118            values;
10119            values = TREE_CHAIN (values))
10120         TREE_TYPE (TREE_VALUE (values)) = enumtype;
10121       if (at_function_scope_p ())
10122         add_stmt (build_min (TAG_DEFN, enumtype));
10123       return;
10124     }
10125
10126   /* Determine the minimum and maximum values of the enumerators.  */
10127   if (TYPE_VALUES (enumtype))
10128     {
10129       minnode = maxnode = NULL_TREE;
10130
10131       for (values = TYPE_VALUES (enumtype);
10132            values;
10133            values = TREE_CHAIN (values))
10134         {
10135           decl = TREE_VALUE (values);
10136
10137           /* [dcl.enum]: Following the closing brace of an enum-specifier,
10138              each enumerator has the type of its enumeration.  Prior to the
10139              closing brace, the type of each enumerator is the type of its
10140              initializing value.  */
10141           TREE_TYPE (decl) = enumtype;
10142
10143           /* Update the minimum and maximum values, if appropriate.  */
10144           value = DECL_INITIAL (decl);
10145           if (value == error_mark_node)
10146             value = integer_zero_node;
10147           /* Figure out what the minimum and maximum values of the
10148              enumerators are.  */
10149           if (!minnode)
10150             minnode = maxnode = value;
10151           else if (tree_int_cst_lt (maxnode, value))
10152             maxnode = value;
10153           else if (tree_int_cst_lt (value, minnode))
10154             minnode = value;
10155         }
10156     }
10157   else
10158     /* [dcl.enum]
10159
10160        If the enumerator-list is empty, the underlying type is as if
10161        the enumeration had a single enumerator with value 0.  */
10162     minnode = maxnode = integer_zero_node;
10163
10164   /* Compute the number of bits require to represent all values of the
10165      enumeration.  We must do this before the type of MINNODE and
10166      MAXNODE are transformed, since min_precision relies on the
10167      TREE_TYPE of the value it is passed.  */
10168   unsignedp = tree_int_cst_sgn (minnode) >= 0;
10169   lowprec = min_precision (minnode, unsignedp);
10170   highprec = min_precision (maxnode, unsignedp);
10171   precision = MAX (lowprec, highprec);
10172
10173   /* Determine the underlying type of the enumeration.
10174
10175        [dcl.enum]
10176
10177        The underlying type of an enumeration is an integral type that
10178        can represent all the enumerator values defined in the
10179        enumeration.  It is implementation-defined which integral type is
10180        used as the underlying type for an enumeration except that the
10181        underlying type shall not be larger than int unless the value of
10182        an enumerator cannot fit in an int or unsigned int.
10183
10184      We use "int" or an "unsigned int" as the underlying type, even if
10185      a smaller integral type would work, unless the user has
10186      explicitly requested that we use the smallest possible type.  The
10187      user can request that for all enumerations with a command line
10188      flag, or for just one enumeration with an attribute.  */
10189
10190   use_short_enum = flag_short_enums
10191     || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
10192
10193   for (itk = (use_short_enum ? itk_char : itk_int);
10194        itk != itk_none;
10195        itk++)
10196     {
10197       underlying_type = integer_types[itk];
10198       if (TYPE_PRECISION (underlying_type) >= precision
10199           && TYPE_UNSIGNED (underlying_type) == unsignedp)
10200         break;
10201     }
10202   if (itk == itk_none)
10203     {
10204       /* DR 377
10205
10206          IF no integral type can represent all the enumerator values, the
10207          enumeration is ill-formed.  */
10208       error ("no integral type can represent all of the enumerator values "
10209              "for %qT", enumtype);
10210       precision = TYPE_PRECISION (long_long_integer_type_node);
10211       underlying_type = integer_types[itk_unsigned_long_long];
10212     }
10213
10214   /* Compute the minium and maximum values for the type.
10215
10216      [dcl.enum]
10217
10218      For an enumeration where emin is the smallest enumerator and emax
10219      is the largest, the values of the enumeration are the values of the
10220      underlying type in the range bmin to bmax, where bmin and bmax are,
10221      respectively, the smallest and largest values of the smallest bit-
10222      field that can store emin and emax.  */
10223
10224   /* The middle-end currently assumes that types with TYPE_PRECISION
10225      narrower than their underlying type are suitably zero or sign
10226      extended to fill their mode.  g++ doesn't make these guarantees.
10227      Until the middle-end can represent such paradoxical types, we
10228      set the TYPE_PRECISION to the width of the underlying type.  */
10229   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10230
10231   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10232
10233   /* [dcl.enum]
10234
10235      The value of sizeof() applied to an enumeration type, an object
10236      of an enumeration type, or an enumerator, is the value of sizeof()
10237      applied to the underlying type.  */
10238   TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10239   TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10240   TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10241   TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10242   TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10243   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10244
10245   /* Convert each of the enumerators to the type of the underlying
10246      type of the enumeration.  */
10247   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10248     {
10249       location_t saved_location;
10250
10251       decl = TREE_VALUE (values);
10252       saved_location = input_location;
10253       input_location = DECL_SOURCE_LOCATION (decl);
10254       value = perform_implicit_conversion (underlying_type,
10255                                            DECL_INITIAL (decl));
10256       input_location = saved_location;
10257
10258       /* Do not clobber shared ints.  */
10259       value = copy_node (value);
10260
10261       TREE_TYPE (value) = enumtype;
10262       DECL_INITIAL (decl) = value;
10263       TREE_VALUE (values) = value;
10264     }
10265
10266   /* Fix up all variant types of this enum type.  */
10267   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10268     {
10269       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10270       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10271       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10272       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10273       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10274       TYPE_MODE (t) = TYPE_MODE (enumtype);
10275       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10276       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10277       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10278       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10279     }
10280
10281   /* Finish debugging output for this type.  */
10282   rest_of_type_compilation (enumtype, namespace_bindings_p ());
10283 }
10284
10285 /* Build and install a CONST_DECL for an enumeration constant of the
10286    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10287    Assignment of sequential values by default is handled here.  */
10288
10289 void
10290 build_enumerator (tree name, tree value, tree enumtype)
10291 {
10292   tree decl;
10293   tree context;
10294   tree type;
10295
10296   /* If the VALUE was erroneous, pretend it wasn't there; that will
10297      result in the enum being assigned the next value in sequence.  */
10298   if (value == error_mark_node)
10299     value = NULL_TREE;
10300
10301   /* Remove no-op casts from the value.  */
10302   if (value)
10303     STRIP_TYPE_NOPS (value);
10304
10305   if (! processing_template_decl)
10306     {
10307       /* Validate and default VALUE.  */
10308       if (value != NULL_TREE)
10309         {
10310           value = integral_constant_value (value);
10311
10312           if (TREE_CODE (value) == INTEGER_CST)
10313             {
10314               value = perform_integral_promotions (value);
10315               constant_expression_warning (value);
10316             }
10317           else
10318             {
10319               error ("enumerator value for %qD is not an integer constant", name);
10320               value = NULL_TREE;
10321             }
10322         }
10323
10324       /* Default based on previous value.  */
10325       if (value == NULL_TREE)
10326         {
10327           if (TYPE_VALUES (enumtype))
10328             {
10329               HOST_WIDE_INT hi;
10330               unsigned HOST_WIDE_INT lo;
10331               tree prev_value;
10332               bool overflowed;
10333
10334               /* The next value is the previous value plus one.  We can
10335                  safely assume that the previous value is an INTEGER_CST.
10336                  add_double doesn't know the type of the target expression,
10337                  so we must check with int_fits_type_p as well.  */
10338               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10339               overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10340                                        TREE_INT_CST_HIGH (prev_value),
10341                                        1, 0, &lo, &hi);
10342               value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10343               overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10344
10345               if (overflowed)
10346                 {
10347                   error ("overflow in enumeration values at %qD", name);
10348                   value = error_mark_node;
10349                 }
10350             }
10351           else
10352             value = integer_zero_node;
10353         }
10354
10355       /* Remove no-op casts from the value.  */
10356       STRIP_TYPE_NOPS (value);
10357     }
10358
10359   /* C++ associates enums with global, function, or class declarations.  */
10360   context = current_scope ();
10361
10362   /* Build the actual enumeration constant.  Note that the enumeration
10363     constants have the type of their initializers until the
10364     enumeration is complete:
10365
10366       [ dcl.enum ]
10367
10368       Following the closing brace of an enum-specifier, each enumer-
10369       ator has the type of its enumeration.  Prior to the closing
10370       brace, the type of each enumerator is the type of its
10371       initializing value.
10372
10373     In finish_enum we will reset the type.  Of course, if we're
10374     processing a template, there may be no value.  */
10375   type = value ? TREE_TYPE (value) : NULL_TREE;
10376
10377   if (context && context == current_class_type)
10378     /* This enum declaration is local to the class.  We need the full
10379        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
10380     decl = build_lang_decl (CONST_DECL, name, type);
10381   else
10382     /* It's a global enum, or it's local to a function.  (Note local to
10383       a function could mean local to a class method.  */
10384     decl = build_decl (CONST_DECL, name, type);
10385
10386   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10387   TREE_CONSTANT (decl) = 1;
10388   TREE_INVARIANT (decl) = 1;
10389   TREE_READONLY (decl) = 1;
10390   DECL_INITIAL (decl) = value;
10391
10392   if (context && context == current_class_type)
10393     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10394        on the TYPE_FIELDS list for `S'.  (That's so that you can say
10395        things like `S::i' later.)  */
10396     finish_member_declaration (decl);
10397   else
10398     pushdecl (decl);
10399
10400   /* Add this enumeration constant to the list for this type.  */
10401   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10402 }
10403
10404 \f
10405 /* We're defining DECL.  Make sure that it's type is OK.  */
10406
10407 static void
10408 check_function_type (tree decl, tree current_function_parms)
10409 {
10410   tree fntype = TREE_TYPE (decl);
10411   tree return_type = complete_type (TREE_TYPE (fntype));
10412
10413   /* In a function definition, arg types must be complete.  */
10414   require_complete_types_for_parms (current_function_parms);
10415
10416   if (dependent_type_p (return_type))
10417     return;
10418   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10419     {
10420       tree args = TYPE_ARG_TYPES (fntype);
10421
10422       error ("return type %q#T is incomplete", return_type);
10423
10424       /* Make it return void instead.  */
10425       if (TREE_CODE (fntype) == METHOD_TYPE)
10426         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10427                                              void_type_node,
10428                                              TREE_CHAIN (args));
10429       else
10430         fntype = build_function_type (void_type_node, args);
10431       TREE_TYPE (decl)
10432         = build_exception_variant (fntype,
10433                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10434     }
10435   else
10436     abstract_virtuals_error (decl, TREE_TYPE (fntype));
10437 }
10438
10439 /* Create the FUNCTION_DECL for a function definition.
10440    DECLSPECS and DECLARATOR are the parts of the declaration;
10441    they describe the function's name and the type it returns,
10442    but twisted together in a fashion that parallels the syntax of C.
10443
10444    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10445    DECLARATOR is really the DECL for the function we are about to
10446    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10447    indicating that the function is an inline defined in-class.
10448
10449    This function creates a binding context for the function body
10450    as well as setting up the FUNCTION_DECL in current_function_decl.
10451
10452    For C++, we must first check whether that datum makes any sense.
10453    For example, "class A local_a(1,2);" means that variable local_a
10454    is an aggregate of type A, which should have a constructor
10455    applied to it with the argument list [1, 2].
10456
10457    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
10458    or may be a BLOCK if the function has been defined previously
10459    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
10460    error_mark_node if the function has never been defined, or
10461    a BLOCK if the function has been defined somewhere.  */
10462
10463 void
10464 start_preparsed_function (tree decl1, tree attrs, int flags)
10465 {
10466   tree ctype = NULL_TREE;
10467   tree fntype;
10468   tree restype;
10469   int doing_friend = 0;
10470   struct cp_binding_level *bl;
10471   tree current_function_parms;
10472   struct c_fileinfo *finfo
10473     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
10474   bool honor_interface;
10475
10476   /* Sanity check.  */
10477   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
10478   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
10479
10480   fntype = TREE_TYPE (decl1);
10481   if (TREE_CODE (fntype) == METHOD_TYPE)
10482     ctype = TYPE_METHOD_BASETYPE (fntype);
10483
10484   /* ISO C++ 11.4/5.  A friend function defined in a class is in
10485      the (lexical) scope of the class in which it is defined.  */
10486   if (!ctype && DECL_FRIEND_P (decl1))
10487     {
10488       ctype = DECL_FRIEND_CONTEXT (decl1);
10489
10490       /* CTYPE could be null here if we're dealing with a template;
10491          for example, `inline friend float foo()' inside a template
10492          will have no CTYPE set.  */
10493       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
10494         ctype = NULL_TREE;
10495       else
10496         doing_friend = 1;
10497     }
10498
10499   if (DECL_DECLARED_INLINE_P (decl1)
10500       && lookup_attribute ("noinline", attrs))
10501     warning (0, "inline function %q+D given attribute noinline", decl1);
10502
10503   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
10504     /* This is a constructor, we must ensure that any default args
10505        introduced by this definition are propagated to the clones
10506        now. The clones are used directly in overload resolution.  */
10507     adjust_clone_args (decl1);
10508
10509   /* Sometimes we don't notice that a function is a static member, and
10510      build a METHOD_TYPE for it.  Fix that up now.  */
10511   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
10512       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
10513     {
10514       revert_static_member_fn (decl1);
10515       ctype = NULL_TREE;
10516     }
10517
10518   /* Set up current_class_type, and enter the scope of the class, if
10519      appropriate.  */
10520   if (ctype)
10521     push_nested_class (ctype);
10522   else if (DECL_STATIC_FUNCTION_P (decl1))
10523     push_nested_class (DECL_CONTEXT (decl1));
10524
10525   /* Now that we have entered the scope of the class, we must restore
10526      the bindings for any template parameters surrounding DECL1, if it
10527      is an inline member template.  (Order is important; consider the
10528      case where a template parameter has the same name as a field of
10529      the class.)  It is not until after this point that
10530      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
10531   if (flags & SF_INCLASS_INLINE)
10532     maybe_begin_member_template_processing (decl1);
10533
10534   /* Effective C++ rule 15.  */
10535   if (warn_ecpp
10536       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
10537       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
10538     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
10539
10540   /* Make the init_value nonzero so pushdecl knows this is not tentative.
10541      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
10542   if (!DECL_INITIAL (decl1))
10543     DECL_INITIAL (decl1) = error_mark_node;
10544
10545   /* This function exists in static storage.
10546      (This does not mean `static' in the C sense!)  */
10547   TREE_STATIC (decl1) = 1;
10548
10549   /* We must call push_template_decl after current_class_type is set
10550      up.  (If we are processing inline definitions after exiting a
10551      class scope, current_class_type will be NULL_TREE until set above
10552      by push_nested_class.)  */
10553   if (processing_template_decl)
10554     {
10555       /* FIXME: Handle error_mark_node more gracefully.  */
10556       tree newdecl1 = push_template_decl (decl1);
10557       if (newdecl1 != error_mark_node)
10558         decl1 = newdecl1;
10559     }
10560
10561   /* We are now in the scope of the function being defined.  */
10562   current_function_decl = decl1;
10563
10564   /* Save the parm names or decls from this function's declarator
10565      where store_parm_decls will find them.  */
10566   current_function_parms = DECL_ARGUMENTS (decl1);
10567
10568   /* Make sure the parameter and return types are reasonable.  When
10569      you declare a function, these types can be incomplete, but they
10570      must be complete when you define the function.  */
10571   check_function_type (decl1, current_function_parms);
10572
10573   /* Build the return declaration for the function.  */
10574   restype = TREE_TYPE (fntype);
10575   /* Promote the value to int before returning it.  */
10576   if (c_promoting_integer_type_p (restype))
10577     restype = type_promotes_to (restype);
10578   if (DECL_RESULT (decl1) == NULL_TREE)
10579     {
10580       tree resdecl;
10581
10582       resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
10583       DECL_ARTIFICIAL (resdecl) = 1;
10584       DECL_IGNORED_P (resdecl) = 1;
10585       DECL_RESULT (decl1) = resdecl;
10586
10587       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
10588     }
10589
10590   /* Let the user know we're compiling this function.  */
10591   announce_function (decl1);
10592
10593   /* Record the decl so that the function name is defined.
10594      If we already have a decl for this name, and it is a FUNCTION_DECL,
10595      use the old decl.  */
10596   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
10597     {
10598       /* A specialization is not used to guide overload resolution.  */
10599       if (!DECL_FUNCTION_MEMBER_P (decl1)
10600           && !(DECL_USE_TEMPLATE (decl1) &&
10601                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
10602         {
10603           tree olddecl = pushdecl (decl1);
10604
10605           if (olddecl == error_mark_node)
10606             /* If something went wrong when registering the declaration,
10607                use DECL1; we have to have a FUNCTION_DECL to use when
10608                parsing the body of the function.  */
10609             ;
10610           else
10611             {
10612               /* Otherwise, OLDDECL is either a previous declaration
10613                  of the same function or DECL1 itself.  */
10614
10615               if (warn_missing_declarations
10616                   && olddecl == decl1
10617                   && !DECL_MAIN_P (decl1)
10618                   && TREE_PUBLIC (decl1)
10619                   && !DECL_DECLARED_INLINE_P (decl1))
10620                 {
10621                   tree context;
10622
10623                   /* Check whether DECL1 is in an anonymous
10624                      namespace.  */
10625                   for (context = DECL_CONTEXT (decl1);
10626                        context;
10627                        context = DECL_CONTEXT (context))
10628                     {
10629                       if (TREE_CODE (context) == NAMESPACE_DECL
10630                           && DECL_NAME (context) == NULL_TREE)
10631                         break;
10632                     }
10633
10634                   if (context == NULL)
10635                     warning (OPT_Wmissing_declarations,
10636                              "no previous declaration for %q+D", decl1);
10637                 }
10638
10639               decl1 = olddecl;
10640             }
10641         }
10642       else
10643         {
10644           /* We need to set the DECL_CONTEXT.  */
10645           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
10646             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
10647         }
10648       fntype = TREE_TYPE (decl1);
10649
10650       /* If #pragma weak applies, mark the decl appropriately now.
10651          The pragma only applies to global functions.  Because
10652          determining whether or not the #pragma applies involves
10653          computing the mangled name for the declaration, we cannot
10654          apply the pragma until after we have merged this declaration
10655          with any previous declarations; if the original declaration
10656          has a linkage specification, that specification applies to
10657          the definition as well, and may affect the mangled name.  */
10658       if (!DECL_CONTEXT (decl1))
10659         maybe_apply_pragma_weak (decl1);
10660     }
10661
10662   /* Reset this in case the call to pushdecl changed it.  */
10663   current_function_decl = decl1;
10664
10665   gcc_assert (DECL_INITIAL (decl1));
10666
10667   /* This function may already have been parsed, in which case just
10668      return; our caller will skip over the body without parsing.  */
10669   if (DECL_INITIAL (decl1) != error_mark_node)
10670     return;
10671
10672   /* Initialize RTL machinery.  We cannot do this until
10673      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
10674      even when processing a template; this is how we get
10675      CFUN set up, and our per-function variables initialized.
10676      FIXME factor out the non-RTL stuff.  */
10677   bl = current_binding_level;
10678   allocate_struct_function (decl1);
10679   current_binding_level = bl;
10680
10681   /* Even though we're inside a function body, we still don't want to
10682      call expand_expr to calculate the size of a variable-sized array.
10683      We haven't necessarily assigned RTL to all variables yet, so it's
10684      not safe to try to expand expressions involving them.  */
10685   cfun->x_dont_save_pending_sizes_p = 1;
10686
10687   /* Start the statement-tree, start the tree now.  */
10688   DECL_SAVED_TREE (decl1) = push_stmt_list ();
10689
10690   /* If we are (erroneously) defining a function that we have already
10691      defined before, wipe out what we knew before.  */
10692   if (!DECL_PENDING_INLINE_P (decl1))
10693     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
10694
10695   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
10696     {
10697       /* We know that this was set up by `grokclassfn'.  We do not
10698          wait until `store_parm_decls', since evil parse errors may
10699          never get us to that point.  Here we keep the consistency
10700          between `current_class_type' and `current_class_ptr'.  */
10701       tree t = DECL_ARGUMENTS (decl1);
10702
10703       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
10704       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
10705
10706       cp_function_chain->x_current_class_ref
10707         = build_indirect_ref (t, NULL);
10708       cp_function_chain->x_current_class_ptr = t;
10709
10710       /* Constructors and destructors need to know whether they're "in
10711          charge" of initializing virtual base classes.  */
10712       t = TREE_CHAIN (t);
10713       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
10714         {
10715           current_in_charge_parm = t;
10716           t = TREE_CHAIN (t);
10717         }
10718       if (DECL_HAS_VTT_PARM_P (decl1))
10719         {
10720           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
10721           current_vtt_parm = t;
10722         }
10723     }
10724
10725   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
10726                      /* Implicitly-defined methods (like the
10727                         destructor for a class in which no destructor
10728                         is explicitly declared) must not be defined
10729                         until their definition is needed.  So, we
10730                         ignore interface specifications for
10731                         compiler-generated functions.  */
10732                      && !DECL_ARTIFICIAL (decl1));
10733
10734   if (DECL_INTERFACE_KNOWN (decl1))
10735     {
10736       tree ctx = decl_function_context (decl1);
10737
10738       if (DECL_NOT_REALLY_EXTERN (decl1))
10739         DECL_EXTERNAL (decl1) = 0;
10740
10741       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
10742           && TREE_PUBLIC (ctx))
10743         /* This is a function in a local class in an extern inline
10744            function.  */
10745         comdat_linkage (decl1);
10746     }
10747   /* If this function belongs to an interface, it is public.
10748      If it belongs to someone else's interface, it is also external.
10749      This only affects inlines and template instantiations.  */
10750   else if (!finfo->interface_unknown && honor_interface)
10751     {
10752       if (DECL_DECLARED_INLINE_P (decl1)
10753           || DECL_TEMPLATE_INSTANTIATION (decl1)
10754           || processing_template_decl)
10755         {
10756           DECL_EXTERNAL (decl1)
10757             = (finfo->interface_only
10758                || (DECL_DECLARED_INLINE_P (decl1)
10759                    && ! flag_implement_inlines
10760                    && !DECL_VINDEX (decl1)));
10761
10762           /* For WIN32 we also want to put these in linkonce sections.  */
10763           maybe_make_one_only (decl1);
10764         }
10765       else
10766         DECL_EXTERNAL (decl1) = 0;
10767       DECL_INTERFACE_KNOWN (decl1) = 1;
10768       /* If this function is in an interface implemented in this file,
10769          make sure that the backend knows to emit this function
10770          here.  */
10771       if (!DECL_EXTERNAL (decl1))
10772         mark_needed (decl1);
10773     }
10774   else if (finfo->interface_unknown && finfo->interface_only
10775            && honor_interface)
10776     {
10777       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
10778          interface, we will have both finfo->interface_unknown and
10779          finfo->interface_only set.  In that case, we don't want to
10780          use the normal heuristics because someone will supply a
10781          #pragma implementation elsewhere, and deducing it here would
10782          produce a conflict.  */
10783       comdat_linkage (decl1);
10784       DECL_EXTERNAL (decl1) = 0;
10785       DECL_INTERFACE_KNOWN (decl1) = 1;
10786       DECL_DEFER_OUTPUT (decl1) = 1;
10787     }
10788   else
10789     {
10790       /* This is a definition, not a reference.
10791          So clear DECL_EXTERNAL.  */
10792       DECL_EXTERNAL (decl1) = 0;
10793
10794       if ((DECL_DECLARED_INLINE_P (decl1)
10795            || DECL_TEMPLATE_INSTANTIATION (decl1))
10796           && ! DECL_INTERFACE_KNOWN (decl1)
10797           /* Don't try to defer nested functions for now.  */
10798           && ! decl_function_context (decl1))
10799         DECL_DEFER_OUTPUT (decl1) = 1;
10800       else
10801         DECL_INTERFACE_KNOWN (decl1) = 1;
10802     }
10803
10804   /* Determine the ELF visibility attribute for the function.  We must not
10805      do this before calling "pushdecl", as we must allow "duplicate_decls"
10806      to merge any attributes appropriately.  We also need to wait until
10807      linkage is set.  */
10808   if (!DECL_CLONED_FUNCTION_P (decl1))
10809     determine_visibility (decl1);
10810
10811   begin_scope (sk_function_parms, decl1);
10812
10813   ++function_depth;
10814
10815   if (DECL_DESTRUCTOR_P (decl1)
10816       || (DECL_CONSTRUCTOR_P (decl1)
10817           && targetm.cxx.cdtor_returns_this ()))
10818     {
10819       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
10820       DECL_CONTEXT (cdtor_label) = current_function_decl;
10821     }
10822
10823   start_fname_decls ();
10824
10825   store_parm_decls (current_function_parms);
10826 }
10827
10828
10829 /* Like start_preparsed_function, except that instead of a
10830    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
10831
10832    Returns 1 on success.  If the DECLARATOR is not suitable for a function
10833    (it defines a datum instead), we return 0, which tells
10834    yyparse to report a parse error.  */
10835
10836 int
10837 start_function (cp_decl_specifier_seq *declspecs,
10838                 const cp_declarator *declarator,
10839                 tree attrs)
10840 {
10841   tree decl1;
10842
10843   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
10844   /* If the declarator is not suitable for a function definition,
10845      cause a syntax error.  */
10846   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
10847     return 0;
10848
10849   if (DECL_MAIN_P (decl1))
10850     /* main must return int.  grokfndecl should have corrected it
10851        (and issued a diagnostic) if the user got it wrong.  */
10852     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
10853                              integer_type_node));
10854
10855   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
10856
10857   return 1;
10858 }
10859 \f
10860 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
10861    FN.  */
10862
10863 static bool
10864 use_eh_spec_block (tree fn)
10865 {
10866   return (flag_exceptions && flag_enforce_eh_specs
10867           && !processing_template_decl
10868           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
10869           /* We insert the EH_SPEC_BLOCK only in the original
10870              function; then, it is copied automatically to the
10871              clones.  */
10872           && !DECL_CLONED_FUNCTION_P (fn)
10873           /* Implicitly-generated constructors and destructors have
10874              exception specifications.  However, those specifications
10875              are the union of the possible exceptions specified by the
10876              constructors/destructors for bases and members, so no
10877              unallowed exception will ever reach this function.  By
10878              not creating the EH_SPEC_BLOCK we save a little memory,
10879              and we avoid spurious warnings about unreachable
10880              code.  */
10881           && !DECL_ARTIFICIAL (fn));
10882 }
10883
10884 /* Store the parameter declarations into the current function declaration.
10885    This is called after parsing the parameter declarations, before
10886    digesting the body of the function.
10887
10888    Also install to binding contour return value identifier, if any.  */
10889
10890 static void
10891 store_parm_decls (tree current_function_parms)
10892 {
10893   tree fndecl = current_function_decl;
10894   tree parm;
10895
10896   /* This is a chain of any other decls that came in among the parm
10897      declarations.  If a parm is declared with  enum {foo, bar} x;
10898      then CONST_DECLs for foo and bar are put here.  */
10899   tree nonparms = NULL_TREE;
10900
10901   if (current_function_parms)
10902     {
10903       /* This case is when the function was defined with an ANSI prototype.
10904          The parms already have decls, so we need not do anything here
10905          except record them as in effect
10906          and complain if any redundant old-style parm decls were written.  */
10907
10908       tree specparms = current_function_parms;
10909       tree next;
10910
10911       /* Must clear this because it might contain TYPE_DECLs declared
10912              at class level.  */
10913       current_binding_level->names = NULL;
10914
10915       /* If we're doing semantic analysis, then we'll call pushdecl
10916              for each of these.  We must do them in reverse order so that
10917              they end in the correct forward order.  */
10918       specparms = nreverse (specparms);
10919
10920       for (parm = specparms; parm; parm = next)
10921         {
10922           next = TREE_CHAIN (parm);
10923           if (TREE_CODE (parm) == PARM_DECL)
10924             {
10925               if (DECL_NAME (parm) == NULL_TREE
10926                   || TREE_CODE (parm) != VOID_TYPE)
10927                 pushdecl (parm);
10928               else
10929                 error ("parameter %qD declared void", parm);
10930             }
10931           else
10932             {
10933               /* If we find an enum constant or a type tag,
10934                  put it aside for the moment.  */
10935               TREE_CHAIN (parm) = NULL_TREE;
10936               nonparms = chainon (nonparms, parm);
10937             }
10938         }
10939
10940       /* Get the decls in their original chain order and record in the
10941          function.  This is all and only the PARM_DECLs that were
10942          pushed into scope by the loop above.  */
10943       DECL_ARGUMENTS (fndecl) = getdecls ();
10944     }
10945   else
10946     DECL_ARGUMENTS (fndecl) = NULL_TREE;
10947
10948   /* Now store the final chain of decls for the arguments
10949      as the decl-chain of the current lexical scope.
10950      Put the enumerators in as well, at the front so that
10951      DECL_ARGUMENTS is not modified.  */
10952   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
10953
10954   if (use_eh_spec_block (current_function_decl))
10955     current_eh_spec_block = begin_eh_spec_block ();
10956 }
10957
10958 \f
10959 /* We have finished doing semantic analysis on DECL, but have not yet
10960    generated RTL for its body.  Save away our current state, so that
10961    when we want to generate RTL later we know what to do.  */
10962
10963 static void
10964 save_function_data (tree decl)
10965 {
10966   struct language_function *f;
10967
10968   /* Save the language-specific per-function data so that we can
10969      get it back when we really expand this function.  */
10970   gcc_assert (!DECL_PENDING_INLINE_P (decl));
10971
10972   /* Make a copy.  */
10973   f = GGC_NEW (struct language_function);
10974   memcpy (f, cp_function_chain, sizeof (struct language_function));
10975   DECL_SAVED_FUNCTION_DATA (decl) = f;
10976
10977   /* Clear out the bits we don't need.  */
10978   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
10979   f->bindings = NULL;
10980   f->x_local_names = NULL;
10981 }
10982
10983
10984 /* Set the return value of the constructor (if present).  */
10985
10986 static void
10987 finish_constructor_body (void)
10988 {
10989   tree val;
10990   tree exprstmt;
10991
10992   if (targetm.cxx.cdtor_returns_this ())
10993     {
10994       /* Any return from a constructor will end up here.  */
10995       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
10996
10997       val = DECL_ARGUMENTS (current_function_decl);
10998       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
10999                     DECL_RESULT (current_function_decl), val);
11000       /* Return the address of the object.  */
11001       exprstmt = build_stmt (RETURN_EXPR, val);
11002       add_stmt (exprstmt);
11003     }
11004 }
11005
11006 /* Do all the processing for the beginning of a destructor; set up the
11007    vtable pointers and cleanups for bases and members.  */
11008
11009 static void
11010 begin_destructor_body (void)
11011 {
11012   tree compound_stmt;
11013
11014   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
11015      issued an error message.  We still want to try to process the
11016      body of the function, but initialize_vtbl_ptrs will crash if
11017      TYPE_BINFO is NULL.  */
11018   if (COMPLETE_TYPE_P (current_class_type))
11019     {
11020       compound_stmt = begin_compound_stmt (0);
11021       /* Make all virtual function table pointers in non-virtual base
11022          classes point to CURRENT_CLASS_TYPE's virtual function
11023          tables.  */
11024       initialize_vtbl_ptrs (current_class_ptr);
11025       finish_compound_stmt (compound_stmt);
11026
11027       /* And insert cleanups for our bases and members so that they
11028          will be properly destroyed if we throw.  */
11029       push_base_cleanups ();
11030     }
11031 }
11032
11033 /* At the end of every destructor we generate code to delete the object if
11034    necessary.  Do that now.  */
11035
11036 static void
11037 finish_destructor_body (void)
11038 {
11039   tree exprstmt;
11040
11041   /* Any return from a destructor will end up here; that way all base
11042      and member cleanups will be run when the function returns.  */
11043   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11044
11045   /* In a virtual destructor, we must call delete.  */
11046   if (DECL_VIRTUAL_P (current_function_decl))
11047     {
11048       tree if_stmt;
11049       tree virtual_size = cxx_sizeof (current_class_type);
11050
11051       /* [class.dtor]
11052
11053       At the point of definition of a virtual destructor (including
11054       an implicit definition), non-placement operator delete shall
11055       be looked up in the scope of the destructor's class and if
11056       found shall be accessible and unambiguous.  */
11057       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
11058                                       virtual_size,
11059                                       /*global_p=*/false,
11060                                       /*placement=*/NULL_TREE,
11061                                       /*alloc_fn=*/NULL_TREE);
11062
11063       if_stmt = begin_if_stmt ();
11064       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
11065                                    current_in_charge_parm,
11066                                    integer_one_node),
11067                            if_stmt);
11068       finish_expr_stmt (exprstmt);
11069       finish_then_clause (if_stmt);
11070       finish_if_stmt (if_stmt);
11071     }
11072
11073   if (targetm.cxx.cdtor_returns_this ())
11074     {
11075       tree val;
11076
11077       val = DECL_ARGUMENTS (current_function_decl);
11078       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11079                     DECL_RESULT (current_function_decl), val);
11080       /* Return the address of the object.  */
11081       exprstmt = build_stmt (RETURN_EXPR, val);
11082       add_stmt (exprstmt);
11083     }
11084 }
11085
11086 /* Do the necessary processing for the beginning of a function body, which
11087    in this case includes member-initializers, but not the catch clauses of
11088    a function-try-block.  Currently, this means opening a binding level
11089    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
11090
11091 tree
11092 begin_function_body (void)
11093 {
11094   tree stmt;
11095
11096   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11097     return NULL_TREE;
11098
11099   if (processing_template_decl)
11100     /* Do nothing now.  */;
11101   else
11102     /* Always keep the BLOCK node associated with the outermost pair of
11103        curly braces of a function.  These are needed for correct
11104        operation of dwarfout.c.  */
11105     keep_next_level (true);
11106
11107   stmt = begin_compound_stmt (BCS_FN_BODY);
11108
11109   if (processing_template_decl)
11110     /* Do nothing now.  */;
11111   else if (DECL_DESTRUCTOR_P (current_function_decl))
11112     begin_destructor_body ();
11113
11114   return stmt;
11115 }
11116
11117 /* Do the processing for the end of a function body.  Currently, this means
11118    closing out the cleanups for fully-constructed bases and members, and in
11119    the case of the destructor, deleting the object if desired.  Again, this
11120    is only meaningful for [cd]tors, since they are the only functions where
11121    there is a significant distinction between the main body and any
11122    function catch clauses.  Handling, say, main() return semantics here
11123    would be wrong, as flowing off the end of a function catch clause for
11124    main() would also need to return 0.  */
11125
11126 void
11127 finish_function_body (tree compstmt)
11128 {
11129   if (compstmt == NULL_TREE)
11130     return;
11131
11132   /* Close the block.  */
11133   finish_compound_stmt (compstmt);
11134
11135   if (processing_template_decl)
11136     /* Do nothing now.  */;
11137   else if (DECL_CONSTRUCTOR_P (current_function_decl))
11138     finish_constructor_body ();
11139   else if (DECL_DESTRUCTOR_P (current_function_decl))
11140     finish_destructor_body ();
11141 }
11142
11143 /* Given a function, returns the BLOCK corresponding to the outermost level
11144    of curly braces, skipping the artificial block created for constructor
11145    initializers.  */
11146
11147 static tree
11148 outer_curly_brace_block (tree fndecl)
11149 {
11150   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
11151   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11152     /* Skip the artificial function body block.  */
11153     block = BLOCK_SUBBLOCKS (block);
11154   return block;
11155 }
11156
11157 /* Finish up a function declaration and compile that function
11158    all the way to assembler language output.  The free the storage
11159    for the function definition.
11160
11161    FLAGS is a bitwise or of the following values:
11162      2 - INCLASS_INLINE
11163        We just finished processing the body of an in-class inline
11164        function definition.  (This processing will have taken place
11165        after the class definition is complete.)  */
11166
11167 tree
11168 finish_function (int flags)
11169 {
11170   tree fndecl = current_function_decl;
11171   tree fntype, ctype = NULL_TREE;
11172   int inclass_inline = (flags & 2) != 0;
11173   int nested;
11174
11175   /* When we get some parse errors, we can end up without a
11176      current_function_decl, so cope.  */
11177   if (fndecl == NULL_TREE)
11178     return error_mark_node;
11179
11180   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
11181       && DECL_VIRTUAL_P (fndecl)
11182       && !processing_template_decl)
11183     {
11184       tree fnclass = DECL_CONTEXT (fndecl);
11185       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
11186         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
11187     }
11188
11189   nested = function_depth > 1;
11190   fntype = TREE_TYPE (fndecl);
11191
11192   /*  TREE_READONLY (fndecl) = 1;
11193       This caused &foo to be of type ptr-to-const-function
11194       which then got a warning when stored in a ptr-to-function variable.  */
11195
11196   gcc_assert (building_stmt_tree ());
11197   /* The current function is being defined, so its DECL_INITIAL should
11198      be set, and unless there's a multiple definition, it should be
11199      error_mark_node.  */
11200   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
11201
11202   /* For a cloned function, we've already got all the code we need;
11203      there's no need to add any extra bits.  */
11204   if (!DECL_CLONED_FUNCTION_P (fndecl))
11205     {
11206       if (DECL_MAIN_P (current_function_decl))
11207         {
11208           tree stmt;
11209
11210           /* Make it so that `main' always returns 0 by default (or
11211              1 for VMS).  */
11212 #if VMS_TARGET
11213           stmt = finish_return_stmt (integer_one_node);
11214 #else
11215           stmt = finish_return_stmt (integer_zero_node);
11216 #endif
11217           /* Hack.  We don't want the middle-end to warn that this
11218              return is unreachable, so put the statement on the
11219              special line 0.  */
11220 #ifdef USE_MAPPED_LOCATION
11221           SET_EXPR_LOCATION (stmt, UNKNOWN_LOCATION);
11222 #else
11223           annotate_with_file_line (stmt, input_filename, 0);
11224 #endif
11225         }
11226
11227       if (use_eh_spec_block (current_function_decl))
11228         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
11229                               (TREE_TYPE (current_function_decl)),
11230                               current_eh_spec_block);
11231     }
11232
11233   /* If we're saving up tree structure, tie off the function now.  */
11234   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11235
11236   finish_fname_decls ();
11237
11238   /* If this function can't throw any exceptions, remember that.  */
11239   if (!processing_template_decl
11240       && !cp_function_chain->can_throw
11241       && !flag_non_call_exceptions
11242       && targetm.binds_local_p (fndecl))
11243     TREE_NOTHROW (fndecl) = 1;
11244
11245   /* This must come after expand_function_end because cleanups might
11246      have declarations (from inline functions) that need to go into
11247      this function's blocks.  */
11248
11249   /* If the current binding level isn't the outermost binding level
11250      for this function, either there is a bug, or we have experienced
11251      syntax errors and the statement tree is malformed.  */
11252   if (current_binding_level->kind != sk_function_parms)
11253     {
11254       /* Make sure we have already experienced errors.  */
11255       gcc_assert (errorcount);
11256
11257       /* Throw away the broken statement tree and extra binding
11258          levels.  */
11259       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11260
11261       while (current_binding_level->kind != sk_function_parms)
11262         {
11263           if (current_binding_level->kind == sk_class)
11264             pop_nested_class ();
11265           else
11266             poplevel (0, 0, 0);
11267         }
11268     }
11269   poplevel (1, 0, 1);
11270
11271   /* Statements should always be full-expressions at the outermost set
11272      of curly braces for a function.  */
11273   gcc_assert (stmts_are_full_exprs_p ());
11274
11275   /* Set up the named return value optimization, if we can.  Candidate
11276      variables are selected in check_return_value.  */
11277   if (current_function_return_value)
11278     {
11279       tree r = current_function_return_value;
11280       tree outer;
11281
11282       if (r != error_mark_node
11283           /* This is only worth doing for fns that return in memory--and
11284              simpler, since we don't have to worry about promoted modes.  */
11285           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11286           /* Only allow this for variables declared in the outer scope of
11287              the function so we know that their lifetime always ends with a
11288              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
11289              we were to do this optimization in tree-ssa.  */
11290           && (outer = outer_curly_brace_block (fndecl))
11291           && chain_member (r, BLOCK_VARS (outer)))
11292         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11293
11294       current_function_return_value = NULL_TREE;
11295     }
11296
11297   /* Remember that we were in class scope.  */
11298   if (current_class_name)
11299     ctype = current_class_type;
11300
11301   /* Must mark the RESULT_DECL as being in this function.  */
11302   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11303
11304   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11305      to the FUNCTION_DECL node itself.  */
11306   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11307
11308   /* Save away current state, if appropriate.  */
11309   if (!processing_template_decl)
11310     save_function_data (fndecl);
11311
11312   /* Complain if there's just no return statement.  */
11313   if (warn_return_type
11314       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11315       && !dependent_type_p (TREE_TYPE (fntype))
11316       && !current_function_returns_value && !current_function_returns_null
11317       /* Don't complain if we abort or throw.  */
11318       && !current_function_returns_abnormally
11319       && !DECL_NAME (DECL_RESULT (fndecl))
11320       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
11321          inline function, as we might never be compiled separately.  */
11322       && (DECL_INLINE (fndecl) || processing_template_decl)
11323       /* Structor return values (if any) are set by the compiler.  */
11324       && !DECL_CONSTRUCTOR_P (fndecl)
11325       && !DECL_DESTRUCTOR_P (fndecl))
11326     warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11327
11328   /* Store the end of the function, so that we get good line number
11329      info for the epilogue.  */
11330   cfun->function_end_locus = input_location;
11331
11332   /* Genericize before inlining.  */
11333   if (!processing_template_decl)
11334     {
11335       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11336       cp_genericize (fndecl);
11337       /* Clear out the bits we don't need.  */
11338       f->x_current_class_ptr = NULL;
11339       f->x_current_class_ref = NULL;
11340       f->x_eh_spec_block = NULL;
11341       f->x_in_charge_parm = NULL;
11342       f->x_vtt_parm = NULL;
11343       f->x_return_value = NULL;
11344       f->bindings = NULL;
11345       f->extern_decl_map = NULL;
11346
11347       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
11348       c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11349     }
11350   /* Clear out the bits we don't need.  */
11351   local_names = NULL;
11352
11353   /* We're leaving the context of this function, so zap cfun.  It's still in
11354      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
11355   cfun = NULL;
11356   current_function_decl = NULL;
11357
11358   /* If this is an in-class inline definition, we may have to pop the
11359      bindings for the template parameters that we added in
11360      maybe_begin_member_template_processing when start_function was
11361      called.  */
11362   if (inclass_inline)
11363     maybe_end_member_template_processing ();
11364
11365   /* Leave the scope of the class.  */
11366   if (ctype)
11367     pop_nested_class ();
11368
11369   --function_depth;
11370
11371   /* Clean up.  */
11372   if (! nested)
11373     /* Let the error reporting routines know that we're outside a
11374        function.  For a nested function, this value is used in
11375        cxx_pop_function_context and then reset via pop_function_context.  */
11376     current_function_decl = NULL_TREE;
11377
11378   return fndecl;
11379 }
11380 \f
11381 /* Create the FUNCTION_DECL for a function definition.
11382    DECLSPECS and DECLARATOR are the parts of the declaration;
11383    they describe the return type and the name of the function,
11384    but twisted together in a fashion that parallels the syntax of C.
11385
11386    This function creates a binding context for the function body
11387    as well as setting up the FUNCTION_DECL in current_function_decl.
11388
11389    Returns a FUNCTION_DECL on success.
11390
11391    If the DECLARATOR is not suitable for a function (it defines a datum
11392    instead), we return 0, which tells yyparse to report a parse error.
11393
11394    May return void_type_node indicating that this method is actually
11395    a friend.  See grokfield for more details.
11396
11397    Came here with a `.pushlevel' .
11398
11399    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11400    CHANGES TO CODE IN `grokfield'.  */
11401
11402 tree
11403 start_method (cp_decl_specifier_seq *declspecs,
11404               const cp_declarator *declarator, tree attrlist)
11405 {
11406   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11407                                 &attrlist);
11408
11409   if (fndecl == error_mark_node)
11410     return error_mark_node;
11411
11412   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11413     {
11414       error ("invalid member function declaration");
11415       return error_mark_node;
11416     }
11417
11418   if (attrlist)
11419     cplus_decl_attributes (&fndecl, attrlist, 0);
11420
11421   /* Pass friends other than inline friend functions back.  */
11422   if (fndecl == void_type_node)
11423     return fndecl;
11424
11425   if (DECL_IN_AGGR_P (fndecl))
11426     {
11427       if (DECL_CONTEXT (fndecl)
11428           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11429         error ("%qD is already defined in class %qT", fndecl,
11430                DECL_CONTEXT (fndecl));
11431       return error_mark_node;
11432     }
11433
11434   check_template_shadow (fndecl);
11435
11436   DECL_DECLARED_INLINE_P (fndecl) = 1;
11437   if (flag_default_inline)
11438     DECL_INLINE (fndecl) = 1;
11439
11440   /* We process method specializations in finish_struct_1.  */
11441   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11442     {
11443       fndecl = push_template_decl (fndecl);
11444       if (fndecl == error_mark_node)
11445         return fndecl;
11446     }
11447
11448   if (! DECL_FRIEND_P (fndecl))
11449     {
11450       if (TREE_CHAIN (fndecl))
11451         {
11452           fndecl = copy_node (fndecl);
11453           TREE_CHAIN (fndecl) = NULL_TREE;
11454         }
11455     }
11456
11457   finish_decl (fndecl, NULL_TREE, NULL_TREE);
11458
11459   /* Make a place for the parms.  */
11460   begin_scope (sk_function_parms, fndecl);
11461
11462   DECL_IN_AGGR_P (fndecl) = 1;
11463   return fndecl;
11464 }
11465
11466 /* Go through the motions of finishing a function definition.
11467    We don't compile this method until after the whole class has
11468    been processed.
11469
11470    FINISH_METHOD must return something that looks as though it
11471    came from GROKFIELD (since we are defining a method, after all).
11472
11473    This is called after parsing the body of the function definition.
11474    STMTS is the chain of statements that makes up the function body.
11475
11476    DECL is the ..._DECL that `start_method' provided.  */
11477
11478 tree
11479 finish_method (tree decl)
11480 {
11481   tree fndecl = decl;
11482   tree old_initial;
11483
11484   tree link;
11485
11486   if (decl == void_type_node)
11487     return decl;
11488
11489   old_initial = DECL_INITIAL (fndecl);
11490
11491   /* Undo the level for the parms (from start_method).
11492      This is like poplevel, but it causes nothing to be
11493      saved.  Saving information here confuses symbol-table
11494      output routines.  Besides, this information will
11495      be correctly output when this method is actually
11496      compiled.  */
11497
11498   /* Clear out the meanings of the local variables of this level;
11499      also record in each decl which block it belongs to.  */
11500
11501   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
11502     {
11503       if (DECL_NAME (link) != NULL_TREE)
11504         pop_binding (DECL_NAME (link), link);
11505       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
11506       DECL_CONTEXT (link) = NULL_TREE;
11507     }
11508
11509   poplevel (0, 0, 0);
11510
11511   DECL_INITIAL (fndecl) = old_initial;
11512
11513   /* We used to check if the context of FNDECL was different from
11514      current_class_type as another way to get inside here.  This didn't work
11515      for String.cc in libg++.  */
11516   if (DECL_FRIEND_P (fndecl))
11517     {
11518       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
11519                      fndecl);
11520       decl = void_type_node;
11521     }
11522
11523   return decl;
11524 }
11525 \f
11526
11527 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
11528    we can lay it out later, when and if its type becomes complete.  */
11529
11530 void
11531 maybe_register_incomplete_var (tree var)
11532 {
11533   gcc_assert (TREE_CODE (var) == VAR_DECL);
11534
11535   /* Keep track of variables with incomplete types.  */
11536   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
11537       && DECL_EXTERNAL (var))
11538     {
11539       tree inner_type = TREE_TYPE (var);
11540
11541       while (TREE_CODE (inner_type) == ARRAY_TYPE)
11542         inner_type = TREE_TYPE (inner_type);
11543       inner_type = TYPE_MAIN_VARIANT (inner_type);
11544
11545       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
11546           /* RTTI TD entries are created while defining the type_info.  */
11547           || (TYPE_LANG_SPECIFIC (inner_type)
11548               && TYPE_BEING_DEFINED (inner_type)))
11549         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
11550     }
11551 }
11552
11553 /* Called when a class type (given by TYPE) is defined.  If there are
11554    any existing VAR_DECLs whose type hsa been completed by this
11555    declaration, update them now.  */
11556
11557 void
11558 complete_vars (tree type)
11559 {
11560   tree *list = &incomplete_vars;
11561
11562   gcc_assert (CLASS_TYPE_P (type));
11563   while (*list)
11564     {
11565       if (same_type_p (type, TREE_PURPOSE (*list)))
11566         {
11567           tree var = TREE_VALUE (*list);
11568           tree type = TREE_TYPE (var);
11569           /* Complete the type of the variable.  The VAR_DECL itself
11570              will be laid out in expand_expr.  */
11571           complete_type (type);
11572           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
11573           /* Remove this entry from the list.  */
11574           *list = TREE_CHAIN (*list);
11575         }
11576       else
11577         list = &TREE_CHAIN (*list);
11578     }
11579
11580   /* Check for pending declarations which may have abstract type.  */
11581   complete_type_check_abstract (type);
11582 }
11583
11584 /* If DECL is of a type which needs a cleanup, build that cleanup
11585    here.  */
11586
11587 tree
11588 cxx_maybe_build_cleanup (tree decl)
11589 {
11590   tree type = TREE_TYPE (decl);
11591
11592   if (type != error_mark_node && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
11593     {
11594       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
11595       tree rval;
11596       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
11597                          && CLASSTYPE_VBASECLASSES (type));
11598
11599       if (TREE_CODE (type) == ARRAY_TYPE)
11600         rval = decl;
11601       else
11602         {
11603           cxx_mark_addressable (decl);
11604           rval = build_unary_op (ADDR_EXPR, decl, 0);
11605         }
11606
11607       /* Optimize for space over speed here.  */
11608       if (!has_vbases || flag_expensive_optimizations)
11609         flags |= LOOKUP_NONVIRTUAL;
11610
11611       rval = build_delete (TREE_TYPE (rval), rval,
11612                            sfk_complete_destructor, flags, 0);
11613
11614       return rval;
11615     }
11616   return NULL_TREE;
11617 }
11618 \f
11619 /* When a stmt has been parsed, this function is called.  */
11620
11621 void
11622 finish_stmt (void)
11623 {
11624 }
11625
11626 /* DECL was originally constructed as a non-static member function,
11627    but turned out to be static.  Update it accordingly.  */
11628
11629 void
11630 revert_static_member_fn (tree decl)
11631 {
11632   tree tmp;
11633   tree function = TREE_TYPE (decl);
11634   tree args = TYPE_ARG_TYPES (function);
11635
11636   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
11637       != TYPE_UNQUALIFIED)
11638     error ("static member function %q#D declared with type qualifiers", decl);
11639
11640   args = TREE_CHAIN (args);
11641   tmp = build_function_type (TREE_TYPE (function), args);
11642   tmp = build_qualified_type (tmp, cp_type_quals (function));
11643   tmp = build_exception_variant (tmp,
11644                                  TYPE_RAISES_EXCEPTIONS (function));
11645   TREE_TYPE (decl) = tmp;
11646   if (DECL_ARGUMENTS (decl))
11647     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
11648   DECL_STATIC_FUNCTION_P (decl) = 1;
11649 }
11650
11651 /* Initialize the variables used during compilation of a C++
11652    function.  */
11653
11654 void
11655 cxx_push_function_context (struct function * f)
11656 {
11657   struct language_function *p = GGC_CNEW (struct language_function);
11658   f->language = p;
11659
11660   /* Whenever we start a new function, we destroy temporaries in the
11661      usual way.  */
11662   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11663
11664   if (f->decl)
11665     {
11666       tree fn = f->decl;
11667
11668       if (DECL_SAVED_FUNCTION_DATA (fn))
11669         {
11670           /* If we already parsed this function, and we're just expanding it
11671              now, restore saved state.  */
11672           *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
11673
11674           /* We don't need the saved data anymore.  Unless this is an inline
11675              function; we need the named return value info for
11676              declare_return_variable.  */
11677           if (! DECL_INLINE (fn))
11678             DECL_SAVED_FUNCTION_DATA (fn) = NULL;
11679         }
11680     }
11681 }
11682
11683 /* Free the language-specific parts of F, now that we've finished
11684    compiling the function.  */
11685
11686 void
11687 cxx_pop_function_context (struct function * f)
11688 {
11689   f->language = 0;
11690 }
11691
11692 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
11693    one of the language-independent trees.  */
11694
11695 enum cp_tree_node_structure_enum
11696 cp_tree_node_structure (union lang_tree_node * t)
11697 {
11698   switch (TREE_CODE (&t->generic))
11699     {
11700     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
11701     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
11702     case OVERLOAD:              return TS_CP_OVERLOAD;
11703     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
11704     case TINST_LEVEL:           return TS_CP_TINST_LEVEL;
11705     case PTRMEM_CST:            return TS_CP_PTRMEM;
11706     case BASELINK:              return TS_CP_BASELINK;
11707     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
11708     default:                    return TS_CP_GENERIC;
11709     }
11710 }
11711
11712 /* Build the void_list_node (void_type_node having been created).  */
11713 tree
11714 build_void_list_node (void)
11715 {
11716   tree t = build_tree_list (NULL_TREE, void_type_node);
11717   return t;
11718 }
11719
11720 bool
11721 cp_missing_noreturn_ok_p (tree decl)
11722 {
11723   /* A missing noreturn is ok for the `main' function.  */
11724   return DECL_MAIN_P (decl);
11725 }
11726
11727 /* Return the COMDAT group into which DECL should be placed.  */
11728
11729 const char *
11730 cxx_comdat_group (tree decl)
11731 {
11732   tree name;
11733
11734   /* Virtual tables, construction virtual tables, and virtual table
11735      tables all go in a single COMDAT group, named after the primary
11736      virtual table.  */
11737   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
11738     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
11739   /* For all other DECLs, the COMDAT group is the mangled name of the
11740      declaration itself.  */
11741   else
11742     {
11743       while (DECL_THUNK_P (decl))
11744         {
11745           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
11746              into the same section as the target function.  In that case
11747              we must return target's name.  */
11748           tree target = THUNK_TARGET (decl);
11749           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
11750               && DECL_SECTION_NAME (target) != NULL
11751               && DECL_ONE_ONLY (target))
11752             decl = target;
11753           else
11754             break;
11755         }
11756       name = DECL_ASSEMBLER_NAME (decl);
11757     }
11758
11759   return IDENTIFIER_POINTER (name);
11760 }
11761
11762 #include "gt-cp-decl.h"