OSDN Git Service

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