OSDN Git Service

./:
[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 (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 (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 (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 (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 (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 (LABEL_DECL, NULL_TREE, NULL_TREE);
2810       return add_stmt (build_case_label (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 (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 (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 (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 (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 (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 (TYPE_DECL, get_identifier (name), type));
3222   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3223   DECL_IGNORED_P (decl) = 1;
3224   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3225   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3226   TYPE_ALIGN (type) = 1;
3227   TYPE_USER_ALIGN (type) = 0;
3228   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3229 }
3230
3231 /* A string for which we should create an IDENTIFIER_NODE at
3232    startup.  */
3233
3234 typedef struct predefined_identifier
3235 {
3236   /* The name of the identifier.  */
3237   const char *const name;
3238   /* The place where the IDENTIFIER_NODE should be stored.  */
3239   tree *const node;
3240   /* Nonzero if this is the name of a constructor or destructor.  */
3241   const int ctor_or_dtor_p;
3242 } predefined_identifier;
3243
3244 /* Create all the predefined identifiers.  */
3245
3246 static void
3247 initialize_predefined_identifiers (void)
3248 {
3249   const predefined_identifier *pid;
3250
3251   /* A table of identifiers to create at startup.  */
3252   static const predefined_identifier predefined_identifiers[] = {
3253     { "C++", &lang_name_cplusplus, 0 },
3254     { "C", &lang_name_c, 0 },
3255     { "Java", &lang_name_java, 0 },
3256     /* Some of these names have a trailing space so that it is
3257        impossible for them to conflict with names written by users.  */
3258     { "__ct ", &ctor_identifier, 1 },
3259     { "__base_ctor ", &base_ctor_identifier, 1 },
3260     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3261     { "__dt ", &dtor_identifier, 1 },
3262     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3263     { "__base_dtor ", &base_dtor_identifier, 1 },
3264     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3265     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3266     { "nelts", &nelts_identifier, 0 },
3267     { THIS_NAME, &this_identifier, 0 },
3268     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3269     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3270     { "_vptr", &vptr_identifier, 0 },
3271     { "__vtt_parm", &vtt_parm_identifier, 0 },
3272     { "::", &global_scope_name, 0 },
3273     { "std", &std_identifier, 0 },
3274     { NULL, NULL, 0 }
3275   };
3276
3277   for (pid = predefined_identifiers; pid->name; ++pid)
3278     {
3279       *pid->node = get_identifier (pid->name);
3280       if (pid->ctor_or_dtor_p)
3281         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3282     }
3283 }
3284
3285 /* Create the predefined scalar types of C,
3286    and some nodes representing standard constants (0, 1, (void *)0).
3287    Initialize the global binding level.
3288    Make definitions for built-in primitive functions.  */
3289
3290 void
3291 cxx_init_decl_processing (void)
3292 {
3293   tree void_ftype;
3294   tree void_ftype_ptr;
3295
3296   build_common_tree_nodes (flag_signed_char, false);
3297
3298   /* Create all the identifiers we need.  */
3299   initialize_predefined_identifiers ();
3300
3301   /* Create the global variables.  */
3302   push_to_top_level ();
3303
3304   current_function_decl = NULL_TREE;
3305   current_binding_level = NULL;
3306   /* Enter the global namespace.  */
3307   gcc_assert (global_namespace == NULL_TREE);
3308   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3309                                       void_type_node);
3310   TREE_PUBLIC (global_namespace) = 1;
3311   begin_scope (sk_namespace, global_namespace);
3312
3313   current_lang_name = NULL_TREE;
3314
3315   if (flag_visibility_ms_compat)
3316     default_visibility = VISIBILITY_HIDDEN;
3317
3318   /* Initially, C.  */
3319   current_lang_name = lang_name_c;
3320
3321   /* Create the `std' namespace.  */
3322   push_namespace (std_identifier);
3323   std_node = current_namespace;
3324   pop_namespace ();
3325
3326   c_common_nodes_and_builtins ();
3327
3328   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3329   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3330   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3331   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3332   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3333   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3334   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3335   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3336
3337   integer_two_node = build_int_cst (NULL_TREE, 2);
3338   integer_three_node = build_int_cst (NULL_TREE, 3);
3339
3340   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3341   truthvalue_type_node = boolean_type_node;
3342   truthvalue_false_node = boolean_false_node;
3343   truthvalue_true_node = boolean_true_node;
3344
3345   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3346
3347 #if 0
3348   record_builtin_type (RID_MAX, NULL, string_type_node);
3349 #endif
3350
3351   delta_type_node = ptrdiff_type_node;
3352   vtable_index_type = ptrdiff_type_node;
3353
3354   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3355   void_ftype = build_function_type (void_type_node, void_list_node);
3356   void_ftype_ptr = build_function_type (void_type_node,
3357                                         tree_cons (NULL_TREE,
3358                                                    ptr_type_node,
3359                                                    void_list_node));
3360   void_ftype_ptr
3361     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3362
3363   /* C++ extensions */
3364
3365   unknown_type_node = make_node (UNKNOWN_TYPE);
3366   record_unknown_type (unknown_type_node, "unknown type");
3367
3368   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3369   TREE_TYPE (unknown_type_node) = unknown_type_node;
3370
3371   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3372      result.  */
3373   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3374   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3375
3376   init_list_type_node = make_node (UNKNOWN_TYPE);
3377   record_unknown_type (init_list_type_node, "init list");
3378
3379   {
3380     /* Make sure we get a unique function type, so we can give
3381        its pointer type a name.  (This wins for gdb.) */
3382     tree vfunc_type = make_node (FUNCTION_TYPE);
3383     TREE_TYPE (vfunc_type) = integer_type_node;
3384     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3385     layout_type (vfunc_type);
3386
3387     vtable_entry_type = build_pointer_type (vfunc_type);
3388   }
3389   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3390
3391   vtbl_type_node
3392     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3393   layout_type (vtbl_type_node);
3394   vtbl_type_node = build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3395   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3396   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3397   layout_type (vtbl_ptr_type_node);
3398   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3399
3400   push_namespace (get_identifier ("__cxxabiv1"));
3401   abi_node = current_namespace;
3402   pop_namespace ();
3403
3404   global_type_node = make_node (LANG_TYPE);
3405   record_unknown_type (global_type_node, "global type");
3406
3407   /* Now, C++.  */
3408   current_lang_name = lang_name_cplusplus;
3409
3410   {
3411     tree bad_alloc_id;
3412     tree bad_alloc_type_node;
3413     tree bad_alloc_decl;
3414     tree newtype, deltype;
3415     tree ptr_ftype_sizetype;
3416
3417     push_namespace (std_identifier);
3418     bad_alloc_id = get_identifier ("bad_alloc");
3419     bad_alloc_type_node = make_class_type (RECORD_TYPE);
3420     TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3421     bad_alloc_decl
3422       = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3423     DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3424     TYPE_STUB_DECL (bad_alloc_type_node) = bad_alloc_decl;
3425     pop_namespace ();
3426
3427     ptr_ftype_sizetype
3428       = build_function_type (ptr_type_node,
3429                              tree_cons (NULL_TREE,
3430                                         size_type_node,
3431                                         void_list_node));
3432     newtype = build_exception_variant
3433       (ptr_ftype_sizetype, add_exception_specifier
3434        (NULL_TREE, bad_alloc_type_node, -1));
3435     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3436     push_cp_library_fn (NEW_EXPR, newtype);
3437     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3438     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3439     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3440   }
3441
3442   abort_fndecl
3443     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3444
3445   /* Perform other language dependent initializations.  */
3446   init_class_processing ();
3447   init_rtti_processing ();
3448
3449   if (flag_exceptions)
3450     init_exception_processing ();
3451
3452   if (! supports_one_only ())
3453     flag_weak = 0;
3454
3455   make_fname_decl = cp_make_fname_decl;
3456   start_fname_decls ();
3457
3458   /* Show we use EH for cleanups.  */
3459   if (flag_exceptions)
3460     using_eh_for_cleanups ();
3461 }
3462
3463 /* Generate an initializer for a function naming variable from
3464    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3465    filled in with the type of the init.  */
3466
3467 tree
3468 cp_fname_init (const char* name, tree *type_p)
3469 {
3470   tree domain = NULL_TREE;
3471   tree type;
3472   tree init = NULL_TREE;
3473   size_t length = 0;
3474
3475   if (name)
3476     {
3477       length = strlen (name);
3478       domain = build_index_type (size_int (length));
3479       init = build_string (length + 1, name);
3480     }
3481
3482   type = build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3483   type = build_cplus_array_type (type, domain);
3484
3485   *type_p = type;
3486
3487   if (init)
3488     TREE_TYPE (init) = type;
3489   else
3490     init = error_mark_node;
3491
3492   return init;
3493 }
3494
3495 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
3496    decl, NAME is the initialization string and TYPE_DEP indicates whether
3497    NAME depended on the type of the function. We make use of that to detect
3498    __PRETTY_FUNCTION__ inside a template fn. This is being done
3499    lazily at the point of first use, so we mustn't push the decl now.  */
3500
3501 static tree
3502 cp_make_fname_decl (tree id, int type_dep)
3503 {
3504   const char *const name = (type_dep && processing_template_decl
3505                             ? NULL : fname_as_string (type_dep));
3506   tree type;
3507   tree init = cp_fname_init (name, &type);
3508   tree decl = build_decl (VAR_DECL, id, type);
3509
3510   if (name)
3511     free (CONST_CAST (char *, name));
3512
3513   /* As we're using pushdecl_with_scope, we must set the context.  */
3514   DECL_CONTEXT (decl) = current_function_decl;
3515   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3516
3517   TREE_STATIC (decl) = 1;
3518   TREE_READONLY (decl) = 1;
3519   DECL_ARTIFICIAL (decl) = 1;
3520
3521   TREE_USED (decl) = 1;
3522
3523   if (current_function_decl)
3524     {
3525       struct cp_binding_level *b = current_binding_level;
3526       while (b->level_chain->kind != sk_function_parms)
3527         b = b->level_chain;
3528       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3529       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3530                       LOOKUP_ONLYCONVERTING);
3531     }
3532   else
3533     pushdecl_top_level_and_finish (decl, init);
3534
3535   return decl;
3536 }
3537
3538 static tree
3539 builtin_function_1 (tree decl, tree context, bool is_global)
3540 {
3541   tree          id = DECL_NAME (decl);
3542   const char *name = IDENTIFIER_POINTER (id);
3543
3544   retrofit_lang_decl (decl);
3545
3546   /* All nesting of C++ functions is lexical; there is never a "static
3547      chain" in the sense of GNU C nested functions.  */
3548   DECL_NO_STATIC_CHAIN (decl) = 1;
3549
3550   DECL_ARTIFICIAL (decl) = 1;
3551   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3552   SET_DECL_LANGUAGE (decl, lang_c);
3553   /* Runtime library routines are, by definition, available in an
3554      external shared object.  */
3555   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3556   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3557
3558   DECL_CONTEXT (decl) = context;
3559
3560   if (is_global)
3561     pushdecl_top_level (decl);
3562   else
3563     pushdecl (decl);
3564
3565   /* A function in the user's namespace should have an explicit
3566      declaration before it is used.  Mark the built-in function as
3567      anticipated but not actually declared.  */
3568   if (name[0] != '_' || name[1] != '_')
3569     DECL_ANTICIPATED (decl) = 1;
3570   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3571     {
3572       size_t len = strlen (name);
3573
3574       /* Treat __*_chk fortification functions as anticipated as well,
3575          unless they are __builtin_*.  */
3576       if (len > strlen ("___chk")
3577           && memcmp (name + len - strlen ("_chk"),
3578                      "_chk", strlen ("_chk") + 1) == 0)
3579         DECL_ANTICIPATED (decl) = 1;
3580     }
3581
3582   return decl;
3583 }
3584
3585 tree
3586 cxx_builtin_function (tree decl)
3587 {
3588   tree          id = DECL_NAME (decl);
3589   const char *name = IDENTIFIER_POINTER (id);
3590   /* All builtins that don't begin with an '_' should additionally
3591      go in the 'std' namespace.  */
3592   if (name[0] != '_')
3593     {
3594       tree decl2 = copy_node(decl);
3595       push_namespace (std_identifier);
3596       builtin_function_1 (decl2, std_node, false);
3597       pop_namespace ();
3598     }
3599
3600   return builtin_function_1 (decl, NULL_TREE, false);
3601 }
3602
3603 /* Like cxx_builtin_function, but guarantee the function is added to the global
3604    scope.  This is to allow function specific options to add new machine
3605    dependent builtins when the target ISA changes via attribute((target(...)))
3606    which saves space on program startup if the program does not use non-generic
3607    ISAs.  */
3608
3609 tree
3610 cxx_builtin_function_ext_scope (tree decl)
3611 {
3612
3613   tree          id = DECL_NAME (decl);
3614   const char *name = IDENTIFIER_POINTER (id);
3615   /* All builtins that don't begin with an '_' should additionally
3616      go in the 'std' namespace.  */
3617   if (name[0] != '_')
3618     {
3619       tree decl2 = copy_node(decl);
3620       push_namespace (std_identifier);
3621       builtin_function_1 (decl2, std_node, true);
3622       pop_namespace ();
3623     }
3624
3625   return builtin_function_1 (decl, NULL_TREE, true);
3626 }
3627
3628 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3629    function.  Not called directly.  */
3630
3631 static tree
3632 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3633 {
3634   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3635   DECL_EXTERNAL (fn) = 1;
3636   TREE_PUBLIC (fn) = 1;
3637   DECL_ARTIFICIAL (fn) = 1;
3638   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3639   SET_DECL_LANGUAGE (fn, lang_c);
3640   /* Runtime library routines are, by definition, available in an
3641      external shared object.  */
3642   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3643   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3644   return fn;
3645 }
3646
3647 /* Returns the _DECL for a library function with C linkage.
3648    We assume that such functions never throw; if this is incorrect,
3649    callers should unset TREE_NOTHROW.  */
3650
3651 static tree
3652 build_library_fn (tree name, tree type)
3653 {
3654   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3655   TREE_NOTHROW (fn) = 1;
3656   return fn;
3657 }
3658
3659 /* Returns the _DECL for a library function with C++ linkage.  */
3660
3661 static tree
3662 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3663 {
3664   tree fn = build_library_fn_1 (name, operator_code, type);
3665   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3666   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3667   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3668   return fn;
3669 }
3670
3671 /* Like build_library_fn, but takes a C string instead of an
3672    IDENTIFIER_NODE.  */
3673
3674 tree
3675 build_library_fn_ptr (const char* name, tree type)
3676 {
3677   return build_library_fn (get_identifier (name), type);
3678 }
3679
3680 /* Like build_cp_library_fn, but takes a C string instead of an
3681    IDENTIFIER_NODE.  */
3682
3683 tree
3684 build_cp_library_fn_ptr (const char* name, tree type)
3685 {
3686   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3687 }
3688
3689 /* Like build_library_fn, but also pushes the function so that we will
3690    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3691    may throw exceptions listed in RAISES.  */
3692
3693 tree
3694 push_library_fn (tree name, tree type, tree raises)
3695 {
3696   tree fn;
3697
3698   if (raises)
3699     type = build_exception_variant (type, raises);
3700
3701   fn = build_library_fn (name, type);
3702   pushdecl_top_level (fn);
3703   return fn;
3704 }
3705
3706 /* Like build_cp_library_fn, but also pushes the function so that it
3707    will be found by normal lookup.  */
3708
3709 static tree
3710 push_cp_library_fn (enum tree_code operator_code, tree type)
3711 {
3712   tree fn = build_cp_library_fn (ansi_opname (operator_code),
3713                                  operator_code,
3714                                  type);
3715   pushdecl (fn);
3716   return fn;
3717 }
3718
3719 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3720    a FUNCTION_TYPE.  */
3721
3722 tree
3723 push_void_library_fn (tree name, tree parmtypes)
3724 {
3725   tree type = build_function_type (void_type_node, parmtypes);
3726   return push_library_fn (name, type, NULL_TREE);
3727 }
3728
3729 /* Like push_library_fn, but also note that this function throws
3730    and does not return.  Used for __throw_foo and the like.  */
3731
3732 tree
3733 push_throw_library_fn (tree name, tree type)
3734 {
3735   tree fn = push_library_fn (name, type, NULL_TREE);
3736   TREE_THIS_VOLATILE (fn) = 1;
3737   TREE_NOTHROW (fn) = 0;
3738   return fn;
3739 }
3740 \f
3741 /* When we call finish_struct for an anonymous union, we create
3742    default copy constructors and such.  But, an anonymous union
3743    shouldn't have such things; this function undoes the damage to the
3744    anonymous union type T.
3745
3746    (The reason that we create the synthesized methods is that we don't
3747    distinguish `union { int i; }' from `typedef union { int i; } U'.
3748    The first is an anonymous union; the second is just an ordinary
3749    union type.)  */
3750
3751 void
3752 fixup_anonymous_aggr (tree t)
3753 {
3754   tree *q;
3755
3756   /* Wipe out memory of synthesized methods.  */
3757   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3758   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
3759   TYPE_HAS_INIT_REF (t) = 0;
3760   TYPE_HAS_CONST_INIT_REF (t) = 0;
3761   TYPE_HAS_ASSIGN_REF (t) = 0;
3762   TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
3763
3764   /* Splice the implicitly generated functions out of the TYPE_METHODS
3765      list.  */
3766   q = &TYPE_METHODS (t);
3767   while (*q)
3768     {
3769       if (DECL_ARTIFICIAL (*q))
3770         *q = TREE_CHAIN (*q);
3771       else
3772         q = &TREE_CHAIN (*q);
3773     }
3774
3775   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
3776   if (TYPE_METHODS (t))
3777     {
3778       tree decl = TYPE_MAIN_DECL (t);
3779
3780       if (TREE_CODE (t) != UNION_TYPE)
3781         error ("%Jan anonymous struct cannot have function members", decl);
3782       else
3783         error ("%Jan anonymous union cannot have function members", decl);
3784     }
3785
3786   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
3787      assignment operators (because they cannot have these methods themselves).
3788      For anonymous unions this is already checked because they are not allowed
3789      in any union, otherwise we have to check it.  */
3790   if (TREE_CODE (t) != UNION_TYPE)
3791     {
3792       tree field, type;
3793
3794       for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
3795         if (TREE_CODE (field) == FIELD_DECL)
3796           {
3797             type = TREE_TYPE (field);
3798             if (CLASS_TYPE_P (type))
3799               {
3800                 if (TYPE_NEEDS_CONSTRUCTING (type))
3801                   error ("member %q+#D with constructor not allowed "
3802                          "in anonymous aggregate", field);
3803                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3804                   error ("member %q+#D with destructor not allowed "
3805                          "in anonymous aggregate", field);
3806                 if (TYPE_HAS_COMPLEX_ASSIGN_REF (type))
3807                   error ("member %q+#D with copy assignment operator "
3808                          "not allowed in anonymous aggregate", field);
3809               }
3810           }
3811     }
3812 }
3813
3814 /* Make sure that a declaration with no declarator is well-formed, i.e.
3815    just declares a tagged type or anonymous union.
3816
3817    Returns the type declared; or NULL_TREE if none.  */
3818
3819 tree
3820 check_tag_decl (cp_decl_specifier_seq *declspecs)
3821 {
3822   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
3823   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
3824   /* If a class, struct, or enum type is declared by the DECLSPECS
3825      (i.e, if a class-specifier, enum-specifier, or non-typename
3826      elaborated-type-specifier appears in the DECLSPECS),
3827      DECLARED_TYPE is set to the corresponding type.  */
3828   tree declared_type = NULL_TREE;
3829   bool error_p = false;
3830
3831   if (declspecs->multiple_types_p)
3832     error ("multiple types in one declaration");
3833   else if (declspecs->redefined_builtin_type)
3834     {
3835       if (!in_system_header)
3836         permerror (input_location, "redeclaration of C++ built-in type %qT",
3837                    declspecs->redefined_builtin_type);
3838       return NULL_TREE;
3839     }
3840
3841   if (declspecs->type
3842       && TYPE_P (declspecs->type)
3843       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
3844            && MAYBE_CLASS_TYPE_P (declspecs->type))
3845           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
3846     declared_type = declspecs->type;
3847   else if (declspecs->type == error_mark_node)
3848     error_p = true;
3849   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
3850     permerror (input_location, "declaration does not declare anything");
3851   /* Check for an anonymous union.  */
3852   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
3853            && TYPE_ANONYMOUS_P (declared_type))
3854     {
3855       /* 7/3 In a simple-declaration, the optional init-declarator-list
3856          can be omitted only when declaring a class (clause 9) or
3857          enumeration (7.2), that is, when the decl-specifier-seq contains
3858          either a class-specifier, an elaborated-type-specifier with
3859          a class-key (9.1), or an enum-specifier.  In these cases and
3860          whenever a class-specifier or enum-specifier is present in the
3861          decl-specifier-seq, the identifiers in these specifiers are among
3862          the names being declared by the declaration (as class-name,
3863          enum-names, or enumerators, depending on the syntax).  In such
3864          cases, and except for the declaration of an unnamed bit-field (9.6),
3865          the decl-specifier-seq shall introduce one or more names into the
3866          program, or shall redeclare a name introduced by a previous
3867          declaration.  [Example:
3868              enum { };                  // ill-formed
3869              typedef class { };         // ill-formed
3870          --end example]  */
3871       if (saw_typedef)
3872         {
3873           error ("missing type-name in typedef-declaration");
3874           return NULL_TREE;
3875         }
3876       /* Anonymous unions are objects, so they can have specifiers.  */;
3877       SET_ANON_AGGR_TYPE_P (declared_type);
3878
3879       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
3880         pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
3881     }
3882
3883   else
3884     {
3885       if (declspecs->specs[(int)ds_inline]
3886           || declspecs->specs[(int)ds_virtual])
3887         error ("%qs can only be specified for functions",
3888                declspecs->specs[(int)ds_inline]
3889                ? "inline" : "virtual");
3890       else if (saw_friend
3891                && (!current_class_type
3892                    || current_scope () != current_class_type))
3893         error ("%<friend%> can only be specified inside a class");
3894       else if (declspecs->specs[(int)ds_explicit])
3895         error ("%<explicit%> can only be specified for constructors");
3896       else if (declspecs->storage_class)
3897         error ("a storage class can only be specified for objects "
3898                "and functions");
3899       else if (declspecs->specs[(int)ds_const]
3900                || declspecs->specs[(int)ds_volatile]
3901                || declspecs->specs[(int)ds_restrict]
3902                || declspecs->specs[(int)ds_thread])
3903         error ("qualifiers can only be specified for objects "
3904                "and functions");
3905       else if (saw_typedef)
3906         warning (0, "%<typedef%> was ignored in this declaration");
3907     }
3908
3909   return declared_type;
3910 }
3911
3912 /* Called when a declaration is seen that contains no names to declare.
3913    If its type is a reference to a structure, union or enum inherited
3914    from a containing scope, shadow that tag name for the current scope
3915    with a forward reference.
3916    If its type defines a new named structure or union
3917    or defines an enum, it is valid but we need not do anything here.
3918    Otherwise, it is an error.
3919
3920    C++: may have to grok the declspecs to learn about static,
3921    complain for anonymous unions.
3922
3923    Returns the TYPE declared -- or NULL_TREE if none.  */
3924
3925 tree
3926 shadow_tag (cp_decl_specifier_seq *declspecs)
3927 {
3928   tree t = check_tag_decl (declspecs);
3929
3930   if (!t)
3931     return NULL_TREE;
3932
3933   if (declspecs->attributes)
3934     {
3935       warning (0, "attribute ignored in declaration of %q+#T", t);
3936       warning (0, "attribute for %q+#T must follow the %qs keyword",
3937                t, class_key_or_enum_as_string (t));
3938
3939     }
3940
3941   if (maybe_process_partial_specialization (t) == error_mark_node)
3942     return NULL_TREE;
3943
3944   /* This is where the variables in an anonymous union are
3945      declared.  An anonymous union declaration looks like:
3946      union { ... } ;
3947      because there is no declarator after the union, the parser
3948      sends that declaration here.  */
3949   if (ANON_AGGR_TYPE_P (t))
3950     {
3951       fixup_anonymous_aggr (t);
3952
3953       if (TYPE_FIELDS (t))
3954         {
3955           tree decl = grokdeclarator (/*declarator=*/NULL,
3956                                       declspecs, NORMAL, 0, NULL);
3957           finish_anon_union (decl);
3958         }
3959     }
3960
3961   return t;
3962 }
3963 \f
3964 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
3965
3966 tree
3967 groktypename (cp_decl_specifier_seq *type_specifiers,
3968               const cp_declarator *declarator,
3969               bool is_template_arg)
3970 {
3971   tree attrs;
3972   tree type;
3973   enum decl_context context
3974     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
3975   attrs = type_specifiers->attributes;
3976   type_specifiers->attributes = NULL_TREE;
3977   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
3978   if (attrs && type != error_mark_node)
3979     {
3980       if (CLASS_TYPE_P (type))
3981         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
3982                  "outside of definition", type);
3983       else if (MAYBE_CLASS_TYPE_P (type))
3984         /* A template type parameter or other dependent type.  */
3985         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
3986                  "type %qT without an associated declaration", type);
3987       else
3988         cplus_decl_attributes (&type, attrs, 0);
3989     }
3990   return type;
3991 }
3992
3993 /* Process a DECLARATOR for a function-scope variable declaration,
3994    namespace-scope variable declaration, or function declaration.
3995    (Function definitions go through start_function; class member
3996    declarations appearing in the body of the class go through
3997    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
3998    If an error occurs, the error_mark_node is returned instead.
3999    
4000    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4001    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4002    for an explicitly defaulted function, or SD_DELETED for an explicitly
4003    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4004    implicitly initialized via a default constructor.  ATTRIBUTES and
4005    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4006    *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4007    set, the caller is responsible for calling pop_scope.  */
4008
4009 tree
4010 start_decl (const cp_declarator *declarator,
4011             cp_decl_specifier_seq *declspecs,
4012             int initialized,
4013             tree attributes,
4014             tree prefix_attributes,
4015             tree *pushed_scope_p)
4016 {
4017   tree decl;
4018   tree type;
4019   tree context;
4020   bool was_public;
4021   int flags;
4022
4023   *pushed_scope_p = NULL_TREE;
4024
4025   /* An object declared as __attribute__((deprecated)) suppresses
4026      warnings of uses of other deprecated items.  */
4027   if (lookup_attribute ("deprecated", attributes))
4028     deprecated_state = DEPRECATED_SUPPRESS;
4029
4030   attributes = chainon (attributes, prefix_attributes);
4031
4032   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4033                          &attributes);
4034
4035   deprecated_state = DEPRECATED_NORMAL;
4036
4037   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4038       || decl == error_mark_node)
4039     return error_mark_node;
4040
4041   type = TREE_TYPE (decl);
4042
4043   context = DECL_CONTEXT (decl);
4044
4045   if (context)
4046     {
4047       *pushed_scope_p = push_scope (context);
4048
4049       /* We are only interested in class contexts, later.  */
4050       if (TREE_CODE (context) == NAMESPACE_DECL)
4051         context = NULL_TREE;
4052     }
4053
4054   if (initialized)
4055     /* Is it valid for this decl to have an initializer at all?
4056        If not, set INITIALIZED to zero, which will indirectly
4057        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4058     switch (TREE_CODE (decl))
4059       {
4060       case TYPE_DECL:
4061         error ("typedef %qD is initialized (use decltype instead)", decl);
4062         return error_mark_node;
4063
4064       case FUNCTION_DECL:
4065         if (initialized == SD_DELETED)
4066           /* We'll handle the rest of the semantics later, but we need to
4067              set this now so it's visible to duplicate_decls.  */
4068           DECL_DELETED_FN (decl) = 1;
4069         break;
4070
4071       default:
4072         break;
4073       }
4074
4075   if (initialized)
4076     {
4077       if (! toplevel_bindings_p ()
4078           && DECL_EXTERNAL (decl))
4079         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4080                  decl);
4081       DECL_EXTERNAL (decl) = 0;
4082       if (toplevel_bindings_p ())
4083         TREE_STATIC (decl) = 1;
4084     }
4085
4086   /* If this is a typedef that names the class for linkage purposes
4087      (7.1.3p8), apply any attributes directly to the type.  */
4088   if (TREE_CODE (decl) == TYPE_DECL
4089       && TAGGED_TYPE_P (TREE_TYPE (decl))
4090       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4091     flags = ATTR_FLAG_TYPE_IN_PLACE;
4092   else
4093     flags = 0;
4094
4095   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4096   cplus_decl_attributes (&decl, attributes, flags);
4097
4098   /* Dllimported symbols cannot be defined.  Static data members (which
4099      can be initialized in-class and dllimported) go through grokfield,
4100      not here, so we don't need to exclude those decls when checking for
4101      a definition.  */
4102   if (initialized && DECL_DLLIMPORT_P (decl))
4103     {
4104       error ("definition of %q#D is marked %<dllimport%>", decl);
4105       DECL_DLLIMPORT_P (decl) = 0;
4106     }
4107
4108   /* If #pragma weak was used, mark the decl weak now.  */
4109   maybe_apply_pragma_weak (decl);
4110
4111   if (TREE_CODE (decl) == FUNCTION_DECL
4112       && DECL_DECLARED_INLINE_P (decl)
4113       && DECL_UNINLINABLE (decl)
4114       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4115     warning (0, "inline function %q+D given attribute noinline", decl);
4116
4117   if (context && COMPLETE_TYPE_P (complete_type (context)))
4118     {
4119       if (TREE_CODE (decl) == VAR_DECL)
4120         {
4121           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4122           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4123             error ("%q#D is not a static member of %q#T", decl, context);
4124           else
4125             {
4126               if (DECL_CONTEXT (field) != context)
4127                 {
4128                   if (!same_type_p (DECL_CONTEXT (field), context))
4129                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4130                                "to be defined as %<%T::%D%>",
4131                                DECL_CONTEXT (field), DECL_NAME (decl),
4132                                context, DECL_NAME (decl));
4133                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4134                 }
4135               if (processing_specialization
4136                   && template_class_depth (context) == 0
4137                   && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4138                 error ("template header not allowed in member definition "
4139                        "of explicitly specialized class");
4140               /* Static data member are tricky; an in-class initialization
4141                  still doesn't provide a definition, so the in-class
4142                  declaration will have DECL_EXTERNAL set, but will have an
4143                  initialization.  Thus, duplicate_decls won't warn
4144                  about this situation, and so we check here.  */
4145               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4146                 error ("duplicate initialization of %qD", decl);
4147               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4148                 decl = field;
4149             }
4150         }
4151       else
4152         {
4153           tree field = check_classfn (context, decl,
4154                                       (processing_template_decl
4155                                        > template_class_depth (context))
4156                                       ? current_template_parms
4157                                       : NULL_TREE);
4158           if (field && field != error_mark_node
4159               && duplicate_decls (decl, field,
4160                                  /*newdecl_is_friend=*/false))
4161             decl = field;
4162         }
4163
4164       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4165       DECL_IN_AGGR_P (decl) = 0;
4166       /* Do not mark DECL as an explicit specialization if it was not
4167          already marked as an instantiation; a declaration should
4168          never be marked as a specialization unless we know what
4169          template is being specialized.  */
4170       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4171         {
4172           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4173
4174           /* [temp.expl.spec] An explicit specialization of a static data
4175              member of a template is a definition if the declaration
4176              includes an initializer; otherwise, it is a declaration.
4177
4178              We check for processing_specialization so this only applies
4179              to the new specialization syntax.  */
4180           if (!initialized && processing_specialization)
4181             DECL_EXTERNAL (decl) = 1;
4182         }
4183
4184       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
4185         permerror (input_location, "declaration of %q#D outside of class is not definition",
4186                    decl);
4187     }
4188
4189   was_public = TREE_PUBLIC (decl);
4190
4191   /* Enter this declaration into the symbol table.  */
4192   decl = maybe_push_decl (decl);
4193
4194   if (processing_template_decl)
4195     decl = push_template_decl (decl);
4196   if (decl == error_mark_node)
4197     return error_mark_node;
4198
4199   /* Tell the back end to use or not use .common as appropriate.  If we say
4200      -fconserve-space, we want this to save .data space, at the expense of
4201      wrong semantics.  If we say -fno-conserve-space, we want this to
4202      produce errors about redefs; to do this we force variables into the
4203      data segment.  */
4204   if (flag_conserve_space
4205       && TREE_CODE (decl) == VAR_DECL
4206       && TREE_PUBLIC (decl)
4207       && !DECL_THREAD_LOCAL_P (decl)
4208       && !have_global_bss_p ())
4209     DECL_COMMON (decl) = 1;
4210
4211   if (TREE_CODE (decl) == VAR_DECL
4212       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4213       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4214     {
4215       /* This is a const variable with implicit 'static'.  Set
4216          DECL_THIS_STATIC so we can tell it from variables that are
4217          !TREE_PUBLIC because of the anonymous namespace.  */
4218       gcc_assert (cp_type_readonly (TREE_TYPE (decl)));
4219       DECL_THIS_STATIC (decl) = 1;
4220     }
4221
4222   if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4223     start_decl_1 (decl, initialized);
4224
4225   return decl;
4226 }
4227
4228 /* Process the declaration of a variable DECL.  INITIALIZED is true
4229    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4230    variable is initialized via an implicitly-called constructor.)
4231    This function must be called for ordinary variables (including, for
4232    example, implicit instantiations of templates), but must not be
4233    called for template declarations.  */
4234
4235 void
4236 start_decl_1 (tree decl, bool initialized)
4237 {
4238   tree type;
4239   bool complete_p;
4240   bool aggregate_definition_p;
4241
4242   gcc_assert (!processing_template_decl);
4243
4244   if (error_operand_p (decl))
4245     return;
4246
4247   gcc_assert (TREE_CODE (decl) == VAR_DECL);
4248
4249   type = TREE_TYPE (decl);
4250   complete_p = COMPLETE_TYPE_P (type);
4251   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4252
4253   /* If an explicit initializer is present, or if this is a definition
4254      of an aggregate, then we need a complete type at this point.
4255      (Scalars are always complete types, so there is nothing to
4256      check.)  This code just sets COMPLETE_P; errors (if necessary)
4257      are issued below.  */
4258   if ((initialized || aggregate_definition_p) 
4259       && !complete_p
4260       && COMPLETE_TYPE_P (complete_type (type)))
4261     {
4262       complete_p = true;
4263       /* We will not yet have set TREE_READONLY on DECL if the type
4264          was "const", but incomplete, before this point.  But, now, we
4265          have a complete type, so we can try again.  */
4266       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4267     }
4268
4269   if (initialized)
4270     /* Is it valid for this decl to have an initializer at all?  */
4271     {
4272       /* Don't allow initializations for incomplete types except for
4273          arrays which might be completed by the initialization.  */
4274       if (complete_p)
4275         ;                       /* A complete type is ok.  */
4276       else if (type_uses_auto (type))
4277         ;                       /* An auto type is ok.  */
4278       else if (TREE_CODE (type) != ARRAY_TYPE)
4279         {
4280           error ("variable %q#D has initializer but incomplete type", decl);
4281           type = TREE_TYPE (decl) = error_mark_node;
4282         }
4283       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4284         {
4285           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4286             error ("elements of array %q#D have incomplete type", decl);
4287           /* else we already gave an error in start_decl.  */
4288         }
4289     }
4290   else if (aggregate_definition_p && !complete_p)
4291     {
4292       if (type_uses_auto (type))
4293         error ("declaration of %q#D has no initializer", decl);
4294       else
4295         error ("aggregate %q#D has incomplete type and cannot be defined",
4296                decl);
4297       /* Change the type so that assemble_variable will give
4298          DECL an rtl we can live with: (mem (const_int 0)).  */
4299       type = TREE_TYPE (decl) = error_mark_node;
4300     }
4301
4302   /* Create a new scope to hold this declaration if necessary.
4303      Whether or not a new scope is necessary cannot be determined
4304      until after the type has been completed; if the type is a
4305      specialization of a class template it is not until after
4306      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4307      will be set correctly.  */
4308   maybe_push_cleanup_level (type);
4309 }
4310
4311 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4312    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4313    but will be set to a new CLEANUP_STMT if a temporary is created
4314    that must be destroyed subsequently.
4315
4316    Returns an initializer expression to use to initialize DECL, or
4317    NULL if the initialization can be performed statically.
4318
4319    Quotes on semantics can be found in ARM 8.4.3.  */
4320
4321 static tree
4322 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4323 {
4324   tree tmp;
4325
4326   if (init == NULL_TREE)
4327     {
4328       if ((DECL_LANG_SPECIFIC (decl) == 0
4329            || DECL_IN_AGGR_P (decl) == 0)
4330           && ! DECL_THIS_EXTERN (decl))
4331         error ("%qD declared as reference but not initialized", decl);
4332       return NULL_TREE;
4333     }
4334
4335   if (TREE_CODE (init) == CONSTRUCTOR)
4336     {
4337       error ("ISO C++ forbids use of initializer list to "
4338              "initialize reference %qD", decl);
4339       return NULL_TREE;
4340     }
4341
4342   if (TREE_CODE (init) == TREE_LIST)
4343     init = build_x_compound_expr_from_list (init, "initializer");
4344
4345   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4346       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4347     /* Note: default conversion is only called in very special cases.  */
4348     init = decay_conversion (init);
4349
4350   /* Convert INIT to the reference type TYPE.  This may involve the
4351      creation of a temporary, whose lifetime must be the same as that
4352      of the reference.  If so, a DECL_EXPR for the temporary will be
4353      added just after the DECL_EXPR for DECL.  That's why we don't set
4354      DECL_INITIAL for local references (instead assigning to them
4355      explicitly); we need to allow the temporary to be initialized
4356      first.  */
4357   tmp = initialize_reference (type, init, decl, cleanup);
4358
4359   if (tmp == error_mark_node)
4360     return NULL_TREE;
4361   else if (tmp == NULL_TREE)
4362     {
4363       error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4364       return NULL_TREE;
4365     }
4366
4367   if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4368     return tmp;
4369
4370   DECL_INITIAL (decl) = tmp;
4371
4372   return NULL_TREE;
4373 }
4374
4375 /* Subroutine of check_initializer.  We're initializing a DECL of
4376    std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4377    extend the lifetime of the underlying array to match that of the decl,
4378    just like for reference initialization.  CLEANUP is as for
4379    grok_reference_init.  */
4380
4381 static tree
4382 build_init_list_var_init (tree decl, tree type, tree init, tree *cleanup)
4383 {
4384   tree aggr_init, array, arrtype;
4385   init = perform_implicit_conversion (type, init, tf_warning_or_error);
4386   aggr_init = TARGET_EXPR_INITIAL (init);
4387   init = build2 (INIT_EXPR, type, decl, init);
4388
4389   array = AGGR_INIT_EXPR_ARG (aggr_init, 1);
4390   arrtype = TREE_TYPE (array);
4391   STRIP_NOPS (array);
4392   gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4393   array = TREE_OPERAND (array, 0);
4394   /* If the array is constant, finish_compound_literal already made it a
4395      static variable and we don't need to do anything here.  */
4396   if (decl && TREE_CODE (array) == TARGET_EXPR)
4397     {
4398       tree subinit;
4399       tree var = set_up_extended_ref_temp (decl, array, cleanup, &subinit);
4400       var = build_address (var);
4401       var = convert (arrtype, var);
4402       AGGR_INIT_EXPR_ARG (aggr_init, 1) = var;
4403       init = build2 (COMPOUND_EXPR, TREE_TYPE (init), subinit, init);
4404     }
4405   return init;
4406 }
4407
4408 /* Designated initializers in arrays are not supported in GNU C++.
4409    The parser cannot detect this error since it does not know whether
4410    a given brace-enclosed initializer is for a class type or for an
4411    array.  This function checks that CE does not use a designated
4412    initializer.  If it does, an error is issued.  Returns true if CE
4413    is valid, i.e., does not have a designated initializer.  */
4414
4415 static bool
4416 check_array_designated_initializer (const constructor_elt *ce)
4417 {
4418   /* Designated initializers for array elements are not supported.  */
4419   if (ce->index)
4420     {
4421       /* The parser only allows identifiers as designated
4422          initializers.  */
4423       if (ce->index == error_mark_node)
4424         error ("name used in a GNU-style designated "
4425                "initializer for an array");
4426       else
4427         {
4428           gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4429           error ("name %qD used in a GNU-style designated "
4430                  "initializer for an array", ce->index);
4431         }
4432       return false;
4433     }
4434
4435   return true;
4436 }
4437
4438 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4439    array until we finish parsing the initializer.  If that's the
4440    situation we're in, update DECL accordingly.  */
4441
4442 static void
4443 maybe_deduce_size_from_array_init (tree decl, tree init)
4444 {
4445   tree type = TREE_TYPE (decl);
4446
4447   if (TREE_CODE (type) == ARRAY_TYPE
4448       && TYPE_DOMAIN (type) == NULL_TREE
4449       && TREE_CODE (decl) != TYPE_DECL)
4450     {
4451       /* do_default is really a C-ism to deal with tentative definitions.
4452          But let's leave it here to ease the eventual merge.  */
4453       int do_default = !DECL_EXTERNAL (decl);
4454       tree initializer = init ? init : DECL_INITIAL (decl);
4455       int failure = 0;
4456
4457       /* Check that there are no designated initializers in INIT, as
4458          those are not supported in GNU C++, and as the middle-end
4459          will crash if presented with a non-numeric designated
4460          initializer.  */
4461       if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4462         {
4463           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4464           constructor_elt *ce;
4465           HOST_WIDE_INT i;
4466           for (i = 0; 
4467                VEC_iterate (constructor_elt, v, i, ce);
4468                ++i) 
4469             if (!check_array_designated_initializer (ce))
4470               failure = 1;
4471         }
4472
4473       if (!failure)
4474         {
4475           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4476                                             do_default);
4477           if (failure == 1)
4478             {
4479               error ("initializer fails to determine size of %qD", decl);
4480               TREE_TYPE (decl) = error_mark_node;
4481             }
4482           else if (failure == 2)
4483             {
4484               if (do_default)
4485                 {
4486                   error ("array size missing in %qD", decl);
4487                   TREE_TYPE (decl) = error_mark_node;
4488                 }
4489               /* If a `static' var's size isn't known, make it extern as
4490                  well as static, so it does not get allocated.  If it's not
4491                  `static', then don't mark it extern; finish_incomplete_decl
4492                  will give it a default size and it will get allocated.  */
4493               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4494                 DECL_EXTERNAL (decl) = 1;
4495             }
4496           else if (failure == 3)
4497             {
4498               error ("zero-size array %qD", decl);
4499               TREE_TYPE (decl) = error_mark_node;
4500             }
4501         }
4502
4503       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4504
4505       layout_decl (decl, 0);
4506     }
4507 }
4508
4509 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4510    any appropriate error messages regarding the layout.  */
4511
4512 static void
4513 layout_var_decl (tree decl)
4514 {
4515   tree type;
4516
4517   type = TREE_TYPE (decl);
4518   if (type == error_mark_node)
4519     return;
4520
4521   /* If we haven't already layed out this declaration, do so now.
4522      Note that we must not call complete type for an external object
4523      because it's type might involve templates that we are not
4524      supposed to instantiate yet.  (And it's perfectly valid to say
4525      `extern X x' for some incomplete type `X'.)  */
4526   if (!DECL_EXTERNAL (decl))
4527     complete_type (type);
4528   if (!DECL_SIZE (decl)
4529       && TREE_TYPE (decl) != error_mark_node
4530       && (COMPLETE_TYPE_P (type)
4531           || (TREE_CODE (type) == ARRAY_TYPE
4532               && !TYPE_DOMAIN (type)
4533               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4534     layout_decl (decl, 0);
4535
4536   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4537     {
4538       /* An automatic variable with an incomplete type: that is an error.
4539          Don't talk about array types here, since we took care of that
4540          message in grokdeclarator.  */
4541       error ("storage size of %qD isn't known", decl);
4542       TREE_TYPE (decl) = error_mark_node;
4543     }
4544 #if 0
4545   /* Keep this code around in case we later want to control debug info
4546      based on whether a type is "used".  (jason 1999-11-11) */
4547
4548   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4549     /* Let debugger know it should output info for this type.  */
4550     note_debug_info_needed (ttype);
4551
4552   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4553     note_debug_info_needed (DECL_CONTEXT (decl));
4554 #endif
4555
4556   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4557       && DECL_SIZE (decl) != NULL_TREE
4558       && ! TREE_CONSTANT (DECL_SIZE (decl)))
4559     {
4560       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4561         constant_expression_warning (DECL_SIZE (decl));
4562       else
4563         {
4564           error ("storage size of %qD isn't constant", decl);
4565           TREE_TYPE (decl) = error_mark_node;
4566         }
4567     }
4568 }
4569
4570 /* If a local static variable is declared in an inline function, or if
4571    we have a weak definition, we must endeavor to create only one
4572    instance of the variable at link-time.  */
4573
4574 void
4575 maybe_commonize_var (tree decl)
4576 {
4577   /* Static data in a function with comdat linkage also has comdat
4578      linkage.  */
4579   if (TREE_STATIC (decl)
4580       /* Don't mess with __FUNCTION__.  */
4581       && ! DECL_ARTIFICIAL (decl)
4582       && DECL_FUNCTION_SCOPE_P (decl)
4583       /* Unfortunately, import_export_decl has not always been called
4584          before the function is processed, so we cannot simply check
4585          DECL_COMDAT.  */
4586       && (DECL_COMDAT (DECL_CONTEXT (decl))
4587           || ((DECL_DECLARED_INLINE_P (DECL_CONTEXT (decl))
4588                || DECL_TEMPLATE_INSTANTIATION (DECL_CONTEXT (decl)))
4589               && TREE_PUBLIC (DECL_CONTEXT (decl)))))
4590     {
4591       if (flag_weak)
4592         {
4593           /* With weak symbols, we simply make the variable COMDAT;
4594              that will cause copies in multiple translations units to
4595              be merged.  */
4596           comdat_linkage (decl);
4597         }
4598       else
4599         {
4600           if (DECL_INITIAL (decl) == NULL_TREE
4601               || DECL_INITIAL (decl) == error_mark_node)
4602             {
4603               /* Without weak symbols, we can use COMMON to merge
4604                  uninitialized variables.  */
4605               TREE_PUBLIC (decl) = 1;
4606               DECL_COMMON (decl) = 1;
4607             }
4608           else
4609             {
4610               /* While for initialized variables, we must use internal
4611                  linkage -- which means that multiple copies will not
4612                  be merged.  */
4613               TREE_PUBLIC (decl) = 0;
4614               DECL_COMMON (decl) = 0;
4615               warning (0, "sorry: semantics of inline function static "
4616                        "data %q+#D are wrong (you'll wind up "
4617                        "with multiple copies)", decl);
4618               warning (0, "%J  you can work around this by removing "
4619                        "the initializer",
4620                        decl);
4621             }
4622         }
4623     }
4624   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4625     /* Set it up again; we might have set DECL_INITIAL since the last
4626        time.  */
4627     comdat_linkage (decl);
4628 }
4629
4630 /* Issue an error message if DECL is an uninitialized const variable.  */
4631
4632 static void
4633 check_for_uninitialized_const_var (tree decl)
4634 {
4635   tree type = TREE_TYPE (decl);
4636
4637   /* ``Unless explicitly declared extern, a const object does not have
4638      external linkage and must be initialized. ($8.4; $12.1)'' ARM
4639      7.1.6 */
4640   if (TREE_CODE (decl) == VAR_DECL
4641       && TREE_CODE (type) != REFERENCE_TYPE
4642       && CP_TYPE_CONST_P (type)
4643       && !TYPE_NEEDS_CONSTRUCTING (type)
4644       && !DECL_INITIAL (decl))
4645     error ("uninitialized const %qD", decl);
4646 }
4647
4648 \f
4649 /* Structure holding the current initializer being processed by reshape_init.
4650    CUR is a pointer to the current element being processed, END is a pointer
4651    after the last element present in the initializer.  */
4652 typedef struct reshape_iterator_t
4653 {
4654   constructor_elt *cur;
4655   constructor_elt *end;
4656 } reshape_iter;
4657
4658 static tree reshape_init_r (tree, reshape_iter *, bool);
4659
4660 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4661    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4662    initialized.  If there are no more such fields, the return value
4663    will be NULL.  */
4664
4665 static tree
4666 next_initializable_field (tree field)
4667 {
4668   while (field
4669          && (TREE_CODE (field) != FIELD_DECL
4670              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4671              || DECL_ARTIFICIAL (field)))
4672     field = TREE_CHAIN (field);
4673
4674   return field;
4675 }
4676
4677 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4678    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4679    INTEGER_CST representing the size of the array minus one (the maximum index),
4680    or NULL_TREE if the array was declared without specifying the size. D is
4681    the iterator within the constructor.  */
4682
4683 static tree
4684 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4685 {
4686   tree new_init;
4687   bool sized_array_p = (max_index != NULL_TREE);
4688   unsigned HOST_WIDE_INT max_index_cst = 0;
4689   unsigned HOST_WIDE_INT index;
4690
4691   /* The initializer for an array is always a CONSTRUCTOR.  */
4692   new_init = build_constructor (init_list_type_node, NULL);
4693
4694   if (sized_array_p)
4695     {
4696       /* Minus 1 is used for zero sized arrays.  */
4697       if (integer_all_onesp (max_index))
4698         return new_init;
4699
4700       if (host_integerp (max_index, 1))
4701         max_index_cst = tree_low_cst (max_index, 1);
4702       /* sizetype is sign extended, not zero extended.  */
4703       else
4704         max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4705                                       1);
4706     }
4707
4708   /* Loop until there are no more initializers.  */
4709   for (index = 0;
4710        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4711        ++index)
4712     {
4713       tree elt_init;
4714
4715       check_array_designated_initializer (d->cur);
4716       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4717       if (elt_init == error_mark_node)
4718         return error_mark_node;
4719       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4720     }
4721
4722   return new_init;
4723 }
4724
4725 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4726    Parameters are the same of reshape_init_r.  */
4727
4728 static tree
4729 reshape_init_array (tree type, reshape_iter *d)
4730 {
4731   tree max_index = NULL_TREE;
4732
4733   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4734
4735   if (TYPE_DOMAIN (type))
4736     max_index = array_type_nelts (type);
4737
4738   return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4739 }
4740
4741 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4742    Parameters are the same of reshape_init_r.  */
4743
4744 static tree
4745 reshape_init_vector (tree type, reshape_iter *d)
4746 {
4747   tree max_index = NULL_TREE;
4748   tree rtype;
4749
4750   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4751
4752   if (COMPOUND_LITERAL_P (d->cur->value))
4753     {
4754       tree value = d->cur->value;
4755       if (!same_type_p (TREE_TYPE (value), type))
4756         {
4757           error ("invalid type %qT as initializer for a vector of type %qT",
4758                 TREE_TYPE (d->cur->value), type);
4759           value = error_mark_node;
4760         }
4761       ++d->cur;
4762       return value;
4763     }
4764
4765   /* For a vector, the representation type is a struct
4766       containing a single member which is an array of the
4767       appropriate size.  */
4768   rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4769   if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4770     max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4771
4772   return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4773 }
4774
4775 /* Subroutine of reshape_init_r, processes the initializers for classes
4776    or union. Parameters are the same of reshape_init_r.  */
4777
4778 static tree
4779 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4780 {
4781   tree field;
4782   tree new_init;
4783
4784   gcc_assert (CLASS_TYPE_P (type));
4785
4786   /* The initializer for a class is always a CONSTRUCTOR.  */
4787   new_init = build_constructor (init_list_type_node, NULL);
4788   field = next_initializable_field (TYPE_FIELDS (type));
4789
4790   if (!field)
4791     {
4792       /* [dcl.init.aggr]
4793
4794         An initializer for an aggregate member that is an
4795         empty class shall have the form of an empty
4796         initializer-list {}.  */
4797       if (!first_initializer_p)
4798         {
4799           error ("initializer for %qT must be brace-enclosed", type);
4800           return error_mark_node;
4801         }
4802       return new_init;
4803     }
4804
4805   /* Loop through the initializable fields, gathering initializers.  */
4806   while (d->cur != d->end)
4807     {
4808       tree field_init;
4809
4810       /* Handle designated initializers, as an extension.  */
4811       if (d->cur->index)
4812         {
4813           field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4814
4815           if (!field || TREE_CODE (field) != FIELD_DECL)
4816             {
4817               error ("%qT has no non-static data member named %qD", type,
4818                     d->cur->index);
4819               return error_mark_node;
4820             }
4821         }
4822
4823       /* If we processed all the member of the class, we are done.  */
4824       if (!field)
4825         break;
4826
4827       field_init = reshape_init_r (TREE_TYPE (field), d,
4828                                    /*first_initializer_p=*/false);
4829       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4830
4831       /* [dcl.init.aggr]
4832
4833         When a union  is  initialized with a brace-enclosed
4834         initializer, the braces shall only contain an
4835         initializer for the first member of the union.  */
4836       if (TREE_CODE (type) == UNION_TYPE)
4837         break;
4838
4839       field = next_initializable_field (TREE_CHAIN (field));
4840     }
4841
4842   return new_init;
4843 }
4844
4845 /* Subroutine of reshape_init, which processes a single initializer (part of
4846    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4847    iterator within the CONSTRUCTOR which points to the initializer to process.
4848    FIRST_INITIALIZER_P is true if this is the first initializer of the
4849    CONSTRUCTOR node.  */
4850
4851 static tree
4852 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4853 {
4854   tree init = d->cur->value;
4855
4856   if (error_operand_p (init))
4857     return error_mark_node;
4858
4859   /* A non-aggregate type is always initialized with a single
4860      initializer.  */
4861   if (!CP_AGGREGATE_TYPE_P (type))
4862     {
4863       /* It is invalid to initialize a non-aggregate type with a
4864          brace-enclosed initializer before C++0x.
4865          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4866          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4867          a CONSTRUCTOR (with a record type).  */
4868       if (TREE_CODE (init) == CONSTRUCTOR
4869           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
4870         {
4871           if (SCALAR_TYPE_P (type))
4872             {
4873               error ("braces around scalar initializer for type %qT", type);
4874               init = error_mark_node;
4875             }
4876           else
4877             maybe_warn_cpp0x ("extended initializer lists");
4878         }
4879
4880       d->cur++;
4881       return init;
4882     }
4883
4884   /* [dcl.init.aggr]
4885
4886      All implicit type conversions (clause _conv_) are considered when
4887      initializing the aggregate member with an initializer from an
4888      initializer-list.  If the initializer can initialize a member,
4889      the member is initialized.  Otherwise, if the member is itself a
4890      non-empty subaggregate, brace elision is assumed and the
4891      initializer is considered for the initialization of the first
4892      member of the subaggregate.  */
4893   if (TREE_CODE (init) != CONSTRUCTOR
4894       && can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL))
4895     {
4896       d->cur++;
4897       return init;
4898     }
4899
4900   /* [dcl.init.string]
4901
4902       A char array (whether plain char, signed char, or unsigned char)
4903       can be initialized by a string-literal (optionally enclosed in
4904       braces); a wchar_t array can be initialized by a wide
4905       string-literal (optionally enclosed in braces).  */
4906   if (TREE_CODE (type) == ARRAY_TYPE
4907       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4908     {
4909       tree str_init = init;
4910
4911       /* Strip one level of braces if and only if they enclose a single
4912          element (as allowed by [dcl.init.string]).  */
4913       if (!first_initializer_p
4914           && TREE_CODE (str_init) == CONSTRUCTOR
4915           && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4916         {
4917           str_init = VEC_index (constructor_elt,
4918                                 CONSTRUCTOR_ELTS (str_init), 0)->value;
4919         }
4920
4921       /* If it's a string literal, then it's the initializer for the array
4922          as a whole. Otherwise, continue with normal initialization for
4923          array types (one value per array element).  */
4924       if (TREE_CODE (str_init) == STRING_CST)
4925         {
4926           d->cur++;
4927           return str_init;
4928         }
4929     }
4930
4931   /* The following cases are about aggregates. If we are not within a full
4932      initializer already, and there is not a CONSTRUCTOR, it means that there
4933      is a missing set of braces (that is, we are processing the case for
4934      which reshape_init exists).  */
4935   if (!first_initializer_p)
4936     {
4937       if (TREE_CODE (init) == CONSTRUCTOR)
4938         {
4939           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
4940             /* There is no need to reshape pointer-to-member function
4941                initializers, as they are always constructed correctly
4942                by the front end.  */
4943            ;
4944           else if (COMPOUND_LITERAL_P (init))
4945           /* For a nested compound literal, there is no need to reshape since
4946              brace elision is not allowed. Even if we decided to allow it,
4947              we should add a call to reshape_init in finish_compound_literal,
4948              before calling digest_init, so changing this code would still
4949              not be necessary.  */
4950             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
4951           else
4952             {
4953               ++d->cur;
4954               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4955               return reshape_init (type, init);
4956             }
4957         }
4958
4959       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
4960                type);
4961     }
4962
4963   /* Dispatch to specialized routines.  */
4964   if (CLASS_TYPE_P (type))
4965     return reshape_init_class (type, d, first_initializer_p);
4966   else if (TREE_CODE (type) == ARRAY_TYPE)
4967     return reshape_init_array (type, d);
4968   else if (TREE_CODE (type) == VECTOR_TYPE)
4969     return reshape_init_vector (type, d);
4970   else
4971     gcc_unreachable();
4972 }
4973
4974 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
4975    brace-enclosed aggregate initializer.
4976
4977    INIT is the CONSTRUCTOR containing the list of initializers describing
4978    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
4979    It may not presently match the shape of the TYPE; for example:
4980
4981      struct S { int a; int b; };
4982      struct S a[] = { 1, 2, 3, 4 };
4983
4984    Here INIT will hold a VEC of four elements, rather than a
4985    VEC of two elements, each itself a VEC of two elements.  This
4986    routine transforms INIT from the former form into the latter.  The
4987    revised CONSTRUCTOR node is returned.  */
4988
4989 tree
4990 reshape_init (tree type, tree init)
4991 {
4992   VEC(constructor_elt, gc) *v;
4993   reshape_iter d;
4994   tree new_init;
4995
4996   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
4997
4998   v = CONSTRUCTOR_ELTS (init);
4999
5000   /* An empty constructor does not need reshaping, and it is always a valid
5001      initializer.  */
5002   if (VEC_empty (constructor_elt, v))
5003     return init;
5004
5005   /* Recurse on this CONSTRUCTOR.  */
5006   d.cur = VEC_index (constructor_elt, v, 0);
5007   d.end = d.cur + VEC_length (constructor_elt, v);
5008
5009   new_init = reshape_init_r (type, &d, true);
5010   if (new_init == error_mark_node)
5011     return error_mark_node;
5012
5013   /* Make sure all the element of the constructor were used. Otherwise,
5014      issue an error about exceeding initializers.  */
5015   if (d.cur != d.end)
5016     error ("too many initializers for %qT", type);
5017
5018   return new_init;
5019 }
5020
5021 /* Verify array initializer.  Returns true if errors have been reported.  */
5022
5023 bool
5024 check_array_initializer (tree decl, tree type, tree init)
5025 {
5026   tree element_type = TREE_TYPE (type);
5027
5028   /* The array type itself need not be complete, because the
5029      initializer may tell us how many elements are in the array.
5030      But, the elements of the array must be complete.  */
5031   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5032     {
5033       if (decl)
5034         error ("elements of array %q#D have incomplete type", decl);
5035       else
5036         error ("elements of array %q#T have incomplete type", type);
5037       return true;
5038     }
5039   /* It is not valid to initialize a VLA.  */
5040   if (init
5041       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5042           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5043     {
5044       if (decl)
5045         error ("variable-sized object %qD may not be initialized", decl);
5046       else
5047         error ("variable-sized compound literal");
5048       return true;
5049     }
5050   return false;
5051 }
5052
5053 /* Subroutine of check_initializer; args are passed down from that function.
5054    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5055
5056 static tree
5057 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5058      
5059 {
5060   int saved_stmts_are_full_exprs_p = 0;
5061   if (building_stmt_tree ())
5062     {
5063       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5064       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5065     }
5066   init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5067   if (building_stmt_tree ())
5068     current_stmt_tree ()->stmts_are_full_exprs_p =
5069       saved_stmts_are_full_exprs_p;
5070   return init;
5071 }
5072
5073 /* Verify INIT (the initializer for DECL), and record the
5074    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5075    grok_reference_init.
5076
5077    If the return value is non-NULL, it is an expression that must be
5078    evaluated dynamically to initialize DECL.  */
5079
5080 static tree
5081 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5082 {
5083   tree type = TREE_TYPE (decl);
5084   tree init_code = NULL;
5085
5086   /* Things that are going to be initialized need to have complete
5087      type.  */
5088   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5089
5090   if (type == error_mark_node)
5091     /* We will have already complained.  */
5092     return NULL_TREE;
5093
5094   if (TREE_CODE (type) == ARRAY_TYPE)
5095     {
5096       if (check_array_initializer (decl, type, init))
5097         return NULL_TREE;
5098     }
5099   else if (!COMPLETE_TYPE_P (type))
5100     {
5101       error ("%qD has incomplete type", decl);
5102       TREE_TYPE (decl) = error_mark_node;
5103       return NULL_TREE;
5104     }
5105   else
5106     /* There is no way to make a variable-sized class type in GNU C++.  */
5107     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5108
5109   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5110     {
5111       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5112       if (SCALAR_TYPE_P (type))
5113         {
5114           if (init_len == 0)
5115             {
5116               maybe_warn_cpp0x ("extended initializer lists");
5117               init = build_zero_init (type, NULL_TREE, false);
5118             }
5119           else if (init_len != 1)
5120             {
5121               error ("scalar object %qD requires one element in initializer",
5122                      decl);
5123               TREE_TYPE (decl) = error_mark_node;
5124               return NULL_TREE;
5125             }
5126         }
5127     }
5128
5129   if (TREE_CODE (decl) == CONST_DECL)
5130     {
5131       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5132
5133       DECL_INITIAL (decl) = init;
5134
5135       gcc_assert (init != NULL_TREE);
5136       init = NULL_TREE;
5137     }
5138   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
5139     init = grok_reference_init (decl, type, init, cleanup);
5140   else if (init)
5141     {
5142       /* Do not reshape constructors of vectors (they don't need to be
5143          reshaped.  */
5144       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5145         {
5146           if (is_std_init_list (type))
5147             return build_init_list_var_init (decl, type, init, cleanup);
5148           else if (TYPE_NON_AGGREGATE_CLASS (type))
5149             {
5150               /* Don't reshape if the class has constructors.  */
5151               if (cxx_dialect == cxx98)
5152                 error ("in C++98 %qD must be initialized by constructor, "
5153                        "not by %<{...}%>",
5154                        decl);
5155               init = build_tree_list (NULL_TREE, init);
5156             }
5157           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5158             {
5159               error ("opaque vector types cannot be initialized");
5160               init = error_mark_node;
5161             }
5162           else
5163             init = reshape_init (type, init);       
5164         }
5165
5166       /* If DECL has an array type without a specific bound, deduce the
5167          array size from the initializer.  */
5168       maybe_deduce_size_from_array_init (decl, init);
5169       type = TREE_TYPE (decl);
5170       if (type == error_mark_node)
5171         return NULL_TREE;
5172
5173       if (TYPE_NEEDS_CONSTRUCTING (type)
5174           || (CLASS_TYPE_P (type)
5175               && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5176         return build_aggr_init_full_exprs (decl, init, flags);
5177       else if (TREE_CODE (init) != TREE_VEC)
5178         {
5179           init_code = store_init_value (decl, init);
5180           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5181               && DECL_INITIAL (decl)
5182               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5183               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5184             warning (0, "array %qD initialized by parenthesized string literal %qE",
5185                      decl, DECL_INITIAL (decl));
5186           init = NULL;
5187         }
5188     }
5189   else if (DECL_EXTERNAL (decl))
5190     ;
5191   else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5192     return build_aggr_init_full_exprs (decl, init, flags);
5193   else if (MAYBE_CLASS_TYPE_P (type))
5194     {
5195       tree core_type = strip_array_types (type);
5196
5197       if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
5198         error ("structure %qD with uninitialized const members", decl);
5199       if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
5200         error ("structure %qD with uninitialized reference members", decl);
5201
5202       check_for_uninitialized_const_var (decl);
5203     }
5204   else
5205     check_for_uninitialized_const_var (decl);
5206
5207   if (init && init != error_mark_node)
5208     init_code = build2 (INIT_EXPR, type, decl, init);
5209
5210   return init_code;
5211 }
5212
5213 /* If DECL is not a local variable, give it RTL.  */
5214
5215 static void
5216 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5217 {
5218   int toplev = toplevel_bindings_p ();
5219   int defer_p;
5220   const char *filename;
5221
5222   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5223   if (asmspec)
5224     {
5225       /* The `register' keyword, when used together with an
5226          asm-specification, indicates that the variable should be
5227          placed in a particular register.  */
5228       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5229         {
5230           set_user_assembler_name (decl, asmspec);
5231           DECL_HARD_REGISTER (decl) = 1;
5232         }
5233       else
5234         {
5235           if (TREE_CODE (decl) == FUNCTION_DECL
5236               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5237             set_builtin_user_assembler_name (decl, asmspec);
5238           set_user_assembler_name (decl, asmspec);
5239         }
5240     }
5241
5242   /* Handle non-variables up front.  */
5243   if (TREE_CODE (decl) != VAR_DECL)
5244     {
5245       rest_of_decl_compilation (decl, toplev, at_eof);
5246       return;
5247     }
5248
5249   /* If we see a class member here, it should be a static data
5250      member.  */
5251   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5252     {
5253       gcc_assert (TREE_STATIC (decl));
5254       /* An in-class declaration of a static data member should be
5255          external; it is only a declaration, and not a definition.  */
5256       if (init == NULL_TREE)
5257         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5258     }
5259
5260   /* We don't create any RTL for local variables.  */
5261   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5262     return;
5263
5264   /* We defer emission of local statics until the corresponding
5265      DECL_EXPR is expanded.  */
5266   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5267
5268   /* We try to defer namespace-scope static constants so that they are
5269      not emitted into the object file unnecessarily.  */
5270   filename = input_filename;
5271   if (!DECL_VIRTUAL_P (decl)
5272       && TREE_READONLY (decl)
5273       && DECL_INITIAL (decl) != NULL_TREE
5274       && DECL_INITIAL (decl) != error_mark_node
5275       && filename != NULL
5276       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5277       && toplev
5278       && !TREE_PUBLIC (decl))
5279     {
5280       /* Fool with the linkage of static consts according to #pragma
5281          interface.  */
5282       struct c_fileinfo *finfo = get_fileinfo (filename);
5283       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5284         {
5285           TREE_PUBLIC (decl) = 1;
5286           DECL_EXTERNAL (decl) = finfo->interface_only;
5287         }
5288
5289       defer_p = 1;
5290     }
5291   /* Likewise for template instantiations.  */
5292   else if (DECL_LANG_SPECIFIC (decl)
5293            && DECL_IMPLICIT_INSTANTIATION (decl))
5294     defer_p = 1;
5295
5296   /* If we're not deferring, go ahead and assemble the variable.  */
5297   if (!defer_p)
5298     rest_of_decl_compilation (decl, toplev, at_eof);
5299 }
5300
5301 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5302
5303 static tree
5304 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5305 {
5306   if (TYPE_P (*stmt_p))
5307     {
5308       *walk_subtrees = 0;
5309       return NULL_TREE;
5310     }
5311
5312   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5313     {
5314       tree guard = (tree)data;
5315       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5316
5317       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5318       /* Tell honor_protect_cleanup_actions to handle this as a separate
5319          cleanup.  */
5320       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5321  
5322       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5323     }
5324
5325   return NULL_TREE;
5326 }
5327
5328 /* We're initializing a local variable which has a cleanup GUARD.  If there
5329    are any temporaries used in the initializer INIT of this variable, we
5330    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5331    variable will be cleaned up properly if one of them throws.
5332
5333    Unfortunately, there's no way to express this properly in terms of
5334    nesting, as the regions for the temporaries overlap the region for the
5335    variable itself; if there are two temporaries, the variable needs to be
5336    the first thing destroyed if either of them throws.  However, we only
5337    want to run the variable's cleanup if it actually got constructed.  So
5338    we need to guard the temporary cleanups with the variable's cleanup if
5339    they are run on the normal path, but not if they are run on the
5340    exceptional path.  We implement this by telling
5341    honor_protect_cleanup_actions to strip the variable cleanup from the
5342    exceptional path.  */
5343
5344 static void
5345 wrap_temporary_cleanups (tree init, tree guard)
5346 {
5347   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5348 }
5349
5350 /* Generate code to initialize DECL (a local variable).  */
5351
5352 static void
5353 initialize_local_var (tree decl, tree init)
5354 {
5355   tree type = TREE_TYPE (decl);
5356   tree cleanup;
5357   int already_used;
5358
5359   gcc_assert (TREE_CODE (decl) == VAR_DECL
5360               || TREE_CODE (decl) == RESULT_DECL);
5361   gcc_assert (!TREE_STATIC (decl));
5362
5363   if (DECL_SIZE (decl) == NULL_TREE)
5364     {
5365       /* If we used it already as memory, it must stay in memory.  */
5366       DECL_INITIAL (decl) = NULL_TREE;
5367       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5368       return;
5369     }
5370
5371   if (type == error_mark_node)
5372     return;
5373
5374   /* Compute and store the initial value.  */
5375   already_used = TREE_USED (decl) || TREE_USED (type);
5376
5377   /* Generate a cleanup, if necessary.  */
5378   cleanup = cxx_maybe_build_cleanup (decl);
5379
5380   /* Perform the initialization.  */
5381   if (init)
5382     {
5383       int saved_stmts_are_full_exprs_p;
5384
5385       /* If we're only initializing a single object, guard the destructors
5386          of any temporaries used in its initializer with its destructor.
5387          This isn't right for arrays because each element initialization is
5388          a full-expression.  */
5389       if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5390         wrap_temporary_cleanups (init, cleanup);
5391
5392       gcc_assert (building_stmt_tree ());
5393       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5394       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5395       finish_expr_stmt (init);
5396       current_stmt_tree ()->stmts_are_full_exprs_p =
5397         saved_stmts_are_full_exprs_p;
5398     }
5399
5400   /* Set this to 0 so we can tell whether an aggregate which was
5401      initialized was ever used.  Don't do this if it has a
5402      destructor, so we don't complain about the 'resource
5403      allocation is initialization' idiom.  Now set
5404      attribute((unused)) on types so decls of that type will be
5405      marked used. (see TREE_USED, above.)  */
5406   if (TYPE_NEEDS_CONSTRUCTING (type)
5407       && ! already_used
5408       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5409       && DECL_NAME (decl))
5410     TREE_USED (decl) = 0;
5411   else if (already_used)
5412     TREE_USED (decl) = 1;
5413
5414   if (cleanup)
5415     finish_decl_cleanup (decl, cleanup);
5416 }
5417
5418 /* DECL is a VAR_DECL for a compiler-generated variable with static
5419    storage duration (like a virtual table) whose initializer is a
5420    compile-time constant.  INIT must be either a TREE_LIST of values,
5421    or a CONSTRUCTOR.  Initialize the variable and provide it to the
5422    back end.  */
5423
5424 void
5425 initialize_artificial_var (tree decl, tree init)
5426 {
5427   gcc_assert (DECL_ARTIFICIAL (decl));
5428   if (TREE_CODE (init) == TREE_LIST)
5429     init = build_constructor_from_list (TREE_TYPE (decl), init);
5430   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5431   DECL_INITIAL (decl) = init;
5432   DECL_INITIALIZED_P (decl) = 1;
5433   determine_visibility (decl);
5434   layout_var_decl (decl);
5435   maybe_commonize_var (decl);
5436   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5437 }
5438
5439 /* INIT is the initializer for a variable, as represented by the
5440    parser.  Returns true iff INIT is value-dependent.  */
5441
5442 static bool
5443 value_dependent_init_p (tree init)
5444 {
5445   if (TREE_CODE (init) == TREE_LIST)
5446     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5447     return any_value_dependent_elements_p (init);
5448   else if (TREE_CODE (init) == CONSTRUCTOR)
5449   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5450     {
5451       VEC(constructor_elt, gc) *elts;
5452       size_t nelts;
5453       size_t i;
5454
5455       elts = CONSTRUCTOR_ELTS (init);
5456       nelts = VEC_length (constructor_elt, elts);
5457       for (i = 0; i < nelts; ++i)
5458         if (value_dependent_init_p (VEC_index (constructor_elt,
5459                                                elts, i)->value))
5460           return true;
5461     }
5462   else
5463     /* It must be a simple expression, e.g., int i = 3;  */
5464     return value_dependent_expression_p (init);
5465   
5466   return false;
5467 }
5468
5469 /* Finish processing of a declaration;
5470    install its line number and initial value.
5471    If the length of an array type is not known before,
5472    it must be determined now, from the initial value, or it is an error.
5473
5474    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5475    true, then INIT is an integral constant expression.
5476
5477    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5478    if the (init) syntax was used.  */
5479
5480 void
5481 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5482                 tree asmspec_tree, int flags)
5483 {
5484   tree type;
5485   tree cleanup;
5486   const char *asmspec = NULL;
5487   int was_readonly = 0;
5488   bool var_definition_p = false;
5489   int saved_processing_template_decl;
5490   tree auto_node;
5491
5492   if (decl == error_mark_node)
5493     return;
5494   else if (! decl)
5495     {
5496       if (init)
5497         error ("assignment (not initialization) in declaration");
5498       return;
5499     }
5500
5501   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5502   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5503   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5504
5505   type = TREE_TYPE (decl);
5506   if (type == error_mark_node)
5507     return;
5508
5509   /* Assume no cleanup is required.  */
5510   cleanup = NULL_TREE;
5511   saved_processing_template_decl = processing_template_decl;
5512
5513   /* If a name was specified, get the string.  */
5514   if (global_scope_p (current_binding_level))
5515     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5516   if (asmspec_tree && asmspec_tree != error_mark_node)
5517     asmspec = TREE_STRING_POINTER (asmspec_tree);
5518
5519   if (current_class_type
5520       && CP_DECL_CONTEXT (decl) == current_class_type
5521       && TYPE_BEING_DEFINED (current_class_type)
5522       && (DECL_INITIAL (decl) || init))
5523     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5524
5525   auto_node = type_uses_auto (type);
5526   if (auto_node)
5527     {
5528       if (init == NULL_TREE)
5529         {
5530           error ("declaration of %q#D has no initializer", decl);
5531           TREE_TYPE (decl) = error_mark_node;
5532           return;
5533         }
5534       else if (describable_type (init))
5535         {
5536           type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5537           if (type == error_mark_node)
5538             return;
5539         }
5540     }
5541
5542   if (init && TREE_CODE (decl) == FUNCTION_DECL)
5543     {
5544       if (init == ridpointers[(int)RID_DELETE])
5545         {
5546           /* FIXME check this is 1st decl.  */
5547           DECL_DELETED_FN (decl) = 1;
5548           DECL_DECLARED_INLINE_P (decl) = 1;
5549           DECL_INITIAL (decl) = error_mark_node;
5550           init = NULL_TREE;
5551         }
5552       else if (init == ridpointers[(int)RID_DEFAULT])
5553         {
5554           if (!defaultable_fn_p (decl))
5555             {
5556               error ("%qD cannot be defaulted", decl);
5557               DECL_INITIAL (decl) = NULL_TREE;
5558             }
5559           else
5560             DECL_DEFAULTED_FN (decl) = 1;
5561         }
5562     }
5563     
5564   if (processing_template_decl)
5565     {
5566       bool type_dependent_p;
5567
5568       /* Add this declaration to the statement-tree.  */
5569       if (at_function_scope_p ())
5570         add_decl_expr (decl);
5571
5572       type_dependent_p = dependent_type_p (type);
5573
5574       if (check_for_bare_parameter_packs (init))
5575         {
5576           init = NULL_TREE;
5577           DECL_INITIAL (decl) = NULL_TREE;
5578         }
5579
5580       if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
5581         {
5582           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5583           if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5584             TREE_CONSTANT (decl) = 1;
5585         }
5586
5587       /* Generally, initializers in templates are expanded when the
5588          template is instantiated.  But, if DECL is an integral
5589          constant static data member, then it can be used in future
5590          integral constant expressions, and its value must be
5591          available. */
5592       if (!(init
5593             && DECL_CLASS_SCOPE_P (decl)
5594             && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5595             && !type_dependent_p
5596             && !value_dependent_init_p (init)))
5597         {
5598           if (init)
5599             DECL_INITIAL (decl) = init;
5600           if (TREE_CODE (decl) == VAR_DECL
5601               && !DECL_PRETTY_FUNCTION_P (decl)
5602               && !type_dependent_p)
5603             maybe_deduce_size_from_array_init (decl, init);
5604           goto finish_end;
5605         }
5606
5607       if (TREE_CODE (init) == TREE_LIST)
5608         {
5609           /* If the parenthesized-initializer form was used (e.g.,
5610              "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5611              arguments.  (There is generally only one.)  We convert them
5612              individually.  */
5613           tree list = init;
5614           for (; list; list = TREE_CHAIN (list))
5615             {
5616               tree elt = TREE_VALUE (list);
5617               TREE_VALUE (list) = fold_non_dependent_expr (elt);
5618             }
5619         }
5620       else
5621         init = fold_non_dependent_expr (init);
5622       processing_template_decl = 0;
5623     }
5624
5625   /* Take care of TYPE_DECLs up front.  */
5626   if (TREE_CODE (decl) == TYPE_DECL)
5627     {
5628       if (type != error_mark_node
5629           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
5630         {
5631           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5632             warning (0, "shadowing previous type declaration of %q#D", decl);
5633           set_identifier_type_value (DECL_NAME (decl), decl);
5634         }
5635
5636       /* If we have installed this as the canonical typedef for this
5637          type, and that type has not been defined yet, delay emitting
5638          the debug information for it, as we will emit it later.  */
5639       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5640           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5641         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5642
5643       rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5644                                 at_eof);
5645       goto finish_end;
5646     }
5647
5648   /* A reference will be modified here, as it is initialized.  */
5649   if (! DECL_EXTERNAL (decl)
5650       && TREE_READONLY (decl)
5651       && TREE_CODE (type) == REFERENCE_TYPE)
5652     {
5653       was_readonly = 1;
5654       TREE_READONLY (decl) = 0;
5655     }
5656
5657   if (TREE_CODE (decl) == VAR_DECL)
5658     {
5659       /* Only PODs can have thread-local storage.  Other types may require
5660          various kinds of non-trivial initialization.  */
5661       if (DECL_THREAD_LOCAL_P (decl) && !pod_type_p (TREE_TYPE (decl)))
5662         error ("%qD cannot be thread-local because it has non-POD type %qT",
5663                decl, TREE_TYPE (decl));
5664       /* If this is a local variable that will need a mangled name,
5665          register it now.  We must do this before processing the
5666          initializer for the variable, since the initialization might
5667          require a guard variable, and since the mangled name of the
5668          guard variable will depend on the mangled name of this
5669          variable.  */
5670       if (DECL_FUNCTION_SCOPE_P (decl)
5671           && TREE_STATIC (decl)
5672           && !DECL_ARTIFICIAL (decl))
5673         push_local_name (decl);
5674       /* Convert the initializer to the type of DECL, if we have not
5675          already initialized DECL.  */
5676       if (!DECL_INITIALIZED_P (decl)
5677           /* If !DECL_EXTERNAL then DECL is being defined.  In the
5678              case of a static data member initialized inside the
5679              class-specifier, there can be an initializer even if DECL
5680              is *not* defined.  */
5681           && (!DECL_EXTERNAL (decl) || init))
5682         {
5683           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5684             {
5685               tree jclass
5686                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5687               /* Allow libjava/prims.cc define primitive classes.  */
5688               if (init != NULL_TREE
5689                   || jclass == NULL_TREE
5690                   || TREE_CODE (jclass) != TYPE_DECL
5691                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
5692                   || !same_type_ignoring_top_level_qualifiers_p
5693                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
5694                 error ("Java object %qD not allocated with %<new%>", decl);
5695               init = NULL_TREE;
5696             }
5697           if (init)
5698             {
5699               DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5700               if (init_const_expr_p)
5701                 {
5702                   DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5703                   if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5704                     TREE_CONSTANT (decl) = 1;
5705                 }
5706             }
5707           init = check_initializer (decl, init, flags, &cleanup);
5708           /* Thread-local storage cannot be dynamically initialized.  */
5709           if (DECL_THREAD_LOCAL_P (decl) && init)
5710             {
5711               error ("%qD is thread-local and so cannot be dynamically "
5712                      "initialized", decl);
5713               init = NULL_TREE;
5714             }
5715
5716           /* Check that the initializer for a static data member was a
5717              constant.  Although we check in the parser that the
5718              initializer is an integral constant expression, we do not
5719              simplify division-by-zero at the point at which it
5720              occurs.  Therefore, in:
5721
5722                struct S { static const int i = 7 / 0; };
5723
5724              we issue an error at this point.  It would
5725              probably be better to forbid division by zero in
5726              integral constant expressions.  */
5727           if (DECL_EXTERNAL (decl) && init)
5728             {
5729               error ("%qD cannot be initialized by a non-constant expression"
5730                      " when being declared", decl);
5731               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5732               init = NULL_TREE;
5733             }
5734
5735           /* Handle:
5736
5737              [dcl.init]
5738
5739              The memory occupied by any object of static storage
5740              duration is zero-initialized at program startup before
5741              any other initialization takes place.
5742
5743              We cannot create an appropriate initializer until after
5744              the type of DECL is finalized.  If DECL_INITIAL is set,
5745              then the DECL is statically initialized, and any
5746              necessary zero-initialization has already been performed.  */
5747           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5748             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5749                                                    /*nelts=*/NULL_TREE,
5750                                                    /*static_storage_p=*/true);
5751           /* Remember that the initialization for this variable has
5752              taken place.  */
5753           DECL_INITIALIZED_P (decl) = 1;
5754           /* This declaration is the definition of this variable,
5755              unless we are initializing a static data member within
5756              the class specifier.  */
5757           if (!DECL_EXTERNAL (decl))
5758             var_definition_p = true;
5759         }
5760       /* If the variable has an array type, lay out the type, even if
5761          there is no initializer.  It is valid to index through the
5762          array, and we must get TYPE_ALIGN set correctly on the array
5763          type.  */
5764       else if (TREE_CODE (type) == ARRAY_TYPE)
5765         layout_type (type);
5766     }
5767   else if (TREE_CODE (decl) == FIELD_DECL
5768            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5769     error ("non-static data member %qD has Java class type", decl);
5770
5771   /* Add this declaration to the statement-tree.  This needs to happen
5772      after the call to check_initializer so that the DECL_EXPR for a
5773      reference temp is added before the DECL_EXPR for the reference itself.  */
5774   if (at_function_scope_p ())
5775     add_decl_expr (decl);
5776
5777   /* Let the middle end know about variables and functions -- but not
5778      static data members in uninstantiated class templates.  */
5779   if (!saved_processing_template_decl
5780       && (TREE_CODE (decl) == VAR_DECL 
5781           || TREE_CODE (decl) == FUNCTION_DECL))
5782     {
5783       if (TREE_CODE (decl) == VAR_DECL)
5784         {
5785           layout_var_decl (decl);
5786           maybe_commonize_var (decl);
5787         }
5788
5789       /* This needs to happen after the linkage is set. */
5790       determine_visibility (decl);
5791
5792       if (var_definition_p && TREE_STATIC (decl))
5793         {
5794           /* If a TREE_READONLY variable needs initialization
5795              at runtime, it is no longer readonly and we need to
5796              avoid MEM_READONLY_P being set on RTL created for it.  */
5797           if (init)
5798             {
5799               if (TREE_READONLY (decl))
5800                 TREE_READONLY (decl) = 0;
5801               was_readonly = 0;
5802             }
5803           else if (was_readonly)
5804             TREE_READONLY (decl) = 1;
5805         }
5806
5807       make_rtl_for_nonlocal_decl (decl, init, asmspec);
5808
5809       /* Check for abstractness of the type. Notice that there is no
5810          need to strip array types here since the check for those types
5811          is already done within create_array_type_for_decl.  */
5812       if (TREE_CODE (type) == FUNCTION_TYPE
5813           || TREE_CODE (type) == METHOD_TYPE)
5814         abstract_virtuals_error (decl, TREE_TYPE (type));
5815       else
5816         abstract_virtuals_error (decl, type);
5817
5818       if (TREE_TYPE (decl) == error_mark_node)
5819         /* No initialization required.  */
5820         ;
5821       else if (TREE_CODE (decl) == FUNCTION_DECL)
5822         {
5823           if (init)
5824             {
5825               if (init == ridpointers[(int)RID_DEFAULT])
5826                 {
5827                   /* An out-of-class default definition is defined at
5828                      the point where it is explicitly defaulted.  */
5829                   if (DECL_INITIAL (decl) == error_mark_node)
5830                     synthesize_method (decl);
5831                 }
5832               else
5833                 error ("function %q#D is initialized like a variable", decl);
5834             }
5835           /* else no initialization required.  */
5836         }
5837       else if (DECL_EXTERNAL (decl)
5838                && ! (DECL_LANG_SPECIFIC (decl)
5839                      && DECL_NOT_REALLY_EXTERN (decl)))
5840         {
5841           if (init)
5842             DECL_INITIAL (decl) = init;
5843         }
5844       /* A variable definition.  */
5845       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5846         /* Initialize the local variable.  */
5847         initialize_local_var (decl, init);
5848
5849       /* If a variable is defined, and then a subsequent
5850          definition with external linkage is encountered, we will
5851          get here twice for the same variable.  We want to avoid
5852          calling expand_static_init more than once.  For variables
5853          that are not static data members, we can call
5854          expand_static_init only when we actually process the
5855          initializer.  It is not legal to redeclare a static data
5856          member, so this issue does not arise in that case.  */
5857       else if (var_definition_p && TREE_STATIC (decl))
5858         expand_static_init (decl, init);
5859     }
5860
5861   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5862      reference, insert it in the statement-tree now.  */
5863   if (cleanup)
5864     push_cleanup (decl, cleanup, false);
5865
5866  finish_end:
5867   processing_template_decl = saved_processing_template_decl;
5868
5869   if (was_readonly)
5870     TREE_READONLY (decl) = 1;
5871
5872   /* If this was marked 'used', be sure it will be output.  */
5873   if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5874     mark_decl_referenced (decl);
5875 }
5876
5877 /* This is here for a midend callback from c-common.c.  */
5878
5879 void
5880 finish_decl (tree decl, tree init, tree origtype ATTRIBUTE_UNUSED,
5881              tree asmspec_tree)
5882 {
5883   cp_finish_decl (decl, init, /*init_const_expr_p=*/false, asmspec_tree, 0);
5884 }
5885
5886 /* Returns a declaration for a VAR_DECL as if:
5887
5888      extern "C" TYPE NAME;
5889
5890    had been seen.  Used to create compiler-generated global
5891    variables.  */
5892
5893 static tree
5894 declare_global_var (tree name, tree type)
5895 {
5896   tree decl;
5897
5898   push_to_top_level ();
5899   decl = build_decl (VAR_DECL, name, type);
5900   TREE_PUBLIC (decl) = 1;
5901   DECL_EXTERNAL (decl) = 1;
5902   DECL_ARTIFICIAL (decl) = 1;
5903   /* If the user has explicitly declared this variable (perhaps
5904      because the code we are compiling is part of a low-level runtime
5905      library), then it is possible that our declaration will be merged
5906      with theirs by pushdecl.  */
5907   decl = pushdecl (decl);
5908   finish_decl (decl, NULL_TREE, NULL_TREE, NULL_TREE);
5909   pop_from_top_level ();
5910
5911   return decl;
5912 }
5913
5914 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
5915    if "__cxa_atexit" is not being used) corresponding to the function
5916    to be called when the program exits.  */
5917
5918 static tree
5919 get_atexit_fn_ptr_type (void)
5920 {
5921   tree arg_types;
5922   tree fn_type;
5923
5924   if (!atexit_fn_ptr_type_node)
5925     {
5926       if (flag_use_cxa_atexit 
5927           && !targetm.cxx.use_atexit_for_cxa_atexit ())
5928         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
5929         arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5930       else
5931         /* The parameter to "atexit" is "void (*)(void)".  */
5932         arg_types = void_list_node;
5933       
5934       fn_type = build_function_type (void_type_node, arg_types);
5935       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
5936     }
5937
5938   return atexit_fn_ptr_type_node;
5939 }
5940
5941 /* Returns a pointer to the `atexit' function.  Note that if
5942    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
5943    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
5944
5945 static tree
5946 get_atexit_node (void)
5947 {
5948   tree atexit_fndecl;
5949   tree arg_types;
5950   tree fn_type;
5951   tree fn_ptr_type;
5952   const char *name;
5953   bool use_aeabi_atexit;
5954
5955   if (atexit_node)
5956     return atexit_node;
5957
5958   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
5959     {
5960       /* The declaration for `__cxa_atexit' is:
5961
5962            int __cxa_atexit (void (*)(void *), void *, void *)
5963
5964          We build up the argument types and then then function type
5965          itself.  */
5966
5967       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
5968       /* First, build the pointer-to-function type for the first
5969          argument.  */
5970       fn_ptr_type = get_atexit_fn_ptr_type ();
5971       /* Then, build the rest of the argument types.  */
5972       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
5973       if (use_aeabi_atexit)
5974         {
5975           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5976           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5977         }
5978       else
5979         {
5980           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
5981           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
5982         }
5983       /* And the final __cxa_atexit type.  */
5984       fn_type = build_function_type (integer_type_node, arg_types);
5985       fn_ptr_type = build_pointer_type (fn_type);
5986       if (use_aeabi_atexit)
5987         name = "__aeabi_atexit";
5988       else
5989         name = "__cxa_atexit";
5990     }
5991   else
5992     {
5993       /* The declaration for `atexit' is:
5994
5995            int atexit (void (*)());
5996
5997          We build up the argument types and then then function type
5998          itself.  */
5999       fn_ptr_type = get_atexit_fn_ptr_type ();
6000       arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6001       /* Build the final atexit type.  */
6002       fn_type = build_function_type (integer_type_node, arg_types);
6003       name = "atexit";
6004     }
6005
6006   /* Now, build the function declaration.  */
6007   push_lang_context (lang_name_c);
6008   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6009   mark_used (atexit_fndecl);
6010   pop_lang_context ();
6011   atexit_node = decay_conversion (atexit_fndecl);
6012
6013   return atexit_node;
6014 }
6015
6016 /* Returns the __dso_handle VAR_DECL.  */
6017
6018 static tree
6019 get_dso_handle_node (void)
6020 {
6021   if (dso_handle_node)
6022     return dso_handle_node;
6023
6024   /* Declare the variable.  */
6025   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6026                                         ptr_type_node);
6027
6028   return dso_handle_node;
6029 }
6030
6031 /* Begin a new function with internal linkage whose job will be simply
6032    to destroy some particular variable.  */
6033
6034 static GTY(()) int start_cleanup_cnt;
6035
6036 static tree
6037 start_cleanup_fn (void)
6038 {
6039   char name[32];
6040   tree fntype;
6041   tree fndecl;
6042   bool use_cxa_atexit = flag_use_cxa_atexit
6043                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6044
6045   push_to_top_level ();
6046
6047   /* No need to mangle this.  */
6048   push_lang_context (lang_name_c);
6049
6050   /* Build the name of the function.  */
6051   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6052   /* Build the function declaration.  */
6053   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6054   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6055   /* It's a function with internal linkage, generated by the
6056      compiler.  */
6057   TREE_PUBLIC (fndecl) = 0;
6058   DECL_ARTIFICIAL (fndecl) = 1;
6059   /* Make the function `inline' so that it is only emitted if it is
6060      actually needed.  It is unlikely that it will be inlined, since
6061      it is only called via a function pointer, but we avoid unnecessary
6062      emissions this way.  */
6063   DECL_DECLARED_INLINE_P (fndecl) = 1;
6064   DECL_INTERFACE_KNOWN (fndecl) = 1;
6065   /* Build the parameter.  */
6066   if (use_cxa_atexit)
6067     {
6068       tree parmdecl;
6069
6070       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6071       DECL_CONTEXT (parmdecl) = fndecl;
6072       TREE_USED (parmdecl) = 1;
6073       DECL_ARGUMENTS (fndecl) = parmdecl;
6074     }
6075
6076   pushdecl (fndecl);
6077   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6078
6079   pop_lang_context ();
6080
6081   return current_function_decl;
6082 }
6083
6084 /* Finish the cleanup function begun by start_cleanup_fn.  */
6085
6086 static void
6087 end_cleanup_fn (void)
6088 {
6089   expand_or_defer_fn (finish_function (0));
6090
6091   pop_from_top_level ();
6092 }
6093
6094 /* Generate code to handle the destruction of DECL, an object with
6095    static storage duration.  */
6096
6097 tree
6098 register_dtor_fn (tree decl)
6099 {
6100   tree cleanup;
6101   tree compound_stmt;
6102   tree args;
6103   tree fcall;
6104   tree type;
6105   bool use_dtor;
6106
6107   type = TREE_TYPE (decl);
6108   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6109     return void_zero_node;
6110
6111   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6112      a class object, we can just pass the destructor to
6113      "__cxa_atexit"; we don't have to build a temporary function to do
6114      the cleanup.  */
6115   use_dtor = (flag_use_cxa_atexit 
6116               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6117               && CLASS_TYPE_P (type));
6118   if (use_dtor)
6119     {
6120       int idx;
6121
6122       /* Find the destructor.  */
6123       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6124       gcc_assert (idx >= 0);
6125       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6126       /* Make sure it is accessible.  */
6127       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6128     }
6129   else
6130     {
6131       /* Call build_cleanup before we enter the anonymous function so
6132          that any access checks will be done relative to the current
6133          scope, rather than the scope of the anonymous function.  */
6134       build_cleanup (decl);
6135   
6136       /* Now start the function.  */
6137       cleanup = start_cleanup_fn ();
6138       
6139       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6140          to the original function, rather than the anonymous one.  That
6141          will make the back end think that nested functions are in use,
6142          which causes confusion.  */
6143       push_deferring_access_checks (dk_no_check);
6144       fcall = build_cleanup (decl);
6145       pop_deferring_access_checks ();
6146       
6147       /* Create the body of the anonymous function.  */
6148       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6149       finish_expr_stmt (fcall);
6150       finish_compound_stmt (compound_stmt);
6151       end_cleanup_fn ();
6152     }
6153
6154   /* Call atexit with the cleanup function.  */
6155   mark_used (cleanup);
6156   cleanup = build_address (cleanup);
6157   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6158     {
6159       tree addr;
6160
6161       if (use_dtor)
6162         {
6163           /* We must convert CLEANUP to the type that "__cxa_atexit"
6164              expects.  */
6165           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6166           /* "__cxa_atexit" will pass the address of DECL to the
6167              cleanup function.  */
6168           mark_used (decl);
6169           addr = build_address (decl);
6170           /* The declared type of the parameter to "__cxa_atexit" is
6171              "void *".  For plain "T*", we could just let the
6172              machinery in cp_build_function_call convert it -- but if the
6173              type is "cv-qualified T *", then we need to convert it
6174              before passing it in, to avoid spurious errors.  */
6175           addr = build_nop (ptr_type_node, addr);
6176         }
6177       else
6178         /* Since the cleanup functions we build ignore the address
6179            they're given, there's no reason to pass the actual address
6180            in, and, in general, it's cheaper to pass NULL than any
6181            other value.  */
6182         addr = null_pointer_node;
6183       args = tree_cons (NULL_TREE,
6184                         cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6185                                         tf_warning_or_error),
6186                         NULL_TREE);
6187       if (targetm.cxx.use_aeabi_atexit ())
6188         {
6189           args = tree_cons (NULL_TREE, cleanup, args);
6190           args = tree_cons (NULL_TREE, addr, args);
6191         }
6192       else
6193         {
6194           args = tree_cons (NULL_TREE, addr, args);
6195           args = tree_cons (NULL_TREE, cleanup, args);
6196         }
6197     }
6198   else
6199     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
6200   return cp_build_function_call (get_atexit_node (), args, 
6201                                  tf_warning_or_error);
6202 }
6203
6204 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6205    is its initializer.  Generate code to handle the construction
6206    and destruction of DECL.  */
6207
6208 static void
6209 expand_static_init (tree decl, tree init)
6210 {
6211   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6212   gcc_assert (TREE_STATIC (decl));
6213
6214   /* Some variables require no initialization.  */
6215   if (!init
6216       && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6217       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6218     return;
6219
6220   if (DECL_FUNCTION_SCOPE_P (decl))
6221     {
6222       /* Emit code to perform this initialization but once.  */
6223       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6224       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6225       tree guard, guard_addr;
6226       tree acquire_fn, release_fn, abort_fn;
6227       tree flag, begin;
6228
6229       /* Emit code to perform this initialization but once.  This code
6230          looks like:
6231
6232            static <type> guard;
6233            if (!guard.first_byte) {
6234              if (__cxa_guard_acquire (&guard)) {
6235                bool flag = false;
6236                try {
6237                  // Do initialization.
6238                  flag = true; __cxa_guard_release (&guard);
6239                  // Register variable for destruction at end of program.
6240                } catch {
6241                  if (!flag) __cxa_guard_abort (&guard);
6242                }
6243            }
6244
6245          Note that the `flag' variable is only set to 1 *after* the
6246          initialization is complete.  This ensures that an exception,
6247          thrown during the construction, will cause the variable to
6248          reinitialized when we pass through this code again, as per:
6249
6250            [stmt.dcl]
6251
6252            If the initialization exits by throwing an exception, the
6253            initialization is not complete, so it will be tried again
6254            the next time control enters the declaration.
6255
6256          This process should be thread-safe, too; multiple threads
6257          should not be able to initialize the variable more than
6258          once.  */
6259
6260       /* Create the guard variable.  */
6261       guard = get_guard (decl);
6262
6263       /* This optimization isn't safe on targets with relaxed memory
6264          consistency.  On such targets we force synchronization in
6265          __cxa_guard_acquire.  */
6266       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6267         {
6268           /* Begin the conditional initialization.  */
6269           if_stmt = begin_if_stmt ();
6270           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6271           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6272         }
6273
6274       if (flag_threadsafe_statics)
6275         {
6276           guard_addr = build_address (guard);
6277
6278           acquire_fn = get_identifier ("__cxa_guard_acquire");
6279           release_fn = get_identifier ("__cxa_guard_release");
6280           abort_fn = get_identifier ("__cxa_guard_abort");
6281           if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6282             {
6283               tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6284                                          void_list_node);
6285               tree vfntype = build_function_type (void_type_node, argtypes);
6286               acquire_fn = push_library_fn
6287                 (acquire_fn, build_function_type (integer_type_node, argtypes),
6288                  NULL_TREE);
6289               release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6290               abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6291             }
6292           else
6293             {
6294               release_fn = identifier_global_value (release_fn);
6295               abort_fn = identifier_global_value (abort_fn);
6296             }
6297
6298           inner_if_stmt = begin_if_stmt ();
6299           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6300                                inner_if_stmt);
6301
6302           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6303           begin = get_target_expr (boolean_false_node);
6304           flag = TARGET_EXPR_SLOT (begin);
6305
6306           TARGET_EXPR_CLEANUP (begin)
6307             = build3 (COND_EXPR, void_type_node, flag,
6308                       void_zero_node,
6309                       build_call_n (abort_fn, 1, guard_addr));
6310           CLEANUP_EH_ONLY (begin) = 1;
6311
6312           /* Do the initialization itself.  */
6313           init = add_stmt_to_compound (begin, init);
6314           init = add_stmt_to_compound
6315             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6316           init = add_stmt_to_compound
6317             (init, build_call_n (release_fn, 1, guard_addr));
6318         }
6319       else
6320         init = add_stmt_to_compound (init, set_guard (guard));
6321
6322       /* Use atexit to register a function for destroying this static
6323          variable.  */
6324       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6325
6326       finish_expr_stmt (init);
6327
6328       if (flag_threadsafe_statics)
6329         {
6330           finish_compound_stmt (inner_then_clause);
6331           finish_then_clause (inner_if_stmt);
6332           finish_if_stmt (inner_if_stmt);
6333         }
6334
6335       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6336         {
6337           finish_compound_stmt (then_clause);
6338           finish_then_clause (if_stmt);
6339           finish_if_stmt (if_stmt);
6340         }
6341     }
6342   else
6343     static_aggregates = tree_cons (init, decl, static_aggregates);
6344 }
6345
6346 \f
6347 /* Make TYPE a complete type based on INITIAL_VALUE.
6348    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6349    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6350    3 if the initializer list is empty (in pedantic mode). */
6351
6352 int
6353 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6354 {
6355   int failure;
6356   tree type, elt_type;
6357
6358   if (initial_value)
6359     {
6360       unsigned HOST_WIDE_INT i;
6361       tree value;
6362
6363       /* An array of character type can be initialized from a
6364          brace-enclosed string constant.
6365
6366          FIXME: this code is duplicated from reshape_init. Probably
6367          we should just call reshape_init here?  */
6368       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6369           && TREE_CODE (initial_value) == CONSTRUCTOR
6370           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6371         {
6372           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6373           tree value = VEC_index (constructor_elt, v, 0)->value;
6374
6375           if (TREE_CODE (value) == STRING_CST
6376               && VEC_length (constructor_elt, v) == 1)
6377             initial_value = value;
6378         }
6379
6380       /* If any of the elements are parameter packs, we can't actually
6381          complete this type now because the array size is dependent.  */
6382       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6383         {
6384           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6385                                       i, value)
6386             {
6387               if (PACK_EXPANSION_P (value))
6388                 return 0;
6389             }
6390         }
6391     }
6392
6393   failure = complete_array_type (ptype, initial_value, do_default);
6394
6395   /* We can create the array before the element type is complete, which
6396      means that we didn't have these two bits set in the original type
6397      either.  In completing the type, we are expected to propagate these
6398      bits.  See also complete_type which does the same thing for arrays
6399      of fixed size.  */
6400   type = *ptype;
6401   if (TYPE_DOMAIN (type))
6402     {
6403       elt_type = TREE_TYPE (type);
6404       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6405       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6406         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6407     }
6408
6409   return failure;
6410 }
6411 \f
6412 /* Return zero if something is declared to be a member of type
6413    CTYPE when in the context of CUR_TYPE.  STRING is the error
6414    message to print in that case.  Otherwise, quietly return 1.  */
6415
6416 static int
6417 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6418 {
6419   if (ctype && ctype != cur_type)
6420     {
6421       if (flags == DTOR_FLAG)
6422         error ("destructor for alien class %qT cannot be a member", ctype);
6423       else
6424         error ("constructor for alien class %qT cannot be a member", ctype);
6425       return 0;
6426     }
6427   return 1;
6428 }
6429 \f
6430 /* Subroutine of `grokdeclarator'.  */
6431
6432 /* Generate errors possibly applicable for a given set of specifiers.
6433    This is for ARM $7.1.2.  */
6434
6435 static void
6436 bad_specifiers (tree object,
6437                 const char* type,
6438                 int virtualp,
6439                 int quals,
6440                 int inlinep,
6441                 int friendp,
6442                 int raises)
6443 {
6444   if (virtualp)
6445     error ("%qD declared as a %<virtual%> %s", object, type);
6446   if (inlinep)
6447     error ("%qD declared as an %<inline%> %s", object, type);
6448   if (quals)
6449     error ("%<const%> and %<volatile%> function specifiers on "
6450            "%qD invalid in %s declaration",
6451            object, type);
6452   if (friendp)
6453     error ("%q+D declared as a friend", object);
6454   if (raises
6455       && (TREE_CODE (object) == TYPE_DECL
6456           || (!TYPE_PTRFN_P (TREE_TYPE (object))
6457               && !TYPE_REFFN_P (TREE_TYPE (object))
6458               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6459     error ("%q+D declared with an exception specification", object);
6460 }
6461
6462 /* DECL is a member function or static data member and is presently
6463    being defined.  Check that the definition is taking place in a
6464    valid namespace.  */
6465
6466 static void
6467 check_class_member_definition_namespace (tree decl)
6468 {
6469   /* These checks only apply to member functions and static data
6470      members.  */
6471   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6472               || TREE_CODE (decl) == VAR_DECL);
6473   /* We check for problems with specializations in pt.c in
6474      check_specialization_namespace, where we can issue better
6475      diagnostics.  */
6476   if (processing_specialization)
6477     return;
6478   /* There are no restrictions on the placement of
6479      explicit instantiations.  */
6480   if (processing_explicit_instantiation)
6481     return;
6482   /* [class.mfct]
6483
6484      A member function definition that appears outside of the
6485      class definition shall appear in a namespace scope enclosing
6486      the class definition.
6487
6488      [class.static.data]
6489
6490      The definition for a static data member shall appear in a
6491      namespace scope enclosing the member's class definition.  */
6492   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6493     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6494                decl, DECL_CONTEXT (decl));
6495 }
6496
6497 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
6498    METHOD_TYPE for a non-static member function; QUALS are the
6499    cv-qualifiers that apply to the function.  */
6500
6501 tree
6502 build_this_parm (tree type, cp_cv_quals quals)
6503 {
6504   tree this_type;
6505   tree qual_type;
6506   tree parm;
6507   cp_cv_quals this_quals;
6508
6509   this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6510   /* The `this' parameter is implicitly `const'; it cannot be
6511      assigned to.  */
6512   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6513   qual_type = cp_build_qualified_type (this_type, this_quals);
6514   parm = build_artificial_parm (this_identifier, qual_type);
6515   cp_apply_type_quals_to_decl (this_quals, parm);
6516   return parm;
6517 }
6518
6519 /* CTYPE is class type, or null if non-class.
6520    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6521    or METHOD_TYPE.
6522    DECLARATOR is the function's name.
6523    PARMS is a chain of PARM_DECLs for the function.
6524    VIRTUALP is truthvalue of whether the function is virtual or not.
6525    FLAGS are to be passed through to `grokclassfn'.
6526    QUALS are qualifiers indicating whether the function is `const'
6527    or `volatile'.
6528    RAISES is a list of exceptions that this function can raise.
6529    CHECK is 1 if we must find this method in CTYPE, 0 if we should
6530    not look, and -1 if we should not call `grokclassfn' at all.
6531
6532    SFK is the kind of special function (if any) for the new function.
6533
6534    Returns `NULL_TREE' if something goes wrong, after issuing
6535    applicable error messages.  */
6536
6537 static tree
6538 grokfndecl (tree ctype,
6539             tree type,
6540             tree declarator,
6541             tree parms,
6542             tree orig_declarator,
6543             int virtualp,
6544             enum overload_flags flags,
6545             cp_cv_quals quals,
6546             tree raises,
6547             int check,
6548             int friendp,
6549             int publicp,
6550             int inlinep,
6551             special_function_kind sfk,
6552             bool funcdef_flag,
6553             int template_count,
6554             tree in_namespace,
6555             tree* attrlist,
6556             location_t location)
6557 {
6558   tree decl;
6559   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
6560   tree t;
6561
6562   if (raises)
6563     type = build_exception_variant (type, raises);
6564
6565   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
6566
6567   /* If we have an explicit location, use it, otherwise use whatever
6568      build_lang_decl used (probably input_location).  */
6569   if (location != UNKNOWN_LOCATION)
6570     DECL_SOURCE_LOCATION (decl) = location;
6571
6572   if (TREE_CODE (type) == METHOD_TYPE)
6573     {
6574       tree parm;
6575       parm = build_this_parm (type, quals);
6576       TREE_CHAIN (parm) = parms;
6577       parms = parm;
6578     }
6579   DECL_ARGUMENTS (decl) = parms;
6580   for (t = parms; t; t = TREE_CHAIN (t))
6581     DECL_CONTEXT (t) = decl;
6582   /* Propagate volatile out from type to decl.  */
6583   if (TYPE_VOLATILE (type))
6584     TREE_THIS_VOLATILE (decl) = 1;
6585
6586   /* Setup decl according to sfk.  */
6587   switch (sfk)
6588     {
6589     case sfk_constructor:
6590     case sfk_copy_constructor:
6591       DECL_CONSTRUCTOR_P (decl) = 1;
6592       break;
6593     case sfk_destructor:
6594       DECL_DESTRUCTOR_P (decl) = 1;
6595       break;
6596     default:
6597       break;
6598     }
6599
6600   /* If pointers to member functions use the least significant bit to
6601      indicate whether a function is virtual, ensure a pointer
6602      to this function will have that bit clear.  */
6603   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6604       && TREE_CODE (type) == METHOD_TYPE
6605       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6606     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6607
6608   if (friendp
6609       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6610     {
6611       if (funcdef_flag)
6612         error
6613           ("defining explicit specialization %qD in friend declaration",
6614            orig_declarator);
6615       else
6616         {
6617           tree fns = TREE_OPERAND (orig_declarator, 0);
6618           tree args = TREE_OPERAND (orig_declarator, 1);
6619
6620           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6621             {
6622               /* Something like `template <class T> friend void f<T>()'.  */
6623               error ("invalid use of template-id %qD in declaration "
6624                      "of primary template",
6625                      orig_declarator);
6626               return NULL_TREE;
6627             }
6628
6629
6630           /* A friend declaration of the form friend void f<>().  Record
6631              the information in the TEMPLATE_ID_EXPR.  */
6632           SET_DECL_IMPLICIT_INSTANTIATION (decl);
6633
6634           if (TREE_CODE (fns) == COMPONENT_REF)
6635             {
6636               /* Due to bison parser ickiness, we will have already looked
6637                  up an operator_name or PFUNCNAME within the current class
6638                  (see template_id in parse.y). If the current class contains
6639                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
6640
6641               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6642                           == current_class_type);
6643               fns = TREE_OPERAND (fns, 1);
6644             }
6645           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6646                       || TREE_CODE (fns) == OVERLOAD);
6647           DECL_TEMPLATE_INFO (decl) = tree_cons (fns, args, NULL_TREE);
6648
6649           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6650             if (TREE_PURPOSE (t)
6651                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6652             {
6653               error ("default arguments are not allowed in declaration "
6654                      "of friend template specialization %qD",
6655                      decl);
6656               return NULL_TREE;
6657             }
6658
6659           if (inlinep)
6660             {
6661               error ("%<inline%> is not allowed in declaration of friend "
6662                      "template specialization %qD",
6663                      decl);
6664               return NULL_TREE;
6665             }
6666         }
6667     }
6668
6669   /* If this decl has namespace scope, set that up.  */
6670   if (in_namespace)
6671     set_decl_namespace (decl, in_namespace, friendp);
6672   else if (!ctype)
6673     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
6674
6675   /* `main' and builtins have implicit 'C' linkage.  */
6676   if ((MAIN_NAME_P (declarator)
6677        || (IDENTIFIER_LENGTH (declarator) > 10
6678            && IDENTIFIER_POINTER (declarator)[0] == '_'
6679            && IDENTIFIER_POINTER (declarator)[1] == '_'
6680            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6681       && current_lang_name == lang_name_cplusplus
6682       && ctype == NULL_TREE
6683       /* NULL_TREE means global namespace.  */
6684       && DECL_CONTEXT (decl) == NULL_TREE)
6685     SET_DECL_LANGUAGE (decl, lang_c);
6686
6687   /* Should probably propagate const out from type to decl I bet (mrs).  */
6688   if (staticp)
6689     {
6690       DECL_STATIC_FUNCTION_P (decl) = 1;
6691       DECL_CONTEXT (decl) = ctype;
6692     }
6693
6694   if (ctype)
6695     {
6696       DECL_CONTEXT (decl) = ctype;
6697       if (funcdef_flag)
6698         check_class_member_definition_namespace (decl);
6699     }
6700
6701   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6702     {
6703       if (processing_template_decl)
6704         error ("cannot declare %<::main%> to be a template");
6705       if (inlinep)
6706         error ("cannot declare %<::main%> to be inline");
6707       if (!publicp)
6708         error ("cannot declare %<::main%> to be static");
6709       inlinep = 0;
6710       publicp = 1;
6711     }
6712
6713   /* Members of anonymous types and local classes have no linkage; make
6714      them internal.  If a typedef is made later, this will be changed.  */
6715   if (ctype && (TYPE_ANONYMOUS_P (ctype)
6716                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6717     publicp = 0;
6718
6719   if (publicp)
6720     {
6721       /* [basic.link]: A name with no linkage (notably, the name of a class
6722          or enumeration declared in a local scope) shall not be used to
6723          declare an entity with linkage.
6724
6725          Only check this for public decls for now.  See core 319, 389.  */
6726       t = no_linkage_check (TREE_TYPE (decl),
6727                             /*relaxed_p=*/false);
6728       if (t)
6729         {
6730           if (TYPE_ANONYMOUS_P (t))
6731             {
6732               if (DECL_EXTERN_C_P (decl))
6733                 /* Allow this; it's pretty common in C.  */;
6734               else
6735                 {
6736                   permerror (input_location, "non-local function %q#D uses anonymous type",
6737                               decl);
6738                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6739                     permerror (input_location, "%q+#D does not refer to the unqualified "
6740                                "type, so it is not used for linkage",
6741                                TYPE_NAME (t));
6742                 }
6743             }
6744           else
6745             permerror (input_location, "non-local function %q#D uses local type %qT", decl, t);
6746         }
6747     }
6748
6749   TREE_PUBLIC (decl) = publicp;
6750   if (! publicp)
6751     {
6752       DECL_INTERFACE_KNOWN (decl) = 1;
6753       DECL_NOT_REALLY_EXTERN (decl) = 1;
6754     }
6755
6756   /* If the declaration was declared inline, mark it as such.  */
6757   if (inlinep)
6758     DECL_DECLARED_INLINE_P (decl) = 1;
6759
6760   DECL_EXTERNAL (decl) = 1;
6761   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6762     {
6763       error (ctype
6764              ? G_("static member function %qD cannot have cv-qualifier")
6765              : G_("non-member function %qD cannot have cv-qualifier"),
6766              decl);
6767       quals = TYPE_UNQUALIFIED;
6768     }
6769
6770   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6771       && !grok_op_properties (decl, /*complain=*/true))
6772     return NULL_TREE;
6773
6774   if (ctype && decl_function_context (decl))
6775     DECL_NO_STATIC_CHAIN (decl) = 1;
6776
6777   if (funcdef_flag)
6778     /* Make the init_value nonzero so pushdecl knows this is not
6779        tentative.  error_mark_node is replaced later with the BLOCK.  */
6780     DECL_INITIAL (decl) = error_mark_node;
6781
6782   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6783     TREE_NOTHROW (decl) = 1;
6784
6785   /* Caller will do the rest of this.  */
6786   if (check < 0)
6787     return decl;
6788
6789   if (ctype != NULL_TREE)
6790     grokclassfn (ctype, decl, flags);
6791
6792   decl = check_explicit_specialization (orig_declarator, decl,
6793                                         template_count,
6794                                         2 * funcdef_flag +
6795                                         4 * (friendp != 0));
6796   if (decl == error_mark_node)
6797     return NULL_TREE;
6798
6799   if (attrlist)
6800     {
6801       cplus_decl_attributes (&decl, *attrlist, 0);
6802       *attrlist = NULL_TREE;
6803     }
6804
6805   /* Check main's type after attributes have been applied.  */
6806   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6807     {
6808       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6809                         integer_type_node))
6810         {
6811           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6812           tree newtype;
6813           error ("%<::main%> must return %<int%>");
6814           newtype = build_function_type (integer_type_node, oldtypeargs);
6815           TREE_TYPE (decl) = newtype;
6816         }
6817       if (warn_main)
6818         check_main_parameter_types (decl);
6819     }
6820
6821   if (ctype != NULL_TREE
6822       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6823       && check)
6824     {
6825       tree old_decl = check_classfn (ctype, decl,
6826                                      (processing_template_decl
6827                                       > template_class_depth (ctype))
6828                                      ? current_template_parms
6829                                      : NULL_TREE);
6830
6831       if (old_decl == error_mark_node)
6832         return NULL_TREE;
6833
6834       if (old_decl)
6835         {
6836           tree ok;
6837           tree pushed_scope;
6838
6839           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6840             /* Because grokfndecl is always supposed to return a
6841                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6842                here.  We depend on our callers to figure out that its
6843                really a template that's being returned.  */
6844             old_decl = DECL_TEMPLATE_RESULT (old_decl);
6845
6846           if (DECL_STATIC_FUNCTION_P (old_decl)
6847               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6848             /* Remove the `this' parm added by grokclassfn.
6849                XXX Isn't this done in start_function, too?  */
6850             revert_static_member_fn (decl);
6851           if (DECL_ARTIFICIAL (old_decl))
6852             {
6853               error ("definition of implicitly-declared %qD", old_decl);
6854               return NULL_TREE;
6855             }
6856
6857           /* Since we've smashed OLD_DECL to its
6858              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
6859           if (TREE_CODE (decl) == TEMPLATE_DECL)
6860             decl = DECL_TEMPLATE_RESULT (decl);
6861
6862           /* Attempt to merge the declarations.  This can fail, in
6863              the case of some invalid specialization declarations.  */
6864           pushed_scope = push_scope (ctype);
6865           ok = duplicate_decls (decl, old_decl, friendp);
6866           if (pushed_scope)
6867             pop_scope (pushed_scope);
6868           if (!ok)
6869             {
6870               error ("no %q#D member function declared in class %qT",
6871                      decl, ctype);
6872               return NULL_TREE;
6873             }
6874           return old_decl;
6875         }
6876     }
6877
6878   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6879     return NULL_TREE;
6880
6881   if (ctype == NULL_TREE || check)
6882     return decl;
6883
6884   if (virtualp)
6885     DECL_VIRTUAL_P (decl) = 1;
6886
6887   return decl;
6888 }
6889
6890 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
6891    the linkage that DECL will receive in the object file.  */
6892
6893 static void
6894 set_linkage_for_static_data_member (tree decl)
6895 {
6896   /* A static data member always has static storage duration and
6897      external linkage.  Note that static data members are forbidden in
6898      local classes -- the only situation in which a class has
6899      non-external linkage.  */
6900   TREE_PUBLIC (decl) = 1;
6901   TREE_STATIC (decl) = 1;
6902   /* For non-template classes, static data members are always put
6903      out in exactly those files where they are defined, just as
6904      with ordinary namespace-scope variables.  */
6905   if (!processing_template_decl)
6906     DECL_INTERFACE_KNOWN (decl) = 1;
6907 }
6908
6909 /* Create a VAR_DECL named NAME with the indicated TYPE.
6910
6911    If SCOPE is non-NULL, it is the class type or namespace containing
6912    the variable.  If SCOPE is NULL, the variable should is created in
6913    the innermost enclosings scope.  */
6914
6915 static tree
6916 grokvardecl (tree type,
6917              tree name,
6918              const cp_decl_specifier_seq *declspecs,
6919              int initialized,
6920              int constp,
6921              tree scope)
6922 {
6923   tree decl;
6924   tree explicit_scope;
6925
6926   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
6927
6928   /* Compute the scope in which to place the variable, but remember
6929      whether or not that scope was explicitly specified by the user.   */
6930   explicit_scope = scope;
6931   if (!scope)
6932     {
6933       /* An explicit "extern" specifier indicates a namespace-scope
6934          variable.  */
6935       if (declspecs->storage_class == sc_extern)
6936         scope = current_namespace;
6937       else if (!at_function_scope_p ())
6938         scope = current_scope ();
6939     }
6940
6941   if (scope
6942       && (/* If the variable is a namespace-scope variable declared in a
6943              template, we need DECL_LANG_SPECIFIC.  */
6944           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
6945           /* Similarly for namespace-scope variables with language linkage
6946              other than C++.  */
6947           || (TREE_CODE (scope) == NAMESPACE_DECL
6948               && current_lang_name != lang_name_cplusplus)
6949           /* Similarly for static data members.  */
6950           || TYPE_P (scope)))
6951     decl = build_lang_decl (VAR_DECL, name, type);
6952   else
6953     decl = build_decl (VAR_DECL, name, type);
6954
6955   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
6956     set_decl_namespace (decl, explicit_scope, 0);
6957   else
6958     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
6959
6960   if (declspecs->storage_class == sc_extern)
6961     {
6962       DECL_THIS_EXTERN (decl) = 1;
6963       DECL_EXTERNAL (decl) = !initialized;
6964     }
6965
6966   if (DECL_CLASS_SCOPE_P (decl))
6967     {
6968       set_linkage_for_static_data_member (decl);
6969       /* This function is only called with out-of-class definitions.  */
6970       DECL_EXTERNAL (decl) = 0;
6971       check_class_member_definition_namespace (decl);
6972     }
6973   /* At top level, either `static' or no s.c. makes a definition
6974      (perhaps tentative), and absence of `static' makes it public.  */
6975   else if (toplevel_bindings_p ())
6976     {
6977       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
6978                             && (DECL_THIS_EXTERN (decl) || ! constp));
6979       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
6980     }
6981   /* Not at top level, only `static' makes a static definition.  */
6982   else
6983     {
6984       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
6985       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
6986     }
6987
6988   if (declspecs->specs[(int)ds_thread])
6989     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
6990
6991   if (TREE_PUBLIC (decl))
6992     {
6993       /* [basic.link]: A name with no linkage (notably, the name of a class
6994          or enumeration declared in a local scope) shall not be used to
6995          declare an entity with linkage.
6996
6997          Only check this for public decls for now.  */
6998       tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
6999       if (t)
7000         {
7001           if (TYPE_ANONYMOUS_P (t))
7002             {
7003               if (DECL_EXTERN_C_P (decl))
7004                 /* Allow this; it's pretty common in C.  */
7005                   ;
7006               else
7007                 {
7008                   /* DRs 132, 319 and 389 seem to indicate types with
7009                      no linkage can only be used to declare extern "C"
7010                      entities.  Since it's not always an error in the
7011                      ISO C++ 90 Standard, we only issue a warning.  */
7012                   warning (0, "non-local variable %q#D uses anonymous type",
7013                            decl);
7014                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7015                     warning (0, "%q+#D does not refer to the unqualified "
7016                              "type, so it is not used for linkage",
7017                              TYPE_NAME (t));
7018                 }
7019             }
7020           else
7021             warning (0, "non-local variable %q#D uses local type %qT", decl, t);
7022         }
7023     }
7024   else
7025     DECL_INTERFACE_KNOWN (decl) = 1;
7026
7027   return decl;
7028 }
7029
7030 /* Create and return a canonical pointer to member function type, for
7031    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7032
7033 tree
7034 build_ptrmemfunc_type (tree type)
7035 {
7036   tree field, fields;
7037   tree t;
7038   tree unqualified_variant = NULL_TREE;
7039
7040   if (type == error_mark_node)
7041     return type;
7042
7043   /* If a canonical type already exists for this type, use it.  We use
7044      this method instead of type_hash_canon, because it only does a
7045      simple equality check on the list of field members.  */
7046
7047   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7048     return t;
7049
7050   /* Make sure that we always have the unqualified pointer-to-member
7051      type first.  */
7052   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7053     unqualified_variant
7054       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7055
7056   t = make_class_type (RECORD_TYPE);
7057   xref_basetypes (t, NULL_TREE);
7058
7059   /* Let the front end know this is a pointer to member function...  */
7060   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7061   /* ... and not really a class type.  */
7062   SET_CLASS_TYPE_P (t, 0);
7063
7064   field = build_decl (FIELD_DECL, pfn_identifier, type);
7065   fields = field;
7066
7067   field = build_decl (FIELD_DECL, delta_identifier, delta_type_node);
7068   TREE_CHAIN (field) = fields;
7069   fields = field;
7070
7071   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7072
7073   /* Zap out the name so that the back end will give us the debugging
7074      information for this anonymous RECORD_TYPE.  */
7075   TYPE_NAME (t) = NULL_TREE;
7076
7077   /* If this is not the unqualified form of this pointer-to-member
7078      type, set the TYPE_MAIN_VARIANT for this type to be the
7079      unqualified type.  Since they are actually RECORD_TYPEs that are
7080      not variants of each other, we must do this manually.  */
7081   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7082     {
7083       t = build_qualified_type (t, cp_type_quals (type));
7084       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7085       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7086       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7087       TREE_TYPE (TYPE_BINFO (t)) = t;
7088     }
7089
7090   /* Cache this pointer-to-member type so that we can find it again
7091      later.  */
7092   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7093
7094   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7095     SET_TYPE_STRUCTURAL_EQUALITY (t);
7096   else if (TYPE_CANONICAL (type) != type)
7097     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7098
7099   return t;
7100 }
7101
7102 /* Create and return a pointer to data member type.  */
7103
7104 tree
7105 build_ptrmem_type (tree class_type, tree member_type)
7106 {
7107   if (TREE_CODE (member_type) == METHOD_TYPE)
7108     {
7109       tree arg_types;
7110
7111       arg_types = TYPE_ARG_TYPES (member_type);
7112       class_type = (cp_build_qualified_type
7113                     (class_type,
7114                      cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)))));
7115       member_type
7116         = build_method_type_directly (class_type,
7117                                       TREE_TYPE (member_type),
7118                                       TREE_CHAIN (arg_types));
7119       return build_ptrmemfunc_type (build_pointer_type (member_type));
7120     }
7121   else
7122     {
7123       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7124       return build_offset_type (class_type, member_type);
7125     }
7126 }
7127
7128 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7129    Check to see that the definition is valid.  Issue appropriate error
7130    messages.  Return 1 if the definition is particularly bad, or 0
7131    otherwise.  */
7132
7133 int
7134 check_static_variable_definition (tree decl, tree type)
7135 {
7136   /* Motion 10 at San Diego: If a static const integral data member is
7137      initialized with an integral constant expression, the initializer
7138      may appear either in the declaration (within the class), or in
7139      the definition, but not both.  If it appears in the class, the
7140      member is a member constant.  The file-scope definition is always
7141      required.  */
7142   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7143     {
7144       error ("invalid in-class initialization of static data member "
7145              "of non-integral type %qT",
7146              type);
7147       /* If we just return the declaration, crashes will sometimes
7148          occur.  We therefore return void_type_node, as if this were a
7149          friend declaration, to cause callers to completely ignore
7150          this declaration.  */
7151       return 1;
7152     }
7153   else if (!CP_TYPE_CONST_P (type))
7154     error ("ISO C++ forbids in-class initialization of non-const "
7155            "static member %qD",
7156            decl);
7157   else if (!INTEGRAL_TYPE_P (type))
7158     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7159              "%qD of non-integral type %qT", decl, type);
7160
7161   return 0;
7162 }
7163
7164 /* Given the SIZE (i.e., number of elements) in an array, compute an
7165    appropriate index type for the array.  If non-NULL, NAME is the
7166    name of the thing being declared.  */
7167
7168 tree
7169 compute_array_index_type (tree name, tree size)
7170 {
7171   tree type;
7172   tree itype;
7173   tree abi_1_itype = NULL_TREE;
7174
7175   if (error_operand_p (size))
7176     return error_mark_node;
7177
7178   type = TREE_TYPE (size);
7179   /* The array bound must be an integer type.  */
7180   if (!dependent_type_p (type) && !INTEGRAL_TYPE_P (type))
7181     {
7182       if (name)
7183         error ("size of array %qD has non-integral type %qT", name, type);
7184       else
7185         error ("size of array has non-integral type %qT", type);
7186       size = integer_one_node;
7187       type = TREE_TYPE (size);
7188     }
7189
7190   /* We can only call value_dependent_expression_p on integral constant
7191      expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7192      set if this isn't one.  */
7193   if (processing_template_decl
7194       && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7195     {
7196       /* We cannot do any checking for a SIZE that isn't known to be
7197          constant. Just build the index type and mark that it requires
7198          structural equality checks.  */
7199       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7200                                            size, integer_one_node));
7201       if (!TREE_SIDE_EFFECTS (size))
7202         {
7203           TYPE_DEPENDENT_P (itype) = 1;
7204           TYPE_DEPENDENT_P_VALID (itype) = 1;
7205         }
7206       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7207       return itype;
7208     }
7209   
7210   if (!abi_version_at_least (2) && processing_template_decl)
7211     /* For abi-1, we handled all instances in templates the same way,
7212        even when they were non-dependent. This affects the manglings
7213        produced.  So, we do the normal checking for non-dependent
7214        sizes, but at the end we'll return the same type that abi-1
7215        would have, but with TYPE_CANONICAL set to the "right"
7216        value that the current ABI would provide. */
7217     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7218                                                size, integer_one_node));
7219
7220   /* The size might be the result of a cast.  */
7221   STRIP_TYPE_NOPS (size);
7222
7223   /* It might be a const variable or enumeration constant.  */
7224   size = integral_constant_value (size);
7225
7226   /* Normally, the array-bound will be a constant.  */
7227   if (TREE_CODE (size) == INTEGER_CST)
7228     {
7229       /* Check to see if the array bound overflowed.  Make that an
7230          error, no matter how generous we're being.  */
7231       constant_expression_error (size);
7232
7233       /* An array must have a positive number of elements.  */
7234       if (INT_CST_LT (size, integer_zero_node))
7235         {
7236           if (name)
7237             error ("size of array %qD is negative", name);
7238           else
7239             error ("size of array is negative");
7240           size = integer_one_node;
7241         }
7242       /* As an extension we allow zero-sized arrays.  We always allow
7243          them in system headers because glibc uses them.  */
7244       else if (integer_zerop (size) && !in_system_header)
7245         {
7246           if (name)
7247             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7248           else
7249             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7250         }
7251     }
7252   else if (TREE_CONSTANT (size))
7253     {
7254       /* `(int) &fn' is not a valid array bound.  */
7255       if (name)
7256         error ("size of array %qD is not an integral constant-expression",
7257                name);
7258       else
7259         error ("size of array is not an integral constant-expression");
7260       size = integer_one_node;
7261     }
7262   else if (pedantic && warn_vla != 0)
7263     {
7264       if (name)
7265         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7266       else
7267         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7268     }
7269   else if (warn_vla > 0)
7270     {
7271       if (name)
7272         warning (OPT_Wvla, 
7273                  "variable length array %qD is used", name);
7274       else
7275         warning (OPT_Wvla, 
7276                  "variable length array is used");
7277     }
7278
7279   if (processing_template_decl && !TREE_CONSTANT (size))
7280     /* A variable sized array.  */
7281     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7282   else
7283     {
7284       HOST_WIDE_INT saved_processing_template_decl;
7285
7286       /* Compute the index of the largest element in the array.  It is
7287          one less than the number of elements in the array.  We save
7288          and restore PROCESSING_TEMPLATE_DECL so that computations in
7289          cp_build_binary_op will be appropriately folded.  */
7290       saved_processing_template_decl = processing_template_decl;
7291       processing_template_decl = 0;
7292       itype = cp_build_binary_op (input_location,
7293                                   MINUS_EXPR,
7294                                   cp_convert (ssizetype, size),
7295                                   cp_convert (ssizetype, integer_one_node),
7296                                   tf_warning_or_error);
7297       itype = fold (itype);
7298       processing_template_decl = saved_processing_template_decl;
7299
7300       if (!TREE_CONSTANT (itype))
7301         /* A variable sized array.  */
7302         itype = variable_size (itype);
7303       /* Make sure that there was no overflow when creating to a signed
7304          index type.  (For example, on a 32-bit machine, an array with
7305          size 2^32 - 1 is too big.)  */
7306       else if (TREE_CODE (itype) == INTEGER_CST
7307                && TREE_OVERFLOW (itype))
7308         {
7309           error ("overflow in array dimension");
7310           TREE_OVERFLOW (itype) = 0;
7311         }
7312     }
7313
7314   /* Create and return the appropriate index type.  */
7315   if (abi_1_itype)
7316     {
7317       tree t = build_index_type (itype);
7318       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7319       return abi_1_itype;
7320     }
7321   else
7322     return build_index_type (itype);
7323 }
7324
7325 /* Returns the scope (if any) in which the entity declared by
7326    DECLARATOR will be located.  If the entity was declared with an
7327    unqualified name, NULL_TREE is returned.  */
7328
7329 tree
7330 get_scope_of_declarator (const cp_declarator *declarator)
7331 {
7332   while (declarator && declarator->kind != cdk_id)
7333     declarator = declarator->declarator;
7334
7335   /* If the declarator-id is a SCOPE_REF, the scope in which the
7336      declaration occurs is the first operand.  */
7337   if (declarator
7338       && declarator->u.id.qualifying_scope)
7339     return declarator->u.id.qualifying_scope;
7340
7341   /* Otherwise, the declarator is not a qualified name; the entity will
7342      be declared in the current scope.  */
7343   return NULL_TREE;
7344 }
7345
7346 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7347    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
7348    with this type.  */
7349
7350 static tree
7351 create_array_type_for_decl (tree name, tree type, tree size)
7352 {
7353   tree itype = NULL_TREE;
7354   const char* error_msg;
7355
7356   /* If things have already gone awry, bail now.  */
7357   if (type == error_mark_node || size == error_mark_node)
7358     return error_mark_node;
7359
7360   /* Assume that everything will go OK.  */
7361   error_msg = NULL;
7362
7363   /* There are some types which cannot be array elements.  */
7364   switch (TREE_CODE (type))
7365     {
7366     case VOID_TYPE:
7367       error_msg = "array of void";
7368       break;
7369
7370     case FUNCTION_TYPE:
7371       error_msg = "array of functions";
7372       break;
7373
7374     case REFERENCE_TYPE:
7375       error_msg = "array of references";
7376       break;
7377
7378     case METHOD_TYPE:
7379       error_msg = "array of function members";
7380       break;
7381
7382     default:
7383       break;
7384     }
7385
7386   /* If something went wrong, issue an error-message and return.  */
7387   if (error_msg)
7388     {
7389       if (name)
7390         error ("declaration of %qD as %s", name, error_msg);
7391       else
7392         error ("creating %s", error_msg);
7393
7394       return error_mark_node;
7395     }
7396
7397   /* [dcl.array]
7398
7399      The constant expressions that specify the bounds of the arrays
7400      can be omitted only for the first member of the sequence.  */
7401   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7402     {
7403       if (name)
7404         error ("declaration of %qD as multidimensional array must "
7405                "have bounds for all dimensions except the first",
7406                name);
7407       else
7408         error ("multidimensional array must have bounds for all "
7409                "dimensions except the first");
7410
7411       return error_mark_node;
7412     }
7413
7414   /* Figure out the index type for the array.  */
7415   if (size)
7416     itype = compute_array_index_type (name, size);
7417
7418   /* [dcl.array]
7419      T is called the array element type; this type shall not be [...] an
7420      abstract class type.  */
7421   abstract_virtuals_error (name, type);
7422
7423   return build_cplus_array_type (type, itype);
7424 }
7425
7426 /* Check that it's OK to declare a function with the indicated TYPE.
7427    SFK indicates the kind of special function (if any) that this
7428    function is.  OPTYPE is the type given in a conversion operator
7429    declaration, or the class type for a constructor/destructor.
7430    Returns the actual return type of the function; that
7431    may be different than TYPE if an error occurs, or for certain
7432    special functions.  */
7433
7434 static tree
7435 check_special_function_return_type (special_function_kind sfk,
7436                                     tree type,
7437                                     tree optype)
7438 {
7439   switch (sfk)
7440     {
7441     case sfk_constructor:
7442       if (type)
7443         error ("return type specification for constructor invalid");
7444
7445       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7446         type = build_pointer_type (optype);
7447       else
7448         type = void_type_node;
7449       break;
7450
7451     case sfk_destructor:
7452       if (type)
7453         error ("return type specification for destructor invalid");
7454       /* We can't use the proper return type here because we run into
7455          problems with ambiguous bases and covariant returns.
7456          Java classes are left unchanged because (void *) isn't a valid
7457          Java type, and we don't want to change the Java ABI.  */
7458       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7459         type = build_pointer_type (void_type_node);
7460       else
7461         type = void_type_node;
7462       break;
7463
7464     case sfk_conversion:
7465       if (type)
7466         error ("return type specified for %<operator %T%>",  optype);
7467       type = optype;
7468       break;
7469
7470     default:
7471       gcc_unreachable ();
7472     }
7473
7474   return type;
7475 }
7476
7477 /* A variable or data member (whose unqualified name is IDENTIFIER)
7478    has been declared with the indicated TYPE.  If the TYPE is not
7479    acceptable, issue an error message and return a type to use for
7480    error-recovery purposes.  */
7481
7482 tree
7483 check_var_type (tree identifier, tree type)
7484 {
7485   if (VOID_TYPE_P (type))
7486     {
7487       if (!identifier)
7488         error ("unnamed variable or field declared void");
7489       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7490         {
7491           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7492           error ("variable or field %qE declared void", identifier);
7493         }
7494       else
7495         error ("variable or field declared void");
7496       type = error_mark_node;
7497     }
7498
7499   return type;
7500 }
7501
7502 /* Given declspecs and a declarator (abstract or otherwise), determine
7503    the name and type of the object declared and construct a DECL node
7504    for it.
7505
7506    DECLSPECS points to the representation of declaration-specifier
7507    sequence that precedes declarator.
7508
7509    DECL_CONTEXT says which syntactic context this declaration is in:
7510      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7511      FUNCDEF for a function definition.  Like NORMAL but a few different
7512       error messages in each case.  Return value may be zero meaning
7513       this definition is too screwy to try to parse.
7514      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
7515       handle member functions (which have FIELD context).
7516       Return value may be zero meaning this definition is too screwy to
7517       try to parse.
7518      PARM for a parameter declaration (either within a function prototype
7519       or before a function body).  Make a PARM_DECL, or return void_type_node.
7520      CATCHPARM for a parameter declaration before a catch clause.
7521      TYPENAME if for a typename (in a cast or sizeof).
7522       Don't make a DECL node; just return the ..._TYPE node.
7523      FIELD for a struct or union field; make a FIELD_DECL.
7524      BITFIELD for a field with specified width.
7525    INITIALIZED is as for start_decl.
7526
7527    ATTRLIST is a pointer to the list of attributes, which may be NULL
7528    if there are none; *ATTRLIST may be modified if attributes from inside
7529    the declarator should be applied to the declaration.
7530
7531    When this function is called, scoping variables (such as
7532    CURRENT_CLASS_TYPE) should reflect the scope in which the
7533    declaration occurs, not the scope in which the new declaration will
7534    be placed.  For example, on:
7535
7536      void S::f() { ... }
7537
7538    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7539    should not be `S'.
7540
7541    Returns a DECL (if a declarator is present), a TYPE (if there is no
7542    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7543    error occurs. */
7544
7545 tree
7546 grokdeclarator (const cp_declarator *declarator,
7547                 const cp_decl_specifier_seq *declspecs,
7548                 enum decl_context decl_context,
7549                 int initialized,
7550                 tree* attrlist)
7551 {
7552   tree type = NULL_TREE;
7553   int longlong = 0;
7554   int virtualp, explicitp, friendp, inlinep, staticp;
7555   int explicit_int = 0;
7556   int explicit_char = 0;
7557   int defaulted_int = 0;
7558   tree dependent_name = NULL_TREE;
7559
7560   tree typedef_decl = NULL_TREE;
7561   const char *name = NULL;
7562   tree typedef_type = NULL_TREE;
7563   /* True if this declarator is a function definition.  */
7564   bool funcdef_flag = false;
7565   cp_declarator_kind innermost_code = cdk_error;
7566   int bitfield = 0;
7567 #if 0
7568   /* See the code below that used this.  */
7569   tree decl_attr = NULL_TREE;
7570 #endif
7571
7572   /* Keep track of what sort of function is being processed
7573      so that we can warn about default return values, or explicit
7574      return values which do not match prescribed defaults.  */
7575   special_function_kind sfk = sfk_none;
7576
7577   tree dname = NULL_TREE;
7578   tree ctor_return_type = NULL_TREE;
7579   enum overload_flags flags = NO_SPECIAL;
7580   /* cv-qualifiers that apply to the declarator, for a declaration of
7581      a member function.  */
7582   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7583   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
7584   int type_quals;
7585   tree raises = NULL_TREE;
7586   int template_count = 0;
7587   tree returned_attrs = NULL_TREE;
7588   tree parms = NULL_TREE;
7589   const cp_declarator *id_declarator;
7590   /* The unqualified name of the declarator; either an
7591      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
7592   tree unqualified_id;
7593   /* The class type, if any, in which this entity is located,
7594      or NULL_TREE if none.  Note that this value may be different from
7595      the current class type; for example if an attempt is made to declare
7596      "A::f" inside "B", this value will be "A".  */
7597   tree ctype = current_class_type;
7598   /* The NAMESPACE_DECL for the namespace in which this entity is
7599      located.  If an unqualified name is used to declare the entity,
7600      this value will be NULL_TREE, even if the entity is located at
7601      namespace scope.  */
7602   tree in_namespace = NULL_TREE;
7603   cp_storage_class storage_class;
7604   bool unsigned_p, signed_p, short_p, long_p, thread_p;
7605   bool type_was_error_mark_node = false;
7606   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7607   bool set_no_warning = false;
7608   bool template_type_arg = false;
7609
7610   signed_p = declspecs->specs[(int)ds_signed];
7611   unsigned_p = declspecs->specs[(int)ds_unsigned];
7612   short_p = declspecs->specs[(int)ds_short];
7613   long_p = declspecs->specs[(int)ds_long];
7614   longlong = declspecs->specs[(int)ds_long] >= 2;
7615   thread_p = declspecs->specs[(int)ds_thread];
7616
7617   if (decl_context == FUNCDEF)
7618     funcdef_flag = true, decl_context = NORMAL;
7619   else if (decl_context == MEMFUNCDEF)
7620     funcdef_flag = true, decl_context = FIELD;
7621   else if (decl_context == BITFIELD)
7622     bitfield = 1, decl_context = FIELD;
7623   else if (decl_context == TEMPLATE_TYPE_ARG)
7624     template_type_arg = true, decl_context = TYPENAME;
7625
7626   if (initialized > 1)
7627     funcdef_flag = true;
7628
7629   /* Look inside a declarator for the name being declared
7630      and get it as a string, for an error message.  */
7631   for (id_declarator = declarator;
7632        id_declarator;
7633        id_declarator = id_declarator->declarator)
7634     {
7635       if (id_declarator->kind != cdk_id)
7636         innermost_code = id_declarator->kind;
7637
7638       switch (id_declarator->kind)
7639         {
7640         case cdk_function:
7641           if (id_declarator->declarator
7642               && id_declarator->declarator->kind == cdk_id)
7643             {
7644               sfk = id_declarator->declarator->u.id.sfk;
7645               if (sfk == sfk_destructor)
7646                 flags = DTOR_FLAG;
7647             }
7648           break;
7649
7650         case cdk_id:
7651           {
7652             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7653             tree decl = id_declarator->u.id.unqualified_name;
7654             if (!decl)
7655               break;
7656             if (qualifying_scope)
7657               {
7658                 if (at_function_scope_p ())
7659                   {
7660                     /* [dcl.meaning] 
7661
7662                        A declarator-id shall not be qualified except
7663                        for ... 
7664
7665                        None of the cases are permitted in block
7666                        scope.  */
7667                     if (qualifying_scope == global_namespace)
7668                       error ("invalid use of qualified-name %<::%D%>",
7669                              decl);
7670                     else if (TYPE_P (qualifying_scope))
7671                       error ("invalid use of qualified-name %<%T::%D%>",
7672                              qualifying_scope, decl);
7673                     else 
7674                       error ("invalid use of qualified-name %<%D::%D%>",
7675                              qualifying_scope, decl);
7676                     return error_mark_node;
7677                   }
7678                 else if (TYPE_P (qualifying_scope))
7679                   {
7680                     ctype = qualifying_scope;
7681                     if (innermost_code != cdk_function
7682                         && current_class_type
7683                         && !UNIQUELY_DERIVED_FROM_P (ctype,
7684                                                      current_class_type))
7685                       {
7686                         error ("type %qT is not derived from type %qT",
7687                                ctype, current_class_type);
7688                         return error_mark_node;
7689                       }
7690                   }
7691                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7692                   in_namespace = qualifying_scope;
7693               }
7694             switch (TREE_CODE (decl))
7695               {
7696               case BIT_NOT_EXPR:
7697                 {
7698                   tree type;
7699
7700                   if (innermost_code != cdk_function)
7701                     {
7702                       error ("declaration of %qD as non-function", decl);
7703                       return error_mark_node;
7704                     }
7705                   else if (!qualifying_scope
7706                            && !(current_class_type && at_class_scope_p ()))
7707                     {
7708                       error ("declaration of %qD as non-member", decl);
7709                       return error_mark_node;
7710                     }
7711
7712                   type = TREE_OPERAND (decl, 0);
7713                   if (TYPE_P (type))
7714                     type = constructor_name (type);
7715                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
7716                   dname = decl;
7717                 }
7718                 break;
7719
7720               case TEMPLATE_ID_EXPR:
7721                 {
7722                   tree fns = TREE_OPERAND (decl, 0);
7723
7724                   dname = fns;
7725                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
7726                     {
7727                       gcc_assert (is_overloaded_fn (dname));
7728                       dname = DECL_NAME (get_first_fn (dname));
7729                     }
7730                 }
7731                 /* Fall through.  */
7732
7733               case IDENTIFIER_NODE:
7734                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7735                   dname = decl;
7736
7737                 if (C_IS_RESERVED_WORD (dname))
7738                   {
7739                     error ("declarator-id missing; using reserved word %qD",
7740                            dname);
7741                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7742                   }
7743                 else if (!IDENTIFIER_TYPENAME_P (dname))
7744                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7745                 else
7746                   {
7747                     gcc_assert (flags == NO_SPECIAL);
7748                     flags = TYPENAME_FLAG;
7749                     ctor_return_type = TREE_TYPE (dname);
7750                     sfk = sfk_conversion;
7751                     if (is_typename_at_global_scope (dname))
7752                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7753                     else
7754                       name = "<invalid operator>";
7755                   }
7756                 break;
7757
7758               default:
7759                 gcc_unreachable ();
7760               }
7761             break;
7762           }
7763
7764         case cdk_array:
7765         case cdk_pointer:
7766         case cdk_reference:
7767         case cdk_ptrmem:
7768           break;
7769
7770         case cdk_error:
7771           return error_mark_node;
7772
7773         default:
7774           gcc_unreachable ();
7775         }
7776       if (id_declarator->kind == cdk_id)
7777         break;
7778     }
7779
7780   /* [dcl.fct.edf]
7781
7782      The declarator in a function-definition shall have the form
7783      D1 ( parameter-declaration-clause) ...  */
7784   if (funcdef_flag && innermost_code != cdk_function)
7785     {
7786       error ("function definition does not declare parameters");
7787       return error_mark_node;
7788     }
7789
7790   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7791       && innermost_code != cdk_function
7792       && ! (ctype && !declspecs->any_specifiers_p))
7793     {
7794       error ("declaration of %qD as non-function", dname);
7795       return error_mark_node;
7796     }
7797
7798   /* Anything declared one level down from the top level
7799      must be one of the parameters of a function
7800      (because the body is at least two levels down).  */
7801
7802   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7803      by not allowing C++ class definitions to specify their parameters
7804      with xdecls (must be spec.d in the parmlist).
7805
7806      Since we now wait to push a class scope until we are sure that
7807      we are in a legitimate method context, we must set oldcname
7808      explicitly (since current_class_name is not yet alive).
7809
7810      We also want to avoid calling this a PARM if it is in a namespace.  */
7811
7812   if (decl_context == NORMAL && !toplevel_bindings_p ())
7813     {
7814       struct cp_binding_level *b = current_binding_level;
7815       current_binding_level = b->level_chain;
7816       if (current_binding_level != 0 && toplevel_bindings_p ())
7817         decl_context = PARM;
7818       current_binding_level = b;
7819     }
7820
7821   if (name == NULL)
7822     name = decl_context == PARM ? "parameter" : "type name";
7823
7824   /* If there were multiple types specified in the decl-specifier-seq,
7825      issue an error message.  */
7826   if (declspecs->multiple_types_p)
7827     {
7828       error ("two or more data types in declaration of %qs", name);
7829       return error_mark_node;
7830     }
7831
7832   if (declspecs->conflicting_specifiers_p)
7833     {
7834       error ("conflicting specifiers in declaration of %qs", name);
7835       return error_mark_node;
7836     }
7837
7838   /* Extract the basic type from the decl-specifier-seq.  */
7839   type = declspecs->type;
7840   if (type == error_mark_node)
7841     {
7842       type = NULL_TREE;
7843       type_was_error_mark_node = true;
7844     }
7845   /* If the entire declaration is itself tagged as deprecated then
7846      suppress reports of deprecated items.  */
7847   if (type && TREE_DEPRECATED (type)
7848       && deprecated_state != DEPRECATED_SUPPRESS)
7849     warn_deprecated_use (type, NULL_TREE);
7850   if (type && TREE_CODE (type) == TYPE_DECL)
7851     {
7852       typedef_decl = type;
7853       type = TREE_TYPE (typedef_decl);
7854       if (TREE_DEPRECATED (type)
7855           && DECL_ARTIFICIAL (typedef_decl)
7856           && deprecated_state != DEPRECATED_SUPPRESS)
7857         warn_deprecated_use (type, NULL_TREE);
7858     }
7859   /* No type at all: default to `int', and set DEFAULTED_INT
7860      because it was not a user-defined typedef.  */
7861   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7862     {
7863       /* These imply 'int'.  */
7864       type = integer_type_node;
7865       defaulted_int = 1;
7866     }
7867   /* Gather flags.  */
7868   explicit_int = declspecs->explicit_int_p;
7869   explicit_char = declspecs->explicit_char_p;
7870
7871 #if 0
7872   /* See the code below that used this.  */
7873   if (typedef_decl)
7874     decl_attr = DECL_ATTRIBUTES (typedef_decl);
7875 #endif
7876   typedef_type = type;
7877
7878
7879   if (sfk != sfk_conversion)
7880     ctor_return_type = ctype;
7881
7882   if (sfk != sfk_none)
7883     type = check_special_function_return_type (sfk, type,
7884                                                ctor_return_type);
7885   else if (type == NULL_TREE)
7886     {
7887       int is_main;
7888
7889       explicit_int = -1;
7890
7891       /* We handle `main' specially here, because 'main () { }' is so
7892          common.  With no options, it is allowed.  With -Wreturn-type,
7893          it is a warning.  It is only an error with -pedantic-errors.  */
7894       is_main = (funcdef_flag
7895                  && dname && MAIN_NAME_P (dname)
7896                  && ctype == NULL_TREE
7897                  && in_namespace == NULL_TREE
7898                  && current_namespace == global_namespace);
7899
7900       if (type_was_error_mark_node)
7901         /* We've already issued an error, don't complain more.  */;
7902       else if (in_system_header || flag_ms_extensions)
7903         /* Allow it, sigh.  */;
7904       else if (! is_main)
7905         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
7906       else if (pedantic)
7907         pedwarn (input_location, OPT_pedantic,
7908                  "ISO C++ forbids declaration of %qs with no type", name);
7909       else
7910         warning (OPT_Wreturn_type,
7911                  "ISO C++ forbids declaration of %qs with no type", name);
7912
7913       type = integer_type_node;
7914     }
7915
7916   ctype = NULL_TREE;
7917
7918   /* Now process the modifiers that were specified
7919      and check for invalid combinations.  */
7920
7921   /* Long double is a special combination.  */
7922   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7923     {
7924       long_p = false;
7925       type = build_qualified_type (long_double_type_node,
7926                                    cp_type_quals (type));
7927     }
7928
7929   /* Check all other uses of type modifiers.  */
7930
7931   if (unsigned_p || signed_p || long_p || short_p)
7932     {
7933       int ok = 0;
7934
7935       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7936         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7937       else if (signed_p && unsigned_p)
7938         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7939       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7940         error ("%<long long%> invalid for %qs", name);
7941       else if (long_p && TREE_CODE (type) == REAL_TYPE)
7942         error ("%<long%> invalid for %qs", name);
7943       else if (short_p && TREE_CODE (type) == REAL_TYPE)
7944         error ("%<short%> invalid for %qs", name);
7945       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7946         error ("%<long%> or %<short%> invalid for %qs", name);
7947       else if ((long_p || short_p) && explicit_char)
7948         error ("%<long%> or %<short%> specified with char for %qs", name);
7949       else if (long_p && short_p)
7950         error ("%<long%> and %<short%> specified together for %qs", name);
7951       else if (type == char16_type_node || type == char32_type_node)
7952         {
7953           if (signed_p || unsigned_p)
7954             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7955           else if (short_p || long_p)
7956             error ("%<short%> or %<long%> invalid for %qs", name);
7957         }
7958       else
7959         {
7960           ok = 1;
7961           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7962             {
7963               pedwarn (input_location, OPT_pedantic, 
7964                        "long, short, signed or unsigned used invalidly for %qs",
7965                        name);
7966               if (flag_pedantic_errors)
7967                 ok = 0;
7968             }
7969         }
7970
7971       /* Discard the type modifiers if they are invalid.  */
7972       if (! ok)
7973         {
7974           unsigned_p = false;
7975           signed_p = false;
7976           long_p = false;
7977           short_p = false;
7978           longlong = 0;
7979         }
7980     }
7981
7982   /* Decide whether an integer type is signed or not.
7983      Optionally treat bitfields as signed by default.  */
7984   if (unsigned_p
7985       /* [class.bit]
7986
7987          It is implementation-defined whether a plain (neither
7988          explicitly signed or unsigned) char, short, int, or long
7989          bit-field is signed or unsigned.
7990
7991          Naturally, we extend this to long long as well.  Note that
7992          this does not include wchar_t.  */
7993       || (bitfield && !flag_signed_bitfields
7994           && !signed_p
7995           /* A typedef for plain `int' without `signed' can be
7996              controlled just like plain `int', but a typedef for
7997              `signed int' cannot be so controlled.  */
7998           && !(typedef_decl
7999                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8000           && TREE_CODE (type) == INTEGER_TYPE
8001           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8002     {
8003       if (longlong)
8004         type = long_long_unsigned_type_node;
8005       else if (long_p)
8006         type = long_unsigned_type_node;
8007       else if (short_p)
8008         type = short_unsigned_type_node;
8009       else if (type == char_type_node)
8010         type = unsigned_char_type_node;
8011       else if (typedef_decl)
8012         type = unsigned_type_for (type);
8013       else
8014         type = unsigned_type_node;
8015     }
8016   else if (signed_p && type == char_type_node)
8017     type = signed_char_type_node;
8018   else if (longlong)
8019     type = long_long_integer_type_node;
8020   else if (long_p)
8021     type = long_integer_type_node;
8022   else if (short_p)
8023     type = short_integer_type_node;
8024
8025   if (declspecs->specs[(int)ds_complex])
8026     {
8027       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8028         error ("complex invalid for %qs", name);
8029       /* If we just have "complex", it is equivalent to
8030          "complex double", but if any modifiers at all are specified it is
8031          the complex form of TYPE.  E.g, "complex short" is
8032          "complex short int".  */
8033
8034       else if (defaulted_int && ! longlong
8035                && ! (long_p || short_p || signed_p || unsigned_p))
8036         type = complex_double_type_node;
8037       else if (type == integer_type_node)
8038         type = complex_integer_type_node;
8039       else if (type == float_type_node)
8040         type = complex_float_type_node;
8041       else if (type == double_type_node)
8042         type = complex_double_type_node;
8043       else if (type == long_double_type_node)
8044         type = complex_long_double_type_node;
8045       else
8046         type = build_complex_type (type);
8047     }
8048
8049   type_quals = TYPE_UNQUALIFIED;
8050   if (declspecs->specs[(int)ds_const])
8051     type_quals |= TYPE_QUAL_CONST;
8052   if (declspecs->specs[(int)ds_volatile])
8053     type_quals |= TYPE_QUAL_VOLATILE;
8054   if (declspecs->specs[(int)ds_restrict])
8055     type_quals |= TYPE_QUAL_RESTRICT;
8056   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8057     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8058            ctor_return_type);
8059
8060   if (TREE_CODE (type) == FUNCTION_TYPE
8061       && type_quals != TYPE_UNQUALIFIED)
8062     {
8063       /* This was an error in C++98 (cv-qualifiers cannot be added to
8064          a function type), but DR 295 makes the code well-formed by
8065          dropping the extra qualifiers. */
8066       if (pedantic)
8067         {
8068           tree bad_type = build_qualified_type (type, type_quals);
8069           pedwarn (input_location, OPT_pedantic, 
8070                    "ignoring %qV qualifiers added to function type %qT",
8071                    bad_type, type);
8072         }
8073       type_quals = TYPE_UNQUALIFIED;
8074     }
8075   type_quals |= cp_type_quals (type);
8076   type = cp_build_qualified_type_real
8077     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8078                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8079   /* We might have ignored or rejected some of the qualifiers.  */
8080   type_quals = cp_type_quals (type);
8081
8082   staticp = 0;
8083   inlinep = !! declspecs->specs[(int)ds_inline];
8084   virtualp = !! declspecs->specs[(int)ds_virtual];
8085   explicitp = !! declspecs->specs[(int)ds_explicit];
8086
8087   storage_class = declspecs->storage_class;
8088   if (storage_class == sc_static)
8089     staticp = 1 + (decl_context == FIELD);
8090
8091   if (virtualp && staticp == 2)
8092     {
8093       error ("member %qD cannot be declared both virtual and static", dname);
8094       storage_class = sc_none;
8095       staticp = 0;
8096     }
8097   friendp = !! declspecs->specs[(int)ds_friend];
8098
8099   if (dependent_name && !friendp)
8100     {
8101       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8102       return error_mark_node;
8103     }
8104
8105   /* Issue errors about use of storage classes for parameters.  */
8106   if (decl_context == PARM)
8107     {
8108       if (declspecs->specs[(int)ds_typedef])
8109         {
8110           error ("typedef declaration invalid in parameter declaration");
8111           return error_mark_node;
8112         }
8113       else if (storage_class == sc_static
8114                || storage_class == sc_extern
8115                || thread_p)
8116         error ("storage class specifiers invalid in parameter declarations");
8117
8118       if (type_uses_auto (type))
8119         {
8120           error ("parameter declared %<auto%>");
8121           type = error_mark_node;
8122         }
8123     }
8124
8125   /* Give error if `virtual' is used outside of class declaration.  */
8126   if (virtualp
8127       && (current_class_name == NULL_TREE || decl_context != FIELD))
8128     {
8129       error ("%<virtual%> outside class declaration");
8130       virtualp = 0;
8131     }
8132
8133   /* Static anonymous unions are dealt with here.  */
8134   if (staticp && decl_context == TYPENAME
8135       && declspecs->type
8136       && ANON_AGGR_TYPE_P (declspecs->type))
8137     decl_context = FIELD;
8138
8139   /* Warn about storage classes that are invalid for certain
8140      kinds of declarations (parameters, typenames, etc.).  */
8141   if (thread_p
8142       && ((storage_class
8143            && storage_class != sc_extern
8144            && storage_class != sc_static)
8145           || declspecs->specs[(int)ds_typedef]))
8146     {
8147       error ("multiple storage classes in declaration of %qs", name);
8148       thread_p = false;
8149     }
8150   if (decl_context != NORMAL
8151       && ((storage_class != sc_none
8152            && storage_class != sc_mutable)
8153           || thread_p))
8154     {
8155       if ((decl_context == PARM || decl_context == CATCHPARM)
8156           && (storage_class == sc_register
8157               || storage_class == sc_auto))
8158         ;
8159       else if (declspecs->specs[(int)ds_typedef])
8160         ;
8161       else if (decl_context == FIELD
8162                /* C++ allows static class elements.  */
8163                && storage_class == sc_static)
8164         /* C++ also allows inlines and signed and unsigned elements,
8165            but in those cases we don't come in here.  */
8166         ;
8167       else
8168         {
8169           if (decl_context == FIELD)
8170             error ("storage class specified for %qs", name);
8171           else
8172             {
8173               if (decl_context == PARM || decl_context == CATCHPARM)
8174                 error ("storage class specified for parameter %qs", name);
8175               else
8176                 error ("storage class specified for typename");
8177             }
8178           if (storage_class == sc_register
8179               || storage_class == sc_auto
8180               || storage_class == sc_extern
8181               || thread_p)
8182             storage_class = sc_none;
8183         }
8184     }
8185   else if (storage_class == sc_extern && funcdef_flag
8186            && ! toplevel_bindings_p ())
8187     error ("nested function %qs declared %<extern%>", name);
8188   else if (toplevel_bindings_p ())
8189     {
8190       if (storage_class == sc_auto)
8191         error ("top-level declaration of %qs specifies %<auto%>", name);
8192     }
8193   else if (thread_p
8194            && storage_class != sc_extern
8195            && storage_class != sc_static)
8196     {
8197       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8198              name);
8199       thread_p = false;
8200     }
8201
8202   if (storage_class && friendp)
8203     {
8204       error ("storage class specifiers invalid in friend function declarations");
8205       storage_class = sc_none;
8206       staticp = 0;
8207     }
8208
8209   if (!id_declarator)
8210     unqualified_id = NULL_TREE;
8211   else
8212     {
8213       unqualified_id = id_declarator->u.id.unqualified_name;
8214       switch (TREE_CODE (unqualified_id))
8215         {
8216         case BIT_NOT_EXPR:
8217           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8218           if (TYPE_P (unqualified_id))
8219             unqualified_id = constructor_name (unqualified_id);
8220           break;
8221
8222         case IDENTIFIER_NODE:
8223         case TEMPLATE_ID_EXPR:
8224           break;
8225
8226         default:
8227           gcc_unreachable ();
8228         }
8229     }
8230
8231   /* Determine the type of the entity declared by recurring on the
8232      declarator.  */
8233   for (; declarator; declarator = declarator->declarator)
8234     {
8235       const cp_declarator *inner_declarator;
8236       tree attrs;
8237
8238       if (type == error_mark_node)
8239         return error_mark_node;
8240
8241       attrs = declarator->attributes;
8242       if (attrs)
8243         {
8244           int attr_flags;
8245
8246           attr_flags = 0;
8247           if (declarator == NULL || declarator->kind == cdk_id)
8248             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8249           if (declarator->kind == cdk_function)
8250             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8251           if (declarator->kind == cdk_array)
8252             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8253           returned_attrs = decl_attributes (&type,
8254                                             chainon (returned_attrs, attrs),
8255                                             attr_flags);
8256         }
8257
8258       if (declarator->kind == cdk_id)
8259         break;
8260
8261       inner_declarator = declarator->declarator;
8262
8263       switch (declarator->kind)
8264         {
8265         case cdk_array:
8266           type = create_array_type_for_decl (dname, type,
8267                                              declarator->u.array.bounds);
8268           break;
8269
8270         case cdk_function:
8271           {
8272             tree arg_types;
8273             int funcdecl_p;
8274
8275             /* Declaring a function type.
8276                Make sure we have a valid type for the function to return.  */
8277
8278             if (type_quals != TYPE_UNQUALIFIED)
8279               {
8280                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8281                   warning (OPT_Wignored_qualifiers,
8282                            "type qualifiers ignored on function return type");
8283                 /* We now know that the TYPE_QUALS don't apply to the
8284                    decl, but to its return type.  */
8285                 type_quals = TYPE_UNQUALIFIED;
8286                 set_no_warning = true;
8287               }
8288
8289             /* Error about some types functions can't return.  */
8290
8291             if (TREE_CODE (type) == FUNCTION_TYPE)
8292               {
8293                 error ("%qs declared as function returning a function", name);
8294                 return error_mark_node;
8295               }
8296             if (TREE_CODE (type) == ARRAY_TYPE)
8297               {
8298                 error ("%qs declared as function returning an array", name);
8299                 return error_mark_node;
8300               }
8301
8302             /* Pick up type qualifiers which should be applied to `this'.  */
8303             memfn_quals = declarator->u.function.qualifiers;
8304
8305             /* Pick up the exception specifications.  */
8306             raises = declarator->u.function.exception_specification;
8307
8308             /* Say it's a definition only for the CALL_EXPR
8309                closest to the identifier.  */
8310             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8311
8312             /* Handle a late-specified return type.  */
8313             if (funcdecl_p)
8314               {
8315                 if (type_uses_auto (type))
8316                   {
8317                     if (!declarator->u.function.late_return_type)
8318                       {
8319                         error ("%qs function uses %<auto%> type specifier without"
8320                                " late return type", name);
8321                         return error_mark_node;
8322                       }
8323                     else if (!is_auto (type))
8324                       {
8325                         error ("%qs function with late return type has"
8326                                " %qT as its type rather than plain %<auto%>",
8327                                name, type);
8328                         return error_mark_node;
8329                       }
8330                   }
8331                 else if (declarator->u.function.late_return_type)
8332                   {
8333                     error ("%qs function with late return type not declared"
8334                            " with %<auto%> type specifier", name);
8335                     return error_mark_node;
8336                   }
8337               }
8338             type = splice_late_return_type
8339               (type, declarator->u.function.late_return_type);
8340             if (type == error_mark_node)
8341               return error_mark_node;
8342
8343             if (ctype == NULL_TREE
8344                 && decl_context == FIELD
8345                 && funcdecl_p
8346                 && (friendp == 0 || dname == current_class_name))
8347               ctype = current_class_type;
8348
8349             if (ctype && (sfk == sfk_constructor
8350                           || sfk == sfk_destructor))
8351               {
8352                 /* We are within a class's scope. If our declarator name
8353                    is the same as the class name, and we are defining
8354                    a function, then it is a constructor/destructor, and
8355                    therefore returns a void type.  */
8356
8357                 /* ISO C++ 12.4/2.  A destructor may not be declared
8358                    const or volatile.  A destructor may not be
8359                    static.
8360
8361                    ISO C++ 12.1.  A constructor may not be declared
8362                    const or volatile.  A constructor may not be
8363                    virtual.  A constructor may not be static.  */
8364                 if (staticp == 2)
8365                   error ((flags == DTOR_FLAG)
8366                          ? "destructor cannot be static member function"
8367                          : "constructor cannot be static member function");
8368                 if (memfn_quals)
8369                   {
8370                     error ((flags == DTOR_FLAG)
8371                            ? "destructors may not be cv-qualified"
8372                            : "constructors may not be cv-qualified");
8373                     memfn_quals = TYPE_UNQUALIFIED;
8374                   }
8375
8376                 if (decl_context == FIELD
8377                     && !member_function_or_else (ctype,
8378                                                  current_class_type,
8379                                                  flags))
8380                   return error_mark_node;
8381
8382                 if (flags != DTOR_FLAG)
8383                   {
8384                     /* It's a constructor.  */
8385                     if (explicitp == 1)
8386                       explicitp = 2;
8387                     if (virtualp)
8388                       {
8389                         permerror (input_location, "constructors cannot be declared virtual");
8390                         virtualp = 0;
8391                       }
8392                     if (decl_context == FIELD
8393                         && sfk != sfk_constructor)
8394                       return error_mark_node;
8395                   }
8396                 if (decl_context == FIELD)
8397                   staticp = 0;
8398               }
8399             else if (friendp)
8400               {
8401                 if (initialized)
8402                   error ("can't initialize friend function %qs", name);
8403                 if (virtualp)
8404                   {
8405                     /* Cannot be both friend and virtual.  */
8406                     error ("virtual functions cannot be friends");
8407                     friendp = 0;
8408                   }
8409                 if (decl_context == NORMAL)
8410                   error ("friend declaration not in class definition");
8411                 if (current_function_decl && funcdef_flag)
8412                   error ("can't define friend function %qs in a local "
8413                          "class definition",
8414                          name);
8415               }
8416
8417             arg_types = grokparms (declarator->u.function.parameters,
8418                                    &parms);
8419
8420             if (inner_declarator
8421                 && inner_declarator->kind == cdk_id
8422                 && inner_declarator->u.id.sfk == sfk_destructor
8423                 && arg_types != void_list_node)
8424               {
8425                 error ("destructors may not have parameters");
8426                 arg_types = void_list_node;
8427                 parms = NULL_TREE;
8428               }
8429
8430             type = build_function_type (type, arg_types);
8431           }
8432           break;
8433
8434         case cdk_pointer:
8435         case cdk_reference:
8436         case cdk_ptrmem:
8437           /* Filter out pointers-to-references and references-to-references.
8438              We can get these if a TYPE_DECL is used.  */
8439
8440           if (TREE_CODE (type) == REFERENCE_TYPE)
8441             {
8442               if (declarator->kind != cdk_reference)
8443                 {
8444                   error ("cannot declare pointer to %q#T", type);
8445                   type = TREE_TYPE (type);
8446                 }
8447
8448               /* In C++0x, we allow reference to reference declarations
8449                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8450                  and template type arguments [14.3.1/4 temp.arg.type]. The
8451                  check for direct reference to reference declarations, which
8452                  are still forbidden, occurs below. Reasoning behind the change
8453                  can be found in DR106, DR540, and the rvalue reference
8454                  proposals. */
8455               else if (cxx_dialect == cxx98)
8456                 {
8457                   error ("cannot declare reference to %q#T", type);
8458                   type = TREE_TYPE (type);
8459                 }
8460             }
8461           else if (VOID_TYPE_P (type))
8462             {
8463               if (declarator->kind == cdk_reference)
8464                 error ("cannot declare reference to %q#T", type);
8465               else if (declarator->kind == cdk_ptrmem)
8466                 error ("cannot declare pointer to %q#T member", type);
8467             }
8468
8469           /* We now know that the TYPE_QUALS don't apply to the decl,
8470              but to the target of the pointer.  */
8471           type_quals = TYPE_UNQUALIFIED;
8472
8473           if (declarator->kind == cdk_ptrmem
8474               && (TREE_CODE (type) == FUNCTION_TYPE
8475                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8476             {
8477               memfn_quals |= cp_type_quals (type);
8478               type = build_memfn_type (type,
8479                                        declarator->u.pointer.class_type,
8480                                        memfn_quals);
8481               memfn_quals = TYPE_UNQUALIFIED;
8482             }
8483
8484           if (TREE_CODE (type) == FUNCTION_TYPE
8485               && cp_type_quals (type) != TYPE_UNQUALIFIED)
8486             error ("cannot declare %s to qualified function type %qT",
8487                    declarator->kind == cdk_reference ? "reference" : "pointer",
8488                    type);
8489
8490           if (declarator->kind == cdk_reference)
8491             {
8492               /* In C++0x, the type we are creating a reference to might be
8493                  a typedef which is itself a reference type. In that case,
8494                  we follow the reference collapsing rules in
8495                  [7.1.3/8 dcl.typedef] to create the final reference type:
8496
8497                  "If a typedef TD names a type that is a reference to a type
8498                  T, an attempt to create the type 'lvalue reference to cv TD'
8499                  creates the type 'lvalue reference to T,' while an attempt
8500                  to create the type "rvalue reference to cv TD' creates the
8501                  type TD."
8502               */
8503               if (!VOID_TYPE_P (type))
8504                 type = cp_build_reference_type
8505                        ((TREE_CODE (type) == REFERENCE_TYPE
8506                          ? TREE_TYPE (type) : type),
8507                         (declarator->u.reference.rvalue_ref
8508                          && (TREE_CODE(type) != REFERENCE_TYPE
8509                              || TYPE_REF_IS_RVALUE (type))));
8510
8511               /* In C++0x, we need this check for direct reference to
8512                  reference declarations, which are forbidden by
8513                  [8.3.2/5 dcl.ref]. Reference to reference declarations
8514                  are only allowed indirectly through typedefs and template
8515                  type arguments. Example:
8516
8517                    void foo(int & &);      // invalid ref-to-ref decl
8518
8519                    typedef int & int_ref;
8520                    void foo(int_ref &);    // valid ref-to-ref decl
8521               */
8522               if (inner_declarator && inner_declarator->kind == cdk_reference)
8523                 error ("cannot declare reference to %q#T, which is not "
8524                        "a typedef or a template type argument", type);
8525             }
8526           else if (TREE_CODE (type) == METHOD_TYPE)
8527             type = build_ptrmemfunc_type (build_pointer_type (type));
8528           else if (declarator->kind == cdk_ptrmem)
8529             {
8530               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8531                           != NAMESPACE_DECL);
8532               if (declarator->u.pointer.class_type == error_mark_node)
8533                 /* We will already have complained.  */
8534                 type = error_mark_node;
8535               else
8536                 type = build_ptrmem_type (declarator->u.pointer.class_type,
8537                                           type);
8538             }
8539           else
8540             type = build_pointer_type (type);
8541
8542           /* Process a list of type modifier keywords (such as
8543              const or volatile) that were given inside the `*' or `&'.  */
8544
8545           if (declarator->u.pointer.qualifiers)
8546             {
8547               type
8548                 = cp_build_qualified_type (type,
8549                                            declarator->u.pointer.qualifiers);
8550               type_quals = cp_type_quals (type);
8551             }
8552           ctype = NULL_TREE;
8553           break;
8554
8555         case cdk_error:
8556           break;
8557
8558         default:
8559           gcc_unreachable ();
8560         }
8561     }
8562
8563   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8564       && TREE_CODE (type) != FUNCTION_TYPE
8565       && TREE_CODE (type) != METHOD_TYPE)
8566     {
8567       error ("template-id %qD used as a declarator",
8568              unqualified_id);
8569       unqualified_id = dname;
8570     }
8571
8572   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8573      qualified with a class-name, turn it into a METHOD_TYPE, unless
8574      we know that the function is static.  We take advantage of this
8575      opportunity to do other processing that pertains to entities
8576      explicitly declared to be class members.  Note that if DECLARATOR
8577      is non-NULL, we know it is a cdk_id declarator; otherwise, we
8578      would not have exited the loop above.  */
8579   if (declarator
8580       && declarator->u.id.qualifying_scope
8581       && TYPE_P (declarator->u.id.qualifying_scope))
8582     {
8583       tree t;
8584
8585       ctype = declarator->u.id.qualifying_scope;
8586       ctype = TYPE_MAIN_VARIANT (ctype);
8587       t = ctype;
8588       while (t != NULL_TREE && CLASS_TYPE_P (t))
8589         {
8590           /* You're supposed to have one `template <...>' for every
8591              template class, but you don't need one for a full
8592              specialization.  For example:
8593
8594                template <class T> struct S{};
8595                template <> struct S<int> { void f(); };
8596                void S<int>::f () {}
8597
8598              is correct; there shouldn't be a `template <>' for the
8599              definition of `S<int>::f'.  */
8600           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8601               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8602             /* T is an explicit (not partial) specialization.  All
8603                containing classes must therefore also be explicitly
8604                specialized.  */
8605             break;
8606           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8607               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8608             template_count += 1;
8609
8610           t = TYPE_MAIN_DECL (t);
8611           t = DECL_CONTEXT (t);
8612         }
8613
8614       if (ctype == current_class_type)
8615         {
8616           if (friendp)
8617             {
8618               permerror (input_location, "member functions are implicitly friends of their class");
8619               friendp = 0;
8620             }
8621           else
8622             permerror (declarator->id_loc, 
8623                           "extra qualification %<%T::%> on member %qs",
8624                           ctype, name);
8625         }
8626       else if (/* If the qualifying type is already complete, then we
8627                   can skip the following checks.  */
8628                !COMPLETE_TYPE_P (ctype)
8629                && (/* If the function is being defined, then
8630                       qualifying type must certainly be complete.  */
8631                    funcdef_flag
8632                    /* A friend declaration of "T::f" is OK, even if
8633                       "T" is a template parameter.  But, if this
8634                       function is not a friend, the qualifying type
8635                       must be a class.  */
8636                    || (!friendp && !CLASS_TYPE_P (ctype))
8637                    /* For a declaration, the type need not be
8638                       complete, if either it is dependent (since there
8639                       is no meaningful definition of complete in that
8640                       case) or the qualifying class is currently being
8641                       defined.  */
8642                    || !(dependent_type_p (ctype)
8643                         || currently_open_class (ctype)))
8644                /* Check that the qualifying type is complete.  */
8645                && !complete_type_or_else (ctype, NULL_TREE))
8646         return error_mark_node;
8647       else if (TREE_CODE (type) == FUNCTION_TYPE)
8648         {
8649           tree sname = declarator->u.id.unqualified_name;
8650
8651           if (current_class_type
8652               && (!friendp || funcdef_flag))
8653             {
8654               error (funcdef_flag
8655                      ? "cannot define member function %<%T::%s%> within %<%T%>"
8656                      : "cannot declare member function %<%T::%s%> within %<%T%>",
8657                      ctype, name, current_class_type);
8658               return error_mark_node;
8659             }
8660
8661           if (TREE_CODE (sname) == IDENTIFIER_NODE
8662               && NEW_DELETE_OPNAME_P (sname))
8663             /* Overloaded operator new and operator delete
8664                are always static functions.  */
8665             ;
8666           else
8667             type = build_memfn_type (type, ctype, memfn_quals);
8668         }
8669       else if (declspecs->specs[(int)ds_typedef]
8670                && current_class_type)
8671         {
8672           error ("cannot declare member %<%T::%s%> within %qT",
8673                  ctype, name, current_class_type);
8674           return error_mark_node;
8675         }
8676     }
8677
8678   /* Now TYPE has the actual type.  */
8679
8680   if (returned_attrs)
8681     {
8682       if (attrlist)
8683         *attrlist = chainon (returned_attrs, *attrlist);
8684       else
8685         attrlist = &returned_attrs;
8686     }
8687
8688   /* Handle parameter packs. */
8689   if (parameter_pack_p)
8690     {
8691       if (decl_context == PARM)
8692         /* Turn the type into a pack expansion.*/
8693         type = make_pack_expansion (type);
8694       else
8695         error ("non-parameter %qs cannot be a parameter pack", name);
8696     }
8697
8698   /* Did array size calculations overflow?  */
8699
8700   if (TREE_CODE (type) == ARRAY_TYPE
8701       && COMPLETE_TYPE_P (type)
8702       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8703       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8704     {
8705       error ("size of array %qs is too large", name);
8706       /* If we proceed with the array type as it is, we'll eventually
8707          crash in tree_low_cst().  */
8708       type = error_mark_node;
8709     }
8710
8711   if ((decl_context == FIELD || decl_context == PARM)
8712       && !processing_template_decl
8713       && variably_modified_type_p (type, NULL_TREE))
8714     {
8715       if (decl_context == FIELD)
8716         error ("data member may not have variably modified type %qT", type);
8717       else
8718         error ("parameter may not have variably modified type %qT", type);
8719       type = error_mark_node;
8720     }
8721
8722   if (explicitp == 1 || (explicitp && friendp))
8723     {
8724       /* [dcl.fct.spec] The explicit specifier shall only be used in
8725          declarations of constructors within a class definition.  */
8726       error ("only declarations of constructors can be %<explicit%>");
8727       explicitp = 0;
8728     }
8729
8730   if (storage_class == sc_mutable)
8731     {
8732       if (decl_context != FIELD || friendp)
8733         {
8734           error ("non-member %qs cannot be declared %<mutable%>", name);
8735           storage_class = sc_none;
8736         }
8737       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8738         {
8739           error ("non-object member %qs cannot be declared %<mutable%>", name);
8740           storage_class = sc_none;
8741         }
8742       else if (TREE_CODE (type) == FUNCTION_TYPE
8743                || TREE_CODE (type) == METHOD_TYPE)
8744         {
8745           error ("function %qs cannot be declared %<mutable%>", name);
8746           storage_class = sc_none;
8747         }
8748       else if (staticp)
8749         {
8750           error ("static %qs cannot be declared %<mutable%>", name);
8751           storage_class = sc_none;
8752         }
8753       else if (type_quals & TYPE_QUAL_CONST)
8754         {
8755           error ("const %qs cannot be declared %<mutable%>", name);
8756           storage_class = sc_none;
8757         }
8758     }
8759
8760   /* If this is declaring a typedef name, return a TYPE_DECL.  */
8761   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8762     {
8763       tree decl;
8764
8765       /* Note that the grammar rejects storage classes
8766          in typenames, fields or parameters.  */
8767       if (current_lang_name == lang_name_java)
8768         TYPE_FOR_JAVA (type) = 1;
8769
8770       /* This declaration:
8771
8772            typedef void f(int) const;
8773
8774          declares a function type which is not a member of any
8775          particular class, but which is cv-qualified; for
8776          example "f S::*" declares a pointer to a const-qualified
8777          member function of S.  We record the cv-qualification in the
8778          function type.  */
8779       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8780         {
8781           type = cp_build_qualified_type (type, memfn_quals);
8782           
8783           /* We have now dealt with these qualifiers.  */
8784           memfn_quals = TYPE_UNQUALIFIED;
8785         }
8786
8787       if (decl_context == FIELD)
8788         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8789       else
8790         decl = build_decl (TYPE_DECL, unqualified_id, type);
8791       if (id_declarator && declarator->u.id.qualifying_scope) {
8792         error ("%Jtypedef name may not be a nested-name-specifier", decl);
8793         TREE_TYPE (decl) = error_mark_node;
8794       }
8795
8796       if (decl_context != FIELD)
8797         {
8798           if (!current_function_decl)
8799             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8800           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8801                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8802                        (current_function_decl)))
8803             /* The TYPE_DECL is "abstract" because there will be
8804                clones of this constructor/destructor, and there will
8805                be copies of this TYPE_DECL generated in those
8806                clones.  */
8807             DECL_ABSTRACT (decl) = 1;
8808         }
8809       else if (constructor_name_p (unqualified_id, current_class_type))
8810         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
8811                    "as enclosing class",
8812                    unqualified_id);
8813
8814       /* If the user declares "typedef struct {...} foo" then the
8815          struct will have an anonymous name.  Fill that name in now.
8816          Nothing can refer to it, so nothing needs know about the name
8817          change.  */
8818       if (type != error_mark_node
8819           && unqualified_id
8820           && TYPE_NAME (type)
8821           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8822           && TYPE_ANONYMOUS_P (type)
8823           && cp_type_quals (type) == TYPE_UNQUALIFIED)
8824         {
8825           tree t;
8826
8827           /* Replace the anonymous name with the real name everywhere.  */
8828           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8829             {
8830               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8831                 {
8832                   debug_hooks->set_name (t, decl);
8833                   TYPE_NAME (t) = decl;
8834                 }
8835             }
8836
8837           if (TYPE_LANG_SPECIFIC (type))
8838             TYPE_WAS_ANONYMOUS (type) = 1;
8839
8840           /* If this is a typedef within a template class, the nested
8841              type is a (non-primary) template.  The name for the
8842              template needs updating as well.  */
8843           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
8844             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
8845               = TYPE_IDENTIFIER (type);
8846
8847           /* FIXME remangle member functions; member functions of a
8848              type with external linkage have external linkage.  */
8849         }
8850
8851       if (signed_p
8852           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8853         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8854
8855       bad_specifiers (decl, "type", virtualp,
8856                       memfn_quals != TYPE_UNQUALIFIED,
8857                       inlinep, friendp, raises != NULL_TREE);
8858
8859       return decl;
8860     }
8861
8862   /* Detect the case of an array type of unspecified size
8863      which came, as such, direct from a typedef name.
8864      We must copy the type, so that the array's domain can be
8865      individually set by the object's initializer.  */
8866
8867   if (type && typedef_type
8868       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
8869       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8870     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8871
8872   /* Detect where we're using a typedef of function type to declare a
8873      function. PARMS will not be set, so we must create it now.  */
8874
8875   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8876     {
8877       tree decls = NULL_TREE;
8878       tree args;
8879
8880       for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8881         {
8882           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
8883
8884           TREE_CHAIN (decl) = decls;
8885           decls = decl;
8886         }
8887
8888       parms = nreverse (decls);
8889
8890       if (decl_context != TYPENAME)
8891         {
8892           /* A cv-qualifier-seq shall only be part of the function type
8893              for a non-static member function. [8.3.5/4 dcl.fct] */
8894           if (cp_type_quals (type) != TYPE_UNQUALIFIED
8895               && (current_class_type == NULL_TREE || staticp) )
8896             {
8897               error (staticp
8898                      ? G_("qualified function types cannot be used to "
8899                           "declare static member functions")
8900                      : G_("qualified function types cannot be used to "
8901                           "declare free functions"));
8902               type = TYPE_MAIN_VARIANT (type);
8903             }
8904
8905           /* The qualifiers on the function type become the qualifiers on
8906              the non-static member function. */
8907           memfn_quals |= cp_type_quals (type);
8908         }
8909     }
8910
8911   /* If this is a type name (such as, in a cast or sizeof),
8912      compute the type and return it now.  */
8913
8914   if (decl_context == TYPENAME)
8915     {
8916       /* Note that the grammar rejects storage classes
8917          in typenames, fields or parameters.  */
8918       if (type_quals != TYPE_UNQUALIFIED)
8919         type_quals = TYPE_UNQUALIFIED;
8920
8921       /* Special case: "friend class foo" looks like a TYPENAME context.  */
8922       if (friendp)
8923         {
8924           if (type_quals != TYPE_UNQUALIFIED)
8925             {
8926               error ("type qualifiers specified for friend class declaration");
8927               type_quals = TYPE_UNQUALIFIED;
8928             }
8929           if (inlinep)
8930             {
8931               error ("%<inline%> specified for friend class declaration");
8932               inlinep = 0;
8933             }
8934
8935           if (!current_aggr)
8936             {
8937               /* Don't allow friend declaration without a class-key.  */
8938               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8939                 permerror (input_location, "template parameters cannot be friends");
8940               else if (TREE_CODE (type) == TYPENAME_TYPE)
8941                 permerror (input_location, "friend declaration requires class-key, "
8942                            "i.e. %<friend class %T::%D%>",
8943                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8944               else
8945                 permerror (input_location, "friend declaration requires class-key, "
8946                            "i.e. %<friend %#T%>",
8947                            type);
8948             }
8949
8950           /* Only try to do this stuff if we didn't already give up.  */
8951           if (type != integer_type_node)
8952             {
8953               /* A friendly class?  */
8954               if (current_class_type)
8955                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8956                                    /*complain=*/true);
8957               else
8958                 error ("trying to make class %qT a friend of global scope",
8959                        type);
8960
8961               type = void_type_node;
8962             }
8963         }
8964       else if (memfn_quals)
8965         {
8966           if (ctype == NULL_TREE
8967               && TREE_CODE (type) == METHOD_TYPE)
8968             ctype = TYPE_METHOD_BASETYPE (type);
8969
8970           if (ctype)
8971             type = build_memfn_type (type, ctype, memfn_quals);
8972           /* Core issue #547: need to allow this in template type args.  */
8973           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
8974             type = cp_build_qualified_type (type, memfn_quals);
8975           else
8976             error ("invalid qualifiers on non-member function type");
8977         }
8978
8979       return type;
8980     }
8981   else if (unqualified_id == NULL_TREE && decl_context != PARM
8982            && decl_context != CATCHPARM
8983            && TREE_CODE (type) != UNION_TYPE
8984            && ! bitfield)
8985     {
8986       error ("abstract declarator %qT used as declaration", type);
8987       return error_mark_node;
8988     }
8989
8990   /* Only functions may be declared using an operator-function-id.  */
8991   if (unqualified_id
8992       && IDENTIFIER_OPNAME_P (unqualified_id)
8993       && TREE_CODE (type) != FUNCTION_TYPE
8994       && TREE_CODE (type) != METHOD_TYPE)
8995     {
8996       error ("declaration of %qD as non-function", unqualified_id);
8997       return error_mark_node;
8998     }
8999
9000   /* We don't check parameter types here because we can emit a better
9001      error message later.  */
9002   if (decl_context != PARM)
9003     {
9004       type = check_var_type (unqualified_id, type);
9005       if (type == error_mark_node)
9006         return error_mark_node;
9007     }
9008
9009   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9010      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9011
9012   if (decl_context == PARM || decl_context == CATCHPARM)
9013     {
9014       if (ctype || in_namespace)
9015         error ("cannot use %<::%> in parameter declaration");
9016
9017       /* A parameter declared as an array of T is really a pointer to T.
9018          One declared as a function is really a pointer to a function.
9019          One declared as a member is really a pointer to member.  */
9020
9021       if (TREE_CODE (type) == ARRAY_TYPE)
9022         {
9023           /* Transfer const-ness of array into that of type pointed to.  */
9024           type = build_pointer_type (TREE_TYPE (type));
9025           type_quals = TYPE_UNQUALIFIED;
9026         }
9027       else if (TREE_CODE (type) == FUNCTION_TYPE)
9028         type = build_pointer_type (type);
9029     }
9030
9031   {
9032     tree decl;
9033
9034     if (decl_context == PARM)
9035       {
9036         decl = cp_build_parm_decl (unqualified_id, type);
9037
9038         bad_specifiers (decl, "parameter", virtualp,
9039                         memfn_quals != TYPE_UNQUALIFIED,
9040                         inlinep, friendp, raises != NULL_TREE);
9041       }
9042     else if (decl_context == FIELD)
9043       {
9044         /* The C99 flexible array extension.  */
9045         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9046             && TYPE_DOMAIN (type) == NULL_TREE)
9047           {
9048             tree itype = compute_array_index_type (dname, integer_zero_node);
9049             type = build_cplus_array_type (TREE_TYPE (type), itype);
9050           }
9051
9052         if (type == error_mark_node)
9053           {
9054             /* Happens when declaring arrays of sizes which
9055                are error_mark_node, for example.  */
9056             decl = NULL_TREE;
9057           }
9058         else if (in_namespace && !friendp)
9059           {
9060             /* Something like struct S { int N::j; };  */
9061             error ("invalid use of %<::%>");
9062             return error_mark_node;
9063           }
9064         else if (TREE_CODE (type) == FUNCTION_TYPE)
9065           {
9066             int publicp = 0;
9067             tree function_context;
9068
9069             if (friendp == 0)
9070               {
9071                 if (ctype == NULL_TREE)
9072                   ctype = current_class_type;
9073
9074                 if (ctype == NULL_TREE)
9075                   {
9076                     error ("can't make %qD into a method -- not in a class",
9077                            unqualified_id);
9078                     return error_mark_node;
9079                   }
9080
9081                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9082                    ARM 9.5 */
9083                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9084                   {
9085                     error ("function %qD declared virtual inside a union",
9086                            unqualified_id);
9087                     return error_mark_node;
9088                   }
9089
9090                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9091                   {
9092                     if (virtualp)
9093                       {
9094                         error ("%qD cannot be declared virtual, since it "
9095                                "is always static",
9096                                unqualified_id);
9097                         virtualp = 0;
9098                       }
9099                   }
9100                 else if (staticp < 2)
9101                   type = build_memfn_type (type, ctype, memfn_quals);
9102               }
9103
9104             /* Check that the name used for a destructor makes sense.  */
9105             if (sfk == sfk_destructor)
9106               {
9107                 tree uqname = id_declarator->u.id.unqualified_name;
9108
9109                 if (!ctype)
9110                   {
9111                     gcc_assert (friendp);
9112                     error ("expected qualified name in friend declaration "
9113                            "for destructor %qD", uqname);
9114                     return error_mark_node;
9115                   }
9116
9117                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9118                   {
9119                     error ("declaration of %qD as member of %qT",
9120                            uqname, ctype);
9121                     return error_mark_node;
9122                   }
9123               }
9124             else if (sfk == sfk_constructor && friendp)
9125               {
9126                 error ("expected qualified name in friend declaration "
9127                        "for constructor %qD",
9128                        id_declarator->u.id.unqualified_name);
9129                 return error_mark_node;
9130               }
9131
9132             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9133             function_context = (ctype != NULL_TREE) ?
9134               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9135             publicp = (! friendp || ! staticp)
9136               && function_context == NULL_TREE;
9137             decl = grokfndecl (ctype, type,
9138                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9139                                ? unqualified_id : dname,
9140                                parms,
9141                                unqualified_id,
9142                                virtualp, flags, memfn_quals, raises,
9143                                friendp ? -1 : 0, friendp, publicp, inlinep,
9144                                sfk,
9145                                funcdef_flag, template_count, in_namespace,
9146                                attrlist, declarator->id_loc);
9147             if (decl == NULL_TREE)
9148               return error_mark_node;
9149 #if 0
9150             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9151             /* The decl and setting of decl_attr is also turned off.  */
9152             decl = build_decl_attribute_variant (decl, decl_attr);
9153 #endif
9154
9155             /* [class.conv.ctor]
9156
9157                A constructor declared without the function-specifier
9158                explicit that can be called with a single parameter
9159                specifies a conversion from the type of its first
9160                parameter to the type of its class.  Such a constructor
9161                is called a converting constructor.  */
9162             if (explicitp == 2)
9163               DECL_NONCONVERTING_P (decl) = 1;
9164           }
9165         else if (TREE_CODE (type) == METHOD_TYPE)
9166           {
9167             /* We only get here for friend declarations of
9168                members of other classes.  */
9169             /* All method decls are public, so tell grokfndecl to set
9170                TREE_PUBLIC, also.  */
9171             decl = grokfndecl (ctype, type,
9172                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9173                                ? unqualified_id : dname,
9174                                parms,
9175                                unqualified_id,
9176                                virtualp, flags, memfn_quals, raises,
9177                                friendp ? -1 : 0, friendp, 1, 0, sfk,
9178                                funcdef_flag, template_count, in_namespace,
9179                                attrlist,
9180                                declarator->id_loc);
9181             if (decl == NULL_TREE)
9182               return error_mark_node;
9183           }
9184         else if (!staticp && !dependent_type_p (type)
9185                  && !COMPLETE_TYPE_P (complete_type (type))
9186                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9187           {
9188             if (unqualified_id)
9189               error ("field %qD has incomplete type", unqualified_id);
9190             else
9191               error ("name %qT has incomplete type", type);
9192
9193             /* If we're instantiating a template, tell them which
9194                instantiation made the field's type be incomplete.  */
9195             if (current_class_type
9196                 && TYPE_NAME (current_class_type)
9197                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9198                 && declspecs->type
9199                 && declspecs->type == type)
9200               error ("  in instantiation of template %qT",
9201                      current_class_type);
9202
9203             return error_mark_node;
9204           }
9205         else
9206           {
9207             if (friendp)
9208               {
9209                 error ("%qE is neither function nor member function; "
9210                        "cannot be declared friend", unqualified_id);
9211                 friendp = 0;
9212               }
9213             decl = NULL_TREE;
9214           }
9215
9216         if (friendp)
9217           {
9218             /* Friends are treated specially.  */
9219             if (ctype == current_class_type)
9220               ;  /* We already issued a permerror.  */
9221             else if (decl && DECL_NAME (decl))
9222               {
9223                 if (template_class_depth (current_class_type) == 0)
9224                   {
9225                     decl = check_explicit_specialization
9226                       (unqualified_id, decl, template_count,
9227                        2 * funcdef_flag + 4);
9228                     if (decl == error_mark_node)
9229                       return error_mark_node;
9230                   }
9231
9232                 decl = do_friend (ctype, unqualified_id, decl,
9233                                   *attrlist, flags,
9234                                   funcdef_flag);
9235                 return decl;
9236               }
9237             else
9238               return error_mark_node;
9239           }
9240
9241         /* Structure field.  It may not be a function, except for C++.  */
9242
9243         if (decl == NULL_TREE)
9244           {
9245             if (initialized)
9246               {
9247                 if (!staticp)
9248                   {
9249                     /* An attempt is being made to initialize a non-static
9250                        member.  But, from [class.mem]:
9251
9252                        4 A member-declarator can contain a
9253                        constant-initializer only if it declares a static
9254                        member (_class.static_) of integral or enumeration
9255                        type, see _class.static.data_.
9256
9257                        This used to be relatively common practice, but
9258                        the rest of the compiler does not correctly
9259                        handle the initialization unless the member is
9260                        static so we make it static below.  */
9261                     permerror (input_location, "ISO C++ forbids initialization of member %qD",
9262                                unqualified_id);
9263                     permerror (input_location, "making %qD static", unqualified_id);
9264                     staticp = 1;
9265                   }
9266
9267                 if (uses_template_parms (type))
9268                   /* We'll check at instantiation time.  */
9269                   ;
9270                 else if (check_static_variable_definition (unqualified_id,
9271                                                            type))
9272                   /* If we just return the declaration, crashes
9273                      will sometimes occur.  We therefore return
9274                      void_type_node, as if this was a friend
9275                      declaration, to cause callers to completely
9276                      ignore this declaration.  */
9277                   return error_mark_node;
9278               }
9279
9280             if (staticp)
9281               {
9282                 /* C++ allows static class members.  All other work
9283                    for this is done by grokfield.  */
9284                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9285                 set_linkage_for_static_data_member (decl);
9286                 /* Even if there is an in-class initialization, DECL
9287                    is considered undefined until an out-of-class
9288                    definition is provided.  */
9289                 DECL_EXTERNAL (decl) = 1;
9290
9291                 if (thread_p)
9292                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9293               }
9294             else
9295               {
9296                 decl = build_decl (FIELD_DECL, unqualified_id, type);
9297                 DECL_NONADDRESSABLE_P (decl) = bitfield;
9298                 if (bitfield && !unqualified_id)
9299                   TREE_NO_WARNING (decl) = 1;
9300
9301                 if (storage_class == sc_mutable)
9302                   {
9303                     DECL_MUTABLE_P (decl) = 1;
9304                     storage_class = sc_none;
9305                   }
9306               }
9307
9308             bad_specifiers (decl, "field", virtualp,
9309                             memfn_quals != TYPE_UNQUALIFIED,
9310                             inlinep, friendp, raises != NULL_TREE);
9311           }
9312       }
9313     else if (TREE_CODE (type) == FUNCTION_TYPE
9314              || TREE_CODE (type) == METHOD_TYPE)
9315       {
9316         tree original_name;
9317         int publicp = 0;
9318
9319         if (!unqualified_id)
9320           return error_mark_node;
9321
9322         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9323           original_name = dname;
9324         else
9325           original_name = unqualified_id;
9326
9327         if (storage_class == sc_auto)
9328           error ("storage class %<auto%> invalid for function %qs", name);
9329         else if (storage_class == sc_register)
9330           error ("storage class %<register%> invalid for function %qs", name);
9331         else if (thread_p)
9332           error ("storage class %<__thread%> invalid for function %qs", name);
9333
9334         /* Function declaration not at top level.
9335            Storage classes other than `extern' are not allowed
9336            and `extern' makes no difference.  */
9337         if (! toplevel_bindings_p ()
9338             && (storage_class == sc_static
9339                 || declspecs->specs[(int)ds_inline])
9340             && pedantic)
9341           {
9342             if (storage_class == sc_static)
9343               pedwarn (input_location, OPT_pedantic, 
9344                        "%<static%> specified invalid for function %qs "
9345                        "declared out of global scope", name);
9346             else
9347               pedwarn (input_location, OPT_pedantic, 
9348                        "%<inline%> specifier invalid for function %qs "
9349                        "declared out of global scope", name);
9350           }
9351
9352         if (ctype != NULL_TREE
9353             && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9354           {
9355             error ("%q#T is not a class or a namespace", ctype);
9356             ctype = NULL_TREE;
9357           }
9358
9359         if (ctype == NULL_TREE)
9360           {
9361             if (virtualp)
9362               {
9363                 error ("virtual non-class function %qs", name);
9364                 virtualp = 0;
9365               }
9366             else if (sfk == sfk_constructor
9367                      || sfk == sfk_destructor)
9368               {
9369                 error (funcdef_flag
9370                        ? "%qs defined in a non-class scope"
9371                        : "%qs declared in a non-class scope", name);
9372                 sfk = sfk_none;
9373               }
9374           }
9375         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9376                  && !NEW_DELETE_OPNAME_P (original_name))
9377           type = build_method_type_directly (ctype,
9378                                              TREE_TYPE (type),
9379                                              TYPE_ARG_TYPES (type));
9380
9381         /* Record presence of `static'.  */
9382         publicp = (ctype != NULL_TREE
9383                    || storage_class == sc_extern
9384                    || storage_class != sc_static);
9385
9386         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9387                            virtualp, flags, memfn_quals, raises,
9388                            1, friendp,
9389                            publicp, inlinep, sfk, funcdef_flag,
9390                            template_count, in_namespace, attrlist,
9391                            declarator->id_loc);
9392         if (decl == NULL_TREE)
9393           return error_mark_node;
9394
9395         if (staticp == 1)
9396           {
9397             int invalid_static = 0;
9398
9399             /* Don't allow a static member function in a class, and forbid
9400                declaring main to be static.  */
9401             if (TREE_CODE (type) == METHOD_TYPE)
9402               {
9403                 permerror (input_location, "cannot declare member function %qD to have "
9404                            "static linkage", decl);
9405                 invalid_static = 1;
9406               }
9407             else if (current_function_decl)
9408               {
9409                 /* FIXME need arm citation */
9410                 error ("cannot declare static function inside another function");
9411                 invalid_static = 1;
9412               }
9413
9414             if (invalid_static)
9415               {
9416                 staticp = 0;
9417                 storage_class = sc_none;
9418               }
9419           }
9420       }
9421     else
9422       {
9423         /* It's a variable.  */
9424
9425         /* An uninitialized decl with `extern' is a reference.  */
9426         decl = grokvardecl (type, unqualified_id,
9427                             declspecs,
9428                             initialized,
9429                             (type_quals & TYPE_QUAL_CONST) != 0,
9430                             ctype ? ctype : in_namespace);
9431         bad_specifiers (decl, "variable", virtualp,
9432                         memfn_quals != TYPE_UNQUALIFIED,
9433                         inlinep, friendp, raises != NULL_TREE);
9434
9435         if (ctype)
9436           {
9437             DECL_CONTEXT (decl) = ctype;
9438             if (staticp == 1)
9439               {
9440                 permerror (input_location, "%<static%> may not be used when defining "
9441                            "(as opposed to declaring) a static data member");
9442                 staticp = 0;
9443                 storage_class = sc_none;
9444               }
9445             if (storage_class == sc_register && TREE_STATIC (decl))
9446               {
9447                 error ("static member %qD declared %<register%>", decl);
9448                 storage_class = sc_none;
9449               }
9450             if (storage_class == sc_extern && pedantic)
9451               {
9452                 pedwarn (input_location, OPT_pedantic, 
9453                          "cannot explicitly declare member %q#D to have "
9454                          "extern linkage", decl);
9455                 storage_class = sc_none;
9456               }
9457           }
9458       }
9459
9460     if (storage_class == sc_extern && initialized && !funcdef_flag)
9461       {
9462         if (toplevel_bindings_p ())
9463           {
9464             /* It's common practice (and completely valid) to have a const
9465                be initialized and declared extern.  */
9466             if (!(type_quals & TYPE_QUAL_CONST))
9467               warning (0, "%qs initialized and declared %<extern%>", name);
9468           }
9469         else
9470           {
9471             error ("%qs has both %<extern%> and initializer", name);
9472             return error_mark_node;
9473           }
9474       }
9475
9476     /* Record `register' declaration for warnings on &
9477        and in case doing stupid register allocation.  */
9478
9479     if (storage_class == sc_register)
9480       DECL_REGISTER (decl) = 1;
9481     else if (storage_class == sc_extern)
9482       DECL_THIS_EXTERN (decl) = 1;
9483     else if (storage_class == sc_static)
9484       DECL_THIS_STATIC (decl) = 1;
9485
9486     /* Record constancy and volatility on the DECL itself .  There's
9487        no need to do this when processing a template; we'll do this
9488        for the instantiated declaration based on the type of DECL.  */
9489     if (!processing_template_decl)
9490       cp_apply_type_quals_to_decl (type_quals, decl);
9491
9492     if (set_no_warning)
9493         TREE_NO_WARNING (decl) = 1;
9494
9495     return decl;
9496   }
9497 }
9498 \f
9499 /* Subroutine of start_function.  Ensure that each of the parameter
9500    types (as listed in PARMS) is complete, as is required for a
9501    function definition.  */
9502
9503 static void
9504 require_complete_types_for_parms (tree parms)
9505 {
9506   for (; parms; parms = TREE_CHAIN (parms))
9507     {
9508       if (dependent_type_p (TREE_TYPE (parms)))
9509         continue;
9510       if (!VOID_TYPE_P (TREE_TYPE (parms))
9511           && complete_type_or_else (TREE_TYPE (parms), parms))
9512         {
9513           relayout_decl (parms);
9514           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9515         }
9516       else
9517         /* grokparms or complete_type_or_else will have already issued
9518            an error.  */
9519         TREE_TYPE (parms) = error_mark_node;
9520     }
9521 }
9522
9523 /* Returns nonzero if T is a local variable.  */
9524
9525 int
9526 local_variable_p (const_tree t)
9527 {
9528   if ((TREE_CODE (t) == VAR_DECL
9529        /* A VAR_DECL with a context that is a _TYPE is a static data
9530           member.  */
9531        && !TYPE_P (CP_DECL_CONTEXT (t))
9532        /* Any other non-local variable must be at namespace scope.  */
9533        && !DECL_NAMESPACE_SCOPE_P (t))
9534       || (TREE_CODE (t) == PARM_DECL))
9535     return 1;
9536
9537   return 0;
9538 }
9539
9540 /* Like local_variable_p, but suitable for use as a tree-walking
9541    function.  */
9542
9543 static tree
9544 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9545                          void *data ATTRIBUTE_UNUSED)
9546 {
9547   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9548     return *tp;
9549   else if (TYPE_P (*tp))
9550     *walk_subtrees = 0;
9551
9552   return NULL_TREE;
9553 }
9554
9555
9556 /* Check that ARG, which is a default-argument expression for a
9557    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
9558    something goes wrong.  DECL may also be a _TYPE node, rather than a
9559    DECL, if there is no DECL available.  */
9560
9561 tree
9562 check_default_argument (tree decl, tree arg)
9563 {
9564   tree var;
9565   tree decl_type;
9566
9567   if (TREE_CODE (arg) == DEFAULT_ARG)
9568     /* We get a DEFAULT_ARG when looking at an in-class declaration
9569        with a default argument.  Ignore the argument for now; we'll
9570        deal with it after the class is complete.  */
9571     return arg;
9572
9573   if (TYPE_P (decl))
9574     {
9575       decl_type = decl;
9576       decl = NULL_TREE;
9577     }
9578   else
9579     decl_type = TREE_TYPE (decl);
9580
9581   if (arg == error_mark_node
9582       || decl == error_mark_node
9583       || TREE_TYPE (arg) == error_mark_node
9584       || decl_type == error_mark_node)
9585     /* Something already went wrong.  There's no need to check
9586        further.  */
9587     return error_mark_node;
9588
9589   /* [dcl.fct.default]
9590
9591      A default argument expression is implicitly converted to the
9592      parameter type.  */
9593   if (!TREE_TYPE (arg)
9594       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9595     {
9596       if (decl)
9597         error ("default argument for %q#D has type %qT",
9598                decl, TREE_TYPE (arg));
9599       else
9600         error ("default argument for parameter of type %qT has type %qT",
9601                decl_type, TREE_TYPE (arg));
9602
9603       return error_mark_node;
9604     }
9605
9606   /* [dcl.fct.default]
9607
9608      Local variables shall not be used in default argument
9609      expressions.
9610
9611      The keyword `this' shall not be used in a default argument of a
9612      member function.  */
9613   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9614   if (var)
9615     {
9616       error ("default argument %qE uses local variable %qD", arg, var);
9617       return error_mark_node;
9618     }
9619
9620   /* All is well.  */
9621   return arg;
9622 }
9623
9624 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
9625
9626 static tree
9627 type_is_deprecated (tree type)
9628 {
9629   enum tree_code code;
9630   if (TREE_DEPRECATED (type))
9631     return type;
9632   if (TYPE_NAME (type)
9633       && TREE_DEPRECATED (TYPE_NAME (type)))
9634     return type;
9635
9636   code = TREE_CODE (type);
9637
9638   if (code == POINTER_TYPE || code == REFERENCE_TYPE
9639       || code == OFFSET_TYPE || code == FUNCTION_TYPE
9640       || code == METHOD_TYPE || code == ARRAY_TYPE)
9641     return type_is_deprecated (TREE_TYPE (type));
9642
9643   if (TYPE_PTRMEMFUNC_P (type))
9644     return type_is_deprecated
9645       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9646
9647   return NULL_TREE;
9648 }
9649
9650 /* Decode the list of parameter types for a function type.
9651    Given the list of things declared inside the parens,
9652    return a list of types.
9653
9654    If this parameter does not end with an ellipsis, we append
9655    void_list_node.
9656
9657    *PARMS is set to the chain of PARM_DECLs created.  */
9658
9659 static tree
9660 grokparms (tree parmlist, tree *parms)
9661 {
9662   tree result = NULL_TREE;
9663   tree decls = NULL_TREE;
9664   tree parm;
9665   int any_error = 0;
9666
9667   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9668     {
9669       tree type = NULL_TREE;
9670       tree init = TREE_PURPOSE (parm);
9671       tree decl = TREE_VALUE (parm);
9672
9673       if (parm == void_list_node)
9674         break;
9675
9676       if (! decl || TREE_TYPE (decl) == error_mark_node)
9677         continue;
9678
9679       type = TREE_TYPE (decl);
9680       if (VOID_TYPE_P (type))
9681         {
9682           if (same_type_p (type, void_type_node)
9683               && DECL_SELF_REFERENCE_P (type)
9684               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9685             /* this is a parmlist of `(void)', which is ok.  */
9686             break;
9687           cxx_incomplete_type_error (decl, type);
9688           /* It's not a good idea to actually create parameters of
9689              type `void'; other parts of the compiler assume that a
9690              void type terminates the parameter list.  */
9691           type = error_mark_node;
9692           TREE_TYPE (decl) = error_mark_node;
9693         }
9694
9695       if (type != error_mark_node
9696           && TYPE_FOR_JAVA (type)
9697           && MAYBE_CLASS_TYPE_P (type))
9698         {
9699           error ("parameter %qD has Java class type", decl);
9700           type = error_mark_node;
9701           TREE_TYPE (decl) = error_mark_node;
9702           init = NULL_TREE;
9703         }
9704
9705       if (type != error_mark_node)
9706         {
9707           if (deprecated_state != DEPRECATED_SUPPRESS)
9708             {
9709               tree deptype = type_is_deprecated (type);
9710               if (deptype)
9711                 warn_deprecated_use (deptype, NULL_TREE);
9712             }
9713
9714           /* Top-level qualifiers on the parameters are
9715              ignored for function types.  */
9716           type = cp_build_qualified_type (type, 0);
9717           if (TREE_CODE (type) == METHOD_TYPE)
9718             {
9719               error ("parameter %qD invalidly declared method type", decl);
9720               type = build_pointer_type (type);
9721               TREE_TYPE (decl) = type;
9722             }
9723           else if (abstract_virtuals_error (decl, type))
9724             any_error = 1;  /* Seems like a good idea.  */
9725           else if (POINTER_TYPE_P (type))
9726             {
9727               /* [dcl.fct]/6, parameter types cannot contain pointers
9728                  (references) to arrays of unknown bound.  */
9729               tree t = TREE_TYPE (type);
9730               int ptr = TYPE_PTR_P (type);
9731
9732               while (1)
9733                 {
9734                   if (TYPE_PTR_P (t))
9735                     ptr = 1;
9736                   else if (TREE_CODE (t) != ARRAY_TYPE)
9737                     break;
9738                   else if (!TYPE_DOMAIN (t))
9739                     break;
9740                   t = TREE_TYPE (t);
9741                 }
9742               if (TREE_CODE (t) == ARRAY_TYPE)
9743                 error ("parameter %qD includes %s to array of unknown "
9744                        "bound %qT",
9745                        decl, ptr ? "pointer" : "reference", t);
9746             }
9747
9748           if (any_error)
9749             init = NULL_TREE;
9750           else if (init && !processing_template_decl)
9751             init = check_default_argument (decl, init);
9752         }
9753
9754       if (TREE_CODE (decl) == PARM_DECL
9755           && FUNCTION_PARAMETER_PACK_P (decl)
9756           && TREE_CHAIN (parm)
9757           && TREE_CHAIN (parm) != void_list_node)
9758         error ("parameter packs must be at the end of the parameter list");
9759
9760       TREE_CHAIN (decl) = decls;
9761       decls = decl;
9762       result = tree_cons (init, type, result);
9763     }
9764   decls = nreverse (decls);
9765   result = nreverse (result);
9766   if (parm)
9767     result = chainon (result, void_list_node);
9768   *parms = decls;
9769
9770   return result;
9771 }
9772
9773 \f
9774 /* D is a constructor or overloaded `operator='.
9775
9776    Let T be the class in which D is declared. Then, this function
9777    returns:
9778
9779    -1 if D's is an ill-formed constructor or copy assignment operator
9780       whose first parameter is of type `T'.
9781    0  if D is not a copy constructor or copy assignment
9782       operator.
9783    1  if D is a copy constructor or copy assignment operator whose
9784       first parameter is a reference to const qualified T.
9785    2  if D is a copy constructor or copy assignment operator whose
9786       first parameter is a reference to non-const qualified T.
9787
9788    This function can be used as a predicate. Positive values indicate
9789    a copy constructor and nonzero values indicate a copy assignment
9790    operator.  */
9791
9792 int
9793 copy_fn_p (const_tree d)
9794 {
9795   tree args;
9796   tree arg_type;
9797   int result = 1;
9798
9799   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9800
9801   if (TREE_CODE (d) == TEMPLATE_DECL
9802       || (DECL_TEMPLATE_INFO (d)
9803           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9804     /* Instantiations of template member functions are never copy
9805        functions.  Note that member functions of templated classes are
9806        represented as template functions internally, and we must
9807        accept those as copy functions.  */
9808     return 0;
9809
9810   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9811   if (!args)
9812     return 0;
9813
9814   arg_type = TREE_VALUE (args);
9815   if (arg_type == error_mark_node)
9816     return 0;
9817
9818   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9819     {
9820       /* Pass by value copy assignment operator.  */
9821       result = -1;
9822     }
9823   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
9824            && !TYPE_REF_IS_RVALUE (arg_type)
9825            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9826     {
9827       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9828         result = 2;
9829     }
9830   else
9831     return 0;
9832
9833   args = TREE_CHAIN (args);
9834
9835   if (args && args != void_list_node && !TREE_PURPOSE (args))
9836     /* There are more non-optional args.  */
9837     return 0;
9838
9839   return result;
9840 }
9841
9842 /* D is a constructor or overloaded `operator='.
9843
9844    Let T be the class in which D is declared. Then, this function
9845    returns true when D is a move constructor or move assignment
9846    operator, false otherwise.  */
9847
9848 bool
9849 move_fn_p (const_tree d)
9850 {
9851   tree args;
9852   tree arg_type;
9853   bool result = false;
9854
9855   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9856
9857   if (cxx_dialect == cxx98)
9858     /* There are no move constructors if we are in C++98 mode.  */
9859     return false;
9860
9861   if (TREE_CODE (d) == TEMPLATE_DECL
9862       || (DECL_TEMPLATE_INFO (d)
9863          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9864     /* Instantiations of template member functions are never copy
9865        functions.  Note that member functions of templated classes are
9866        represented as template functions internally, and we must
9867        accept those as copy functions.  */
9868     return 0;
9869
9870   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9871   if (!args)
9872     return 0;
9873
9874   arg_type = TREE_VALUE (args);
9875   if (arg_type == error_mark_node)
9876     return 0;
9877
9878   if (TREE_CODE (arg_type) == REFERENCE_TYPE
9879       && TYPE_REF_IS_RVALUE (arg_type)
9880       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9881                       DECL_CONTEXT (d)))
9882     result = true;
9883
9884   args = TREE_CHAIN (args);
9885
9886   if (args && args != void_list_node && !TREE_PURPOSE (args))
9887     /* There are more non-optional args.  */
9888     return false;
9889
9890   return result;
9891 }
9892
9893 /* Remember any special properties of member function DECL.  */
9894
9895 void
9896 grok_special_member_properties (tree decl)
9897 {
9898   tree class_type;
9899
9900   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9901     return;
9902
9903   class_type = DECL_CONTEXT (decl);
9904   if (DECL_CONSTRUCTOR_P (decl))
9905     {
9906       int ctor = copy_fn_p (decl);
9907
9908       if (!DECL_ARTIFICIAL (decl))
9909         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
9910
9911       if (ctor > 0)
9912         {
9913           /* [class.copy]
9914
9915              A non-template constructor for class X is a copy
9916              constructor if its first parameter is of type X&, const
9917              X&, volatile X& or const volatile X&, and either there
9918              are no other parameters or else all other parameters have
9919              default arguments.  */
9920           TYPE_HAS_INIT_REF (class_type) = 1;
9921           if (!DECL_DEFAULTED_FN (decl))
9922             TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
9923           if (ctor > 1)
9924             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
9925         }
9926       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
9927         {
9928           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
9929           if (TREE_CODE (decl) == TEMPLATE_DECL || !DECL_DEFAULTED_FN (decl))
9930             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
9931         }
9932       else if (is_list_ctor (decl))
9933         TYPE_HAS_LIST_CTOR (class_type) = 1;
9934     }
9935   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9936     {
9937       /* [class.copy]
9938
9939          A non-template assignment operator for class X is a copy
9940          assignment operator if its parameter is of type X, X&, const
9941          X&, volatile X& or const volatile X&.  */
9942
9943       int assop = copy_fn_p (decl);
9944
9945       if (assop)
9946         {
9947           TYPE_HAS_ASSIGN_REF (class_type) = 1;
9948           if (!DECL_DEFAULTED_FN (decl))
9949             TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
9950           if (assop != 1)
9951             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
9952         }
9953     }
9954 }
9955
9956 /* Check a constructor DECL has the correct form.  Complains
9957    if the class has a constructor of the form X(X).  */
9958
9959 int
9960 grok_ctor_properties (const_tree ctype, const_tree decl)
9961 {
9962   int ctor_parm = copy_fn_p (decl);
9963
9964   if (ctor_parm < 0)
9965     {
9966       /* [class.copy]
9967
9968          A declaration of a constructor for a class X is ill-formed if
9969          its first parameter is of type (optionally cv-qualified) X
9970          and either there are no other parameters or else all other
9971          parameters have default arguments.
9972
9973          We *don't* complain about member template instantiations that
9974          have this form, though; they can occur as we try to decide
9975          what constructor to use during overload resolution.  Since
9976          overload resolution will never prefer such a constructor to
9977          the non-template copy constructor (which is either explicitly
9978          or implicitly defined), there's no need to worry about their
9979          existence.  Theoretically, they should never even be
9980          instantiated, but that's hard to forestall.  */
9981       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
9982                 ctype, ctype);
9983       return 0;
9984     }
9985
9986   return 1;
9987 }
9988
9989 /* An operator with this code is unary, but can also be binary.  */
9990
9991 static int
9992 ambi_op_p (enum tree_code code)
9993 {
9994   return (code == INDIRECT_REF
9995           || code == ADDR_EXPR
9996           || code == UNARY_PLUS_EXPR
9997           || code == NEGATE_EXPR
9998           || code == PREINCREMENT_EXPR
9999           || code == PREDECREMENT_EXPR);
10000 }
10001
10002 /* An operator with this name can only be unary.  */
10003
10004 static int
10005 unary_op_p (enum tree_code code)
10006 {
10007   return (code == TRUTH_NOT_EXPR
10008           || code == BIT_NOT_EXPR
10009           || code == COMPONENT_REF
10010           || code == TYPE_EXPR);
10011 }
10012
10013 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10014    errors are issued for invalid declarations.  */
10015
10016 bool
10017 grok_op_properties (tree decl, bool complain)
10018 {
10019   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10020   tree argtype;
10021   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10022   tree name = DECL_NAME (decl);
10023   enum tree_code operator_code;
10024   int arity;
10025   bool ellipsis_p;
10026   tree class_type;
10027
10028   /* Count the number of arguments and check for ellipsis.  */
10029   for (argtype = argtypes, arity = 0;
10030        argtype && argtype != void_list_node;
10031        argtype = TREE_CHAIN (argtype))
10032     ++arity;
10033   ellipsis_p = !argtype;
10034
10035   class_type = DECL_CONTEXT (decl);
10036   if (class_type && !CLASS_TYPE_P (class_type))
10037     class_type = NULL_TREE;
10038
10039   if (DECL_CONV_FN_P (decl))
10040     operator_code = TYPE_EXPR;
10041   else
10042     do
10043       {
10044 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10045         if (ansi_opname (CODE) == name)                         \
10046           {                                                     \
10047             operator_code = (CODE);                             \
10048             break;                                              \
10049           }                                                     \
10050         else if (ansi_assopname (CODE) == name)                 \
10051           {                                                     \
10052             operator_code = (CODE);                             \
10053             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10054             break;                                              \
10055           }
10056
10057 #include "operators.def"
10058 #undef DEF_OPERATOR
10059
10060         gcc_unreachable ();
10061       }
10062     while (0);
10063   gcc_assert (operator_code != MAX_TREE_CODES);
10064   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10065
10066   if (class_type)
10067     switch (operator_code)
10068       {
10069       case NEW_EXPR:
10070         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10071         break;
10072
10073       case DELETE_EXPR:
10074         TYPE_GETS_DELETE (class_type) |= 1;
10075         break;
10076
10077       case VEC_NEW_EXPR:
10078         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10079         break;
10080
10081       case VEC_DELETE_EXPR:
10082         TYPE_GETS_DELETE (class_type) |= 2;
10083         break;
10084
10085       default:
10086         break;
10087       }
10088
10089     /* [basic.std.dynamic.allocation]/1:
10090
10091        A program is ill-formed if an allocation function is declared
10092        in a namespace scope other than global scope or declared static
10093        in global scope.
10094
10095        The same also holds true for deallocation functions.  */
10096   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10097       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10098     {
10099       if (DECL_NAMESPACE_SCOPE_P (decl))
10100         {
10101           if (CP_DECL_CONTEXT (decl) != global_namespace)
10102             {
10103               error ("%qD may not be declared within a namespace", decl);
10104               return false;
10105             }
10106           else if (!TREE_PUBLIC (decl))
10107             {
10108               error ("%qD may not be declared as static", decl);
10109               return false;
10110             }
10111         }
10112     }
10113
10114   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10115     {
10116       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10117       DECL_IS_OPERATOR_NEW (decl) = 1;
10118     }
10119   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10120     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10121   else
10122     {
10123       /* An operator function must either be a non-static member function
10124          or have at least one parameter of a class, a reference to a class,
10125          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10126       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10127         {
10128           if (operator_code == TYPE_EXPR
10129               || operator_code == CALL_EXPR
10130               || operator_code == COMPONENT_REF
10131               || operator_code == ARRAY_REF
10132               || operator_code == NOP_EXPR)
10133             {
10134               error ("%qD must be a nonstatic member function", decl);
10135               return false;
10136             }
10137           else
10138             {
10139               tree p;
10140
10141               if (DECL_STATIC_FUNCTION_P (decl))
10142                 {
10143                   error ("%qD must be either a non-static member "
10144                          "function or a non-member function", decl);
10145                   return false;
10146                 }
10147
10148               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10149                 {
10150                   tree arg = non_reference (TREE_VALUE (p));
10151                   if (arg == error_mark_node)
10152                     return false;
10153
10154                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10155                      because these checks are performed even on
10156                      template functions.  */
10157                   if (MAYBE_CLASS_TYPE_P (arg)
10158                       || TREE_CODE (arg) == ENUMERAL_TYPE)
10159                     break;
10160                 }
10161
10162               if (!p || p == void_list_node)
10163                 {
10164                   if (complain)
10165                     error ("%qD must have an argument of class or "
10166                            "enumerated type", decl);
10167                   return false;
10168                 }
10169             }
10170         }
10171
10172       /* There are no restrictions on the arguments to an overloaded
10173          "operator ()".  */
10174       if (operator_code == CALL_EXPR)
10175         return true;
10176
10177       /* Warn about conversion operators that will never be used.  */
10178       if (IDENTIFIER_TYPENAME_P (name)
10179           && ! DECL_TEMPLATE_INFO (decl)
10180           && warn_conversion
10181           /* Warn only declaring the function; there is no need to
10182              warn again about out-of-class definitions.  */
10183           && class_type == current_class_type)
10184         {
10185           tree t = TREE_TYPE (name);
10186           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10187           const char *what = 0;
10188
10189           if (ref)
10190             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10191
10192           if (TREE_CODE (t) == VOID_TYPE)
10193             what = "void";
10194           else if (class_type)
10195             {
10196               if (t == class_type)
10197                 what = "the same type";
10198               /* Don't force t to be complete here.  */
10199               else if (MAYBE_CLASS_TYPE_P (t)
10200                        && COMPLETE_TYPE_P (t)
10201                        && DERIVED_FROM_P (t, class_type))
10202                 what = "a base class";
10203             }
10204
10205           if (what)
10206             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
10207                      "conversion operator",
10208                      ref ? "a reference to " : "", what);
10209         }
10210
10211       if (operator_code == COND_EXPR)
10212         {
10213           /* 13.4.0.3 */
10214           error ("ISO C++ prohibits overloading operator ?:");
10215           return false;
10216         }
10217       else if (ellipsis_p)
10218         {
10219           error ("%qD must not have variable number of arguments", decl);
10220           return false;
10221         }
10222       else if (ambi_op_p (operator_code))
10223         {
10224           if (arity == 1)
10225             /* We pick the one-argument operator codes by default, so
10226                we don't have to change anything.  */
10227             ;
10228           else if (arity == 2)
10229             {
10230               /* If we thought this was a unary operator, we now know
10231                  it to be a binary operator.  */
10232               switch (operator_code)
10233                 {
10234                 case INDIRECT_REF:
10235                   operator_code = MULT_EXPR;
10236                   break;
10237
10238                 case ADDR_EXPR:
10239                   operator_code = BIT_AND_EXPR;
10240                   break;
10241
10242                 case UNARY_PLUS_EXPR:
10243                   operator_code = PLUS_EXPR;
10244                   break;
10245
10246                 case NEGATE_EXPR:
10247                   operator_code = MINUS_EXPR;
10248                   break;
10249
10250                 case PREINCREMENT_EXPR:
10251                   operator_code = POSTINCREMENT_EXPR;
10252                   break;
10253
10254                 case PREDECREMENT_EXPR:
10255                   operator_code = POSTDECREMENT_EXPR;
10256                   break;
10257
10258                 default:
10259                   gcc_unreachable ();
10260                 }
10261
10262               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10263
10264               if ((operator_code == POSTINCREMENT_EXPR
10265                    || operator_code == POSTDECREMENT_EXPR)
10266                   && ! processing_template_decl
10267                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10268                 {
10269                   if (methodp)
10270                     error ("postfix %qD must take %<int%> as its argument",
10271                            decl);
10272                   else
10273                     error ("postfix %qD must take %<int%> as its second "
10274                            "argument", decl);
10275                   return false;
10276                 }
10277             }
10278           else
10279             {
10280               if (methodp)
10281                 error ("%qD must take either zero or one argument", decl);
10282               else
10283                 error ("%qD must take either one or two arguments", decl);
10284               return false;
10285             }
10286
10287           /* More Effective C++ rule 6.  */
10288           if (warn_ecpp
10289               && (operator_code == POSTINCREMENT_EXPR
10290                   || operator_code == POSTDECREMENT_EXPR
10291                   || operator_code == PREINCREMENT_EXPR
10292                   || operator_code == PREDECREMENT_EXPR))
10293             {
10294               tree arg = TREE_VALUE (argtypes);
10295               tree ret = TREE_TYPE (TREE_TYPE (decl));
10296               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10297                 arg = TREE_TYPE (arg);
10298               arg = TYPE_MAIN_VARIANT (arg);
10299               if (operator_code == PREINCREMENT_EXPR
10300                   || operator_code == PREDECREMENT_EXPR)
10301                 {
10302                   if (TREE_CODE (ret) != REFERENCE_TYPE
10303                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10304                                        arg))
10305                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10306                              build_reference_type (arg));
10307                 }
10308               else
10309                 {
10310                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10311                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10312                 }
10313             }
10314         }
10315       else if (unary_op_p (operator_code))
10316         {
10317           if (arity != 1)
10318             {
10319               if (methodp)
10320                 error ("%qD must take %<void%>", decl);
10321               else
10322                 error ("%qD must take exactly one argument", decl);
10323               return false;
10324             }
10325         }
10326       else /* if (binary_op_p (operator_code)) */
10327         {
10328           if (arity != 2)
10329             {
10330               if (methodp)
10331                 error ("%qD must take exactly one argument", decl);
10332               else
10333                 error ("%qD must take exactly two arguments", decl);
10334               return false;
10335             }
10336
10337           /* More Effective C++ rule 7.  */
10338           if (warn_ecpp
10339               && (operator_code == TRUTH_ANDIF_EXPR
10340                   || operator_code == TRUTH_ORIF_EXPR
10341                   || operator_code == COMPOUND_EXPR))
10342             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10343                      decl);
10344         }
10345
10346       /* Effective C++ rule 23.  */
10347       if (warn_ecpp
10348           && arity == 2
10349           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10350           && (operator_code == PLUS_EXPR
10351               || operator_code == MINUS_EXPR
10352               || operator_code == TRUNC_DIV_EXPR
10353               || operator_code == MULT_EXPR
10354               || operator_code == TRUNC_MOD_EXPR)
10355           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10356         warning (OPT_Weffc__, "%qD should return by value", decl);
10357
10358       /* [over.oper]/8 */
10359       for (; argtypes && argtypes != void_list_node;
10360           argtypes = TREE_CHAIN (argtypes))
10361         if (TREE_PURPOSE (argtypes))
10362           {
10363             TREE_PURPOSE (argtypes) = NULL_TREE;
10364             if (operator_code == POSTINCREMENT_EXPR
10365                 || operator_code == POSTDECREMENT_EXPR)
10366               {
10367                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
10368                          decl);
10369               }
10370             else
10371               {
10372                 error ("%qD cannot have default arguments", decl);
10373                 return false;
10374               }
10375           }
10376     }
10377   return true;
10378 }
10379 \f
10380 /* Return a string giving the keyword associate with CODE.  */
10381
10382 static const char *
10383 tag_name (enum tag_types code)
10384 {
10385   switch (code)
10386     {
10387     case record_type:
10388       return "struct";
10389     case class_type:
10390       return "class";
10391     case union_type:
10392       return "union";
10393     case enum_type:
10394       return "enum";
10395     case typename_type:
10396       return "typename";
10397     default:
10398       gcc_unreachable ();
10399     }
10400 }
10401
10402 /* Name lookup in an elaborated-type-specifier (after the keyword
10403    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
10404    elaborated-type-specifier is invalid, issue a diagnostic and return
10405    error_mark_node; otherwise, return the *_TYPE to which it referred.
10406    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
10407
10408 tree
10409 check_elaborated_type_specifier (enum tag_types tag_code,
10410                                  tree decl,
10411                                  bool allow_template_p)
10412 {
10413   tree type;
10414
10415   /* In the case of:
10416
10417        struct S { struct S *p; };
10418
10419      name lookup will find the TYPE_DECL for the implicit "S::S"
10420      typedef.  Adjust for that here.  */
10421   if (DECL_SELF_REFERENCE_P (decl))
10422     decl = TYPE_NAME (TREE_TYPE (decl));
10423
10424   type = TREE_TYPE (decl);
10425
10426   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10427      is false for this case as well.  */
10428   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10429     {
10430       error ("using template type parameter %qT after %qs",
10431              type, tag_name (tag_code));
10432       return error_mark_node;
10433     }
10434   /*   [dcl.type.elab]
10435
10436        If the identifier resolves to a typedef-name or a template
10437        type-parameter, the elaborated-type-specifier is ill-formed.
10438
10439      In other words, the only legitimate declaration to use in the
10440      elaborated type specifier is the implicit typedef created when
10441      the type is declared.  */
10442   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10443            && tag_code != typename_type)
10444     {
10445       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10446       error ("%q+D has a previous declaration here", decl);
10447       return error_mark_node;
10448     }
10449   else if (TREE_CODE (type) != RECORD_TYPE
10450            && TREE_CODE (type) != UNION_TYPE
10451            && tag_code != enum_type
10452            && tag_code != typename_type)
10453     {
10454       error ("%qT referred to as %qs", type, tag_name (tag_code));
10455       error ("%q+T has a previous declaration here", type);
10456       return error_mark_node;
10457     }
10458   else if (TREE_CODE (type) != ENUMERAL_TYPE
10459            && tag_code == enum_type)
10460     {
10461       error ("%qT referred to as enum", type);
10462       error ("%q+T has a previous declaration here", type);
10463       return error_mark_node;
10464     }
10465   else if (!allow_template_p
10466            && TREE_CODE (type) == RECORD_TYPE
10467            && CLASSTYPE_IS_TEMPLATE (type))
10468     {
10469       /* If a class template appears as elaborated type specifier
10470          without a template header such as:
10471
10472            template <class T> class C {};
10473            void f(class C);             // No template header here
10474
10475          then the required template argument is missing.  */
10476       error ("template argument required for %<%s %T%>",
10477              tag_name (tag_code),
10478              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10479       return error_mark_node;
10480     }
10481
10482   return type;
10483 }
10484
10485 /* Lookup NAME in elaborate type specifier in scope according to
10486    SCOPE and issue diagnostics if necessary.
10487    Return *_TYPE node upon success, NULL_TREE when the NAME is not
10488    found, and ERROR_MARK_NODE for type error.  */
10489
10490 static tree
10491 lookup_and_check_tag (enum tag_types tag_code, tree name,
10492                       tag_scope scope, bool template_header_p)
10493 {
10494   tree t;
10495   tree decl;
10496   if (scope == ts_global)
10497     {
10498       /* First try ordinary name lookup, ignoring hidden class name
10499          injected via friend declaration.  */
10500       decl = lookup_name_prefer_type (name, 2);
10501       /* If that fails, the name will be placed in the smallest
10502          non-class, non-function-prototype scope according to 3.3.1/5.
10503          We may already have a hidden name declared as friend in this
10504          scope.  So lookup again but not ignoring hidden names.
10505          If we find one, that name will be made visible rather than
10506          creating a new tag.  */
10507       if (!decl)
10508         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10509     }
10510   else
10511     decl = lookup_type_scope (name, scope);
10512
10513   if (decl && DECL_CLASS_TEMPLATE_P (decl))
10514     decl = DECL_TEMPLATE_RESULT (decl);
10515
10516   if (decl && TREE_CODE (decl) == TYPE_DECL)
10517     {
10518       /* Look for invalid nested type:
10519            class C {
10520              class C {};
10521            };  */
10522       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10523         {
10524           error ("%qD has the same name as the class in which it is "
10525                  "declared",
10526                  decl);
10527           return error_mark_node;
10528         }
10529
10530       /* Two cases we need to consider when deciding if a class
10531          template is allowed as an elaborated type specifier:
10532          1. It is a self reference to its own class.
10533          2. It comes with a template header.
10534
10535          For example:
10536
10537            template <class T> class C {
10538              class C *c1;               // DECL_SELF_REFERENCE_P is true
10539              class D;
10540            };
10541            template <class U> class C; // template_header_p is true
10542            template <class T> class C<T>::D {
10543              class C *c2;               // DECL_SELF_REFERENCE_P is true
10544            };  */
10545
10546       t = check_elaborated_type_specifier (tag_code,
10547                                            decl,
10548                                            template_header_p
10549                                            | DECL_SELF_REFERENCE_P (decl));
10550       return t;
10551     }
10552   else if (decl && TREE_CODE (decl) == TREE_LIST)
10553     {
10554       error ("reference to %qD is ambiguous", name);
10555       print_candidates (decl);
10556       return error_mark_node;
10557     }
10558   else
10559     return NULL_TREE;
10560 }
10561
10562 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10563    Define the tag as a forward-reference if it is not defined.
10564
10565    If a declaration is given, process it here, and report an error if
10566    multiple declarations are not identical.
10567
10568    SCOPE is TS_CURRENT when this is also a definition.  Only look in
10569    the current frame for the name (since C++ allows new names in any
10570    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10571    declaration.  Only look beginning from the current scope outward up
10572    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
10573
10574    TEMPLATE_HEADER_P is true when this declaration is preceded by
10575    a set of template parameters.  */
10576
10577 tree
10578 xref_tag (enum tag_types tag_code, tree name,
10579           tag_scope scope, bool template_header_p)
10580 {
10581   enum tree_code code;
10582   tree t;
10583   tree context = NULL_TREE;
10584
10585   timevar_push (TV_NAME_LOOKUP);
10586
10587   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10588
10589   switch (tag_code)
10590     {
10591     case record_type:
10592     case class_type:
10593       code = RECORD_TYPE;
10594       break;
10595     case union_type:
10596       code = UNION_TYPE;
10597       break;
10598     case enum_type:
10599       code = ENUMERAL_TYPE;
10600       break;
10601     default:
10602       gcc_unreachable ();
10603     }
10604
10605   /* In case of anonymous name, xref_tag is only called to
10606      make type node and push name.  Name lookup is not required.  */
10607   if (ANON_AGGRNAME_P (name))
10608     t = NULL_TREE;
10609   else
10610     t = lookup_and_check_tag  (tag_code, name,
10611                                scope, template_header_p);
10612
10613   if (t == error_mark_node)
10614     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10615
10616   if (scope != ts_current && t && current_class_type
10617       && template_class_depth (current_class_type)
10618       && template_header_p)
10619     {
10620       /* Since SCOPE is not TS_CURRENT, we are not looking at a
10621          definition of this tag.  Since, in addition, we are currently
10622          processing a (member) template declaration of a template
10623          class, we must be very careful; consider:
10624
10625            template <class X>
10626            struct S1
10627
10628            template <class U>
10629            struct S2
10630            { template <class V>
10631            friend struct S1; };
10632
10633          Here, the S2::S1 declaration should not be confused with the
10634          outer declaration.  In particular, the inner version should
10635          have a template parameter of level 2, not level 1.  This
10636          would be particularly important if the member declaration
10637          were instead:
10638
10639            template <class V = U> friend struct S1;
10640
10641          say, when we should tsubst into `U' when instantiating
10642          S2.  On the other hand, when presented with:
10643
10644            template <class T>
10645            struct S1 {
10646              template <class U>
10647              struct S2 {};
10648              template <class U>
10649              friend struct S2;
10650            };
10651
10652          we must find the inner binding eventually.  We
10653          accomplish this by making sure that the new type we
10654          create to represent this declaration has the right
10655          TYPE_CONTEXT.  */
10656       context = TYPE_CONTEXT (t);
10657       t = NULL_TREE;
10658     }
10659
10660   if (! t)
10661     {
10662       /* If no such tag is yet defined, create a forward-reference node
10663          and record it as the "definition".
10664          When a real declaration of this type is found,
10665          the forward-reference will be altered into a real type.  */
10666       if (code == ENUMERAL_TYPE)
10667         {
10668           error ("use of enum %q#D without previous declaration", name);
10669           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10670         }
10671       else
10672         {
10673           t = make_class_type (code);
10674           TYPE_CONTEXT (t) = context;
10675           t = pushtag (name, t, scope);
10676         }
10677     }
10678   else
10679     {
10680       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10681         {
10682           if (!redeclare_class_template (t, current_template_parms))
10683             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10684         }
10685       else if (!processing_template_decl
10686                && CLASS_TYPE_P (t)
10687                && CLASSTYPE_IS_TEMPLATE (t))
10688         {
10689           error ("redeclaration of %qT as a non-template", t);
10690           error ("previous declaration %q+D", t);
10691           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10692         }
10693
10694       /* Make injected friend class visible.  */
10695       if (scope != ts_within_enclosing_non_class
10696           && hidden_name_p (TYPE_NAME (t)))
10697         {
10698           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10699           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10700
10701           if (TYPE_TEMPLATE_INFO (t))
10702             {
10703               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10704               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10705             }
10706         }
10707     }
10708
10709   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10710 }
10711
10712 tree
10713 xref_tag_from_type (tree old, tree id, tag_scope scope)
10714 {
10715   enum tag_types tag_kind;
10716
10717   if (TREE_CODE (old) == RECORD_TYPE)
10718     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10719   else
10720     tag_kind  = union_type;
10721
10722   if (id == NULL_TREE)
10723     id = TYPE_IDENTIFIER (old);
10724
10725   return xref_tag (tag_kind, id, scope, false);
10726 }
10727
10728 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10729    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
10730    access_* node, and the TREE_VALUE is the type of the base-class.
10731    Non-NULL TREE_TYPE indicates virtual inheritance.  
10732  
10733    Returns true if the binfo hierarchy was successfully created,
10734    false if an error was detected. */
10735
10736 bool
10737 xref_basetypes (tree ref, tree base_list)
10738 {
10739   tree *basep;
10740   tree binfo, base_binfo;
10741   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
10742   unsigned max_bases = 0;  /* Maximum direct bases.  */
10743   int i;
10744   tree default_access;
10745   tree igo_prev; /* Track Inheritance Graph Order.  */
10746
10747   if (ref == error_mark_node)
10748     return false;
10749
10750   /* The base of a derived class is private by default, all others are
10751      public.  */
10752   default_access = (TREE_CODE (ref) == RECORD_TYPE
10753                     && CLASSTYPE_DECLARED_CLASS (ref)
10754                     ? access_private_node : access_public_node);
10755
10756   /* First, make sure that any templates in base-classes are
10757      instantiated.  This ensures that if we call ourselves recursively
10758      we do not get confused about which classes are marked and which
10759      are not.  */
10760   basep = &base_list;
10761   while (*basep)
10762     {
10763       tree basetype = TREE_VALUE (*basep);
10764
10765       if (!(processing_template_decl && uses_template_parms (basetype))
10766           && !complete_type_or_else (basetype, NULL))
10767         /* An incomplete type.  Remove it from the list.  */
10768         *basep = TREE_CHAIN (*basep);
10769       else
10770         {
10771           max_bases++;
10772           if (TREE_TYPE (*basep))
10773             max_vbases++;
10774           if (CLASS_TYPE_P (basetype))
10775             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10776           basep = &TREE_CHAIN (*basep);
10777         }
10778     }
10779
10780   TYPE_MARKED_P (ref) = 1;
10781
10782   /* The binfo slot should be empty, unless this is an (ill-formed)
10783      redefinition.  */
10784   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10785   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10786
10787   binfo = make_tree_binfo (max_bases);
10788
10789   TYPE_BINFO (ref) = binfo;
10790   BINFO_OFFSET (binfo) = size_zero_node;
10791   BINFO_TYPE (binfo) = ref;
10792
10793   /* Apply base-class info set up to the variants of this type.  */
10794   fixup_type_variants (ref);
10795
10796   if (max_bases)
10797     {
10798       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
10799       /* An aggregate cannot have baseclasses.  */
10800       CLASSTYPE_NON_AGGREGATE (ref) = 1;
10801
10802       if (TREE_CODE (ref) == UNION_TYPE)
10803         {
10804           error ("derived union %qT invalid", ref);
10805           return false;
10806         }
10807     }
10808
10809   if (max_bases > 1)
10810     {
10811       if (TYPE_FOR_JAVA (ref))
10812         {
10813           error ("Java class %qT cannot have multiple bases", ref);
10814           return false;
10815         }
10816     }
10817
10818   if (max_vbases)
10819     {
10820       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
10821
10822       if (TYPE_FOR_JAVA (ref))
10823         {
10824           error ("Java class %qT cannot have virtual bases", ref);
10825           return false;
10826         }
10827     }
10828
10829   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10830     {
10831       tree access = TREE_PURPOSE (base_list);
10832       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10833       tree basetype = TREE_VALUE (base_list);
10834
10835       if (access == access_default_node)
10836         access = default_access;
10837
10838       if (PACK_EXPANSION_P (basetype))
10839         basetype = PACK_EXPANSION_PATTERN (basetype);
10840       if (TREE_CODE (basetype) == TYPE_DECL)
10841         basetype = TREE_TYPE (basetype);
10842       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
10843         {
10844           error ("base type %qT fails to be a struct or class type",
10845                  basetype);
10846           return false;
10847         }
10848
10849       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10850         TYPE_FOR_JAVA (ref) = 1;
10851
10852       base_binfo = NULL_TREE;
10853       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
10854         {
10855           base_binfo = TYPE_BINFO (basetype);
10856           /* The original basetype could have been a typedef'd type.  */
10857           basetype = BINFO_TYPE (base_binfo);
10858
10859           /* Inherit flags from the base.  */
10860           TYPE_HAS_NEW_OPERATOR (ref)
10861             |= TYPE_HAS_NEW_OPERATOR (basetype);
10862           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10863             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10864           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
10865           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
10866           CLASSTYPE_DIAMOND_SHAPED_P (ref)
10867             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10868           CLASSTYPE_REPEATED_BASE_P (ref)
10869             |= CLASSTYPE_REPEATED_BASE_P (basetype);
10870         }
10871
10872       /* We must do this test after we've seen through a typedef
10873          type.  */
10874       if (TYPE_MARKED_P (basetype))
10875         {
10876           if (basetype == ref)
10877             error ("recursive type %qT undefined", basetype);
10878           else
10879             error ("duplicate base type %qT invalid", basetype);
10880           return false;
10881         }
10882
10883       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10884         /* Regenerate the pack expansion for the bases. */
10885         basetype = make_pack_expansion (basetype);
10886
10887       TYPE_MARKED_P (basetype) = 1;
10888
10889       base_binfo = copy_binfo (base_binfo, basetype, ref,
10890                                &igo_prev, via_virtual);
10891       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10892         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
10893
10894       BINFO_BASE_APPEND (binfo, base_binfo);
10895       BINFO_BASE_ACCESS_APPEND (binfo, access);
10896     }
10897
10898   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10899     /* If we have space in the vbase vector, we must have shared at
10900        least one of them, and are therefore diamond shaped.  */
10901     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10902
10903   /* Unmark all the types.  */
10904   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
10905     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10906   TYPE_MARKED_P (ref) = 0;
10907
10908   /* Now see if we have a repeated base type.  */
10909   if (!CLASSTYPE_REPEATED_BASE_P (ref))
10910     {
10911       for (base_binfo = binfo; base_binfo;
10912            base_binfo = TREE_CHAIN (base_binfo))
10913         {
10914           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10915             {
10916               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10917               break;
10918             }
10919           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10920         }
10921       for (base_binfo = binfo; base_binfo;
10922            base_binfo = TREE_CHAIN (base_binfo))
10923         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10924           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10925         else
10926           break;
10927     }
10928
10929   return true;
10930 }
10931
10932 \f
10933 /* Begin compiling the definition of an enumeration type.
10934    NAME is its name, 
10935
10936    UNDERLYING_TYPE is the type that will be used as the storage for
10937    the enumeration type. This should be NULL_TREE if no storage type
10938    was specified.
10939
10940    SCOPED_ENUM_P is true if this is a scoped enumeration type.
10941
10942    Returns the type object, as yet incomplete.
10943    Also records info about it so that build_enumerator
10944    may be used to declare the individual values as they are read.  */
10945
10946 tree
10947 start_enum (tree name, tree underlying_type, bool scoped_enum_p)
10948 {
10949   tree enumtype;
10950
10951   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10952
10953   /* If this is the real definition for a previous forward reference,
10954      fill in the contents in the same object that used to be the
10955      forward reference.  */
10956
10957   enumtype = lookup_and_check_tag (enum_type, name,
10958                                    /*tag_scope=*/ts_current,
10959                                    /*template_header_p=*/false);
10960
10961   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
10962     {
10963       error ("multiple definition of %q#T", enumtype);
10964       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
10965       /* Clear out TYPE_VALUES, and start again.  */
10966       TYPE_VALUES (enumtype) = NULL_TREE;
10967     }
10968   else
10969     {
10970       /* In case of error, make a dummy enum to allow parsing to
10971          continue.  */
10972       if (enumtype == error_mark_node)
10973         name = make_anon_name ();
10974
10975       enumtype = make_node (ENUMERAL_TYPE);
10976       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
10977     }
10978
10979   if (enumtype == error_mark_node)
10980     return enumtype;
10981
10982   if (scoped_enum_p)
10983     {
10984       SET_SCOPED_ENUM_P (enumtype, 1);
10985       begin_scope (sk_scoped_enum, enumtype);
10986
10987       /* [C++0x dcl.enum]p5: 
10988
10989           If not explicitly specified, the underlying type of a scoped
10990           enumeration type is int.  */
10991       if (!underlying_type)
10992         underlying_type = integer_type_node;
10993     }
10994
10995   if (underlying_type)
10996     {
10997       if (CP_INTEGRAL_TYPE_P (underlying_type))
10998         {
10999           TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11000           TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11001           TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11002           TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11003           SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11004           TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11005           TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11006           TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11007           TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11008           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11009         }
11010       else
11011         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11012                underlying_type, enumtype);
11013     }
11014
11015   return enumtype;
11016 }
11017
11018 /* After processing and defining all the values of an enumeration type,
11019    install their decls in the enumeration type and finish it off.
11020    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
11021
11022 void
11023 finish_enum (tree enumtype)
11024 {
11025   tree values;
11026   tree decl;
11027   tree minnode;
11028   tree maxnode;
11029   tree value;
11030   tree t;
11031   bool unsignedp;
11032   bool use_short_enum;
11033   int lowprec;
11034   int highprec;
11035   int precision;
11036   unsigned int itk;
11037   tree underlying_type = NULL_TREE;
11038   bool fixed_underlying_type_p 
11039     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11040
11041   /* We built up the VALUES in reverse order.  */
11042   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11043
11044   /* For an enum defined in a template, just set the type of the values;
11045      all further processing is postponed until the template is
11046      instantiated.  We need to set the type so that tsubst of a CONST_DECL
11047      works.  */
11048   if (processing_template_decl)
11049     {
11050       for (values = TYPE_VALUES (enumtype);
11051            values;
11052            values = TREE_CHAIN (values))
11053         TREE_TYPE (TREE_VALUE (values)) = enumtype;
11054       if (at_function_scope_p ())
11055         add_stmt (build_min (TAG_DEFN, enumtype));
11056       return;
11057     }
11058
11059   /* Determine the minimum and maximum values of the enumerators.  */
11060   if (TYPE_VALUES (enumtype))
11061     {
11062       minnode = maxnode = NULL_TREE;
11063
11064       for (values = TYPE_VALUES (enumtype);
11065            values;
11066            values = TREE_CHAIN (values))
11067         {
11068           decl = TREE_VALUE (values);
11069
11070           /* [dcl.enum]: Following the closing brace of an enum-specifier,
11071              each enumerator has the type of its enumeration.  Prior to the
11072              closing brace, the type of each enumerator is the type of its
11073              initializing value.  */
11074           TREE_TYPE (decl) = enumtype;
11075
11076           /* Update the minimum and maximum values, if appropriate.  */
11077           value = DECL_INITIAL (decl);
11078           if (value == error_mark_node)
11079             value = integer_zero_node;
11080           /* Figure out what the minimum and maximum values of the
11081              enumerators are.  */
11082           if (!minnode)
11083             minnode = maxnode = value;
11084           else if (tree_int_cst_lt (maxnode, value))
11085             maxnode = value;
11086           else if (tree_int_cst_lt (value, minnode))
11087             minnode = value;
11088         }
11089     }
11090   else
11091     /* [dcl.enum]
11092        
11093        If the enumerator-list is empty, the underlying type is as if
11094        the enumeration had a single enumerator with value 0.  */
11095     minnode = maxnode = integer_zero_node;
11096
11097   /* Compute the number of bits require to represent all values of the
11098      enumeration.  We must do this before the type of MINNODE and
11099      MAXNODE are transformed, since tree_int_cst_min_precision relies
11100      on the TREE_TYPE of the value it is passed.  */
11101   unsignedp = tree_int_cst_sgn (minnode) >= 0;
11102   lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11103   highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11104   precision = MAX (lowprec, highprec);
11105
11106   if (!fixed_underlying_type_p)
11107     {
11108       /* Determine the underlying type of the enumeration.
11109
11110          [dcl.enum]
11111
11112          The underlying type of an enumeration is an integral type that
11113          can represent all the enumerator values defined in the
11114          enumeration.  It is implementation-defined which integral type is
11115          used as the underlying type for an enumeration except that the
11116          underlying type shall not be larger than int unless the value of
11117          an enumerator cannot fit in an int or unsigned int.
11118
11119          We use "int" or an "unsigned int" as the underlying type, even if
11120          a smaller integral type would work, unless the user has
11121          explicitly requested that we use the smallest possible type.  The
11122          user can request that for all enumerations with a command line
11123          flag, or for just one enumeration with an attribute.  */
11124
11125       use_short_enum = flag_short_enums
11126         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11127
11128       for (itk = (use_short_enum ? itk_char : itk_int);
11129            itk != itk_none;
11130            itk++)
11131         {
11132           underlying_type = integer_types[itk];
11133           if (TYPE_PRECISION (underlying_type) >= precision
11134               && TYPE_UNSIGNED (underlying_type) == unsignedp)
11135             break;
11136         }
11137       if (itk == itk_none)
11138         {
11139           /* DR 377
11140
11141              IF no integral type can represent all the enumerator values, the
11142              enumeration is ill-formed.  */
11143           error ("no integral type can represent all of the enumerator values "
11144                  "for %qT", enumtype);
11145           precision = TYPE_PRECISION (long_long_integer_type_node);
11146           underlying_type = integer_types[itk_unsigned_long_long];
11147         }
11148
11149       /* [dcl.enum]
11150
11151          The value of sizeof() applied to an enumeration type, an object
11152          of an enumeration type, or an enumerator, is the value of sizeof()
11153          applied to the underlying type.  */
11154       TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11155       TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11156       SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11157       TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11158       TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11159       TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11160
11161       /* Set the underlying type of the enumeration type to the
11162          computed enumeration type, restricted to the enumerator
11163          values. */
11164       ENUM_UNDERLYING_TYPE (enumtype) = copy_node (underlying_type);
11165       set_min_and_max_values_for_integral_type 
11166         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11167     }
11168   else
11169     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11170
11171   /* Compute the minimum and maximum values for the type.
11172
11173      [dcl.enum]
11174
11175      For an enumeration where emin is the smallest enumerator and emax
11176      is the largest, the values of the enumeration are the values of the
11177      underlying type in the range bmin to bmax, where bmin and bmax are,
11178      respectively, the smallest and largest values of the smallest bit-
11179      field that can store emin and emax.  */
11180   
11181   /* The middle-end currently assumes that types with TYPE_PRECISION
11182      narrower than their underlying type are suitably zero or sign
11183      extended to fill their mode.  g++ doesn't make these guarantees.
11184      Until the middle-end can represent such paradoxical types, we
11185      set the TYPE_PRECISION to the width of the underlying type.  */
11186   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11187   
11188   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
11189   
11190   /* Convert each of the enumerators to the type of the underlying
11191      type of the enumeration.  */
11192   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11193     {
11194       location_t saved_location;
11195
11196       decl = TREE_VALUE (values);
11197       saved_location = input_location;
11198       input_location = DECL_SOURCE_LOCATION (decl);
11199       if (fixed_underlying_type_p)
11200         /* If the enumeration type has a fixed underlying type, we
11201            already checked all of the enumerator values.  */
11202         value = DECL_INITIAL (decl);
11203       else
11204         value = perform_implicit_conversion (underlying_type,
11205                                              DECL_INITIAL (decl),
11206                                              tf_warning_or_error);
11207       input_location = saved_location;
11208
11209       /* Do not clobber shared ints.  */
11210       value = copy_node (value);
11211
11212       TREE_TYPE (value) = enumtype;
11213       DECL_INITIAL (decl) = value;
11214     }
11215
11216   /* Fix up all variant types of this enum type.  */
11217   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11218     {
11219       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11220       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11221       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11222       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11223       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11224       SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11225       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11226       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11227       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11228       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11229       ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11230     }
11231
11232   /* Finish up the scope of a scoped enumeration.  */
11233   if (SCOPED_ENUM_P (enumtype))
11234     finish_scope ();
11235
11236   /* Finish debugging output for this type.  */
11237   rest_of_type_compilation (enumtype, namespace_bindings_p ());
11238 }
11239
11240 /* Build and install a CONST_DECL for an enumeration constant of the
11241    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11242    Assignment of sequential values by default is handled here.  */
11243
11244 void
11245 build_enumerator (tree name, tree value, tree enumtype)
11246 {
11247   tree decl;
11248   tree context;
11249   tree type;
11250
11251   /* If the VALUE was erroneous, pretend it wasn't there; that will
11252      result in the enum being assigned the next value in sequence.  */
11253   if (value == error_mark_node)
11254     value = NULL_TREE;
11255
11256   /* Remove no-op casts from the value.  */
11257   if (value)
11258     STRIP_TYPE_NOPS (value);
11259
11260   if (! processing_template_decl)
11261     {
11262       /* Validate and default VALUE.  */
11263       if (value != NULL_TREE)
11264         {
11265           value = integral_constant_value (value);
11266
11267           if (TREE_CODE (value) == INTEGER_CST)
11268             {
11269               value = perform_integral_promotions (value);
11270               constant_expression_warning (value);
11271             }
11272           else
11273             {
11274               error ("enumerator value for %qD is not an integer constant", name);
11275               value = NULL_TREE;
11276             }
11277         }
11278
11279       /* Default based on previous value.  */
11280       if (value == NULL_TREE)
11281         {
11282           if (TYPE_VALUES (enumtype))
11283             {
11284               HOST_WIDE_INT hi;
11285               unsigned HOST_WIDE_INT lo;
11286               tree prev_value;
11287               bool overflowed;
11288
11289               /* The next value is the previous value plus one.
11290                  add_double doesn't know the type of the target expression,
11291                  so we must check with int_fits_type_p as well.  */
11292               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11293               if (error_operand_p (prev_value))
11294                 value = error_mark_node;
11295               else
11296                 {
11297                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11298                                            TREE_INT_CST_HIGH (prev_value),
11299                                            1, 0, &lo, &hi);
11300                   value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11301                   overflowed
11302                     |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11303
11304                   if (overflowed)
11305                     {
11306                       error ("overflow in enumeration values at %qD", name);
11307                       value = error_mark_node;
11308                     }
11309                 }
11310             }
11311           else
11312             value = integer_zero_node;
11313         }
11314
11315       /* Remove no-op casts from the value.  */
11316       STRIP_TYPE_NOPS (value);
11317
11318       /* If the underlying type of the enum is fixed, check whether
11319          the enumerator values fits in the underlying type.  If it
11320          does not fit, the program is ill-formed [C++0x dcl.enum].  */
11321       if (ENUM_UNDERLYING_TYPE (enumtype)
11322           && value
11323           && TREE_CODE (value) == INTEGER_CST
11324           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11325         {
11326           error ("enumerator value %E is too large for underlying type %<%T%>",
11327                  value, ENUM_UNDERLYING_TYPE (enumtype));
11328
11329           /* Silently convert the value so that we can continue.  */
11330           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11331                                                value, tf_none);
11332         }
11333     }
11334
11335   /* C++ associates enums with global, function, or class declarations.  */
11336   context = current_scope ();
11337
11338   /* Build the actual enumeration constant.  Note that the enumeration
11339      constants have the underlying type of the enum (if it is fixed)
11340      or the type of their initializer (if the underlying type of the
11341      enum is not fixed):
11342
11343       [ C++0x dcl.enum ]
11344
11345         If the underlying type is fixed, the type of each enumerator
11346         prior to the closing brace is the underlying type; if the
11347         initializing value of an enumerator cannot be represented by
11348         the underlying type, the program is ill-formed. If the
11349         underlying type is not fixed, the type of each enumerator is
11350         the type of its initializing value.
11351
11352     If the underlying type is not fixed, it will be computed by
11353     finish_enum and we will reset the type of this enumerator.  Of
11354     course, if we're processing a template, there may be no value.  */
11355   type = value ? TREE_TYPE (value) : NULL_TREE;
11356
11357   if (context && context == current_class_type)
11358     /* This enum declaration is local to the class.  We need the full
11359        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
11360     decl = build_lang_decl (CONST_DECL, name, type);
11361   else
11362     /* It's a global enum, or it's local to a function.  (Note local to
11363       a function could mean local to a class method.  */
11364     decl = build_decl (CONST_DECL, name, type);
11365
11366   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11367   TREE_CONSTANT (decl) = 1;
11368   TREE_READONLY (decl) = 1;
11369   DECL_INITIAL (decl) = value;
11370
11371   if (context && context == current_class_type)
11372     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11373        on the TYPE_FIELDS list for `S'.  (That's so that you can say
11374        things like `S::i' later.)  */
11375     finish_member_declaration (decl);
11376   else
11377     pushdecl (decl);
11378
11379   /* Add this enumeration constant to the list for this type.  */
11380   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11381 }
11382
11383 /* Look for an enumerator with the given NAME within the enumeration
11384    type ENUMTYPE.  This routine is used primarily for qualified name
11385    lookup into an enumerator in C++0x, e.g.,
11386
11387      enum class Color { Red, Green, Blue };
11388
11389      Color color = Color::Red;
11390
11391    Returns the value corresponding to the enumerator, or
11392    NULL_TREE if no such enumerator was found.  */
11393 tree
11394 lookup_enumerator (tree enumtype, tree name)
11395 {
11396   tree e;
11397   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11398
11399   e = purpose_member (name, TYPE_VALUES (enumtype));
11400   return e? TREE_VALUE (e) : NULL_TREE;
11401 }
11402
11403 \f
11404 /* We're defining DECL.  Make sure that it's type is OK.  */
11405
11406 static void
11407 check_function_type (tree decl, tree current_function_parms)
11408 {
11409   tree fntype = TREE_TYPE (decl);
11410   tree return_type = complete_type (TREE_TYPE (fntype));
11411
11412   /* In a function definition, arg types must be complete.  */
11413   require_complete_types_for_parms (current_function_parms);
11414
11415   if (dependent_type_p (return_type))
11416     return;
11417   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11418       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11419     {
11420       tree args = TYPE_ARG_TYPES (fntype);
11421
11422       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11423         error ("return type %q#T is incomplete", return_type);
11424       else
11425         error ("return type has Java class type %q#T", return_type);
11426
11427       /* Make it return void instead.  */
11428       if (TREE_CODE (fntype) == METHOD_TYPE)
11429         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11430                                              void_type_node,
11431                                              TREE_CHAIN (args));
11432       else
11433         fntype = build_function_type (void_type_node, args);
11434       TREE_TYPE (decl)
11435         = build_exception_variant (fntype,
11436                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11437     }
11438   else
11439     abstract_virtuals_error (decl, TREE_TYPE (fntype));
11440 }
11441
11442 /* Create the FUNCTION_DECL for a function definition.
11443    DECLSPECS and DECLARATOR are the parts of the declaration;
11444    they describe the function's name and the type it returns,
11445    but twisted together in a fashion that parallels the syntax of C.
11446
11447    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11448    DECLARATOR is really the DECL for the function we are about to
11449    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11450    indicating that the function is an inline defined in-class.
11451
11452    This function creates a binding context for the function body
11453    as well as setting up the FUNCTION_DECL in current_function_decl.
11454
11455    For C++, we must first check whether that datum makes any sense.
11456    For example, "class A local_a(1,2);" means that variable local_a
11457    is an aggregate of type A, which should have a constructor
11458    applied to it with the argument list [1, 2].
11459
11460    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11461    or may be a BLOCK if the function has been defined previously
11462    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
11463    error_mark_node if the function has never been defined, or
11464    a BLOCK if the function has been defined somewhere.  */
11465
11466 void
11467 start_preparsed_function (tree decl1, tree attrs, int flags)
11468 {
11469   tree ctype = NULL_TREE;
11470   tree fntype;
11471   tree restype;
11472   int doing_friend = 0;
11473   struct cp_binding_level *bl;
11474   tree current_function_parms;
11475   struct c_fileinfo *finfo
11476     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11477   bool honor_interface;
11478
11479   /* Sanity check.  */
11480   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11481   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11482
11483   fntype = TREE_TYPE (decl1);
11484   if (TREE_CODE (fntype) == METHOD_TYPE)
11485     ctype = TYPE_METHOD_BASETYPE (fntype);
11486
11487   /* ISO C++ 11.4/5.  A friend function defined in a class is in
11488      the (lexical) scope of the class in which it is defined.  */
11489   if (!ctype && DECL_FRIEND_P (decl1))
11490     {
11491       ctype = DECL_FRIEND_CONTEXT (decl1);
11492
11493       /* CTYPE could be null here if we're dealing with a template;
11494          for example, `inline friend float foo()' inside a template
11495          will have no CTYPE set.  */
11496       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11497         ctype = NULL_TREE;
11498       else
11499         doing_friend = 1;
11500     }
11501
11502   if (DECL_DECLARED_INLINE_P (decl1)
11503       && lookup_attribute ("noinline", attrs))
11504     warning (0, "inline function %q+D given attribute noinline", decl1);
11505
11506   /* Handle gnu_inline attribute.  */
11507   if (GNU_INLINE_P (decl1))
11508     {
11509       DECL_EXTERNAL (decl1) = 1;
11510       DECL_NOT_REALLY_EXTERN (decl1) = 0;
11511       DECL_INTERFACE_KNOWN (decl1) = 1;
11512       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11513     }
11514
11515   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11516     /* This is a constructor, we must ensure that any default args
11517        introduced by this definition are propagated to the clones
11518        now. The clones are used directly in overload resolution.  */
11519     adjust_clone_args (decl1);
11520
11521   /* Sometimes we don't notice that a function is a static member, and
11522      build a METHOD_TYPE for it.  Fix that up now.  */
11523   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11524       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11525     {
11526       revert_static_member_fn (decl1);
11527       ctype = NULL_TREE;
11528     }
11529
11530   /* Set up current_class_type, and enter the scope of the class, if
11531      appropriate.  */
11532   if (ctype)
11533     push_nested_class (ctype);
11534   else if (DECL_STATIC_FUNCTION_P (decl1))
11535     push_nested_class (DECL_CONTEXT (decl1));
11536
11537   /* Now that we have entered the scope of the class, we must restore
11538      the bindings for any template parameters surrounding DECL1, if it
11539      is an inline member template.  (Order is important; consider the
11540      case where a template parameter has the same name as a field of
11541      the class.)  It is not until after this point that
11542      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
11543   if (flags & SF_INCLASS_INLINE)
11544     maybe_begin_member_template_processing (decl1);
11545
11546   /* Effective C++ rule 15.  */
11547   if (warn_ecpp
11548       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11549       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11550     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11551
11552   /* Make the init_value nonzero so pushdecl knows this is not tentative.
11553      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11554   if (!DECL_INITIAL (decl1))
11555     DECL_INITIAL (decl1) = error_mark_node;
11556
11557   /* This function exists in static storage.
11558      (This does not mean `static' in the C sense!)  */
11559   TREE_STATIC (decl1) = 1;
11560
11561   /* We must call push_template_decl after current_class_type is set
11562      up.  (If we are processing inline definitions after exiting a
11563      class scope, current_class_type will be NULL_TREE until set above
11564      by push_nested_class.)  */
11565   if (processing_template_decl)
11566     {
11567       /* FIXME: Handle error_mark_node more gracefully.  */
11568       tree newdecl1 = push_template_decl (decl1);
11569       if (newdecl1 != error_mark_node)
11570         decl1 = newdecl1;
11571     }
11572
11573   /* We are now in the scope of the function being defined.  */
11574   current_function_decl = decl1;
11575
11576   /* Save the parm names or decls from this function's declarator
11577      where store_parm_decls will find them.  */
11578   current_function_parms = DECL_ARGUMENTS (decl1);
11579
11580   /* Make sure the parameter and return types are reasonable.  When
11581      you declare a function, these types can be incomplete, but they
11582      must be complete when you define the function.  */
11583   check_function_type (decl1, current_function_parms);
11584
11585   /* Build the return declaration for the function.  */
11586   restype = TREE_TYPE (fntype);
11587   if (DECL_RESULT (decl1) == NULL_TREE)
11588     {
11589       tree resdecl;
11590
11591       resdecl = build_decl (RESULT_DECL, 0, restype);
11592       DECL_ARTIFICIAL (resdecl) = 1;
11593       DECL_IGNORED_P (resdecl) = 1;
11594       DECL_RESULT (decl1) = resdecl;
11595
11596       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11597     }
11598
11599   /* Let the user know we're compiling this function.  */
11600   announce_function (decl1);
11601
11602   /* Record the decl so that the function name is defined.
11603      If we already have a decl for this name, and it is a FUNCTION_DECL,
11604      use the old decl.  */
11605   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11606     {
11607       /* A specialization is not used to guide overload resolution.  */
11608       if (!DECL_FUNCTION_MEMBER_P (decl1)
11609           && !(DECL_USE_TEMPLATE (decl1) &&
11610                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11611         {
11612           tree olddecl = pushdecl (decl1);
11613
11614           if (olddecl == error_mark_node)
11615             /* If something went wrong when registering the declaration,
11616                use DECL1; we have to have a FUNCTION_DECL to use when
11617                parsing the body of the function.  */
11618             ;
11619           else
11620             {
11621               /* Otherwise, OLDDECL is either a previous declaration
11622                  of the same function or DECL1 itself.  */
11623
11624               if (warn_missing_declarations
11625                   && olddecl == decl1
11626                   && !DECL_MAIN_P (decl1)
11627                   && TREE_PUBLIC (decl1)
11628                   && !DECL_DECLARED_INLINE_P (decl1))
11629                 {
11630                   tree context;
11631
11632                   /* Check whether DECL1 is in an anonymous
11633                      namespace.  */
11634                   for (context = DECL_CONTEXT (decl1);
11635                        context;
11636                        context = DECL_CONTEXT (context))
11637                     {
11638                       if (TREE_CODE (context) == NAMESPACE_DECL
11639                           && DECL_NAME (context) == NULL_TREE)
11640                         break;
11641                     }
11642
11643                   if (context == NULL)
11644                     warning (OPT_Wmissing_declarations,
11645                              "no previous declaration for %q+D", decl1);
11646                 }
11647
11648               decl1 = olddecl;
11649             }
11650         }
11651       else
11652         {
11653           /* We need to set the DECL_CONTEXT.  */
11654           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11655             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11656         }
11657       fntype = TREE_TYPE (decl1);
11658
11659       /* If #pragma weak applies, mark the decl appropriately now.
11660          The pragma only applies to global functions.  Because
11661          determining whether or not the #pragma applies involves
11662          computing the mangled name for the declaration, we cannot
11663          apply the pragma until after we have merged this declaration
11664          with any previous declarations; if the original declaration
11665          has a linkage specification, that specification applies to
11666          the definition as well, and may affect the mangled name.  */
11667       if (!DECL_CONTEXT (decl1))
11668         maybe_apply_pragma_weak (decl1);
11669     }
11670
11671   /* Reset this in case the call to pushdecl changed it.  */
11672   current_function_decl = decl1;
11673
11674   gcc_assert (DECL_INITIAL (decl1));
11675
11676   /* This function may already have been parsed, in which case just
11677      return; our caller will skip over the body without parsing.  */
11678   if (DECL_INITIAL (decl1) != error_mark_node)
11679     return;
11680
11681   /* Initialize RTL machinery.  We cannot do this until
11682      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
11683      even when processing a template; this is how we get
11684      CFUN set up, and our per-function variables initialized.
11685      FIXME factor out the non-RTL stuff.  */
11686   bl = current_binding_level;
11687   allocate_struct_function (decl1, processing_template_decl);
11688
11689   /* Initialize the language data structures.  Whenever we start
11690      a new function, we destroy temporaries in the usual way.  */
11691   cfun->language = GGC_CNEW (struct language_function);
11692   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11693   current_binding_level = bl;
11694
11695   /* Even though we're inside a function body, we still don't want to
11696      call expand_expr to calculate the size of a variable-sized array.
11697      We haven't necessarily assigned RTL to all variables yet, so it's
11698      not safe to try to expand expressions involving them.  */
11699   cfun->dont_save_pending_sizes_p = 1;
11700
11701   /* Start the statement-tree, start the tree now.  */
11702   DECL_SAVED_TREE (decl1) = push_stmt_list ();
11703
11704   /* If we are (erroneously) defining a function that we have already
11705      defined before, wipe out what we knew before.  */
11706   if (!DECL_PENDING_INLINE_P (decl1))
11707     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11708
11709   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11710     {
11711       /* We know that this was set up by `grokclassfn'.  We do not
11712          wait until `store_parm_decls', since evil parse errors may
11713          never get us to that point.  Here we keep the consistency
11714          between `current_class_type' and `current_class_ptr'.  */
11715       tree t = DECL_ARGUMENTS (decl1);
11716
11717       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11718       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11719
11720       cp_function_chain->x_current_class_ref
11721         = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
11722       cp_function_chain->x_current_class_ptr = t;
11723
11724       /* Constructors and destructors need to know whether they're "in
11725          charge" of initializing virtual base classes.  */
11726       t = TREE_CHAIN (t);
11727       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11728         {
11729           current_in_charge_parm = t;
11730           t = TREE_CHAIN (t);
11731         }
11732       if (DECL_HAS_VTT_PARM_P (decl1))
11733         {
11734           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11735           current_vtt_parm = t;
11736         }
11737     }
11738
11739   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11740                      /* Implicitly-defined methods (like the
11741                         destructor for a class in which no destructor
11742                         is explicitly declared) must not be defined
11743                         until their definition is needed.  So, we
11744                         ignore interface specifications for
11745                         compiler-generated functions.  */
11746                      && !DECL_ARTIFICIAL (decl1));
11747
11748   if (DECL_INTERFACE_KNOWN (decl1))
11749     {
11750       tree ctx = decl_function_context (decl1);
11751
11752       if (DECL_NOT_REALLY_EXTERN (decl1))
11753         DECL_EXTERNAL (decl1) = 0;
11754
11755       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11756           && TREE_PUBLIC (ctx))
11757         /* This is a function in a local class in an extern inline
11758            function.  */
11759         comdat_linkage (decl1);
11760     }
11761   /* If this function belongs to an interface, it is public.
11762      If it belongs to someone else's interface, it is also external.
11763      This only affects inlines and template instantiations.  */
11764   else if (!finfo->interface_unknown && honor_interface)
11765     {
11766       if (DECL_DECLARED_INLINE_P (decl1)
11767           || DECL_TEMPLATE_INSTANTIATION (decl1)
11768           || processing_template_decl)
11769         {
11770           DECL_EXTERNAL (decl1)
11771             = (finfo->interface_only
11772                || (DECL_DECLARED_INLINE_P (decl1)
11773                    && ! flag_implement_inlines
11774                    && !DECL_VINDEX (decl1)));
11775
11776           /* For WIN32 we also want to put these in linkonce sections.  */
11777           maybe_make_one_only (decl1);
11778         }
11779       else
11780         DECL_EXTERNAL (decl1) = 0;
11781       DECL_INTERFACE_KNOWN (decl1) = 1;
11782       /* If this function is in an interface implemented in this file,
11783          make sure that the back end knows to emit this function
11784          here.  */
11785       if (!DECL_EXTERNAL (decl1))
11786         mark_needed (decl1);
11787     }
11788   else if (finfo->interface_unknown && finfo->interface_only
11789            && honor_interface)
11790     {
11791       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
11792          interface, we will have both finfo->interface_unknown and
11793          finfo->interface_only set.  In that case, we don't want to
11794          use the normal heuristics because someone will supply a
11795          #pragma implementation elsewhere, and deducing it here would
11796          produce a conflict.  */
11797       comdat_linkage (decl1);
11798       DECL_EXTERNAL (decl1) = 0;
11799       DECL_INTERFACE_KNOWN (decl1) = 1;
11800       DECL_DEFER_OUTPUT (decl1) = 1;
11801     }
11802   else
11803     {
11804       /* This is a definition, not a reference.
11805          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
11806       if (!GNU_INLINE_P (decl1))
11807         DECL_EXTERNAL (decl1) = 0;
11808
11809       if ((DECL_DECLARED_INLINE_P (decl1)
11810            || DECL_TEMPLATE_INSTANTIATION (decl1))
11811           && ! DECL_INTERFACE_KNOWN (decl1)
11812           /* Don't try to defer nested functions for now.  */
11813           && ! decl_function_context (decl1))
11814         DECL_DEFER_OUTPUT (decl1) = 1;
11815       else
11816         DECL_INTERFACE_KNOWN (decl1) = 1;
11817     }
11818
11819   /* Determine the ELF visibility attribute for the function.  We must not
11820      do this before calling "pushdecl", as we must allow "duplicate_decls"
11821      to merge any attributes appropriately.  We also need to wait until
11822      linkage is set.  */
11823   if (!DECL_CLONED_FUNCTION_P (decl1))
11824     determine_visibility (decl1);
11825
11826   begin_scope (sk_function_parms, decl1);
11827
11828   ++function_depth;
11829
11830   if (DECL_DESTRUCTOR_P (decl1)
11831       || (DECL_CONSTRUCTOR_P (decl1)
11832           && targetm.cxx.cdtor_returns_this ()))
11833     {
11834       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11835       DECL_CONTEXT (cdtor_label) = current_function_decl;
11836     }
11837
11838   start_fname_decls ();
11839
11840   store_parm_decls (current_function_parms);
11841 }
11842
11843
11844 /* Like start_preparsed_function, except that instead of a
11845    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11846
11847    Returns 1 on success.  If the DECLARATOR is not suitable for a function
11848    (it defines a datum instead), we return 0, which tells
11849    yyparse to report a parse error.  */
11850
11851 int
11852 start_function (cp_decl_specifier_seq *declspecs,
11853                 const cp_declarator *declarator,
11854                 tree attrs)
11855 {
11856   tree decl1;
11857
11858   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11859   if (decl1 == error_mark_node)
11860     return 0;
11861   /* If the declarator is not suitable for a function definition,
11862      cause a syntax error.  */
11863   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11864     {
11865       error ("invalid function declaration");
11866       return 0;
11867     }
11868
11869   if (DECL_MAIN_P (decl1))
11870     /* main must return int.  grokfndecl should have corrected it
11871        (and issued a diagnostic) if the user got it wrong.  */
11872     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11873                              integer_type_node));
11874
11875   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
11876
11877   return 1;
11878 }
11879 \f
11880 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11881    FN.  */
11882
11883 static bool
11884 use_eh_spec_block (tree fn)
11885 {
11886   return (flag_exceptions && flag_enforce_eh_specs
11887           && !processing_template_decl
11888           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11889           /* We insert the EH_SPEC_BLOCK only in the original
11890              function; then, it is copied automatically to the
11891              clones.  */
11892           && !DECL_CLONED_FUNCTION_P (fn)
11893           /* Implicitly-generated constructors and destructors have
11894              exception specifications.  However, those specifications
11895              are the union of the possible exceptions specified by the
11896              constructors/destructors for bases and members, so no
11897              unallowed exception will ever reach this function.  By
11898              not creating the EH_SPEC_BLOCK we save a little memory,
11899              and we avoid spurious warnings about unreachable
11900              code.  */
11901           && !DECL_ARTIFICIAL (fn));
11902 }
11903
11904 /* Store the parameter declarations into the current function declaration.
11905    This is called after parsing the parameter declarations, before
11906    digesting the body of the function.
11907
11908    Also install to binding contour return value identifier, if any.  */
11909
11910 static void
11911 store_parm_decls (tree current_function_parms)
11912 {
11913   tree fndecl = current_function_decl;
11914   tree parm;
11915
11916   /* This is a chain of any other decls that came in among the parm
11917      declarations.  If a parm is declared with  enum {foo, bar} x;
11918      then CONST_DECLs for foo and bar are put here.  */
11919   tree nonparms = NULL_TREE;
11920
11921   if (current_function_parms)
11922     {
11923       /* This case is when the function was defined with an ANSI prototype.
11924          The parms already have decls, so we need not do anything here
11925          except record them as in effect
11926          and complain if any redundant old-style parm decls were written.  */
11927
11928       tree specparms = current_function_parms;
11929       tree next;
11930
11931       /* Must clear this because it might contain TYPE_DECLs declared
11932              at class level.  */
11933       current_binding_level->names = NULL;
11934
11935       /* If we're doing semantic analysis, then we'll call pushdecl
11936              for each of these.  We must do them in reverse order so that
11937              they end in the correct forward order.  */
11938       specparms = nreverse (specparms);
11939
11940       for (parm = specparms; parm; parm = next)
11941         {
11942           next = TREE_CHAIN (parm);
11943           if (TREE_CODE (parm) == PARM_DECL)
11944             {
11945               if (DECL_NAME (parm) == NULL_TREE
11946                   || TREE_CODE (parm) != VOID_TYPE)
11947                 pushdecl (parm);
11948               else
11949                 error ("parameter %qD declared void", parm);
11950             }
11951           else
11952             {
11953               /* If we find an enum constant or a type tag,
11954                  put it aside for the moment.  */
11955               TREE_CHAIN (parm) = NULL_TREE;
11956               nonparms = chainon (nonparms, parm);
11957             }
11958         }
11959
11960       /* Get the decls in their original chain order and record in the
11961          function.  This is all and only the PARM_DECLs that were
11962          pushed into scope by the loop above.  */
11963       DECL_ARGUMENTS (fndecl) = getdecls ();
11964     }
11965   else
11966     DECL_ARGUMENTS (fndecl) = NULL_TREE;
11967
11968   /* Now store the final chain of decls for the arguments
11969      as the decl-chain of the current lexical scope.
11970      Put the enumerators in as well, at the front so that
11971      DECL_ARGUMENTS is not modified.  */
11972   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
11973
11974   if (use_eh_spec_block (current_function_decl))
11975     current_eh_spec_block = begin_eh_spec_block ();
11976 }
11977
11978 \f
11979 /* We have finished doing semantic analysis on DECL, but have not yet
11980    generated RTL for its body.  Save away our current state, so that
11981    when we want to generate RTL later we know what to do.  */
11982
11983 static void
11984 save_function_data (tree decl)
11985 {
11986   struct language_function *f;
11987
11988   /* Save the language-specific per-function data so that we can
11989      get it back when we really expand this function.  */
11990   gcc_assert (!DECL_PENDING_INLINE_P (decl));
11991
11992   /* Make a copy.  */
11993   f = GGC_NEW (struct language_function);
11994   memcpy (f, cp_function_chain, sizeof (struct language_function));
11995   DECL_SAVED_FUNCTION_DATA (decl) = f;
11996
11997   /* Clear out the bits we don't need.  */
11998   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
11999   f->bindings = NULL;
12000   f->x_local_names = NULL;
12001 }
12002
12003
12004 /* Set the return value of the constructor (if present).  */
12005
12006 static void
12007 finish_constructor_body (void)
12008 {
12009   tree val;
12010   tree exprstmt;
12011
12012   if (targetm.cxx.cdtor_returns_this ()
12013       && (! TYPE_FOR_JAVA (current_class_type)))
12014     {
12015       /* Any return from a constructor will end up here.  */
12016       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
12017
12018       val = DECL_ARGUMENTS (current_function_decl);
12019       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12020                     DECL_RESULT (current_function_decl), val);
12021       /* Return the address of the object.  */
12022       exprstmt = build_stmt (RETURN_EXPR, val);
12023       add_stmt (exprstmt);
12024     }
12025 }
12026
12027 /* Do all the processing for the beginning of a destructor; set up the
12028    vtable pointers and cleanups for bases and members.  */
12029
12030 static void
12031 begin_destructor_body (void)
12032 {
12033   tree compound_stmt;
12034
12035   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12036      issued an error message.  We still want to try to process the
12037      body of the function, but initialize_vtbl_ptrs will crash if
12038      TYPE_BINFO is NULL.  */
12039   if (COMPLETE_TYPE_P (current_class_type))
12040     {
12041       compound_stmt = begin_compound_stmt (0);
12042       /* Make all virtual function table pointers in non-virtual base
12043          classes point to CURRENT_CLASS_TYPE's virtual function
12044          tables.  */
12045       initialize_vtbl_ptrs (current_class_ptr);
12046       finish_compound_stmt (compound_stmt);
12047
12048       /* And insert cleanups for our bases and members so that they
12049          will be properly destroyed if we throw.  */
12050       push_base_cleanups ();
12051     }
12052 }
12053
12054 /* At the end of every destructor we generate code to delete the object if
12055    necessary.  Do that now.  */
12056
12057 static void
12058 finish_destructor_body (void)
12059 {
12060   tree exprstmt;
12061
12062   /* Any return from a destructor will end up here; that way all base
12063      and member cleanups will be run when the function returns.  */
12064   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
12065
12066   /* In a virtual destructor, we must call delete.  */
12067   if (DECL_VIRTUAL_P (current_function_decl))
12068     {
12069       tree if_stmt;
12070       tree virtual_size = cxx_sizeof (current_class_type);
12071
12072       /* [class.dtor]
12073
12074       At the point of definition of a virtual destructor (including
12075       an implicit definition), non-placement operator delete shall
12076       be looked up in the scope of the destructor's class and if
12077       found shall be accessible and unambiguous.  */
12078       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12079                                       virtual_size,
12080                                       /*global_p=*/false,
12081                                       /*placement=*/NULL_TREE,
12082                                       /*alloc_fn=*/NULL_TREE);
12083
12084       if_stmt = begin_if_stmt ();
12085       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12086                                    current_in_charge_parm,
12087                                    integer_one_node),
12088                            if_stmt);
12089       finish_expr_stmt (exprstmt);
12090       finish_then_clause (if_stmt);
12091       finish_if_stmt (if_stmt);
12092     }
12093
12094   if (targetm.cxx.cdtor_returns_this ())
12095     {
12096       tree val;
12097
12098       val = DECL_ARGUMENTS (current_function_decl);
12099       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12100                     DECL_RESULT (current_function_decl), val);
12101       /* Return the address of the object.  */
12102       exprstmt = build_stmt (RETURN_EXPR, val);
12103       add_stmt (exprstmt);
12104     }
12105 }
12106
12107 /* Do the necessary processing for the beginning of a function body, which
12108    in this case includes member-initializers, but not the catch clauses of
12109    a function-try-block.  Currently, this means opening a binding level
12110    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
12111
12112 tree
12113 begin_function_body (void)
12114 {
12115   tree stmt;
12116
12117   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12118     return NULL_TREE;
12119
12120   if (processing_template_decl)
12121     /* Do nothing now.  */;
12122   else
12123     /* Always keep the BLOCK node associated with the outermost pair of
12124        curly braces of a function.  These are needed for correct
12125        operation of dwarfout.c.  */
12126     keep_next_level (true);
12127
12128   stmt = begin_compound_stmt (BCS_FN_BODY);
12129
12130   if (processing_template_decl)
12131     /* Do nothing now.  */;
12132   else if (DECL_DESTRUCTOR_P (current_function_decl))
12133     begin_destructor_body ();
12134
12135   return stmt;
12136 }
12137
12138 /* Do the processing for the end of a function body.  Currently, this means
12139    closing out the cleanups for fully-constructed bases and members, and in
12140    the case of the destructor, deleting the object if desired.  Again, this
12141    is only meaningful for [cd]tors, since they are the only functions where
12142    there is a significant distinction between the main body and any
12143    function catch clauses.  Handling, say, main() return semantics here
12144    would be wrong, as flowing off the end of a function catch clause for
12145    main() would also need to return 0.  */
12146
12147 void
12148 finish_function_body (tree compstmt)
12149 {
12150   if (compstmt == NULL_TREE)
12151     return;
12152
12153   /* Close the block.  */
12154   finish_compound_stmt (compstmt);
12155
12156   if (processing_template_decl)
12157     /* Do nothing now.  */;
12158   else if (DECL_CONSTRUCTOR_P (current_function_decl))
12159     finish_constructor_body ();
12160   else if (DECL_DESTRUCTOR_P (current_function_decl))
12161     finish_destructor_body ();
12162 }
12163
12164 /* Given a function, returns the BLOCK corresponding to the outermost level
12165    of curly braces, skipping the artificial block created for constructor
12166    initializers.  */
12167
12168 tree
12169 outer_curly_brace_block (tree fndecl)
12170 {
12171   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12172   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12173     /* Skip the artificial function body block.  */
12174     block = BLOCK_SUBBLOCKS (block);
12175   return block;
12176 }
12177
12178 /* Finish up a function declaration and compile that function
12179    all the way to assembler language output.  The free the storage
12180    for the function definition.
12181
12182    FLAGS is a bitwise or of the following values:
12183      2 - INCLASS_INLINE
12184        We just finished processing the body of an in-class inline
12185        function definition.  (This processing will have taken place
12186        after the class definition is complete.)  */
12187
12188 tree
12189 finish_function (int flags)
12190 {
12191   tree fndecl = current_function_decl;
12192   tree fntype, ctype = NULL_TREE;
12193   int inclass_inline = (flags & 2) != 0;
12194   int nested;
12195
12196   /* When we get some parse errors, we can end up without a
12197      current_function_decl, so cope.  */
12198   if (fndecl == NULL_TREE)
12199     return error_mark_node;
12200
12201   gcc_assert (!defer_mark_used_calls);
12202   defer_mark_used_calls = true;
12203
12204   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12205       && DECL_VIRTUAL_P (fndecl)
12206       && !processing_template_decl)
12207     {
12208       tree fnclass = DECL_CONTEXT (fndecl);
12209       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12210         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12211     }
12212
12213   nested = function_depth > 1;
12214   fntype = TREE_TYPE (fndecl);
12215
12216   /*  TREE_READONLY (fndecl) = 1;
12217       This caused &foo to be of type ptr-to-const-function
12218       which then got a warning when stored in a ptr-to-function variable.  */
12219
12220   gcc_assert (building_stmt_tree ());
12221   /* The current function is being defined, so its DECL_INITIAL should
12222      be set, and unless there's a multiple definition, it should be
12223      error_mark_node.  */
12224   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12225
12226   /* For a cloned function, we've already got all the code we need;
12227      there's no need to add any extra bits.  */
12228   if (!DECL_CLONED_FUNCTION_P (fndecl))
12229     {
12230       if (DECL_MAIN_P (current_function_decl))
12231         {
12232           tree stmt;
12233
12234           /* Make it so that `main' always returns 0 by default (or
12235              1 for VMS).  */
12236 #if VMS_TARGET
12237           stmt = finish_return_stmt (integer_one_node);
12238 #else
12239           stmt = finish_return_stmt (integer_zero_node);
12240 #endif
12241           /* Hack.  We don't want the middle-end to warn that this
12242              return is unreachable, so put the statement on the
12243              special line 0.  */
12244           {
12245             location_t linezero = linemap_line_start (line_table, 0, 1);
12246             SET_EXPR_LOCATION (stmt, linezero);
12247           }
12248         }
12249
12250       if (use_eh_spec_block (current_function_decl))
12251         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12252                               (TREE_TYPE (current_function_decl)),
12253                               current_eh_spec_block);
12254     }
12255
12256   /* If we're saving up tree structure, tie off the function now.  */
12257   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12258
12259   finish_fname_decls ();
12260
12261   /* If this function can't throw any exceptions, remember that.  */
12262   if (!processing_template_decl
12263       && !cp_function_chain->can_throw
12264       && !flag_non_call_exceptions
12265       && !DECL_REPLACEABLE_P (fndecl))
12266     TREE_NOTHROW (fndecl) = 1;
12267
12268   /* This must come after expand_function_end because cleanups might
12269      have declarations (from inline functions) that need to go into
12270      this function's blocks.  */
12271
12272   /* If the current binding level isn't the outermost binding level
12273      for this function, either there is a bug, or we have experienced
12274      syntax errors and the statement tree is malformed.  */
12275   if (current_binding_level->kind != sk_function_parms)
12276     {
12277       /* Make sure we have already experienced errors.  */
12278       gcc_assert (errorcount);
12279
12280       /* Throw away the broken statement tree and extra binding
12281          levels.  */
12282       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12283
12284       while (current_binding_level->kind != sk_function_parms)
12285         {
12286           if (current_binding_level->kind == sk_class)
12287             pop_nested_class ();
12288           else
12289             poplevel (0, 0, 0);
12290         }
12291     }
12292   poplevel (1, 0, 1);
12293
12294   /* Statements should always be full-expressions at the outermost set
12295      of curly braces for a function.  */
12296   gcc_assert (stmts_are_full_exprs_p ());
12297
12298   /* Set up the named return value optimization, if we can.  Candidate
12299      variables are selected in check_return_expr.  */
12300   if (current_function_return_value)
12301     {
12302       tree r = current_function_return_value;
12303       tree outer;
12304
12305       if (r != error_mark_node
12306           /* This is only worth doing for fns that return in memory--and
12307              simpler, since we don't have to worry about promoted modes.  */
12308           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12309           /* Only allow this for variables declared in the outer scope of
12310              the function so we know that their lifetime always ends with a
12311              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
12312              we were to do this optimization in tree-ssa.  */
12313           && (outer = outer_curly_brace_block (fndecl))
12314           && chain_member (r, BLOCK_VARS (outer)))
12315         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12316
12317       current_function_return_value = NULL_TREE;
12318     }
12319
12320   /* Remember that we were in class scope.  */
12321   if (current_class_name)
12322     ctype = current_class_type;
12323
12324   /* Must mark the RESULT_DECL as being in this function.  */
12325   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12326
12327   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12328      to the FUNCTION_DECL node itself.  */
12329   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12330
12331   /* Save away current state, if appropriate.  */
12332   if (!processing_template_decl)
12333     save_function_data (fndecl);
12334
12335   /* Complain if there's just no return statement.  */
12336   if (warn_return_type
12337       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12338       && !dependent_type_p (TREE_TYPE (fntype))
12339       && !current_function_returns_value && !current_function_returns_null
12340       /* Don't complain if we abort or throw.  */
12341       && !current_function_returns_abnormally
12342       && !DECL_NAME (DECL_RESULT (fndecl))
12343       && !TREE_NO_WARNING (fndecl)
12344       /* Structor return values (if any) are set by the compiler.  */
12345       && !DECL_CONSTRUCTOR_P (fndecl)
12346       && !DECL_DESTRUCTOR_P (fndecl))
12347     {
12348       warning (OPT_Wreturn_type,
12349                "no return statement in function returning non-void");
12350       TREE_NO_WARNING (fndecl) = 1;
12351     }
12352
12353   /* Store the end of the function, so that we get good line number
12354      info for the epilogue.  */
12355   cfun->function_end_locus = input_location;
12356
12357   /* Genericize before inlining.  */
12358   if (!processing_template_decl)
12359     {
12360       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12361       invoke_plugin_callbacks (PLUGIN_CXX_CP_PRE_GENERICIZE, fndecl);
12362       cp_genericize (fndecl);
12363       /* Clear out the bits we don't need.  */
12364       f->x_current_class_ptr = NULL;
12365       f->x_current_class_ref = NULL;
12366       f->x_eh_spec_block = NULL;
12367       f->x_in_charge_parm = NULL;
12368       f->x_vtt_parm = NULL;
12369       f->x_return_value = NULL;
12370       f->bindings = NULL;
12371       f->extern_decl_map = NULL;
12372
12373       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
12374       c_warn_unused_result (gimple_body (fndecl));
12375     }
12376   /* Clear out the bits we don't need.  */
12377   local_names = NULL;
12378
12379   /* We're leaving the context of this function, so zap cfun.  It's still in
12380      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
12381   set_cfun (NULL);
12382   current_function_decl = NULL;
12383
12384   /* If this is an in-class inline definition, we may have to pop the
12385      bindings for the template parameters that we added in
12386      maybe_begin_member_template_processing when start_function was
12387      called.  */
12388   if (inclass_inline)
12389     maybe_end_member_template_processing ();
12390
12391   /* Leave the scope of the class.  */
12392   if (ctype)
12393     pop_nested_class ();
12394
12395   --function_depth;
12396
12397   /* Clean up.  */
12398   if (! nested)
12399     /* Let the error reporting routines know that we're outside a
12400        function.  For a nested function, this value is used in
12401        cxx_pop_function_context and then reset via pop_function_context.  */
12402     current_function_decl = NULL_TREE;
12403
12404   defer_mark_used_calls = false;
12405   if (deferred_mark_used_calls)
12406     {
12407       unsigned int i;
12408       tree decl;
12409
12410       for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12411         mark_used (decl);
12412       VEC_free (tree, gc, deferred_mark_used_calls);
12413     }
12414
12415   return fndecl;
12416 }
12417 \f
12418 /* Create the FUNCTION_DECL for a function definition.
12419    DECLSPECS and DECLARATOR are the parts of the declaration;
12420    they describe the return type and the name of the function,
12421    but twisted together in a fashion that parallels the syntax of C.
12422
12423    This function creates a binding context for the function body
12424    as well as setting up the FUNCTION_DECL in current_function_decl.
12425
12426    Returns a FUNCTION_DECL on success.
12427
12428    If the DECLARATOR is not suitable for a function (it defines a datum
12429    instead), we return 0, which tells yyparse to report a parse error.
12430
12431    May return void_type_node indicating that this method is actually
12432    a friend.  See grokfield for more details.
12433
12434    Came here with a `.pushlevel' .
12435
12436    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12437    CHANGES TO CODE IN `grokfield'.  */
12438
12439 tree
12440 start_method (cp_decl_specifier_seq *declspecs,
12441               const cp_declarator *declarator, tree attrlist)
12442 {
12443   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12444                                 &attrlist);
12445
12446   if (fndecl == error_mark_node)
12447     return error_mark_node;
12448
12449   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12450     {
12451       error ("invalid member function declaration");
12452       return error_mark_node;
12453     }
12454
12455   if (attrlist)
12456     cplus_decl_attributes (&fndecl, attrlist, 0);
12457
12458   /* Pass friends other than inline friend functions back.  */
12459   if (fndecl == void_type_node)
12460     return fndecl;
12461
12462   if (DECL_IN_AGGR_P (fndecl))
12463     {
12464       if (DECL_CONTEXT (fndecl)
12465           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12466         error ("%qD is already defined in class %qT", fndecl,
12467                DECL_CONTEXT (fndecl));
12468       return error_mark_node;
12469     }
12470
12471   check_template_shadow (fndecl);
12472
12473   DECL_DECLARED_INLINE_P (fndecl) = 1;
12474   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12475
12476   /* We process method specializations in finish_struct_1.  */
12477   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12478     {
12479       fndecl = push_template_decl (fndecl);
12480       if (fndecl == error_mark_node)
12481         return fndecl;
12482     }
12483
12484   if (! DECL_FRIEND_P (fndecl))
12485     {
12486       if (TREE_CHAIN (fndecl))
12487         {
12488           fndecl = copy_node (fndecl);
12489           TREE_CHAIN (fndecl) = NULL_TREE;
12490         }
12491     }
12492
12493   finish_decl (fndecl, NULL_TREE, NULL_TREE, NULL_TREE);
12494
12495   /* Make a place for the parms.  */
12496   begin_scope (sk_function_parms, fndecl);
12497
12498   DECL_IN_AGGR_P (fndecl) = 1;
12499   return fndecl;
12500 }
12501
12502 /* Go through the motions of finishing a function definition.
12503    We don't compile this method until after the whole class has
12504    been processed.
12505
12506    FINISH_METHOD must return something that looks as though it
12507    came from GROKFIELD (since we are defining a method, after all).
12508
12509    This is called after parsing the body of the function definition.
12510    STMTS is the chain of statements that makes up the function body.
12511
12512    DECL is the ..._DECL that `start_method' provided.  */
12513
12514 tree
12515 finish_method (tree decl)
12516 {
12517   tree fndecl = decl;
12518   tree old_initial;
12519
12520   tree link;
12521
12522   if (decl == void_type_node)
12523     return decl;
12524
12525   old_initial = DECL_INITIAL (fndecl);
12526
12527   /* Undo the level for the parms (from start_method).
12528      This is like poplevel, but it causes nothing to be
12529      saved.  Saving information here confuses symbol-table
12530      output routines.  Besides, this information will
12531      be correctly output when this method is actually
12532      compiled.  */
12533
12534   /* Clear out the meanings of the local variables of this level;
12535      also record in each decl which block it belongs to.  */
12536
12537   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12538     {
12539       if (DECL_NAME (link) != NULL_TREE)
12540         pop_binding (DECL_NAME (link), link);
12541       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
12542       DECL_CONTEXT (link) = NULL_TREE;
12543     }
12544
12545   poplevel (0, 0, 0);
12546
12547   DECL_INITIAL (fndecl) = old_initial;
12548
12549   /* We used to check if the context of FNDECL was different from
12550      current_class_type as another way to get inside here.  This didn't work
12551      for String.cc in libg++.  */
12552   if (DECL_FRIEND_P (fndecl))
12553     {
12554       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
12555                      fndecl);
12556       decl = void_type_node;
12557     }
12558
12559   return decl;
12560 }
12561 \f
12562
12563 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
12564    we can lay it out later, when and if its type becomes complete.  */
12565
12566 void
12567 maybe_register_incomplete_var (tree var)
12568 {
12569   gcc_assert (TREE_CODE (var) == VAR_DECL);
12570
12571   /* Keep track of variables with incomplete types.  */
12572   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12573       && DECL_EXTERNAL (var))
12574     {
12575       tree inner_type = TREE_TYPE (var);
12576
12577       while (TREE_CODE (inner_type) == ARRAY_TYPE)
12578         inner_type = TREE_TYPE (inner_type);
12579       inner_type = TYPE_MAIN_VARIANT (inner_type);
12580
12581       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12582           /* RTTI TD entries are created while defining the type_info.  */
12583           || (TYPE_LANG_SPECIFIC (inner_type)
12584               && TYPE_BEING_DEFINED (inner_type)))
12585         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12586     }
12587 }
12588
12589 /* Called when a class type (given by TYPE) is defined.  If there are
12590    any existing VAR_DECLs whose type has been completed by this
12591    declaration, update them now.  */
12592
12593 void
12594 complete_vars (tree type)
12595 {
12596   tree *list = &incomplete_vars;
12597
12598   gcc_assert (CLASS_TYPE_P (type));
12599   while (*list)
12600     {
12601       if (same_type_p (type, TREE_PURPOSE (*list)))
12602         {
12603           tree var = TREE_VALUE (*list);
12604           tree type = TREE_TYPE (var);
12605           /* Complete the type of the variable.  The VAR_DECL itself
12606              will be laid out in expand_expr.  */
12607           complete_type (type);
12608           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12609           /* Remove this entry from the list.  */
12610           *list = TREE_CHAIN (*list);
12611         }
12612       else
12613         list = &TREE_CHAIN (*list);
12614     }
12615
12616   /* Check for pending declarations which may have abstract type.  */
12617   complete_type_check_abstract (type);
12618 }
12619
12620 /* If DECL is of a type which needs a cleanup, build and return an
12621    expression to perform that cleanup here.  Return NULL_TREE if no
12622    cleanup need be done.  */
12623
12624 tree
12625 cxx_maybe_build_cleanup (tree decl)
12626 {
12627   tree type;
12628   tree attr;
12629   tree cleanup;
12630
12631   /* Assume no cleanup is required.  */
12632   cleanup = NULL_TREE;
12633
12634   if (error_operand_p (decl))
12635     return cleanup;
12636
12637   /* Handle "__attribute__((cleanup))".  We run the cleanup function
12638      before the destructor since the destructor is what actually
12639      terminates the lifetime of the object.  */
12640   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12641   if (attr)
12642     {
12643       tree id;
12644       tree fn;
12645       tree arg;
12646
12647       /* Get the name specified by the user for the cleanup function.  */
12648       id = TREE_VALUE (TREE_VALUE (attr));
12649       /* Look up the name to find the cleanup function to call.  It is
12650          important to use lookup_name here because that is what is
12651          used in c-common.c:handle_cleanup_attribute when performing
12652          initial checks on the attribute.  Note that those checks
12653          include ensuring that the function found is not an overloaded
12654          function, or an object with an overloaded call operator,
12655          etc.; we can rely on the fact that the function found is an
12656          ordinary FUNCTION_DECL.  */
12657       fn = lookup_name (id);
12658       arg = build_address (decl);
12659       mark_used (decl);
12660       cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12661                                                              arg),
12662                                         tf_warning_or_error);
12663     }
12664   /* Handle ordinary C++ destructors.  */
12665   type = TREE_TYPE (decl);
12666   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12667     {
12668       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12669       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12670                          && CLASSTYPE_VBASECLASSES (type));
12671       tree addr;
12672       tree call;
12673
12674       if (TREE_CODE (type) == ARRAY_TYPE)
12675         addr = decl;
12676       else
12677         addr = build_address (decl);
12678
12679       /* Optimize for space over speed here.  */
12680       if (!has_vbases || flag_expensive_optimizations)
12681         flags |= LOOKUP_NONVIRTUAL;
12682
12683       call = build_delete (TREE_TYPE (addr), addr,
12684                            sfk_complete_destructor, flags, 0);
12685       if (cleanup)
12686         cleanup = build_compound_expr (cleanup, call);
12687       else
12688         cleanup = call;
12689     }
12690
12691   return cleanup;
12692 }
12693 \f
12694 /* When a stmt has been parsed, this function is called.  */
12695
12696 void
12697 finish_stmt (void)
12698 {
12699 }
12700
12701 /* DECL was originally constructed as a non-static member function,
12702    but turned out to be static.  Update it accordingly.  */
12703
12704 void
12705 revert_static_member_fn (tree decl)
12706 {
12707   tree tmp;
12708   tree function = TREE_TYPE (decl);
12709   tree args = TYPE_ARG_TYPES (function);
12710
12711   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
12712       != TYPE_UNQUALIFIED)
12713     error ("static member function %q#D declared with type qualifiers", decl);
12714
12715   args = TREE_CHAIN (args);
12716   tmp = build_function_type (TREE_TYPE (function), args);
12717   tmp = build_qualified_type (tmp, cp_type_quals (function));
12718   tmp = build_exception_variant (tmp,
12719                                  TYPE_RAISES_EXCEPTIONS (function));
12720   TREE_TYPE (decl) = tmp;
12721   if (DECL_ARGUMENTS (decl))
12722     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12723   DECL_STATIC_FUNCTION_P (decl) = 1;
12724 }
12725
12726 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12727    one of the language-independent trees.  */
12728
12729 enum cp_tree_node_structure_enum
12730 cp_tree_node_structure (union lang_tree_node * t)
12731 {
12732   switch (TREE_CODE (&t->generic))
12733     {
12734     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
12735     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
12736     case OVERLOAD:              return TS_CP_OVERLOAD;
12737     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
12738     case PTRMEM_CST:            return TS_CP_PTRMEM;
12739     case BASELINK:              return TS_CP_BASELINK;
12740     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
12741     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
12742     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
12743     default:                    return TS_CP_GENERIC;
12744     }
12745 }
12746
12747 /* Build the void_list_node (void_type_node having been created).  */
12748 tree
12749 build_void_list_node (void)
12750 {
12751   tree t = build_tree_list (NULL_TREE, void_type_node);
12752   return t;
12753 }
12754
12755 bool
12756 cp_missing_noreturn_ok_p (tree decl)
12757 {
12758   /* A missing noreturn is ok for the `main' function.  */
12759   return DECL_MAIN_P (decl);
12760 }
12761
12762 /* Return the COMDAT group into which DECL should be placed.  */
12763
12764 const char *
12765 cxx_comdat_group (tree decl)
12766 {
12767   tree name;
12768
12769   /* Virtual tables, construction virtual tables, and virtual table
12770      tables all go in a single COMDAT group, named after the primary
12771      virtual table.  */
12772   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12773     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12774   /* For all other DECLs, the COMDAT group is the mangled name of the
12775      declaration itself.  */
12776   else
12777     {
12778       while (DECL_THUNK_P (decl))
12779         {
12780           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12781              into the same section as the target function.  In that case
12782              we must return target's name.  */
12783           tree target = THUNK_TARGET (decl);
12784           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12785               && DECL_SECTION_NAME (target) != NULL
12786               && DECL_ONE_ONLY (target))
12787             decl = target;
12788           else
12789             break;
12790         }
12791       name = DECL_ASSEMBLER_NAME (decl);
12792     }
12793
12794   return IDENTIFIER_POINTER (name);
12795 }
12796
12797 #include "gt-cp-decl.h"