OSDN Git Service

2007-11-25 Richard Guenther <rguenther@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
8822             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
8823             function_context = (ctype != NULL_TREE) ?
8824               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
8825             publicp = (! friendp || ! staticp)
8826               && function_context == NULL_TREE;
8827             decl = grokfndecl (ctype, type,
8828                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8829                                ? unqualified_id : dname,
8830                                parms,
8831                                unqualified_id,
8832                                virtualp, flags, memfn_quals, raises,
8833                                friendp ? -1 : 0, friendp, publicp, inlinep,
8834                                sfk,
8835                                funcdef_flag, template_count, in_namespace, attrlist);
8836             if (decl == NULL_TREE)
8837               return error_mark_node;
8838 #if 0
8839             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
8840             /* The decl and setting of decl_attr is also turned off.  */
8841             decl = build_decl_attribute_variant (decl, decl_attr);
8842 #endif
8843
8844             /* [class.conv.ctor]
8845
8846                A constructor declared without the function-specifier
8847                explicit that can be called with a single parameter
8848                specifies a conversion from the type of its first
8849                parameter to the type of its class.  Such a constructor
8850                is called a converting constructor.  */
8851             if (explicitp == 2)
8852               DECL_NONCONVERTING_P (decl) = 1;
8853             else if (DECL_CONSTRUCTOR_P (decl))
8854               {
8855                 /* The constructor can be called with exactly one
8856                    parameter if there is at least one parameter, and
8857                    any subsequent parameters have default arguments.
8858                    Ignore any compiler-added parms.  */
8859                 tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (decl);
8860
8861                 if (arg_types == void_list_node
8862                     || (arg_types
8863                         && TREE_CHAIN (arg_types)
8864                         && TREE_CHAIN (arg_types) != void_list_node
8865                         && !TREE_PURPOSE (TREE_CHAIN (arg_types))))
8866                   DECL_NONCONVERTING_P (decl) = 1;
8867               }
8868           }
8869         else if (TREE_CODE (type) == METHOD_TYPE)
8870           {
8871             /* We only get here for friend declarations of
8872                members of other classes.  */
8873             /* All method decls are public, so tell grokfndecl to set
8874                TREE_PUBLIC, also.  */
8875             decl = grokfndecl (ctype, type,
8876                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
8877                                ? unqualified_id : dname,
8878                                parms,
8879                                unqualified_id,
8880                                virtualp, flags, memfn_quals, raises,
8881                                friendp ? -1 : 0, friendp, 1, 0, sfk,
8882                                funcdef_flag, template_count, in_namespace,
8883                                attrlist);
8884             if (decl == NULL_TREE)
8885               return error_mark_node;
8886           }
8887         else if (!staticp && !dependent_type_p (type)
8888                  && !COMPLETE_TYPE_P (complete_type (type))
8889                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
8890           {
8891             if (unqualified_id)
8892               error ("field %qD has incomplete type", unqualified_id);
8893             else
8894               error ("name %qT has incomplete type", type);
8895
8896             /* If we're instantiating a template, tell them which
8897                instantiation made the field's type be incomplete.  */
8898             if (current_class_type
8899                 && TYPE_NAME (current_class_type)
8900                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
8901                 && declspecs->type
8902                 && declspecs->type == type)
8903               error ("  in instantiation of template %qT",
8904                      current_class_type);
8905
8906             return error_mark_node;
8907           }
8908         else
8909           {
8910             if (friendp)
8911               {
8912                 error ("%qE is neither function nor member function; "
8913                        "cannot be declared friend", unqualified_id);
8914                 friendp = 0;
8915               }
8916             decl = NULL_TREE;
8917           }
8918
8919         if (friendp)
8920           {
8921             /* Friends are treated specially.  */
8922             if (ctype == current_class_type)
8923               ;  /* We already issued a pedwarn.  */
8924             else if (decl && DECL_NAME (decl))
8925               {
8926                 if (template_class_depth (current_class_type) == 0)
8927                   {
8928                     decl = check_explicit_specialization
8929                       (unqualified_id, decl, template_count,
8930                        2 * funcdef_flag + 4);
8931                     if (decl == error_mark_node)
8932                       return error_mark_node;
8933                   }
8934
8935                 decl = do_friend (ctype, unqualified_id, decl,
8936                                   *attrlist, flags,
8937                                   funcdef_flag);
8938                 return decl;
8939               }
8940             else
8941               return error_mark_node;
8942           }
8943
8944         /* Structure field.  It may not be a function, except for C++.  */
8945
8946         if (decl == NULL_TREE)
8947           {
8948             if (initialized)
8949               {
8950                 if (!staticp)
8951                   {
8952                     /* An attempt is being made to initialize a non-static
8953                        member.  But, from [class.mem]:
8954
8955                        4 A member-declarator can contain a
8956                        constant-initializer only if it declares a static
8957                        member (_class.static_) of integral or enumeration
8958                        type, see _class.static.data_.
8959
8960                        This used to be relatively common practice, but
8961                        the rest of the compiler does not correctly
8962                        handle the initialization unless the member is
8963                        static so we make it static below.  */
8964                     pedwarn ("ISO C++ forbids initialization of member %qD",
8965                              unqualified_id);
8966                     pedwarn ("making %qD static", unqualified_id);
8967                     staticp = 1;
8968                   }
8969
8970                 if (uses_template_parms (type))
8971                   /* We'll check at instantiation time.  */
8972                   ;
8973                 else if (check_static_variable_definition (unqualified_id,
8974                                                            type))
8975                   /* If we just return the declaration, crashes
8976                      will sometimes occur.  We therefore return
8977                      void_type_node, as if this was a friend
8978                      declaration, to cause callers to completely
8979                      ignore this declaration.  */
8980                   return error_mark_node;
8981               }
8982
8983             if (staticp)
8984               {
8985                 /* C++ allows static class members.  All other work
8986                    for this is done by grokfield.  */
8987                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
8988                 set_linkage_for_static_data_member (decl);
8989                 /* Even if there is an in-class initialization, DECL
8990                    is considered undefined until an out-of-class
8991                    definition is provided.  */
8992                 DECL_EXTERNAL (decl) = 1;
8993
8994                 if (thread_p)
8995                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
8996               }
8997             else
8998               {
8999                 decl = build_decl (FIELD_DECL, unqualified_id, type);
9000                 DECL_NONADDRESSABLE_P (decl) = bitfield;
9001                 if (bitfield && !unqualified_id)
9002                   TREE_NO_WARNING (decl) = 1;
9003
9004                 if (storage_class == sc_mutable)
9005                   {
9006                     DECL_MUTABLE_P (decl) = 1;
9007                     storage_class = sc_none;
9008                   }
9009               }
9010
9011             bad_specifiers (decl, "field", virtualp,
9012                             memfn_quals != TYPE_UNQUALIFIED,
9013                             inlinep, friendp, raises != NULL_TREE);
9014           }
9015       }
9016     else if (TREE_CODE (type) == FUNCTION_TYPE
9017              || TREE_CODE (type) == METHOD_TYPE)
9018       {
9019         tree original_name;
9020         int publicp = 0;
9021
9022         if (!unqualified_id)
9023           return error_mark_node;
9024
9025         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9026           original_name = dname;
9027         else
9028           original_name = unqualified_id;
9029
9030         if (storage_class == sc_auto)
9031           error ("storage class %<auto%> invalid for function %qs", name);
9032         else if (storage_class == sc_register)
9033           error ("storage class %<register%> invalid for function %qs", name);
9034         else if (thread_p)
9035           error ("storage class %<__thread%> invalid for function %qs", name);
9036
9037         /* Function declaration not at top level.
9038            Storage classes other than `extern' are not allowed
9039            and `extern' makes no difference.  */
9040         if (! toplevel_bindings_p ()
9041             && (storage_class == sc_static
9042                 || declspecs->specs[(int)ds_inline])
9043             && pedantic)
9044           {
9045             if (storage_class == sc_static)
9046               pedwarn ("%<static%> specified invalid for function %qs "
9047                        "declared out of global scope", name);
9048             else
9049               pedwarn ("%<inline%> specifier invalid for function %qs "
9050                        "declared out of global scope", name);
9051           }
9052
9053         if (ctype == NULL_TREE)
9054           {
9055             if (virtualp)
9056               {
9057                 error ("virtual non-class function %qs", name);
9058                 virtualp = 0;
9059               }
9060           }
9061         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9062                  && !NEW_DELETE_OPNAME_P (original_name))
9063           type = build_method_type_directly (ctype,
9064                                              TREE_TYPE (type),
9065                                              TYPE_ARG_TYPES (type));
9066
9067         /* Record presence of `static'.  */
9068         publicp = (ctype != NULL_TREE
9069                    || storage_class == sc_extern
9070                    || storage_class != sc_static);
9071
9072         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9073                            virtualp, flags, memfn_quals, raises,
9074                            1, friendp,
9075                            publicp, inlinep, sfk, funcdef_flag,
9076                            template_count, in_namespace, attrlist);
9077         if (decl == NULL_TREE)
9078           return error_mark_node;
9079
9080         if (staticp == 1)
9081           {
9082             int invalid_static = 0;
9083
9084             /* Don't allow a static member function in a class, and forbid
9085                declaring main to be static.  */
9086             if (TREE_CODE (type) == METHOD_TYPE)
9087               {
9088                 pedwarn ("cannot declare member function %qD to have "
9089                          "static linkage", decl);
9090                 invalid_static = 1;
9091               }
9092             else if (current_function_decl)
9093               {
9094                 /* FIXME need arm citation */
9095                 error ("cannot declare static function inside another function");
9096                 invalid_static = 1;
9097               }
9098
9099             if (invalid_static)
9100               {
9101                 staticp = 0;
9102                 storage_class = sc_none;
9103               }
9104           }
9105       }
9106     else
9107       {
9108         /* It's a variable.  */
9109
9110         /* An uninitialized decl with `extern' is a reference.  */
9111         decl = grokvardecl (type, unqualified_id,
9112                             declspecs,
9113                             initialized,
9114                             (type_quals & TYPE_QUAL_CONST) != 0,
9115                             ctype ? ctype : in_namespace);
9116         bad_specifiers (decl, "variable", virtualp,
9117                         memfn_quals != TYPE_UNQUALIFIED,
9118                         inlinep, friendp, raises != NULL_TREE);
9119
9120         if (ctype)
9121           {
9122             DECL_CONTEXT (decl) = ctype;
9123             if (staticp == 1)
9124               {
9125                 pedwarn ("%<static%> may not be used when defining "
9126                          "(as opposed to declaring) a static data member");
9127                 staticp = 0;
9128                 storage_class = sc_none;
9129               }
9130             if (storage_class == sc_register && TREE_STATIC (decl))
9131               {
9132                 error ("static member %qD declared %<register%>", decl);
9133                 storage_class = sc_none;
9134               }
9135             if (storage_class == sc_extern && pedantic)
9136               {
9137                 pedwarn ("cannot explicitly declare member %q#D to have "
9138                          "extern linkage",
9139                          decl);
9140                 storage_class = sc_none;
9141               }
9142           }
9143       }
9144
9145     /* Record `register' declaration for warnings on &
9146        and in case doing stupid register allocation.  */
9147
9148     if (storage_class == sc_register)
9149       DECL_REGISTER (decl) = 1;
9150     else if (storage_class == sc_extern)
9151       DECL_THIS_EXTERN (decl) = 1;
9152     else if (storage_class == sc_static)
9153       DECL_THIS_STATIC (decl) = 1;
9154
9155     /* Record constancy and volatility on the DECL itself .  There's
9156        no need to do this when processing a template; we'll do this
9157        for the instantiated declaration based on the type of DECL.  */
9158     if (!processing_template_decl)
9159       cp_apply_type_quals_to_decl (type_quals, decl);
9160
9161     if (set_no_warning)
9162         TREE_NO_WARNING (decl) = 1;
9163
9164     return decl;
9165   }
9166 }
9167 \f
9168 /* Subroutine of start_function.  Ensure that each of the parameter
9169    types (as listed in PARMS) is complete, as is required for a
9170    function definition.  */
9171
9172 static void
9173 require_complete_types_for_parms (tree parms)
9174 {
9175   for (; parms; parms = TREE_CHAIN (parms))
9176     {
9177       if (dependent_type_p (TREE_TYPE (parms)))
9178         continue;
9179       if (!VOID_TYPE_P (TREE_TYPE (parms))
9180           && complete_type_or_else (TREE_TYPE (parms), parms))
9181         {
9182           relayout_decl (parms);
9183           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9184         }
9185       else
9186         /* grokparms or complete_type_or_else will have already issued
9187            an error.  */
9188         TREE_TYPE (parms) = error_mark_node;
9189     }
9190 }
9191
9192 /* Returns nonzero if T is a local variable.  */
9193
9194 int
9195 local_variable_p (const_tree t)
9196 {
9197   if ((TREE_CODE (t) == VAR_DECL
9198        /* A VAR_DECL with a context that is a _TYPE is a static data
9199           member.  */
9200        && !TYPE_P (CP_DECL_CONTEXT (t))
9201        /* Any other non-local variable must be at namespace scope.  */
9202        && !DECL_NAMESPACE_SCOPE_P (t))
9203       || (TREE_CODE (t) == PARM_DECL))
9204     return 1;
9205
9206   return 0;
9207 }
9208
9209 /* Like local_variable_p, but suitable for use as a tree-walking
9210    function.  */
9211
9212 static tree
9213 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9214                          void *data ATTRIBUTE_UNUSED)
9215 {
9216   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9217     return *tp;
9218   else if (TYPE_P (*tp))
9219     *walk_subtrees = 0;
9220
9221   return NULL_TREE;
9222 }
9223
9224
9225 /* Check that ARG, which is a default-argument expression for a
9226    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
9227    something goes wrong.  DECL may also be a _TYPE node, rather than a
9228    DECL, if there is no DECL available.  */
9229
9230 tree
9231 check_default_argument (tree decl, tree arg)
9232 {
9233   tree var;
9234   tree decl_type;
9235
9236   if (TREE_CODE (arg) == DEFAULT_ARG)
9237     /* We get a DEFAULT_ARG when looking at an in-class declaration
9238        with a default argument.  Ignore the argument for now; we'll
9239        deal with it after the class is complete.  */
9240     return arg;
9241
9242   if (TYPE_P (decl))
9243     {
9244       decl_type = decl;
9245       decl = NULL_TREE;
9246     }
9247   else
9248     decl_type = TREE_TYPE (decl);
9249
9250   if (arg == error_mark_node
9251       || decl == error_mark_node
9252       || TREE_TYPE (arg) == error_mark_node
9253       || decl_type == error_mark_node)
9254     /* Something already went wrong.  There's no need to check
9255        further.  */
9256     return error_mark_node;
9257
9258   /* [dcl.fct.default]
9259
9260      A default argument expression is implicitly converted to the
9261      parameter type.  */
9262   if (!TREE_TYPE (arg)
9263       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9264     {
9265       if (decl)
9266         error ("default argument for %q#D has type %qT",
9267                decl, TREE_TYPE (arg));
9268       else
9269         error ("default argument for parameter of type %qT has type %qT",
9270                decl_type, TREE_TYPE (arg));
9271
9272       return error_mark_node;
9273     }
9274
9275   /* [dcl.fct.default]
9276
9277      Local variables shall not be used in default argument
9278      expressions.
9279
9280      The keyword `this' shall not be used in a default argument of a
9281      member function.  */
9282   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9283   if (var)
9284     {
9285       error ("default argument %qE uses local variable %qD", arg, var);
9286       return error_mark_node;
9287     }
9288
9289   /* All is well.  */
9290   return arg;
9291 }
9292
9293 /* Decode the list of parameter types for a function type.
9294    Given the list of things declared inside the parens,
9295    return a list of types.
9296
9297    If this parameter does not end with an ellipsis, we append
9298    void_list_node.
9299
9300    *PARMS is set to the chain of PARM_DECLs created.  */
9301
9302 static tree
9303 grokparms (cp_parameter_declarator *first_parm, tree *parms)
9304 {
9305   tree result = NULL_TREE;
9306   tree decls = NULL_TREE;
9307   int ellipsis = !first_parm || first_parm->ellipsis_p;
9308   cp_parameter_declarator *parm;
9309   int any_error = 0;
9310   struct pointer_set_t *unique_decls = pointer_set_create ();
9311
9312   for (parm = first_parm; parm != NULL; parm = parm->next)
9313     {
9314       tree type = NULL_TREE;
9315       tree init = parm->default_argument;
9316       tree attrs;
9317       tree decl;
9318
9319       if (parm == no_parameters)
9320         break;
9321
9322       attrs = parm->decl_specifiers.attributes;
9323       parm->decl_specifiers.attributes = NULL_TREE;
9324       decl = grokdeclarator (parm->declarator, &parm->decl_specifiers,
9325                              PARM, init != NULL_TREE, &attrs);
9326       if (! decl || TREE_TYPE (decl) == error_mark_node)
9327         continue;
9328
9329       if (attrs)
9330         cplus_decl_attributes (&decl, attrs, 0);
9331
9332       type = TREE_TYPE (decl);
9333       if (VOID_TYPE_P (type))
9334         {
9335           if (same_type_p (type, void_type_node)
9336               && DECL_SELF_REFERENCE_P (type)
9337               && !DECL_NAME (decl) && !result && !parm->next && !ellipsis)
9338             /* this is a parmlist of `(void)', which is ok.  */
9339             break;
9340           cxx_incomplete_type_error (decl, type);
9341           /* It's not a good idea to actually create parameters of
9342              type `void'; other parts of the compiler assume that a
9343              void type terminates the parameter list.  */
9344           type = error_mark_node;
9345           TREE_TYPE (decl) = error_mark_node;
9346         }
9347
9348       if (type != error_mark_node
9349           && TYPE_FOR_JAVA (type)
9350           && IS_AGGR_TYPE (type))
9351         {
9352           error ("parameter %qD has Java class type", decl);
9353           type = error_mark_node;
9354           TREE_TYPE (decl) = error_mark_node;
9355           init = NULL_TREE;
9356         }
9357
9358       if (type != error_mark_node)
9359         {
9360           /* Top-level qualifiers on the parameters are
9361              ignored for function types.  */
9362           type = cp_build_qualified_type (type, 0);
9363           if (TREE_CODE (type) == METHOD_TYPE)
9364             {
9365               error ("parameter %qD invalidly declared method type", decl);
9366               type = build_pointer_type (type);
9367               TREE_TYPE (decl) = type;
9368             }
9369           else if (abstract_virtuals_error (decl, type))
9370             any_error = 1;  /* Seems like a good idea.  */
9371           else if (POINTER_TYPE_P (type))
9372             {
9373               /* [dcl.fct]/6, parameter types cannot contain pointers
9374                  (references) to arrays of unknown bound.  */
9375               tree t = TREE_TYPE (type);
9376               int ptr = TYPE_PTR_P (type);
9377
9378               while (1)
9379                 {
9380                   if (TYPE_PTR_P (t))
9381                     ptr = 1;
9382                   else if (TREE_CODE (t) != ARRAY_TYPE)
9383                     break;
9384                   else if (!TYPE_DOMAIN (t))
9385                     break;
9386                   t = TREE_TYPE (t);
9387                 }
9388               if (TREE_CODE (t) == ARRAY_TYPE)
9389                 error ("parameter %qD includes %s to array of unknown "
9390                        "bound %qT",
9391                        decl, ptr ? "pointer" : "reference", t);
9392             }
9393
9394           if (any_error)
9395             init = NULL_TREE;
9396           else if (init && !processing_template_decl)
9397             init = check_default_argument (decl, init);
9398         }
9399
9400       if (TREE_CODE (decl) == PARM_DECL
9401           && FUNCTION_PARAMETER_PACK_P (decl)
9402           && parm->next)
9403         error ("parameter packs must be at the end of the parameter list");
9404
9405       if (DECL_NAME (decl))
9406         {
9407           if (pointer_set_contains (unique_decls, DECL_NAME (decl)))
9408             error ("multiple parameters named %qE", DECL_NAME (decl));
9409           else
9410             pointer_set_insert (unique_decls, DECL_NAME (decl));
9411         }
9412
9413       TREE_CHAIN (decl) = decls;
9414       decls = decl;
9415       result = tree_cons (init, type, result);
9416     }
9417   decls = nreverse (decls);
9418   result = nreverse (result);
9419   if (!ellipsis)
9420     result = chainon (result, void_list_node);
9421   *parms = decls;
9422
9423   pointer_set_destroy (unique_decls);
9424   return result;
9425 }
9426
9427 \f
9428 /* D is a constructor or overloaded `operator='.
9429
9430    Let T be the class in which D is declared. Then, this function
9431    returns:
9432
9433    -1 if D's is an ill-formed constructor or copy assignment operator
9434       whose first parameter is of type `T'.
9435    0  if D is not a copy constructor or copy assignment
9436       operator.
9437    1  if D is a copy constructor or copy assignment operator whose
9438       first parameter is a reference to const qualified T.
9439    2  if D is a copy constructor or copy assignment operator whose
9440       first parameter is a reference to non-const qualified T.
9441
9442    This function can be used as a predicate. Positive values indicate
9443    a copy constructor and nonzero values indicate a copy assignment
9444    operator.  */
9445
9446 int
9447 copy_fn_p (const_tree d)
9448 {
9449   tree args;
9450   tree arg_type;
9451   int result = 1;
9452
9453   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9454
9455   if (TREE_CODE (d) == TEMPLATE_DECL
9456       || (DECL_TEMPLATE_INFO (d)
9457           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9458     /* Instantiations of template member functions are never copy
9459        functions.  Note that member functions of templated classes are
9460        represented as template functions internally, and we must
9461        accept those as copy functions.  */
9462     return 0;
9463
9464   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9465   if (!args)
9466     return 0;
9467
9468   arg_type = TREE_VALUE (args);
9469   if (arg_type == error_mark_node)
9470     return 0;
9471
9472   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9473     {
9474       /* Pass by value copy assignment operator.  */
9475       result = -1;
9476     }
9477   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
9478            && !TYPE_REF_IS_RVALUE (arg_type)
9479            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9480     {
9481       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9482         result = 2;
9483     }
9484   else
9485     return 0;
9486
9487   args = TREE_CHAIN (args);
9488
9489   if (args && args != void_list_node && !TREE_PURPOSE (args))
9490     /* There are more non-optional args.  */
9491     return 0;
9492
9493   return result;
9494 }
9495
9496 /* D is a constructor or overloaded `operator='.
9497
9498    Let T be the class in which D is declared. Then, this function
9499    returns true when D is a move constructor or move assignment
9500    operator, false otherwise.  */
9501
9502 bool
9503 move_fn_p (const_tree d)
9504 {
9505   tree args;
9506   tree arg_type;
9507   bool result = false;
9508
9509   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9510
9511   if (cxx_dialect == cxx98)
9512     /* There are no move constructors if we are in C++98 mode.  */
9513     return false;
9514
9515   if (TREE_CODE (d) == TEMPLATE_DECL
9516       || (DECL_TEMPLATE_INFO (d)
9517          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9518     /* Instantiations of template member functions are never copy
9519        functions.  Note that member functions of templated classes are
9520        represented as template functions internally, and we must
9521        accept those as copy functions.  */
9522     return 0;
9523
9524   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9525   if (!args)
9526     return 0;
9527
9528   arg_type = TREE_VALUE (args);
9529   if (arg_type == error_mark_node)
9530     return 0;
9531
9532   if (TREE_CODE (arg_type) == REFERENCE_TYPE
9533       && TYPE_REF_IS_RVALUE (arg_type)
9534       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9535                       DECL_CONTEXT (d)))
9536     result = true;
9537
9538   args = TREE_CHAIN (args);
9539
9540   if (args && args != void_list_node && !TREE_PURPOSE (args))
9541     /* There are more non-optional args.  */
9542     return false;
9543
9544   return result;
9545 }
9546
9547 /* Remember any special properties of member function DECL.  */
9548
9549 void grok_special_member_properties (tree decl)
9550 {
9551   tree class_type;
9552
9553   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9554     return;
9555
9556   class_type = DECL_CONTEXT (decl);
9557   if (DECL_CONSTRUCTOR_P (decl))
9558     {
9559       int ctor = copy_fn_p (decl);
9560
9561       TYPE_HAS_CONSTRUCTOR (class_type) = 1;
9562
9563       if (ctor > 0)
9564         {
9565           /* [class.copy]
9566
9567              A non-template constructor for class X is a copy
9568              constructor if its first parameter is of type X&, const
9569              X&, volatile X& or const volatile X&, and either there
9570              are no other parameters or else all other parameters have
9571              default arguments.  */
9572           TYPE_HAS_INIT_REF (class_type) = 1;
9573           if (ctor > 1)
9574             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
9575         }
9576       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
9577         TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
9578     }
9579   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9580     {
9581       /* [class.copy]
9582
9583          A non-template assignment operator for class X is a copy
9584          assignment operator if its parameter is of type X, X&, const
9585          X&, volatile X& or const volatile X&.  */
9586
9587       int assop = copy_fn_p (decl);
9588
9589       if (assop)
9590         {
9591           TYPE_HAS_ASSIGN_REF (class_type) = 1;
9592           if (assop != 1)
9593             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
9594         }
9595     }
9596 }
9597
9598 /* Check a constructor DECL has the correct form.  Complains
9599    if the class has a constructor of the form X(X).  */
9600
9601 int
9602 grok_ctor_properties (const_tree ctype, const_tree decl)
9603 {
9604   int ctor_parm = copy_fn_p (decl);
9605
9606   if (ctor_parm < 0)
9607     {
9608       /* [class.copy]
9609
9610          A declaration of a constructor for a class X is ill-formed if
9611          its first parameter is of type (optionally cv-qualified) X
9612          and either there are no other parameters or else all other
9613          parameters have default arguments.
9614
9615          We *don't* complain about member template instantiations that
9616          have this form, though; they can occur as we try to decide
9617          what constructor to use during overload resolution.  Since
9618          overload resolution will never prefer such a constructor to
9619          the non-template copy constructor (which is either explicitly
9620          or implicitly defined), there's no need to worry about their
9621          existence.  Theoretically, they should never even be
9622          instantiated, but that's hard to forestall.  */
9623       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
9624                 ctype, ctype);
9625       return 0;
9626     }
9627
9628   return 1;
9629 }
9630
9631 /* An operator with this code is unary, but can also be binary.  */
9632
9633 static int
9634 ambi_op_p (enum tree_code code)
9635 {
9636   return (code == INDIRECT_REF
9637           || code == ADDR_EXPR
9638           || code == UNARY_PLUS_EXPR
9639           || code == NEGATE_EXPR
9640           || code == PREINCREMENT_EXPR
9641           || code == PREDECREMENT_EXPR);
9642 }
9643
9644 /* An operator with this name can only be unary.  */
9645
9646 static int
9647 unary_op_p (enum tree_code code)
9648 {
9649   return (code == TRUTH_NOT_EXPR
9650           || code == BIT_NOT_EXPR
9651           || code == COMPONENT_REF
9652           || code == TYPE_EXPR);
9653 }
9654
9655 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
9656    errors are issued for invalid declarations.  */
9657
9658 bool
9659 grok_op_properties (tree decl, bool complain)
9660 {
9661   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
9662   tree argtype;
9663   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
9664   tree name = DECL_NAME (decl);
9665   enum tree_code operator_code;
9666   int arity;
9667   bool ellipsis_p;
9668   tree class_type;
9669
9670   /* Count the number of arguments and check for ellipsis.  */
9671   for (argtype = argtypes, arity = 0;
9672        argtype && argtype != void_list_node;
9673        argtype = TREE_CHAIN (argtype))
9674     ++arity;
9675   ellipsis_p = !argtype;
9676
9677   class_type = DECL_CONTEXT (decl);
9678   if (class_type && !CLASS_TYPE_P (class_type))
9679     class_type = NULL_TREE;
9680
9681   if (DECL_CONV_FN_P (decl))
9682     operator_code = TYPE_EXPR;
9683   else
9684     do
9685       {
9686 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
9687         if (ansi_opname (CODE) == name)                         \
9688           {                                                     \
9689             operator_code = (CODE);                             \
9690             break;                                              \
9691           }                                                     \
9692         else if (ansi_assopname (CODE) == name)                 \
9693           {                                                     \
9694             operator_code = (CODE);                             \
9695             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
9696             break;                                              \
9697           }
9698
9699 #include "operators.def"
9700 #undef DEF_OPERATOR
9701
9702         gcc_unreachable ();
9703       }
9704     while (0);
9705   gcc_assert (operator_code != LAST_CPLUS_TREE_CODE);
9706   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9707
9708   if (class_type)
9709     switch (operator_code)
9710       {
9711       case NEW_EXPR:
9712         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
9713         break;
9714
9715       case DELETE_EXPR:
9716         TYPE_GETS_DELETE (class_type) |= 1;
9717         break;
9718
9719       case VEC_NEW_EXPR:
9720         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
9721         break;
9722
9723       case VEC_DELETE_EXPR:
9724         TYPE_GETS_DELETE (class_type) |= 2;
9725         break;
9726
9727       default:
9728         break;
9729       }
9730
9731     /* [basic.std.dynamic.allocation]/1:
9732
9733        A program is ill-formed if an allocation function is declared
9734        in a namespace scope other than global scope or declared static
9735        in global scope.
9736
9737        The same also holds true for deallocation functions.  */
9738   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
9739       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9740     {
9741       if (DECL_NAMESPACE_SCOPE_P (decl))
9742         {
9743           if (CP_DECL_CONTEXT (decl) != global_namespace)
9744             {
9745               error ("%qD may not be declared within a namespace", decl);
9746               return false;
9747             }
9748           else if (!TREE_PUBLIC (decl))
9749             {
9750               error ("%qD may not be declared as static", decl);
9751               return false;
9752             }
9753         }
9754     }
9755
9756   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
9757     TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
9758   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
9759     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
9760   else
9761     {
9762       /* An operator function must either be a non-static member function
9763          or have at least one parameter of a class, a reference to a class,
9764          an enumeration, or a reference to an enumeration.  13.4.0.6 */
9765       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
9766         {
9767           if (operator_code == TYPE_EXPR
9768               || operator_code == CALL_EXPR
9769               || operator_code == COMPONENT_REF
9770               || operator_code == ARRAY_REF
9771               || operator_code == NOP_EXPR)
9772             {
9773               error ("%qD must be a nonstatic member function", decl);
9774               return false;
9775             }
9776           else
9777             {
9778               tree p;
9779
9780               if (DECL_STATIC_FUNCTION_P (decl))
9781                 {
9782                   error ("%qD must be either a non-static member "
9783                          "function or a non-member function", decl);
9784                   return false;
9785                 }
9786
9787               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
9788                 {
9789                   tree arg = non_reference (TREE_VALUE (p));
9790                   if (arg == error_mark_node)
9791                     return false;
9792
9793                   /* IS_AGGR_TYPE, rather than CLASS_TYPE_P, is used
9794                      because these checks are performed even on
9795                      template functions.  */
9796                   if (IS_AGGR_TYPE (arg) || TREE_CODE (arg) == ENUMERAL_TYPE)
9797                     break;
9798                 }
9799
9800               if (!p || p == void_list_node)
9801                 {
9802                   if (complain)
9803                     error ("%qD must have an argument of class or "
9804                            "enumerated type", decl);
9805                   return false;
9806                 }
9807             }
9808         }
9809
9810       /* There are no restrictions on the arguments to an overloaded
9811          "operator ()".  */
9812       if (operator_code == CALL_EXPR)
9813         return true;
9814
9815       /* Warn about conversion operators that will never be used.  */
9816       if (IDENTIFIER_TYPENAME_P (name)
9817           && ! DECL_TEMPLATE_INFO (decl)
9818           && warn_conversion
9819           /* Warn only declaring the function; there is no need to
9820              warn again about out-of-class definitions.  */
9821           && class_type == current_class_type)
9822         {
9823           tree t = TREE_TYPE (name);
9824           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
9825           const char *what = 0;
9826
9827           if (ref)
9828             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
9829
9830           if (TREE_CODE (t) == VOID_TYPE)
9831             what = "void";
9832           else if (class_type)
9833             {
9834               if (t == class_type)
9835                 what = "the same type";
9836               /* Don't force t to be complete here.  */
9837               else if (IS_AGGR_TYPE (t)
9838                        && COMPLETE_TYPE_P (t)
9839                        && DERIVED_FROM_P (t, class_type))
9840                 what = "a base class";
9841             }
9842
9843           if (what)
9844             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
9845                      "conversion operator",
9846                      ref ? "a reference to " : "", what);
9847         }
9848
9849       if (operator_code == COND_EXPR)
9850         {
9851           /* 13.4.0.3 */
9852           error ("ISO C++ prohibits overloading operator ?:");
9853           return false;
9854         }
9855       else if (ellipsis_p)
9856         {
9857           error ("%qD must not have variable number of arguments", decl);
9858           return false;
9859         }
9860       else if (ambi_op_p (operator_code))
9861         {
9862           if (arity == 1)
9863             /* We pick the one-argument operator codes by default, so
9864                we don't have to change anything.  */
9865             ;
9866           else if (arity == 2)
9867             {
9868               /* If we thought this was a unary operator, we now know
9869                  it to be a binary operator.  */
9870               switch (operator_code)
9871                 {
9872                 case INDIRECT_REF:
9873                   operator_code = MULT_EXPR;
9874                   break;
9875
9876                 case ADDR_EXPR:
9877                   operator_code = BIT_AND_EXPR;
9878                   break;
9879
9880                 case UNARY_PLUS_EXPR:
9881                   operator_code = PLUS_EXPR;
9882                   break;
9883
9884                 case NEGATE_EXPR:
9885                   operator_code = MINUS_EXPR;
9886                   break;
9887
9888                 case PREINCREMENT_EXPR:
9889                   operator_code = POSTINCREMENT_EXPR;
9890                   break;
9891
9892                 case PREDECREMENT_EXPR:
9893                   operator_code = POSTDECREMENT_EXPR;
9894                   break;
9895
9896                 default:
9897                   gcc_unreachable ();
9898                 }
9899
9900               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
9901
9902               if ((operator_code == POSTINCREMENT_EXPR
9903                    || operator_code == POSTDECREMENT_EXPR)
9904                   && ! processing_template_decl
9905                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
9906                 {
9907                   if (methodp)
9908                     error ("postfix %qD must take %<int%> as its argument",
9909                            decl);
9910                   else
9911                     error ("postfix %qD must take %<int%> as its second "
9912                            "argument", decl);
9913                   return false;
9914                 }
9915             }
9916           else
9917             {
9918               if (methodp)
9919                 error ("%qD must take either zero or one argument", decl);
9920               else
9921                 error ("%qD must take either one or two arguments", decl);
9922               return false;
9923             }
9924
9925           /* More Effective C++ rule 6.  */
9926           if (warn_ecpp
9927               && (operator_code == POSTINCREMENT_EXPR
9928                   || operator_code == POSTDECREMENT_EXPR
9929                   || operator_code == PREINCREMENT_EXPR
9930                   || operator_code == PREDECREMENT_EXPR))
9931             {
9932               tree arg = TREE_VALUE (argtypes);
9933               tree ret = TREE_TYPE (TREE_TYPE (decl));
9934               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
9935                 arg = TREE_TYPE (arg);
9936               arg = TYPE_MAIN_VARIANT (arg);
9937               if (operator_code == PREINCREMENT_EXPR
9938                   || operator_code == PREDECREMENT_EXPR)
9939                 {
9940                   if (TREE_CODE (ret) != REFERENCE_TYPE
9941                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
9942                                        arg))
9943                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
9944                              build_reference_type (arg));
9945                 }
9946               else
9947                 {
9948                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
9949                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
9950                 }
9951             }
9952         }
9953       else if (unary_op_p (operator_code))
9954         {
9955           if (arity != 1)
9956             {
9957               if (methodp)
9958                 error ("%qD must take %<void%>", decl);
9959               else
9960                 error ("%qD must take exactly one argument", decl);
9961               return false;
9962             }
9963         }
9964       else /* if (binary_op_p (operator_code)) */
9965         {
9966           if (arity != 2)
9967             {
9968               if (methodp)
9969                 error ("%qD must take exactly one argument", decl);
9970               else
9971                 error ("%qD must take exactly two arguments", decl);
9972               return false;
9973             }
9974
9975           /* More Effective C++ rule 7.  */
9976           if (warn_ecpp
9977               && (operator_code == TRUTH_ANDIF_EXPR
9978                   || operator_code == TRUTH_ORIF_EXPR
9979                   || operator_code == COMPOUND_EXPR))
9980             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
9981                      decl);
9982         }
9983
9984       /* Effective C++ rule 23.  */
9985       if (warn_ecpp
9986           && arity == 2
9987           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
9988           && (operator_code == PLUS_EXPR
9989               || operator_code == MINUS_EXPR
9990               || operator_code == TRUNC_DIV_EXPR
9991               || operator_code == MULT_EXPR
9992               || operator_code == TRUNC_MOD_EXPR)
9993           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
9994         warning (OPT_Weffc__, "%qD should return by value", decl);
9995
9996       /* [over.oper]/8 */
9997       for (; argtypes && argtypes != void_list_node;
9998           argtypes = TREE_CHAIN (argtypes))
9999         if (TREE_PURPOSE (argtypes))
10000           {
10001             TREE_PURPOSE (argtypes) = NULL_TREE;
10002             if (operator_code == POSTINCREMENT_EXPR
10003                 || operator_code == POSTDECREMENT_EXPR)
10004               {
10005                 if (pedantic)
10006                   pedwarn ("%qD cannot have default arguments", decl);
10007               }
10008             else
10009               {
10010                 error ("%qD cannot have default arguments", decl);
10011                 return false;
10012               }
10013           }
10014     }
10015   return true;
10016 }
10017 \f
10018 /* Return a string giving the keyword associate with CODE.  */
10019
10020 static const char *
10021 tag_name (enum tag_types code)
10022 {
10023   switch (code)
10024     {
10025     case record_type:
10026       return "struct";
10027     case class_type:
10028       return "class";
10029     case union_type:
10030       return "union";
10031     case enum_type:
10032       return "enum";
10033     case typename_type:
10034       return "typename";
10035     default:
10036       gcc_unreachable ();
10037     }
10038 }
10039
10040 /* Name lookup in an elaborated-type-specifier (after the keyword
10041    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
10042    elaborated-type-specifier is invalid, issue a diagnostic and return
10043    error_mark_node; otherwise, return the *_TYPE to which it referred.
10044    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
10045
10046 tree
10047 check_elaborated_type_specifier (enum tag_types tag_code,
10048                                  tree decl,
10049                                  bool allow_template_p)
10050 {
10051   tree type;
10052
10053   /* In the case of:
10054
10055        struct S { struct S *p; };
10056
10057      name lookup will find the TYPE_DECL for the implicit "S::S"
10058      typedef.  Adjust for that here.  */
10059   if (DECL_SELF_REFERENCE_P (decl))
10060     decl = TYPE_NAME (TREE_TYPE (decl));
10061
10062   type = TREE_TYPE (decl);
10063
10064   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10065      is false for this case as well.  */
10066   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10067     {
10068       error ("using template type parameter %qT after %qs",
10069              type, tag_name (tag_code));
10070       return error_mark_node;
10071     }
10072   /*   [dcl.type.elab]
10073
10074        If the identifier resolves to a typedef-name or a template
10075        type-parameter, the elaborated-type-specifier is ill-formed.
10076
10077      In other words, the only legitimate declaration to use in the
10078      elaborated type specifier is the implicit typedef created when
10079      the type is declared.  */
10080   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10081            && tag_code != typename_type)
10082     {
10083       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10084       error ("%q+D has a previous declaration here", decl);
10085       return error_mark_node;
10086     }
10087   else if (TREE_CODE (type) != RECORD_TYPE
10088            && TREE_CODE (type) != UNION_TYPE
10089            && tag_code != enum_type
10090            && tag_code != typename_type)
10091     {
10092       error ("%qT referred to as %qs", type, tag_name (tag_code));
10093       error ("%q+T has a previous declaration here", type);
10094       return error_mark_node;
10095     }
10096   else if (TREE_CODE (type) != ENUMERAL_TYPE
10097            && tag_code == enum_type)
10098     {
10099       error ("%qT referred to as enum", type);
10100       error ("%q+T has a previous declaration here", type);
10101       return error_mark_node;
10102     }
10103   else if (!allow_template_p
10104            && TREE_CODE (type) == RECORD_TYPE
10105            && CLASSTYPE_IS_TEMPLATE (type))
10106     {
10107       /* If a class template appears as elaborated type specifier
10108          without a template header such as:
10109
10110            template <class T> class C {};
10111            void f(class C);             // No template header here
10112
10113          then the required template argument is missing.  */
10114       error ("template argument required for %<%s %T%>",
10115              tag_name (tag_code),
10116              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10117       return error_mark_node;
10118     }
10119
10120   return type;
10121 }
10122
10123 /* Lookup NAME in elaborate type specifier in scope according to
10124    SCOPE and issue diagnostics if necessary.
10125    Return *_TYPE node upon success, NULL_TREE when the NAME is not
10126    found, and ERROR_MARK_NODE for type error.  */
10127
10128 static tree
10129 lookup_and_check_tag (enum tag_types tag_code, tree name,
10130                       tag_scope scope, bool template_header_p)
10131 {
10132   tree t;
10133   tree decl;
10134   if (scope == ts_global)
10135     {
10136       /* First try ordinary name lookup, ignoring hidden class name
10137          injected via friend declaration.  */
10138       decl = lookup_name_prefer_type (name, 2);
10139       /* If that fails, the name will be placed in the smallest
10140          non-class, non-function-prototype scope according to 3.3.1/5.
10141          We may already have a hidden name declared as friend in this
10142          scope.  So lookup again but not ignoring hidden names.
10143          If we find one, that name will be made visible rather than
10144          creating a new tag.  */
10145       if (!decl)
10146         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10147     }
10148   else
10149     decl = lookup_type_scope (name, scope);
10150
10151   if (decl && DECL_CLASS_TEMPLATE_P (decl))
10152     decl = DECL_TEMPLATE_RESULT (decl);
10153
10154   if (decl && TREE_CODE (decl) == TYPE_DECL)
10155     {
10156       /* Look for invalid nested type:
10157            class C {
10158              class C {};
10159            };  */
10160       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10161         {
10162           error ("%qD has the same name as the class in which it is "
10163                  "declared",
10164                  decl);
10165           return error_mark_node;
10166         }
10167
10168       /* Two cases we need to consider when deciding if a class
10169          template is allowed as an elaborated type specifier:
10170          1. It is a self reference to its own class.
10171          2. It comes with a template header.
10172
10173          For example:
10174
10175            template <class T> class C {
10176              class C *c1;               // DECL_SELF_REFERENCE_P is true
10177              class D;
10178            };
10179            template <class U> class C; // template_header_p is true
10180            template <class T> class C<T>::D {
10181              class C *c2;               // DECL_SELF_REFERENCE_P is true
10182            };  */
10183
10184       t = check_elaborated_type_specifier (tag_code,
10185                                            decl,
10186                                            template_header_p
10187                                            | DECL_SELF_REFERENCE_P (decl));
10188       return t;
10189     }
10190   else if (decl && TREE_CODE (decl) == TREE_LIST)
10191     {
10192       error ("reference to %qD is ambiguous", name);
10193       print_candidates (decl);
10194       return error_mark_node;
10195     }
10196   else
10197     return NULL_TREE;
10198 }
10199
10200 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10201    Define the tag as a forward-reference if it is not defined.
10202
10203    If a declaration is given, process it here, and report an error if
10204    multiple declarations are not identical.
10205
10206    SCOPE is TS_CURRENT when this is also a definition.  Only look in
10207    the current frame for the name (since C++ allows new names in any
10208    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10209    declaration.  Only look beginning from the current scope outward up
10210    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
10211
10212    TEMPLATE_HEADER_P is true when this declaration is preceded by
10213    a set of template parameters.  */
10214
10215 tree
10216 xref_tag (enum tag_types tag_code, tree name,
10217           tag_scope scope, bool template_header_p)
10218 {
10219   enum tree_code code;
10220   tree t;
10221   tree context = NULL_TREE;
10222
10223   timevar_push (TV_NAME_LOOKUP);
10224
10225   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10226
10227   switch (tag_code)
10228     {
10229     case record_type:
10230     case class_type:
10231       code = RECORD_TYPE;
10232       break;
10233     case union_type:
10234       code = UNION_TYPE;
10235       break;
10236     case enum_type:
10237       code = ENUMERAL_TYPE;
10238       break;
10239     default:
10240       gcc_unreachable ();
10241     }
10242
10243   /* In case of anonymous name, xref_tag is only called to
10244      make type node and push name.  Name lookup is not required.  */
10245   if (ANON_AGGRNAME_P (name))
10246     t = NULL_TREE;
10247   else
10248     t = lookup_and_check_tag  (tag_code, name,
10249                                scope, template_header_p);
10250
10251   if (t == error_mark_node)
10252     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10253
10254   if (scope != ts_current && t && current_class_type
10255       && template_class_depth (current_class_type)
10256       && template_header_p)
10257     {
10258       /* Since SCOPE is not TS_CURRENT, we are not looking at a
10259          definition of this tag.  Since, in addition, we are currently
10260          processing a (member) template declaration of a template
10261          class, we must be very careful; consider:
10262
10263            template <class X>
10264            struct S1
10265
10266            template <class U>
10267            struct S2
10268            { template <class V>
10269            friend struct S1; };
10270
10271          Here, the S2::S1 declaration should not be confused with the
10272          outer declaration.  In particular, the inner version should
10273          have a template parameter of level 2, not level 1.  This
10274          would be particularly important if the member declaration
10275          were instead:
10276
10277            template <class V = U> friend struct S1;
10278
10279          say, when we should tsubst into `U' when instantiating
10280          S2.  On the other hand, when presented with:
10281
10282            template <class T>
10283            struct S1 {
10284              template <class U>
10285              struct S2 {};
10286              template <class U>
10287              friend struct S2;
10288            };
10289
10290          we must find the inner binding eventually.  We
10291          accomplish this by making sure that the new type we
10292          create to represent this declaration has the right
10293          TYPE_CONTEXT.  */
10294       context = TYPE_CONTEXT (t);
10295       t = NULL_TREE;
10296     }
10297
10298   if (! t)
10299     {
10300       /* If no such tag is yet defined, create a forward-reference node
10301          and record it as the "definition".
10302          When a real declaration of this type is found,
10303          the forward-reference will be altered into a real type.  */
10304       if (code == ENUMERAL_TYPE)
10305         {
10306           error ("use of enum %q#D without previous declaration", name);
10307           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10308         }
10309       else
10310         {
10311           t = make_aggr_type (code);
10312           TYPE_CONTEXT (t) = context;
10313           t = pushtag (name, t, scope);
10314         }
10315     }
10316   else
10317     {
10318       if (template_header_p && IS_AGGR_TYPE (t))
10319         {
10320           if (!redeclare_class_template (t, current_template_parms))
10321             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10322         }
10323       else if (!processing_template_decl
10324                && CLASS_TYPE_P (t)
10325                && CLASSTYPE_IS_TEMPLATE (t))
10326         {
10327           error ("redeclaration of %qT as a non-template", t);
10328           error ("previous declaration %q+D", t);
10329           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10330         }
10331
10332       /* Make injected friend class visible.  */
10333       if (scope != ts_within_enclosing_non_class
10334           && hidden_name_p (TYPE_NAME (t)))
10335         {
10336           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10337           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10338
10339           if (TYPE_TEMPLATE_INFO (t))
10340             {
10341               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10342               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10343             }
10344         }
10345     }
10346
10347   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10348 }
10349
10350 tree
10351 xref_tag_from_type (tree old, tree id, tag_scope scope)
10352 {
10353   enum tag_types tag_kind;
10354
10355   if (TREE_CODE (old) == RECORD_TYPE)
10356     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10357   else
10358     tag_kind  = union_type;
10359
10360   if (id == NULL_TREE)
10361     id = TYPE_IDENTIFIER (old);
10362
10363   return xref_tag (tag_kind, id, scope, false);
10364 }
10365
10366 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10367    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
10368    access_* node, and the TREE_VALUE is the type of the base-class.
10369    Non-NULL TREE_TYPE indicates virtual inheritance.  
10370  
10371    Returns true if the binfo hierarchy was successfully created,
10372    false if an error was detected. */
10373
10374 bool
10375 xref_basetypes (tree ref, tree base_list)
10376 {
10377   tree *basep;
10378   tree binfo, base_binfo;
10379   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
10380   unsigned max_bases = 0;  /* Maximum direct bases.  */
10381   int i;
10382   tree default_access;
10383   tree igo_prev; /* Track Inheritance Graph Order.  */
10384
10385   if (ref == error_mark_node)
10386     return false;
10387
10388   /* The base of a derived class is private by default, all others are
10389      public.  */
10390   default_access = (TREE_CODE (ref) == RECORD_TYPE
10391                     && CLASSTYPE_DECLARED_CLASS (ref)
10392                     ? access_private_node : access_public_node);
10393
10394   /* First, make sure that any templates in base-classes are
10395      instantiated.  This ensures that if we call ourselves recursively
10396      we do not get confused about which classes are marked and which
10397      are not.  */
10398   basep = &base_list;
10399   while (*basep)
10400     {
10401       tree basetype = TREE_VALUE (*basep);
10402
10403       if (!(processing_template_decl && uses_template_parms (basetype))
10404           && !complete_type_or_else (basetype, NULL))
10405         /* An incomplete type.  Remove it from the list.  */
10406         *basep = TREE_CHAIN (*basep);
10407       else
10408         {
10409           max_bases++;
10410           if (TREE_TYPE (*basep))
10411             max_vbases++;
10412           if (CLASS_TYPE_P (basetype))
10413             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10414           basep = &TREE_CHAIN (*basep);
10415         }
10416     }
10417
10418   TYPE_MARKED_P (ref) = 1;
10419
10420   /* The binfo slot should be empty, unless this is an (ill-formed)
10421      redefinition.  */
10422   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10423   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10424
10425   binfo = make_tree_binfo (max_bases);
10426
10427   TYPE_BINFO (ref) = binfo;
10428   BINFO_OFFSET (binfo) = size_zero_node;
10429   BINFO_TYPE (binfo) = ref;
10430
10431   if (max_bases)
10432     {
10433       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
10434       /* An aggregate cannot have baseclasses.  */
10435       CLASSTYPE_NON_AGGREGATE (ref) = 1;
10436
10437       if (TREE_CODE (ref) == UNION_TYPE)
10438         {
10439           error ("derived union %qT invalid", ref);
10440           return false;
10441         }
10442     }
10443
10444   if (max_bases > 1)
10445     {
10446       if (TYPE_FOR_JAVA (ref))
10447         {
10448           error ("Java class %qT cannot have multiple bases", ref);
10449           return false;
10450         }
10451     }
10452
10453   if (max_vbases)
10454     {
10455       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
10456
10457       if (TYPE_FOR_JAVA (ref))
10458         {
10459           error ("Java class %qT cannot have virtual bases", ref);
10460           return false;
10461         }
10462     }
10463
10464   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10465     {
10466       tree access = TREE_PURPOSE (base_list);
10467       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10468       tree basetype = TREE_VALUE (base_list);
10469
10470       if (access == access_default_node)
10471         access = default_access;
10472
10473       if (PACK_EXPANSION_P (basetype))
10474         basetype = PACK_EXPANSION_PATTERN (basetype);
10475       if (TREE_CODE (basetype) == TYPE_DECL)
10476         basetype = TREE_TYPE (basetype);
10477       if (TREE_CODE (basetype) != RECORD_TYPE
10478           && TREE_CODE (basetype) != TYPENAME_TYPE
10479           && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM
10480           && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM)
10481         {
10482           error ("base type %qT fails to be a struct or class type",
10483                  basetype);
10484           return false;
10485         }
10486
10487       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10488         TYPE_FOR_JAVA (ref) = 1;
10489
10490       base_binfo = NULL_TREE;
10491       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
10492         {
10493           base_binfo = TYPE_BINFO (basetype);
10494           /* The original basetype could have been a typedef'd type.  */
10495           basetype = BINFO_TYPE (base_binfo);
10496
10497           /* Inherit flags from the base.  */
10498           TYPE_HAS_NEW_OPERATOR (ref)
10499             |= TYPE_HAS_NEW_OPERATOR (basetype);
10500           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10501             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10502           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
10503           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
10504           CLASSTYPE_DIAMOND_SHAPED_P (ref)
10505             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10506           CLASSTYPE_REPEATED_BASE_P (ref)
10507             |= CLASSTYPE_REPEATED_BASE_P (basetype);
10508         }
10509
10510       /* We must do this test after we've seen through a typedef
10511          type.  */
10512       if (TYPE_MARKED_P (basetype))
10513         {
10514           if (basetype == ref)
10515             error ("recursive type %qT undefined", basetype);
10516           else
10517             error ("duplicate base type %qT invalid", basetype);
10518           return false;
10519         }
10520
10521       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10522         /* Regenerate the pack expansion for the bases. */
10523         basetype = make_pack_expansion (basetype);
10524
10525       TYPE_MARKED_P (basetype) = 1;
10526
10527       base_binfo = copy_binfo (base_binfo, basetype, ref,
10528                                &igo_prev, via_virtual);
10529       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10530         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
10531
10532       BINFO_BASE_APPEND (binfo, base_binfo);
10533       BINFO_BASE_ACCESS_APPEND (binfo, access);
10534     }
10535
10536   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10537     /* If we have space in the vbase vector, we must have shared at
10538        least one of them, and are therefore diamond shaped.  */
10539     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10540
10541   /* Unmark all the types.  */
10542   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
10543     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10544   TYPE_MARKED_P (ref) = 0;
10545
10546   /* Now see if we have a repeated base type.  */
10547   if (!CLASSTYPE_REPEATED_BASE_P (ref))
10548     {
10549       for (base_binfo = binfo; base_binfo;
10550            base_binfo = TREE_CHAIN (base_binfo))
10551         {
10552           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10553             {
10554               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10555               break;
10556             }
10557           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10558         }
10559       for (base_binfo = binfo; base_binfo;
10560            base_binfo = TREE_CHAIN (base_binfo))
10561         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10562           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10563         else
10564           break;
10565     }
10566
10567   return true;
10568 }
10569
10570 \f
10571 /* Begin compiling the definition of an enumeration type.
10572    NAME is its name.
10573    Returns the type object, as yet incomplete.
10574    Also records info about it so that build_enumerator
10575    may be used to declare the individual values as they are read.  */
10576
10577 tree
10578 start_enum (tree name)
10579 {
10580   tree enumtype;
10581
10582   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10583
10584   /* If this is the real definition for a previous forward reference,
10585      fill in the contents in the same object that used to be the
10586      forward reference.  */
10587
10588   enumtype = lookup_and_check_tag (enum_type, name,
10589                                    /*tag_scope=*/ts_current,
10590                                    /*template_header_p=*/false);
10591
10592   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
10593     {
10594       error ("multiple definition of %q#T", enumtype);
10595       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
10596       /* Clear out TYPE_VALUES, and start again.  */
10597       TYPE_VALUES (enumtype) = NULL_TREE;
10598     }
10599   else
10600     {
10601       /* In case of error, make a dummy enum to allow parsing to
10602          continue.  */
10603       if (enumtype == error_mark_node)
10604         name = make_anon_name ();
10605
10606       enumtype = make_node (ENUMERAL_TYPE);
10607       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
10608     }
10609
10610   return enumtype;
10611 }
10612
10613 /* After processing and defining all the values of an enumeration type,
10614    install their decls in the enumeration type and finish it off.
10615    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
10616
10617 void
10618 finish_enum (tree enumtype)
10619 {
10620   tree values;
10621   tree decl;
10622   tree value;
10623   tree minnode;
10624   tree maxnode;
10625   tree t;
10626   bool unsignedp;
10627   bool use_short_enum;
10628   int lowprec;
10629   int highprec;
10630   int precision;
10631   integer_type_kind itk;
10632   tree underlying_type = NULL_TREE;
10633
10634   /* We built up the VALUES in reverse order.  */
10635   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
10636
10637   /* For an enum defined in a template, just set the type of the values;
10638      all further processing is postponed until the template is
10639      instantiated.  We need to set the type so that tsubst of a CONST_DECL
10640      works.  */
10641   if (processing_template_decl)
10642     {
10643       for (values = TYPE_VALUES (enumtype);
10644            values;
10645            values = TREE_CHAIN (values))
10646         TREE_TYPE (TREE_VALUE (values)) = enumtype;
10647       if (at_function_scope_p ())
10648         add_stmt (build_min (TAG_DEFN, enumtype));
10649       return;
10650     }
10651
10652   /* Determine the minimum and maximum values of the enumerators.  */
10653   if (TYPE_VALUES (enumtype))
10654     {
10655       minnode = maxnode = NULL_TREE;
10656
10657       for (values = TYPE_VALUES (enumtype);
10658            values;
10659            values = TREE_CHAIN (values))
10660         {
10661           decl = TREE_VALUE (values);
10662
10663           /* [dcl.enum]: Following the closing brace of an enum-specifier,
10664              each enumerator has the type of its enumeration.  Prior to the
10665              closing brace, the type of each enumerator is the type of its
10666              initializing value.  */
10667           TREE_TYPE (decl) = enumtype;
10668
10669           /* Update the minimum and maximum values, if appropriate.  */
10670           value = DECL_INITIAL (decl);
10671           if (value == error_mark_node)
10672             value = integer_zero_node;
10673           /* Figure out what the minimum and maximum values of the
10674              enumerators are.  */
10675           if (!minnode)
10676             minnode = maxnode = value;
10677           else if (tree_int_cst_lt (maxnode, value))
10678             maxnode = value;
10679           else if (tree_int_cst_lt (value, minnode))
10680             minnode = value;
10681         }
10682     }
10683   else
10684     /* [dcl.enum]
10685
10686        If the enumerator-list is empty, the underlying type is as if
10687        the enumeration had a single enumerator with value 0.  */
10688     minnode = maxnode = integer_zero_node;
10689
10690   /* Compute the number of bits require to represent all values of the
10691      enumeration.  We must do this before the type of MINNODE and
10692      MAXNODE are transformed, since min_precision relies on the
10693      TREE_TYPE of the value it is passed.  */
10694   unsignedp = tree_int_cst_sgn (minnode) >= 0;
10695   lowprec = min_precision (minnode, unsignedp);
10696   highprec = min_precision (maxnode, unsignedp);
10697   precision = MAX (lowprec, highprec);
10698
10699   /* Determine the underlying type of the enumeration.
10700
10701        [dcl.enum]
10702
10703        The underlying type of an enumeration is an integral type that
10704        can represent all the enumerator values defined in the
10705        enumeration.  It is implementation-defined which integral type is
10706        used as the underlying type for an enumeration except that the
10707        underlying type shall not be larger than int unless the value of
10708        an enumerator cannot fit in an int or unsigned int.
10709
10710      We use "int" or an "unsigned int" as the underlying type, even if
10711      a smaller integral type would work, unless the user has
10712      explicitly requested that we use the smallest possible type.  The
10713      user can request that for all enumerations with a command line
10714      flag, or for just one enumeration with an attribute.  */
10715
10716   use_short_enum = flag_short_enums
10717     || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
10718
10719   for (itk = (use_short_enum ? itk_char : itk_int);
10720        itk != itk_none;
10721        itk++)
10722     {
10723       underlying_type = integer_types[itk];
10724       if (TYPE_PRECISION (underlying_type) >= precision
10725           && TYPE_UNSIGNED (underlying_type) == unsignedp)
10726         break;
10727     }
10728   if (itk == itk_none)
10729     {
10730       /* DR 377
10731
10732          IF no integral type can represent all the enumerator values, the
10733          enumeration is ill-formed.  */
10734       error ("no integral type can represent all of the enumerator values "
10735              "for %qT", enumtype);
10736       precision = TYPE_PRECISION (long_long_integer_type_node);
10737       underlying_type = integer_types[itk_unsigned_long_long];
10738     }
10739
10740   /* Compute the minium and maximum values for the type.
10741
10742      [dcl.enum]
10743
10744      For an enumeration where emin is the smallest enumerator and emax
10745      is the largest, the values of the enumeration are the values of the
10746      underlying type in the range bmin to bmax, where bmin and bmax are,
10747      respectively, the smallest and largest values of the smallest bit-
10748      field that can store emin and emax.  */
10749
10750   /* The middle-end currently assumes that types with TYPE_PRECISION
10751      narrower than their underlying type are suitably zero or sign
10752      extended to fill their mode.  g++ doesn't make these guarantees.
10753      Until the middle-end can represent such paradoxical types, we
10754      set the TYPE_PRECISION to the width of the underlying type.  */
10755   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
10756
10757   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
10758
10759   /* [dcl.enum]
10760
10761      The value of sizeof() applied to an enumeration type, an object
10762      of an enumeration type, or an enumerator, is the value of sizeof()
10763      applied to the underlying type.  */
10764   TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
10765   TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
10766   TYPE_MODE (enumtype) = TYPE_MODE (underlying_type);
10767   TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
10768   TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
10769   TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
10770
10771   /* Convert each of the enumerators to the type of the underlying
10772      type of the enumeration.  */
10773   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
10774     {
10775       location_t saved_location;
10776
10777       decl = TREE_VALUE (values);
10778       saved_location = input_location;
10779       input_location = DECL_SOURCE_LOCATION (decl);
10780       value = perform_implicit_conversion (underlying_type,
10781                                            DECL_INITIAL (decl));
10782       input_location = saved_location;
10783
10784       /* Do not clobber shared ints.  */
10785       value = copy_node (value);
10786
10787       TREE_TYPE (value) = enumtype;
10788       DECL_INITIAL (decl) = value;
10789       TREE_VALUE (values) = value;
10790     }
10791
10792   /* Fix up all variant types of this enum type.  */
10793   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
10794     {
10795       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
10796       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
10797       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
10798       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
10799       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
10800       TYPE_MODE (t) = TYPE_MODE (enumtype);
10801       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
10802       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
10803       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
10804       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
10805     }
10806
10807   /* Finish debugging output for this type.  */
10808   rest_of_type_compilation (enumtype, namespace_bindings_p ());
10809 }
10810
10811 /* Build and install a CONST_DECL for an enumeration constant of the
10812    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
10813    Assignment of sequential values by default is handled here.  */
10814
10815 void
10816 build_enumerator (tree name, tree value, tree enumtype)
10817 {
10818   tree decl;
10819   tree context;
10820   tree type;
10821
10822   /* If the VALUE was erroneous, pretend it wasn't there; that will
10823      result in the enum being assigned the next value in sequence.  */
10824   if (value == error_mark_node)
10825     value = NULL_TREE;
10826
10827   /* Remove no-op casts from the value.  */
10828   if (value)
10829     STRIP_TYPE_NOPS (value);
10830
10831   if (! processing_template_decl)
10832     {
10833       /* Validate and default VALUE.  */
10834       if (value != NULL_TREE)
10835         {
10836           value = integral_constant_value (value);
10837
10838           if (TREE_CODE (value) == INTEGER_CST)
10839             {
10840               value = perform_integral_promotions (value);
10841               constant_expression_warning (value);
10842             }
10843           else
10844             {
10845               error ("enumerator value for %qD is not an integer constant", name);
10846               value = NULL_TREE;
10847             }
10848         }
10849
10850       /* Default based on previous value.  */
10851       if (value == NULL_TREE)
10852         {
10853           if (TYPE_VALUES (enumtype))
10854             {
10855               HOST_WIDE_INT hi;
10856               unsigned HOST_WIDE_INT lo;
10857               tree prev_value;
10858               bool overflowed;
10859
10860               /* The next value is the previous value plus one.  We can
10861                  safely assume that the previous value is an INTEGER_CST.
10862                  add_double doesn't know the type of the target expression,
10863                  so we must check with int_fits_type_p as well.  */
10864               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
10865               overflowed = add_double (TREE_INT_CST_LOW (prev_value),
10866                                        TREE_INT_CST_HIGH (prev_value),
10867                                        1, 0, &lo, &hi);
10868               value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
10869               overflowed |= !int_fits_type_p (value, TREE_TYPE (prev_value));
10870
10871               if (overflowed)
10872                 {
10873                   error ("overflow in enumeration values at %qD", name);
10874                   value = error_mark_node;
10875                 }
10876             }
10877           else
10878             value = integer_zero_node;
10879         }
10880
10881       /* Remove no-op casts from the value.  */
10882       STRIP_TYPE_NOPS (value);
10883     }
10884
10885   /* C++ associates enums with global, function, or class declarations.  */
10886   context = current_scope ();
10887
10888   /* Build the actual enumeration constant.  Note that the enumeration
10889     constants have the type of their initializers until the
10890     enumeration is complete:
10891
10892       [ dcl.enum ]
10893
10894       Following the closing brace of an enum-specifier, each enumer-
10895       ator has the type of its enumeration.  Prior to the closing
10896       brace, the type of each enumerator is the type of its
10897       initializing value.
10898
10899     In finish_enum we will reset the type.  Of course, if we're
10900     processing a template, there may be no value.  */
10901   type = value ? TREE_TYPE (value) : NULL_TREE;
10902
10903   if (context && context == current_class_type)
10904     /* This enum declaration is local to the class.  We need the full
10905        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
10906     decl = build_lang_decl (CONST_DECL, name, type);
10907   else
10908     /* It's a global enum, or it's local to a function.  (Note local to
10909       a function could mean local to a class method.  */
10910     decl = build_decl (CONST_DECL, name, type);
10911
10912   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
10913   TREE_CONSTANT (decl) = 1;
10914   TREE_INVARIANT (decl) = 1;
10915   TREE_READONLY (decl) = 1;
10916   DECL_INITIAL (decl) = value;
10917
10918   if (context && context == current_class_type)
10919     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
10920        on the TYPE_FIELDS list for `S'.  (That's so that you can say
10921        things like `S::i' later.)  */
10922     finish_member_declaration (decl);
10923   else
10924     pushdecl (decl);
10925
10926   /* Add this enumeration constant to the list for this type.  */
10927   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
10928 }
10929
10930 \f
10931 /* We're defining DECL.  Make sure that it's type is OK.  */
10932
10933 static void
10934 check_function_type (tree decl, tree current_function_parms)
10935 {
10936   tree fntype = TREE_TYPE (decl);
10937   tree return_type = complete_type (TREE_TYPE (fntype));
10938
10939   /* In a function definition, arg types must be complete.  */
10940   require_complete_types_for_parms (current_function_parms);
10941
10942   if (dependent_type_p (return_type))
10943     return;
10944   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
10945       || (TYPE_FOR_JAVA (return_type) && IS_AGGR_TYPE (return_type)))
10946     {
10947       tree args = TYPE_ARG_TYPES (fntype);
10948
10949       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
10950         error ("return type %q#T is incomplete", return_type);
10951       else
10952         error ("return type has Java class type %q#T", return_type);
10953
10954       /* Make it return void instead.  */
10955       if (TREE_CODE (fntype) == METHOD_TYPE)
10956         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
10957                                              void_type_node,
10958                                              TREE_CHAIN (args));
10959       else
10960         fntype = build_function_type (void_type_node, args);
10961       TREE_TYPE (decl)
10962         = build_exception_variant (fntype,
10963                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
10964     }
10965   else
10966     abstract_virtuals_error (decl, TREE_TYPE (fntype));
10967 }
10968
10969 /* Create the FUNCTION_DECL for a function definition.
10970    DECLSPECS and DECLARATOR are the parts of the declaration;
10971    they describe the function's name and the type it returns,
10972    but twisted together in a fashion that parallels the syntax of C.
10973
10974    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
10975    DECLARATOR is really the DECL for the function we are about to
10976    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
10977    indicating that the function is an inline defined in-class.
10978
10979    This function creates a binding context for the function body
10980    as well as setting up the FUNCTION_DECL in current_function_decl.
10981
10982    For C++, we must first check whether that datum makes any sense.
10983    For example, "class A local_a(1,2);" means that variable local_a
10984    is an aggregate of type A, which should have a constructor
10985    applied to it with the argument list [1, 2].
10986
10987    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
10988    or may be a BLOCK if the function has been defined previously
10989    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
10990    error_mark_node if the function has never been defined, or
10991    a BLOCK if the function has been defined somewhere.  */
10992
10993 void
10994 start_preparsed_function (tree decl1, tree attrs, int flags)
10995 {
10996   tree ctype = NULL_TREE;
10997   tree fntype;
10998   tree restype;
10999   int doing_friend = 0;
11000   struct cp_binding_level *bl;
11001   tree current_function_parms;
11002   struct c_fileinfo *finfo
11003     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11004   bool honor_interface;
11005
11006   /* Sanity check.  */
11007   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11008   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11009
11010   fntype = TREE_TYPE (decl1);
11011   if (TREE_CODE (fntype) == METHOD_TYPE)
11012     ctype = TYPE_METHOD_BASETYPE (fntype);
11013
11014   /* ISO C++ 11.4/5.  A friend function defined in a class is in
11015      the (lexical) scope of the class in which it is defined.  */
11016   if (!ctype && DECL_FRIEND_P (decl1))
11017     {
11018       ctype = DECL_FRIEND_CONTEXT (decl1);
11019
11020       /* CTYPE could be null here if we're dealing with a template;
11021          for example, `inline friend float foo()' inside a template
11022          will have no CTYPE set.  */
11023       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11024         ctype = NULL_TREE;
11025       else
11026         doing_friend = 1;
11027     }
11028
11029   if (DECL_DECLARED_INLINE_P (decl1)
11030       && lookup_attribute ("noinline", attrs))
11031     warning (0, "inline function %q+D given attribute noinline", decl1);
11032
11033   /* Handle gnu_inline attribute.  */
11034   if (GNU_INLINE_P (decl1))
11035     {
11036       DECL_EXTERNAL (decl1) = 1;
11037       DECL_NOT_REALLY_EXTERN (decl1) = 0;
11038       DECL_INTERFACE_KNOWN (decl1) = 1;
11039       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11040     }
11041
11042   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11043     /* This is a constructor, we must ensure that any default args
11044        introduced by this definition are propagated to the clones
11045        now. The clones are used directly in overload resolution.  */
11046     adjust_clone_args (decl1);
11047
11048   /* Sometimes we don't notice that a function is a static member, and
11049      build a METHOD_TYPE for it.  Fix that up now.  */
11050   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11051       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11052     {
11053       revert_static_member_fn (decl1);
11054       ctype = NULL_TREE;
11055     }
11056
11057   /* Set up current_class_type, and enter the scope of the class, if
11058      appropriate.  */
11059   if (ctype)
11060     push_nested_class (ctype);
11061   else if (DECL_STATIC_FUNCTION_P (decl1))
11062     push_nested_class (DECL_CONTEXT (decl1));
11063
11064   /* Now that we have entered the scope of the class, we must restore
11065      the bindings for any template parameters surrounding DECL1, if it
11066      is an inline member template.  (Order is important; consider the
11067      case where a template parameter has the same name as a field of
11068      the class.)  It is not until after this point that
11069      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
11070   if (flags & SF_INCLASS_INLINE)
11071     maybe_begin_member_template_processing (decl1);
11072
11073   /* Effective C++ rule 15.  */
11074   if (warn_ecpp
11075       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11076       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11077     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11078
11079   /* Make the init_value nonzero so pushdecl knows this is not tentative.
11080      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11081   if (!DECL_INITIAL (decl1))
11082     DECL_INITIAL (decl1) = error_mark_node;
11083
11084   /* This function exists in static storage.
11085      (This does not mean `static' in the C sense!)  */
11086   TREE_STATIC (decl1) = 1;
11087
11088   /* We must call push_template_decl after current_class_type is set
11089      up.  (If we are processing inline definitions after exiting a
11090      class scope, current_class_type will be NULL_TREE until set above
11091      by push_nested_class.)  */
11092   if (processing_template_decl)
11093     {
11094       /* FIXME: Handle error_mark_node more gracefully.  */
11095       tree newdecl1 = push_template_decl (decl1);
11096       if (newdecl1 != error_mark_node)
11097         decl1 = newdecl1;
11098     }
11099
11100   /* We are now in the scope of the function being defined.  */
11101   current_function_decl = decl1;
11102
11103   /* Save the parm names or decls from this function's declarator
11104      where store_parm_decls will find them.  */
11105   current_function_parms = DECL_ARGUMENTS (decl1);
11106
11107   /* Make sure the parameter and return types are reasonable.  When
11108      you declare a function, these types can be incomplete, but they
11109      must be complete when you define the function.  */
11110   check_function_type (decl1, current_function_parms);
11111
11112   /* Build the return declaration for the function.  */
11113   restype = TREE_TYPE (fntype);
11114   if (DECL_RESULT (decl1) == NULL_TREE)
11115     {
11116       tree resdecl;
11117
11118       resdecl = build_decl (RESULT_DECL, 0, TYPE_MAIN_VARIANT (restype));
11119       DECL_ARTIFICIAL (resdecl) = 1;
11120       DECL_IGNORED_P (resdecl) = 1;
11121       DECL_RESULT (decl1) = resdecl;
11122
11123       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11124     }
11125
11126   /* Let the user know we're compiling this function.  */
11127   announce_function (decl1);
11128
11129   /* Record the decl so that the function name is defined.
11130      If we already have a decl for this name, and it is a FUNCTION_DECL,
11131      use the old decl.  */
11132   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11133     {
11134       /* A specialization is not used to guide overload resolution.  */
11135       if (!DECL_FUNCTION_MEMBER_P (decl1)
11136           && !(DECL_USE_TEMPLATE (decl1) &&
11137                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11138         {
11139           tree olddecl = pushdecl (decl1);
11140
11141           if (olddecl == error_mark_node)
11142             /* If something went wrong when registering the declaration,
11143                use DECL1; we have to have a FUNCTION_DECL to use when
11144                parsing the body of the function.  */
11145             ;
11146           else
11147             {
11148               /* Otherwise, OLDDECL is either a previous declaration
11149                  of the same function or DECL1 itself.  */
11150
11151               if (warn_missing_declarations
11152                   && olddecl == decl1
11153                   && !DECL_MAIN_P (decl1)
11154                   && TREE_PUBLIC (decl1)
11155                   && !DECL_DECLARED_INLINE_P (decl1))
11156                 {
11157                   tree context;
11158
11159                   /* Check whether DECL1 is in an anonymous
11160                      namespace.  */
11161                   for (context = DECL_CONTEXT (decl1);
11162                        context;
11163                        context = DECL_CONTEXT (context))
11164                     {
11165                       if (TREE_CODE (context) == NAMESPACE_DECL
11166                           && DECL_NAME (context) == NULL_TREE)
11167                         break;
11168                     }
11169
11170                   if (context == NULL)
11171                     warning (OPT_Wmissing_declarations,
11172                              "no previous declaration for %q+D", decl1);
11173                 }
11174
11175               decl1 = olddecl;
11176             }
11177         }
11178       else
11179         {
11180           /* We need to set the DECL_CONTEXT.  */
11181           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11182             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11183         }
11184       fntype = TREE_TYPE (decl1);
11185
11186       /* If #pragma weak applies, mark the decl appropriately now.
11187          The pragma only applies to global functions.  Because
11188          determining whether or not the #pragma applies involves
11189          computing the mangled name for the declaration, we cannot
11190          apply the pragma until after we have merged this declaration
11191          with any previous declarations; if the original declaration
11192          has a linkage specification, that specification applies to
11193          the definition as well, and may affect the mangled name.  */
11194       if (!DECL_CONTEXT (decl1))
11195         maybe_apply_pragma_weak (decl1);
11196     }
11197
11198   /* Reset this in case the call to pushdecl changed it.  */
11199   current_function_decl = decl1;
11200
11201   gcc_assert (DECL_INITIAL (decl1));
11202
11203   /* This function may already have been parsed, in which case just
11204      return; our caller will skip over the body without parsing.  */
11205   if (DECL_INITIAL (decl1) != error_mark_node)
11206     return;
11207
11208   /* Initialize RTL machinery.  We cannot do this until
11209      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
11210      even when processing a template; this is how we get
11211      CFUN set up, and our per-function variables initialized.
11212      FIXME factor out the non-RTL stuff.  */
11213   bl = current_binding_level;
11214   allocate_struct_function (decl1);
11215   current_binding_level = bl;
11216
11217   /* Even though we're inside a function body, we still don't want to
11218      call expand_expr to calculate the size of a variable-sized array.
11219      We haven't necessarily assigned RTL to all variables yet, so it's
11220      not safe to try to expand expressions involving them.  */
11221   cfun->x_dont_save_pending_sizes_p = 1;
11222
11223   /* Start the statement-tree, start the tree now.  */
11224   DECL_SAVED_TREE (decl1) = push_stmt_list ();
11225
11226   /* If we are (erroneously) defining a function that we have already
11227      defined before, wipe out what we knew before.  */
11228   if (!DECL_PENDING_INLINE_P (decl1))
11229     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11230
11231   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11232     {
11233       /* We know that this was set up by `grokclassfn'.  We do not
11234          wait until `store_parm_decls', since evil parse errors may
11235          never get us to that point.  Here we keep the consistency
11236          between `current_class_type' and `current_class_ptr'.  */
11237       tree t = DECL_ARGUMENTS (decl1);
11238
11239       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11240       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11241
11242       cp_function_chain->x_current_class_ref
11243         = build_indirect_ref (t, NULL);
11244       cp_function_chain->x_current_class_ptr = t;
11245
11246       /* Constructors and destructors need to know whether they're "in
11247          charge" of initializing virtual base classes.  */
11248       t = TREE_CHAIN (t);
11249       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11250         {
11251           current_in_charge_parm = t;
11252           t = TREE_CHAIN (t);
11253         }
11254       if (DECL_HAS_VTT_PARM_P (decl1))
11255         {
11256           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11257           current_vtt_parm = t;
11258         }
11259     }
11260
11261   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11262                      /* Implicitly-defined methods (like the
11263                         destructor for a class in which no destructor
11264                         is explicitly declared) must not be defined
11265                         until their definition is needed.  So, we
11266                         ignore interface specifications for
11267                         compiler-generated functions.  */
11268                      && !DECL_ARTIFICIAL (decl1));
11269
11270   if (DECL_INTERFACE_KNOWN (decl1))
11271     {
11272       tree ctx = decl_function_context (decl1);
11273
11274       if (DECL_NOT_REALLY_EXTERN (decl1))
11275         DECL_EXTERNAL (decl1) = 0;
11276
11277       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11278           && TREE_PUBLIC (ctx))
11279         /* This is a function in a local class in an extern inline
11280            function.  */
11281         comdat_linkage (decl1);
11282     }
11283   /* If this function belongs to an interface, it is public.
11284      If it belongs to someone else's interface, it is also external.
11285      This only affects inlines and template instantiations.  */
11286   else if (!finfo->interface_unknown && honor_interface)
11287     {
11288       if (DECL_DECLARED_INLINE_P (decl1)
11289           || DECL_TEMPLATE_INSTANTIATION (decl1)
11290           || processing_template_decl)
11291         {
11292           DECL_EXTERNAL (decl1)
11293             = (finfo->interface_only
11294                || (DECL_DECLARED_INLINE_P (decl1)
11295                    && ! flag_implement_inlines
11296                    && !DECL_VINDEX (decl1)));
11297
11298           /* For WIN32 we also want to put these in linkonce sections.  */
11299           maybe_make_one_only (decl1);
11300         }
11301       else
11302         DECL_EXTERNAL (decl1) = 0;
11303       DECL_INTERFACE_KNOWN (decl1) = 1;
11304       /* If this function is in an interface implemented in this file,
11305          make sure that the back end knows to emit this function
11306          here.  */
11307       if (!DECL_EXTERNAL (decl1))
11308         mark_needed (decl1);
11309     }
11310   else if (finfo->interface_unknown && finfo->interface_only
11311            && honor_interface)
11312     {
11313       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
11314          interface, we will have both finfo->interface_unknown and
11315          finfo->interface_only set.  In that case, we don't want to
11316          use the normal heuristics because someone will supply a
11317          #pragma implementation elsewhere, and deducing it here would
11318          produce a conflict.  */
11319       comdat_linkage (decl1);
11320       DECL_EXTERNAL (decl1) = 0;
11321       DECL_INTERFACE_KNOWN (decl1) = 1;
11322       DECL_DEFER_OUTPUT (decl1) = 1;
11323     }
11324   else
11325     {
11326       /* This is a definition, not a reference.
11327          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
11328       if (!GNU_INLINE_P (decl1))
11329         DECL_EXTERNAL (decl1) = 0;
11330
11331       if ((DECL_DECLARED_INLINE_P (decl1)
11332            || DECL_TEMPLATE_INSTANTIATION (decl1))
11333           && ! DECL_INTERFACE_KNOWN (decl1)
11334           /* Don't try to defer nested functions for now.  */
11335           && ! decl_function_context (decl1))
11336         DECL_DEFER_OUTPUT (decl1) = 1;
11337       else
11338         DECL_INTERFACE_KNOWN (decl1) = 1;
11339     }
11340
11341   /* Determine the ELF visibility attribute for the function.  We must not
11342      do this before calling "pushdecl", as we must allow "duplicate_decls"
11343      to merge any attributes appropriately.  We also need to wait until
11344      linkage is set.  */
11345   if (!DECL_CLONED_FUNCTION_P (decl1))
11346     determine_visibility (decl1);
11347
11348   begin_scope (sk_function_parms, decl1);
11349
11350   ++function_depth;
11351
11352   if (DECL_DESTRUCTOR_P (decl1)
11353       || (DECL_CONSTRUCTOR_P (decl1)
11354           && targetm.cxx.cdtor_returns_this ()))
11355     {
11356       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11357       DECL_CONTEXT (cdtor_label) = current_function_decl;
11358     }
11359
11360   start_fname_decls ();
11361
11362   store_parm_decls (current_function_parms);
11363 }
11364
11365
11366 /* Like start_preparsed_function, except that instead of a
11367    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11368
11369    Returns 1 on success.  If the DECLARATOR is not suitable for a function
11370    (it defines a datum instead), we return 0, which tells
11371    yyparse to report a parse error.  */
11372
11373 int
11374 start_function (cp_decl_specifier_seq *declspecs,
11375                 const cp_declarator *declarator,
11376                 tree attrs)
11377 {
11378   tree decl1;
11379
11380   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11381   /* If the declarator is not suitable for a function definition,
11382      cause a syntax error.  */
11383   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11384     return 0;
11385
11386   if (DECL_MAIN_P (decl1))
11387     /* main must return int.  grokfndecl should have corrected it
11388        (and issued a diagnostic) if the user got it wrong.  */
11389     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11390                              integer_type_node));
11391
11392   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
11393
11394   return 1;
11395 }
11396 \f
11397 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11398    FN.  */
11399
11400 static bool
11401 use_eh_spec_block (tree fn)
11402 {
11403   return (flag_exceptions && flag_enforce_eh_specs
11404           && !processing_template_decl
11405           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11406           /* We insert the EH_SPEC_BLOCK only in the original
11407              function; then, it is copied automatically to the
11408              clones.  */
11409           && !DECL_CLONED_FUNCTION_P (fn)
11410           /* Implicitly-generated constructors and destructors have
11411              exception specifications.  However, those specifications
11412              are the union of the possible exceptions specified by the
11413              constructors/destructors for bases and members, so no
11414              unallowed exception will ever reach this function.  By
11415              not creating the EH_SPEC_BLOCK we save a little memory,
11416              and we avoid spurious warnings about unreachable
11417              code.  */
11418           && !DECL_ARTIFICIAL (fn));
11419 }
11420
11421 /* Store the parameter declarations into the current function declaration.
11422    This is called after parsing the parameter declarations, before
11423    digesting the body of the function.
11424
11425    Also install to binding contour return value identifier, if any.  */
11426
11427 static void
11428 store_parm_decls (tree current_function_parms)
11429 {
11430   tree fndecl = current_function_decl;
11431   tree parm;
11432
11433   /* This is a chain of any other decls that came in among the parm
11434      declarations.  If a parm is declared with  enum {foo, bar} x;
11435      then CONST_DECLs for foo and bar are put here.  */
11436   tree nonparms = NULL_TREE;
11437
11438   if (current_function_parms)
11439     {
11440       /* This case is when the function was defined with an ANSI prototype.
11441          The parms already have decls, so we need not do anything here
11442          except record them as in effect
11443          and complain if any redundant old-style parm decls were written.  */
11444
11445       tree specparms = current_function_parms;
11446       tree next;
11447
11448       /* Must clear this because it might contain TYPE_DECLs declared
11449              at class level.  */
11450       current_binding_level->names = NULL;
11451
11452       /* If we're doing semantic analysis, then we'll call pushdecl
11453              for each of these.  We must do them in reverse order so that
11454              they end in the correct forward order.  */
11455       specparms = nreverse (specparms);
11456
11457       for (parm = specparms; parm; parm = next)
11458         {
11459           next = TREE_CHAIN (parm);
11460           if (TREE_CODE (parm) == PARM_DECL)
11461             {
11462               if (DECL_NAME (parm) == NULL_TREE
11463                   || TREE_CODE (parm) != VOID_TYPE)
11464                 pushdecl (parm);
11465               else
11466                 error ("parameter %qD declared void", parm);
11467             }
11468           else
11469             {
11470               /* If we find an enum constant or a type tag,
11471                  put it aside for the moment.  */
11472               TREE_CHAIN (parm) = NULL_TREE;
11473               nonparms = chainon (nonparms, parm);
11474             }
11475         }
11476
11477       /* Get the decls in their original chain order and record in the
11478          function.  This is all and only the PARM_DECLs that were
11479          pushed into scope by the loop above.  */
11480       DECL_ARGUMENTS (fndecl) = getdecls ();
11481     }
11482   else
11483     DECL_ARGUMENTS (fndecl) = NULL_TREE;
11484
11485   /* Now store the final chain of decls for the arguments
11486      as the decl-chain of the current lexical scope.
11487      Put the enumerators in as well, at the front so that
11488      DECL_ARGUMENTS is not modified.  */
11489   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
11490
11491   if (use_eh_spec_block (current_function_decl))
11492     current_eh_spec_block = begin_eh_spec_block ();
11493 }
11494
11495 \f
11496 /* We have finished doing semantic analysis on DECL, but have not yet
11497    generated RTL for its body.  Save away our current state, so that
11498    when we want to generate RTL later we know what to do.  */
11499
11500 static void
11501 save_function_data (tree decl)
11502 {
11503   struct language_function *f;
11504
11505   /* Save the language-specific per-function data so that we can
11506      get it back when we really expand this function.  */
11507   gcc_assert (!DECL_PENDING_INLINE_P (decl));
11508
11509   /* Make a copy.  */
11510   f = GGC_NEW (struct language_function);
11511   memcpy (f, cp_function_chain, sizeof (struct language_function));
11512   DECL_SAVED_FUNCTION_DATA (decl) = f;
11513
11514   /* Clear out the bits we don't need.  */
11515   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
11516   f->bindings = NULL;
11517   f->x_local_names = NULL;
11518 }
11519
11520
11521 /* Set the return value of the constructor (if present).  */
11522
11523 static void
11524 finish_constructor_body (void)
11525 {
11526   tree val;
11527   tree exprstmt;
11528
11529   if (targetm.cxx.cdtor_returns_this ())
11530     {
11531       /* Any return from a constructor will end up here.  */
11532       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11533
11534       val = DECL_ARGUMENTS (current_function_decl);
11535       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11536                     DECL_RESULT (current_function_decl), val);
11537       /* Return the address of the object.  */
11538       exprstmt = build_stmt (RETURN_EXPR, val);
11539       add_stmt (exprstmt);
11540     }
11541 }
11542
11543 /* Do all the processing for the beginning of a destructor; set up the
11544    vtable pointers and cleanups for bases and members.  */
11545
11546 static void
11547 begin_destructor_body (void)
11548 {
11549   tree compound_stmt;
11550
11551   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
11552      issued an error message.  We still want to try to process the
11553      body of the function, but initialize_vtbl_ptrs will crash if
11554      TYPE_BINFO is NULL.  */
11555   if (COMPLETE_TYPE_P (current_class_type))
11556     {
11557       compound_stmt = begin_compound_stmt (0);
11558       /* Make all virtual function table pointers in non-virtual base
11559          classes point to CURRENT_CLASS_TYPE's virtual function
11560          tables.  */
11561       initialize_vtbl_ptrs (current_class_ptr);
11562       finish_compound_stmt (compound_stmt);
11563
11564       /* And insert cleanups for our bases and members so that they
11565          will be properly destroyed if we throw.  */
11566       push_base_cleanups ();
11567     }
11568 }
11569
11570 /* At the end of every destructor we generate code to delete the object if
11571    necessary.  Do that now.  */
11572
11573 static void
11574 finish_destructor_body (void)
11575 {
11576   tree exprstmt;
11577
11578   /* Any return from a destructor will end up here; that way all base
11579      and member cleanups will be run when the function returns.  */
11580   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
11581
11582   /* In a virtual destructor, we must call delete.  */
11583   if (DECL_VIRTUAL_P (current_function_decl))
11584     {
11585       tree if_stmt;
11586       tree virtual_size = cxx_sizeof (current_class_type);
11587
11588       /* [class.dtor]
11589
11590       At the point of definition of a virtual destructor (including
11591       an implicit definition), non-placement operator delete shall
11592       be looked up in the scope of the destructor's class and if
11593       found shall be accessible and unambiguous.  */
11594       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
11595                                       virtual_size,
11596                                       /*global_p=*/false,
11597                                       /*placement=*/NULL_TREE,
11598                                       /*alloc_fn=*/NULL_TREE);
11599
11600       if_stmt = begin_if_stmt ();
11601       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
11602                                    current_in_charge_parm,
11603                                    integer_one_node),
11604                            if_stmt);
11605       finish_expr_stmt (exprstmt);
11606       finish_then_clause (if_stmt);
11607       finish_if_stmt (if_stmt);
11608     }
11609
11610   if (targetm.cxx.cdtor_returns_this ())
11611     {
11612       tree val;
11613
11614       val = DECL_ARGUMENTS (current_function_decl);
11615       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
11616                     DECL_RESULT (current_function_decl), val);
11617       /* Return the address of the object.  */
11618       exprstmt = build_stmt (RETURN_EXPR, val);
11619       add_stmt (exprstmt);
11620     }
11621 }
11622
11623 /* Do the necessary processing for the beginning of a function body, which
11624    in this case includes member-initializers, but not the catch clauses of
11625    a function-try-block.  Currently, this means opening a binding level
11626    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
11627
11628 tree
11629 begin_function_body (void)
11630 {
11631   tree stmt;
11632
11633   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11634     return NULL_TREE;
11635
11636   if (processing_template_decl)
11637     /* Do nothing now.  */;
11638   else
11639     /* Always keep the BLOCK node associated with the outermost pair of
11640        curly braces of a function.  These are needed for correct
11641        operation of dwarfout.c.  */
11642     keep_next_level (true);
11643
11644   stmt = begin_compound_stmt (BCS_FN_BODY);
11645
11646   if (processing_template_decl)
11647     /* Do nothing now.  */;
11648   else if (DECL_DESTRUCTOR_P (current_function_decl))
11649     begin_destructor_body ();
11650
11651   return stmt;
11652 }
11653
11654 /* Do the processing for the end of a function body.  Currently, this means
11655    closing out the cleanups for fully-constructed bases and members, and in
11656    the case of the destructor, deleting the object if desired.  Again, this
11657    is only meaningful for [cd]tors, since they are the only functions where
11658    there is a significant distinction between the main body and any
11659    function catch clauses.  Handling, say, main() return semantics here
11660    would be wrong, as flowing off the end of a function catch clause for
11661    main() would also need to return 0.  */
11662
11663 void
11664 finish_function_body (tree compstmt)
11665 {
11666   if (compstmt == NULL_TREE)
11667     return;
11668
11669   /* Close the block.  */
11670   finish_compound_stmt (compstmt);
11671
11672   if (processing_template_decl)
11673     /* Do nothing now.  */;
11674   else if (DECL_CONSTRUCTOR_P (current_function_decl))
11675     finish_constructor_body ();
11676   else if (DECL_DESTRUCTOR_P (current_function_decl))
11677     finish_destructor_body ();
11678 }
11679
11680 /* Given a function, returns the BLOCK corresponding to the outermost level
11681    of curly braces, skipping the artificial block created for constructor
11682    initializers.  */
11683
11684 static tree
11685 outer_curly_brace_block (tree fndecl)
11686 {
11687   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
11688   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
11689     /* Skip the artificial function body block.  */
11690     block = BLOCK_SUBBLOCKS (block);
11691   return block;
11692 }
11693
11694 /* Finish up a function declaration and compile that function
11695    all the way to assembler language output.  The free the storage
11696    for the function definition.
11697
11698    FLAGS is a bitwise or of the following values:
11699      2 - INCLASS_INLINE
11700        We just finished processing the body of an in-class inline
11701        function definition.  (This processing will have taken place
11702        after the class definition is complete.)  */
11703
11704 tree
11705 finish_function (int flags)
11706 {
11707   tree fndecl = current_function_decl;
11708   tree fntype, ctype = NULL_TREE;
11709   int inclass_inline = (flags & 2) != 0;
11710   int nested;
11711
11712   /* When we get some parse errors, we can end up without a
11713      current_function_decl, so cope.  */
11714   if (fndecl == NULL_TREE)
11715     return error_mark_node;
11716
11717   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
11718       && DECL_VIRTUAL_P (fndecl)
11719       && !processing_template_decl)
11720     {
11721       tree fnclass = DECL_CONTEXT (fndecl);
11722       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
11723         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
11724     }
11725
11726   nested = function_depth > 1;
11727   fntype = TREE_TYPE (fndecl);
11728
11729   /*  TREE_READONLY (fndecl) = 1;
11730       This caused &foo to be of type ptr-to-const-function
11731       which then got a warning when stored in a ptr-to-function variable.  */
11732
11733   gcc_assert (building_stmt_tree ());
11734   /* The current function is being defined, so its DECL_INITIAL should
11735      be set, and unless there's a multiple definition, it should be
11736      error_mark_node.  */
11737   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
11738
11739   /* For a cloned function, we've already got all the code we need;
11740      there's no need to add any extra bits.  */
11741   if (!DECL_CLONED_FUNCTION_P (fndecl))
11742     {
11743       if (DECL_MAIN_P (current_function_decl))
11744         {
11745           tree stmt;
11746
11747           /* Make it so that `main' always returns 0 by default (or
11748              1 for VMS).  */
11749 #if VMS_TARGET
11750           stmt = finish_return_stmt (integer_one_node);
11751 #else
11752           stmt = finish_return_stmt (integer_zero_node);
11753 #endif
11754           /* Hack.  We don't want the middle-end to warn that this
11755              return is unreachable, so put the statement on the
11756              special line 0.  */
11757 #ifdef USE_MAPPED_LOCATION
11758           {
11759             location_t linezero = linemap_line_start (line_table, 0, 1);
11760             SET_EXPR_LOCATION (stmt, linezero);
11761           }
11762 #else
11763           annotate_with_file_line (stmt, input_filename, 0);
11764 #endif
11765         }
11766
11767       if (use_eh_spec_block (current_function_decl))
11768         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
11769                               (TREE_TYPE (current_function_decl)),
11770                               current_eh_spec_block);
11771     }
11772
11773   /* If we're saving up tree structure, tie off the function now.  */
11774   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
11775
11776   finish_fname_decls ();
11777
11778   /* If this function can't throw any exceptions, remember that.  */
11779   if (!processing_template_decl
11780       && !cp_function_chain->can_throw
11781       && !flag_non_call_exceptions
11782       && !DECL_REPLACEABLE_P (fndecl))
11783     TREE_NOTHROW (fndecl) = 1;
11784
11785   /* This must come after expand_function_end because cleanups might
11786      have declarations (from inline functions) that need to go into
11787      this function's blocks.  */
11788
11789   /* If the current binding level isn't the outermost binding level
11790      for this function, either there is a bug, or we have experienced
11791      syntax errors and the statement tree is malformed.  */
11792   if (current_binding_level->kind != sk_function_parms)
11793     {
11794       /* Make sure we have already experienced errors.  */
11795       gcc_assert (errorcount);
11796
11797       /* Throw away the broken statement tree and extra binding
11798          levels.  */
11799       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
11800
11801       while (current_binding_level->kind != sk_function_parms)
11802         {
11803           if (current_binding_level->kind == sk_class)
11804             pop_nested_class ();
11805           else
11806             poplevel (0, 0, 0);
11807         }
11808     }
11809   poplevel (1, 0, 1);
11810
11811   /* Statements should always be full-expressions at the outermost set
11812      of curly braces for a function.  */
11813   gcc_assert (stmts_are_full_exprs_p ());
11814
11815   /* Set up the named return value optimization, if we can.  Candidate
11816      variables are selected in check_return_expr.  */
11817   if (current_function_return_value)
11818     {
11819       tree r = current_function_return_value;
11820       tree outer;
11821
11822       if (r != error_mark_node
11823           /* This is only worth doing for fns that return in memory--and
11824              simpler, since we don't have to worry about promoted modes.  */
11825           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
11826           /* Only allow this for variables declared in the outer scope of
11827              the function so we know that their lifetime always ends with a
11828              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
11829              we were to do this optimization in tree-ssa.  */
11830           && (outer = outer_curly_brace_block (fndecl))
11831           && chain_member (r, BLOCK_VARS (outer)))
11832         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
11833
11834       current_function_return_value = NULL_TREE;
11835     }
11836
11837   /* Remember that we were in class scope.  */
11838   if (current_class_name)
11839     ctype = current_class_type;
11840
11841   /* Must mark the RESULT_DECL as being in this function.  */
11842   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
11843
11844   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
11845      to the FUNCTION_DECL node itself.  */
11846   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
11847
11848   /* Save away current state, if appropriate.  */
11849   if (!processing_template_decl)
11850     save_function_data (fndecl);
11851
11852   /* Complain if there's just no return statement.  */
11853   if (warn_return_type
11854       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
11855       && !dependent_type_p (TREE_TYPE (fntype))
11856       && !current_function_returns_value && !current_function_returns_null
11857       /* Don't complain if we abort or throw.  */
11858       && !current_function_returns_abnormally
11859       && !DECL_NAME (DECL_RESULT (fndecl))
11860       /* Normally, with -Wreturn-type, flow will complain.  Unless we're an
11861          inline function, as we might never be compiled separately.  */
11862       && (DECL_INLINE (fndecl) || processing_template_decl)
11863       /* Structor return values (if any) are set by the compiler.  */
11864       && !DECL_CONSTRUCTOR_P (fndecl)
11865       && !DECL_DESTRUCTOR_P (fndecl))
11866     warning (OPT_Wreturn_type, "no return statement in function returning non-void");
11867
11868   /* Store the end of the function, so that we get good line number
11869      info for the epilogue.  */
11870   cfun->function_end_locus = input_location;
11871
11872   /* Genericize before inlining.  */
11873   if (!processing_template_decl)
11874     {
11875       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
11876       cp_genericize (fndecl);
11877       /* Clear out the bits we don't need.  */
11878       f->x_current_class_ptr = NULL;
11879       f->x_current_class_ref = NULL;
11880       f->x_eh_spec_block = NULL;
11881       f->x_in_charge_parm = NULL;
11882       f->x_vtt_parm = NULL;
11883       f->x_return_value = NULL;
11884       f->bindings = NULL;
11885       f->extern_decl_map = NULL;
11886
11887       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
11888       c_warn_unused_result (&DECL_SAVED_TREE (fndecl));
11889     }
11890   /* Clear out the bits we don't need.  */
11891   local_names = NULL;
11892
11893   /* We're leaving the context of this function, so zap cfun.  It's still in
11894      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
11895   set_cfun (NULL);
11896   current_function_decl = NULL;
11897
11898   /* If this is an in-class inline definition, we may have to pop the
11899      bindings for the template parameters that we added in
11900      maybe_begin_member_template_processing when start_function was
11901      called.  */
11902   if (inclass_inline)
11903     maybe_end_member_template_processing ();
11904
11905   /* Leave the scope of the class.  */
11906   if (ctype)
11907     pop_nested_class ();
11908
11909   --function_depth;
11910
11911   /* Clean up.  */
11912   if (! nested)
11913     /* Let the error reporting routines know that we're outside a
11914        function.  For a nested function, this value is used in
11915        cxx_pop_function_context and then reset via pop_function_context.  */
11916     current_function_decl = NULL_TREE;
11917
11918   return fndecl;
11919 }
11920 \f
11921 /* Create the FUNCTION_DECL for a function definition.
11922    DECLSPECS and DECLARATOR are the parts of the declaration;
11923    they describe the return type and the name of the function,
11924    but twisted together in a fashion that parallels the syntax of C.
11925
11926    This function creates a binding context for the function body
11927    as well as setting up the FUNCTION_DECL in current_function_decl.
11928
11929    Returns a FUNCTION_DECL on success.
11930
11931    If the DECLARATOR is not suitable for a function (it defines a datum
11932    instead), we return 0, which tells yyparse to report a parse error.
11933
11934    May return void_type_node indicating that this method is actually
11935    a friend.  See grokfield for more details.
11936
11937    Came here with a `.pushlevel' .
11938
11939    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
11940    CHANGES TO CODE IN `grokfield'.  */
11941
11942 tree
11943 start_method (cp_decl_specifier_seq *declspecs,
11944               const cp_declarator *declarator, tree attrlist)
11945 {
11946   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
11947                                 &attrlist);
11948
11949   if (fndecl == error_mark_node)
11950     return error_mark_node;
11951
11952   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
11953     {
11954       error ("invalid member function declaration");
11955       return error_mark_node;
11956     }
11957
11958   if (attrlist)
11959     cplus_decl_attributes (&fndecl, attrlist, 0);
11960
11961   /* Pass friends other than inline friend functions back.  */
11962   if (fndecl == void_type_node)
11963     return fndecl;
11964
11965   if (DECL_IN_AGGR_P (fndecl))
11966     {
11967       if (DECL_CONTEXT (fndecl)
11968           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
11969         error ("%qD is already defined in class %qT", fndecl,
11970                DECL_CONTEXT (fndecl));
11971       return error_mark_node;
11972     }
11973
11974   check_template_shadow (fndecl);
11975
11976   DECL_DECLARED_INLINE_P (fndecl) = 1;
11977   if (flag_default_inline)
11978     DECL_INLINE (fndecl) = 1;
11979
11980   /* We process method specializations in finish_struct_1.  */
11981   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
11982     {
11983       fndecl = push_template_decl (fndecl);
11984       if (fndecl == error_mark_node)
11985         return fndecl;
11986     }
11987
11988   if (! DECL_FRIEND_P (fndecl))
11989     {
11990       if (TREE_CHAIN (fndecl))
11991         {
11992           fndecl = copy_node (fndecl);
11993           TREE_CHAIN (fndecl) = NULL_TREE;
11994         }
11995     }
11996
11997   finish_decl (fndecl, NULL_TREE, NULL_TREE);
11998
11999   /* Make a place for the parms.  */
12000   begin_scope (sk_function_parms, fndecl);
12001
12002   DECL_IN_AGGR_P (fndecl) = 1;
12003   return fndecl;
12004 }
12005
12006 /* Go through the motions of finishing a function definition.
12007    We don't compile this method until after the whole class has
12008    been processed.
12009
12010    FINISH_METHOD must return something that looks as though it
12011    came from GROKFIELD (since we are defining a method, after all).
12012
12013    This is called after parsing the body of the function definition.
12014    STMTS is the chain of statements that makes up the function body.
12015
12016    DECL is the ..._DECL that `start_method' provided.  */
12017
12018 tree
12019 finish_method (tree decl)
12020 {
12021   tree fndecl = decl;
12022   tree old_initial;
12023
12024   tree link;
12025
12026   if (decl == void_type_node)
12027     return decl;
12028
12029   old_initial = DECL_INITIAL (fndecl);
12030
12031   /* Undo the level for the parms (from start_method).
12032      This is like poplevel, but it causes nothing to be
12033      saved.  Saving information here confuses symbol-table
12034      output routines.  Besides, this information will
12035      be correctly output when this method is actually
12036      compiled.  */
12037
12038   /* Clear out the meanings of the local variables of this level;
12039      also record in each decl which block it belongs to.  */
12040
12041   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12042     {
12043       if (DECL_NAME (link) != NULL_TREE)
12044         pop_binding (DECL_NAME (link), link);
12045       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
12046       DECL_CONTEXT (link) = NULL_TREE;
12047     }
12048
12049   poplevel (0, 0, 0);
12050
12051   DECL_INITIAL (fndecl) = old_initial;
12052
12053   /* We used to check if the context of FNDECL was different from
12054      current_class_type as another way to get inside here.  This didn't work
12055      for String.cc in libg++.  */
12056   if (DECL_FRIEND_P (fndecl))
12057     {
12058       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
12059                      fndecl);
12060       decl = void_type_node;
12061     }
12062
12063   return decl;
12064 }
12065 \f
12066
12067 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
12068    we can lay it out later, when and if its type becomes complete.  */
12069
12070 void
12071 maybe_register_incomplete_var (tree var)
12072 {
12073   gcc_assert (TREE_CODE (var) == VAR_DECL);
12074
12075   /* Keep track of variables with incomplete types.  */
12076   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12077       && DECL_EXTERNAL (var))
12078     {
12079       tree inner_type = TREE_TYPE (var);
12080
12081       while (TREE_CODE (inner_type) == ARRAY_TYPE)
12082         inner_type = TREE_TYPE (inner_type);
12083       inner_type = TYPE_MAIN_VARIANT (inner_type);
12084
12085       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12086           /* RTTI TD entries are created while defining the type_info.  */
12087           || (TYPE_LANG_SPECIFIC (inner_type)
12088               && TYPE_BEING_DEFINED (inner_type)))
12089         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12090     }
12091 }
12092
12093 /* Called when a class type (given by TYPE) is defined.  If there are
12094    any existing VAR_DECLs whose type hsa been completed by this
12095    declaration, update them now.  */
12096
12097 void
12098 complete_vars (tree type)
12099 {
12100   tree *list = &incomplete_vars;
12101
12102   gcc_assert (CLASS_TYPE_P (type));
12103   while (*list)
12104     {
12105       if (same_type_p (type, TREE_PURPOSE (*list)))
12106         {
12107           tree var = TREE_VALUE (*list);
12108           tree type = TREE_TYPE (var);
12109           /* Complete the type of the variable.  The VAR_DECL itself
12110              will be laid out in expand_expr.  */
12111           complete_type (type);
12112           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12113           /* Remove this entry from the list.  */
12114           *list = TREE_CHAIN (*list);
12115         }
12116       else
12117         list = &TREE_CHAIN (*list);
12118     }
12119
12120   /* Check for pending declarations which may have abstract type.  */
12121   complete_type_check_abstract (type);
12122 }
12123
12124 /* If DECL is of a type which needs a cleanup, build and return an
12125    expression to perform that cleanup here.  Return NULL_TREE if no
12126    cleanup need be done.  */
12127
12128 tree
12129 cxx_maybe_build_cleanup (tree decl)
12130 {
12131   tree type;
12132   tree attr;
12133   tree cleanup;
12134
12135   /* Assume no cleanup is required.  */
12136   cleanup = NULL_TREE;
12137
12138   if (error_operand_p (decl))
12139     return cleanup;
12140
12141   /* Handle "__attribute__((cleanup))".  We run the cleanup function
12142      before the destructor since the destructor is what actually
12143      terminates the lifetime of the object.  */
12144   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12145   if (attr)
12146     {
12147       tree id;
12148       tree fn;
12149       tree arg;
12150
12151       /* Get the name specified by the user for the cleanup function.  */
12152       id = TREE_VALUE (TREE_VALUE (attr));
12153       /* Look up the name to find the cleanup function to call.  It is
12154          important to use lookup_name here because that is what is
12155          used in c-common.c:handle_cleanup_attribute when performing
12156          initial checks on the attribute.  Note that those checks
12157          include ensuring that the function found is not an overloaded
12158          function, or an object with an overloaded call operator,
12159          etc.; we can rely on the fact that the functionfound is an
12160          ordinary FUNCTION_DECL.  */
12161       fn = lookup_name (id);
12162       arg = build_address (decl);
12163       mark_used (decl);
12164       cleanup = build_function_call (fn, build_tree_list (NULL_TREE,
12165                                                           arg));
12166     }
12167   /* Handle ordinary C++ destructors.  */
12168   type = TREE_TYPE (decl);
12169   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12170     {
12171       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12172       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12173                          && CLASSTYPE_VBASECLASSES (type));
12174       tree addr;
12175       tree call;
12176
12177       if (TREE_CODE (type) == ARRAY_TYPE)
12178         addr = decl;
12179       else
12180         addr = build_address (decl);
12181
12182       /* Optimize for space over speed here.  */
12183       if (!has_vbases || flag_expensive_optimizations)
12184         flags |= LOOKUP_NONVIRTUAL;
12185
12186       call = build_delete (TREE_TYPE (addr), addr,
12187                            sfk_complete_destructor, flags, 0);
12188       if (cleanup)
12189         cleanup = build_compound_expr (cleanup, call);
12190       else
12191         cleanup = call;
12192     }
12193
12194   return cleanup;
12195 }
12196 \f
12197 /* When a stmt has been parsed, this function is called.  */
12198
12199 void
12200 finish_stmt (void)
12201 {
12202 }
12203
12204 /* DECL was originally constructed as a non-static member function,
12205    but turned out to be static.  Update it accordingly.  */
12206
12207 void
12208 revert_static_member_fn (tree decl)
12209 {
12210   tree tmp;
12211   tree function = TREE_TYPE (decl);
12212   tree args = TYPE_ARG_TYPES (function);
12213
12214   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
12215       != TYPE_UNQUALIFIED)
12216     error ("static member function %q#D declared with type qualifiers", decl);
12217
12218   args = TREE_CHAIN (args);
12219   tmp = build_function_type (TREE_TYPE (function), args);
12220   tmp = build_qualified_type (tmp, cp_type_quals (function));
12221   tmp = build_exception_variant (tmp,
12222                                  TYPE_RAISES_EXCEPTIONS (function));
12223   TREE_TYPE (decl) = tmp;
12224   if (DECL_ARGUMENTS (decl))
12225     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12226   DECL_STATIC_FUNCTION_P (decl) = 1;
12227 }
12228
12229 /* Initialize the variables used during compilation of a C++
12230    function.  */
12231
12232 void
12233 cxx_push_function_context (struct function * f)
12234 {
12235   struct language_function *p = GGC_CNEW (struct language_function);
12236   f->language = p;
12237
12238   /* Whenever we start a new function, we destroy temporaries in the
12239      usual way.  */
12240   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12241
12242   if (f->decl)
12243     {
12244       tree fn = f->decl;
12245
12246       if (DECL_SAVED_FUNCTION_DATA (fn))
12247         {
12248           /* If we already parsed this function, and we're just expanding it
12249              now, restore saved state.  */
12250           *cp_function_chain = *DECL_SAVED_FUNCTION_DATA (fn);
12251
12252           /* We don't need the saved data anymore.  Unless this is an inline
12253              function; we need the named return value info for
12254              declare_return_variable.  */
12255           if (! DECL_INLINE (fn))
12256             DECL_SAVED_FUNCTION_DATA (fn) = NULL;
12257         }
12258     }
12259 }
12260
12261 /* Free the language-specific parts of F, now that we've finished
12262    compiling the function.  */
12263
12264 void
12265 cxx_pop_function_context (struct function * f)
12266 {
12267   f->language = 0;
12268 }
12269
12270 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12271    one of the language-independent trees.  */
12272
12273 enum cp_tree_node_structure_enum
12274 cp_tree_node_structure (union lang_tree_node * t)
12275 {
12276   switch (TREE_CODE (&t->generic))
12277     {
12278     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
12279     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
12280     case OVERLOAD:              return TS_CP_OVERLOAD;
12281     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
12282     case PTRMEM_CST:            return TS_CP_PTRMEM;
12283     case BASELINK:              return TS_CP_BASELINK;
12284     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
12285     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
12286     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
12287     default:                    return TS_CP_GENERIC;
12288     }
12289 }
12290
12291 /* Build the void_list_node (void_type_node having been created).  */
12292 tree
12293 build_void_list_node (void)
12294 {
12295   tree t = build_tree_list (NULL_TREE, void_type_node);
12296   return t;
12297 }
12298
12299 bool
12300 cp_missing_noreturn_ok_p (tree decl)
12301 {
12302   /* A missing noreturn is ok for the `main' function.  */
12303   return DECL_MAIN_P (decl);
12304 }
12305
12306 /* Return the COMDAT group into which DECL should be placed.  */
12307
12308 const char *
12309 cxx_comdat_group (tree decl)
12310 {
12311   tree name;
12312
12313   /* Virtual tables, construction virtual tables, and virtual table
12314      tables all go in a single COMDAT group, named after the primary
12315      virtual table.  */
12316   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12317     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12318   /* For all other DECLs, the COMDAT group is the mangled name of the
12319      declaration itself.  */
12320   else
12321     {
12322       while (DECL_THUNK_P (decl))
12323         {
12324           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12325              into the same section as the target function.  In that case
12326              we must return target's name.  */
12327           tree target = THUNK_TARGET (decl);
12328           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12329               && DECL_SECTION_NAME (target) != NULL
12330               && DECL_ONE_ONLY (target))
12331             decl = target;
12332           else
12333             break;
12334         }
12335       name = DECL_ASSEMBLER_NAME (decl);
12336     }
12337
12338   return IDENTIFIER_POINTER (name);
12339 }
12340
12341 #include "gt-cp-decl.h"