OSDN Git Service

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