OSDN Git Service

2009-05-20 Sandra Loosemore <sandra@codesourcery.com>
[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, flags);
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   const char *errmsg;
7610
7611   signed_p = declspecs->specs[(int)ds_signed];
7612   unsigned_p = declspecs->specs[(int)ds_unsigned];
7613   short_p = declspecs->specs[(int)ds_short];
7614   long_p = declspecs->specs[(int)ds_long];
7615   longlong = declspecs->specs[(int)ds_long] >= 2;
7616   thread_p = declspecs->specs[(int)ds_thread];
7617
7618   if (decl_context == FUNCDEF)
7619     funcdef_flag = true, decl_context = NORMAL;
7620   else if (decl_context == MEMFUNCDEF)
7621     funcdef_flag = true, decl_context = FIELD;
7622   else if (decl_context == BITFIELD)
7623     bitfield = 1, decl_context = FIELD;
7624   else if (decl_context == TEMPLATE_TYPE_ARG)
7625     template_type_arg = true, decl_context = TYPENAME;
7626
7627   if (initialized > 1)
7628     funcdef_flag = true;
7629
7630   /* Look inside a declarator for the name being declared
7631      and get it as a string, for an error message.  */
7632   for (id_declarator = declarator;
7633        id_declarator;
7634        id_declarator = id_declarator->declarator)
7635     {
7636       if (id_declarator->kind != cdk_id)
7637         innermost_code = id_declarator->kind;
7638
7639       switch (id_declarator->kind)
7640         {
7641         case cdk_function:
7642           if (id_declarator->declarator
7643               && id_declarator->declarator->kind == cdk_id)
7644             {
7645               sfk = id_declarator->declarator->u.id.sfk;
7646               if (sfk == sfk_destructor)
7647                 flags = DTOR_FLAG;
7648             }
7649           break;
7650
7651         case cdk_id:
7652           {
7653             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7654             tree decl = id_declarator->u.id.unqualified_name;
7655             if (!decl)
7656               break;
7657             if (qualifying_scope)
7658               {
7659                 if (at_function_scope_p ())
7660                   {
7661                     /* [dcl.meaning] 
7662
7663                        A declarator-id shall not be qualified except
7664                        for ... 
7665
7666                        None of the cases are permitted in block
7667                        scope.  */
7668                     if (qualifying_scope == global_namespace)
7669                       error ("invalid use of qualified-name %<::%D%>",
7670                              decl);
7671                     else if (TYPE_P (qualifying_scope))
7672                       error ("invalid use of qualified-name %<%T::%D%>",
7673                              qualifying_scope, decl);
7674                     else 
7675                       error ("invalid use of qualified-name %<%D::%D%>",
7676                              qualifying_scope, decl);
7677                     return error_mark_node;
7678                   }
7679                 else if (TYPE_P (qualifying_scope))
7680                   {
7681                     ctype = qualifying_scope;
7682                     if (innermost_code != cdk_function
7683                         && current_class_type
7684                         && !UNIQUELY_DERIVED_FROM_P (ctype,
7685                                                      current_class_type))
7686                       {
7687                         error ("type %qT is not derived from type %qT",
7688                                ctype, current_class_type);
7689                         return error_mark_node;
7690                       }
7691                   }
7692                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7693                   in_namespace = qualifying_scope;
7694               }
7695             switch (TREE_CODE (decl))
7696               {
7697               case BIT_NOT_EXPR:
7698                 {
7699                   tree type;
7700
7701                   if (innermost_code != cdk_function)
7702                     {
7703                       error ("declaration of %qD as non-function", decl);
7704                       return error_mark_node;
7705                     }
7706                   else if (!qualifying_scope
7707                            && !(current_class_type && at_class_scope_p ()))
7708                     {
7709                       error ("declaration of %qD as non-member", decl);
7710                       return error_mark_node;
7711                     }
7712
7713                   type = TREE_OPERAND (decl, 0);
7714                   if (TYPE_P (type))
7715                     type = constructor_name (type);
7716                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
7717                   dname = decl;
7718                 }
7719                 break;
7720
7721               case TEMPLATE_ID_EXPR:
7722                 {
7723                   tree fns = TREE_OPERAND (decl, 0);
7724
7725                   dname = fns;
7726                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
7727                     {
7728                       gcc_assert (is_overloaded_fn (dname));
7729                       dname = DECL_NAME (get_first_fn (dname));
7730                     }
7731                 }
7732                 /* Fall through.  */
7733
7734               case IDENTIFIER_NODE:
7735                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7736                   dname = decl;
7737
7738                 if (C_IS_RESERVED_WORD (dname))
7739                   {
7740                     error ("declarator-id missing; using reserved word %qD",
7741                            dname);
7742                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7743                   }
7744                 else if (!IDENTIFIER_TYPENAME_P (dname))
7745                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7746                 else
7747                   {
7748                     gcc_assert (flags == NO_SPECIAL);
7749                     flags = TYPENAME_FLAG;
7750                     ctor_return_type = TREE_TYPE (dname);
7751                     sfk = sfk_conversion;
7752                     if (is_typename_at_global_scope (dname))
7753                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7754                     else
7755                       name = "<invalid operator>";
7756                   }
7757                 break;
7758
7759               default:
7760                 gcc_unreachable ();
7761               }
7762             break;
7763           }
7764
7765         case cdk_array:
7766         case cdk_pointer:
7767         case cdk_reference:
7768         case cdk_ptrmem:
7769           break;
7770
7771         case cdk_error:
7772           return error_mark_node;
7773
7774         default:
7775           gcc_unreachable ();
7776         }
7777       if (id_declarator->kind == cdk_id)
7778         break;
7779     }
7780
7781   /* [dcl.fct.edf]
7782
7783      The declarator in a function-definition shall have the form
7784      D1 ( parameter-declaration-clause) ...  */
7785   if (funcdef_flag && innermost_code != cdk_function)
7786     {
7787       error ("function definition does not declare parameters");
7788       return error_mark_node;
7789     }
7790
7791   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7792       && innermost_code != cdk_function
7793       && ! (ctype && !declspecs->any_specifiers_p))
7794     {
7795       error ("declaration of %qD as non-function", dname);
7796       return error_mark_node;
7797     }
7798
7799   /* Anything declared one level down from the top level
7800      must be one of the parameters of a function
7801      (because the body is at least two levels down).  */
7802
7803   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7804      by not allowing C++ class definitions to specify their parameters
7805      with xdecls (must be spec.d in the parmlist).
7806
7807      Since we now wait to push a class scope until we are sure that
7808      we are in a legitimate method context, we must set oldcname
7809      explicitly (since current_class_name is not yet alive).
7810
7811      We also want to avoid calling this a PARM if it is in a namespace.  */
7812
7813   if (decl_context == NORMAL && !toplevel_bindings_p ())
7814     {
7815       struct cp_binding_level *b = current_binding_level;
7816       current_binding_level = b->level_chain;
7817       if (current_binding_level != 0 && toplevel_bindings_p ())
7818         decl_context = PARM;
7819       current_binding_level = b;
7820     }
7821
7822   if (name == NULL)
7823     name = decl_context == PARM ? "parameter" : "type name";
7824
7825   /* If there were multiple types specified in the decl-specifier-seq,
7826      issue an error message.  */
7827   if (declspecs->multiple_types_p)
7828     {
7829       error ("two or more data types in declaration of %qs", name);
7830       return error_mark_node;
7831     }
7832
7833   if (declspecs->conflicting_specifiers_p)
7834     {
7835       error ("conflicting specifiers in declaration of %qs", name);
7836       return error_mark_node;
7837     }
7838
7839   /* Extract the basic type from the decl-specifier-seq.  */
7840   type = declspecs->type;
7841   if (type == error_mark_node)
7842     {
7843       type = NULL_TREE;
7844       type_was_error_mark_node = true;
7845     }
7846   /* If the entire declaration is itself tagged as deprecated then
7847      suppress reports of deprecated items.  */
7848   if (type && TREE_DEPRECATED (type)
7849       && deprecated_state != DEPRECATED_SUPPRESS)
7850     warn_deprecated_use (type, NULL_TREE);
7851   if (type && TREE_CODE (type) == TYPE_DECL)
7852     {
7853       typedef_decl = type;
7854       type = TREE_TYPE (typedef_decl);
7855       if (TREE_DEPRECATED (type)
7856           && DECL_ARTIFICIAL (typedef_decl)
7857           && deprecated_state != DEPRECATED_SUPPRESS)
7858         warn_deprecated_use (type, NULL_TREE);
7859     }
7860   /* No type at all: default to `int', and set DEFAULTED_INT
7861      because it was not a user-defined typedef.  */
7862   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7863     {
7864       /* These imply 'int'.  */
7865       type = integer_type_node;
7866       defaulted_int = 1;
7867     }
7868   /* Gather flags.  */
7869   explicit_int = declspecs->explicit_int_p;
7870   explicit_char = declspecs->explicit_char_p;
7871
7872 #if 0
7873   /* See the code below that used this.  */
7874   if (typedef_decl)
7875     decl_attr = DECL_ATTRIBUTES (typedef_decl);
7876 #endif
7877   typedef_type = type;
7878
7879
7880   if (sfk != sfk_conversion)
7881     ctor_return_type = ctype;
7882
7883   if (sfk != sfk_none)
7884     type = check_special_function_return_type (sfk, type,
7885                                                ctor_return_type);
7886   else if (type == NULL_TREE)
7887     {
7888       int is_main;
7889
7890       explicit_int = -1;
7891
7892       /* We handle `main' specially here, because 'main () { }' is so
7893          common.  With no options, it is allowed.  With -Wreturn-type,
7894          it is a warning.  It is only an error with -pedantic-errors.  */
7895       is_main = (funcdef_flag
7896                  && dname && MAIN_NAME_P (dname)
7897                  && ctype == NULL_TREE
7898                  && in_namespace == NULL_TREE
7899                  && current_namespace == global_namespace);
7900
7901       if (type_was_error_mark_node)
7902         /* We've already issued an error, don't complain more.  */;
7903       else if (in_system_header || flag_ms_extensions)
7904         /* Allow it, sigh.  */;
7905       else if (! is_main)
7906         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
7907       else if (pedantic)
7908         pedwarn (input_location, OPT_pedantic,
7909                  "ISO C++ forbids declaration of %qs with no type", name);
7910       else
7911         warning (OPT_Wreturn_type,
7912                  "ISO C++ forbids declaration of %qs with no type", name);
7913
7914       type = integer_type_node;
7915     }
7916
7917   ctype = NULL_TREE;
7918
7919   /* Now process the modifiers that were specified
7920      and check for invalid combinations.  */
7921
7922   /* Long double is a special combination.  */
7923   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
7924     {
7925       long_p = false;
7926       type = build_qualified_type (long_double_type_node,
7927                                    cp_type_quals (type));
7928     }
7929
7930   /* Check all other uses of type modifiers.  */
7931
7932   if (unsigned_p || signed_p || long_p || short_p)
7933     {
7934       int ok = 0;
7935
7936       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
7937         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7938       else if (signed_p && unsigned_p)
7939         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
7940       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
7941         error ("%<long long%> invalid for %qs", name);
7942       else if (long_p && TREE_CODE (type) == REAL_TYPE)
7943         error ("%<long%> invalid for %qs", name);
7944       else if (short_p && TREE_CODE (type) == REAL_TYPE)
7945         error ("%<short%> invalid for %qs", name);
7946       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
7947         error ("%<long%> or %<short%> invalid for %qs", name);
7948       else if ((long_p || short_p) && explicit_char)
7949         error ("%<long%> or %<short%> specified with char for %qs", name);
7950       else if (long_p && short_p)
7951         error ("%<long%> and %<short%> specified together for %qs", name);
7952       else if (type == char16_type_node || type == char32_type_node)
7953         {
7954           if (signed_p || unsigned_p)
7955             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
7956           else if (short_p || long_p)
7957             error ("%<short%> or %<long%> invalid for %qs", name);
7958         }
7959       else
7960         {
7961           ok = 1;
7962           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
7963             {
7964               pedwarn (input_location, OPT_pedantic, 
7965                        "long, short, signed or unsigned used invalidly for %qs",
7966                        name);
7967               if (flag_pedantic_errors)
7968                 ok = 0;
7969             }
7970         }
7971
7972       /* Discard the type modifiers if they are invalid.  */
7973       if (! ok)
7974         {
7975           unsigned_p = false;
7976           signed_p = false;
7977           long_p = false;
7978           short_p = false;
7979           longlong = 0;
7980         }
7981     }
7982
7983   /* Decide whether an integer type is signed or not.
7984      Optionally treat bitfields as signed by default.  */
7985   if (unsigned_p
7986       /* [class.bit]
7987
7988          It is implementation-defined whether a plain (neither
7989          explicitly signed or unsigned) char, short, int, or long
7990          bit-field is signed or unsigned.
7991
7992          Naturally, we extend this to long long as well.  Note that
7993          this does not include wchar_t.  */
7994       || (bitfield && !flag_signed_bitfields
7995           && !signed_p
7996           /* A typedef for plain `int' without `signed' can be
7997              controlled just like plain `int', but a typedef for
7998              `signed int' cannot be so controlled.  */
7999           && !(typedef_decl
8000                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8001           && TREE_CODE (type) == INTEGER_TYPE
8002           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8003     {
8004       if (longlong)
8005         type = long_long_unsigned_type_node;
8006       else if (long_p)
8007         type = long_unsigned_type_node;
8008       else if (short_p)
8009         type = short_unsigned_type_node;
8010       else if (type == char_type_node)
8011         type = unsigned_char_type_node;
8012       else if (typedef_decl)
8013         type = unsigned_type_for (type);
8014       else
8015         type = unsigned_type_node;
8016     }
8017   else if (signed_p && type == char_type_node)
8018     type = signed_char_type_node;
8019   else if (longlong)
8020     type = long_long_integer_type_node;
8021   else if (long_p)
8022     type = long_integer_type_node;
8023   else if (short_p)
8024     type = short_integer_type_node;
8025
8026   if (declspecs->specs[(int)ds_complex])
8027     {
8028       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8029         error ("complex invalid for %qs", name);
8030       /* If we just have "complex", it is equivalent to
8031          "complex double", but if any modifiers at all are specified it is
8032          the complex form of TYPE.  E.g, "complex short" is
8033          "complex short int".  */
8034
8035       else if (defaulted_int && ! longlong
8036                && ! (long_p || short_p || signed_p || unsigned_p))
8037         type = complex_double_type_node;
8038       else if (type == integer_type_node)
8039         type = complex_integer_type_node;
8040       else if (type == float_type_node)
8041         type = complex_float_type_node;
8042       else if (type == double_type_node)
8043         type = complex_double_type_node;
8044       else if (type == long_double_type_node)
8045         type = complex_long_double_type_node;
8046       else
8047         type = build_complex_type (type);
8048     }
8049
8050   type_quals = TYPE_UNQUALIFIED;
8051   if (declspecs->specs[(int)ds_const])
8052     type_quals |= TYPE_QUAL_CONST;
8053   if (declspecs->specs[(int)ds_volatile])
8054     type_quals |= TYPE_QUAL_VOLATILE;
8055   if (declspecs->specs[(int)ds_restrict])
8056     type_quals |= TYPE_QUAL_RESTRICT;
8057   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8058     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8059            ctor_return_type);
8060
8061   if (TREE_CODE (type) == FUNCTION_TYPE
8062       && type_quals != TYPE_UNQUALIFIED)
8063     {
8064       /* This was an error in C++98 (cv-qualifiers cannot be added to
8065          a function type), but DR 295 makes the code well-formed by
8066          dropping the extra qualifiers. */
8067       if (pedantic)
8068         {
8069           tree bad_type = build_qualified_type (type, type_quals);
8070           pedwarn (input_location, OPT_pedantic, 
8071                    "ignoring %qV qualifiers added to function type %qT",
8072                    bad_type, type);
8073         }
8074       type_quals = TYPE_UNQUALIFIED;
8075     }
8076   type_quals |= cp_type_quals (type);
8077   type = cp_build_qualified_type_real
8078     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8079                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8080   /* We might have ignored or rejected some of the qualifiers.  */
8081   type_quals = cp_type_quals (type);
8082
8083   staticp = 0;
8084   inlinep = !! declspecs->specs[(int)ds_inline];
8085   virtualp = !! declspecs->specs[(int)ds_virtual];
8086   explicitp = !! declspecs->specs[(int)ds_explicit];
8087
8088   storage_class = declspecs->storage_class;
8089   if (storage_class == sc_static)
8090     staticp = 1 + (decl_context == FIELD);
8091
8092   if (virtualp && staticp == 2)
8093     {
8094       error ("member %qD cannot be declared both virtual and static", dname);
8095       storage_class = sc_none;
8096       staticp = 0;
8097     }
8098   friendp = !! declspecs->specs[(int)ds_friend];
8099
8100   if (dependent_name && !friendp)
8101     {
8102       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8103       return error_mark_node;
8104     }
8105
8106   /* Issue errors about use of storage classes for parameters.  */
8107   if (decl_context == PARM)
8108     {
8109       if (declspecs->specs[(int)ds_typedef])
8110         {
8111           error ("typedef declaration invalid in parameter declaration");
8112           return error_mark_node;
8113         }
8114       else if (storage_class == sc_static
8115                || storage_class == sc_extern
8116                || thread_p)
8117         error ("storage class specifiers invalid in parameter declarations");
8118
8119       if (type_uses_auto (type))
8120         {
8121           error ("parameter declared %<auto%>");
8122           type = error_mark_node;
8123         }
8124     }
8125
8126   /* Give error if `virtual' is used outside of class declaration.  */
8127   if (virtualp
8128       && (current_class_name == NULL_TREE || decl_context != FIELD))
8129     {
8130       error ("%<virtual%> outside class declaration");
8131       virtualp = 0;
8132     }
8133
8134   /* Static anonymous unions are dealt with here.  */
8135   if (staticp && decl_context == TYPENAME
8136       && declspecs->type
8137       && ANON_AGGR_TYPE_P (declspecs->type))
8138     decl_context = FIELD;
8139
8140   /* Warn about storage classes that are invalid for certain
8141      kinds of declarations (parameters, typenames, etc.).  */
8142   if (thread_p
8143       && ((storage_class
8144            && storage_class != sc_extern
8145            && storage_class != sc_static)
8146           || declspecs->specs[(int)ds_typedef]))
8147     {
8148       error ("multiple storage classes in declaration of %qs", name);
8149       thread_p = false;
8150     }
8151   if (decl_context != NORMAL
8152       && ((storage_class != sc_none
8153            && storage_class != sc_mutable)
8154           || thread_p))
8155     {
8156       if ((decl_context == PARM || decl_context == CATCHPARM)
8157           && (storage_class == sc_register
8158               || storage_class == sc_auto))
8159         ;
8160       else if (declspecs->specs[(int)ds_typedef])
8161         ;
8162       else if (decl_context == FIELD
8163                /* C++ allows static class elements.  */
8164                && storage_class == sc_static)
8165         /* C++ also allows inlines and signed and unsigned elements,
8166            but in those cases we don't come in here.  */
8167         ;
8168       else
8169         {
8170           if (decl_context == FIELD)
8171             error ("storage class specified for %qs", name);
8172           else
8173             {
8174               if (decl_context == PARM || decl_context == CATCHPARM)
8175                 error ("storage class specified for parameter %qs", name);
8176               else
8177                 error ("storage class specified for typename");
8178             }
8179           if (storage_class == sc_register
8180               || storage_class == sc_auto
8181               || storage_class == sc_extern
8182               || thread_p)
8183             storage_class = sc_none;
8184         }
8185     }
8186   else if (storage_class == sc_extern && funcdef_flag
8187            && ! toplevel_bindings_p ())
8188     error ("nested function %qs declared %<extern%>", name);
8189   else if (toplevel_bindings_p ())
8190     {
8191       if (storage_class == sc_auto)
8192         error ("top-level declaration of %qs specifies %<auto%>", name);
8193     }
8194   else if (thread_p
8195            && storage_class != sc_extern
8196            && storage_class != sc_static)
8197     {
8198       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8199              name);
8200       thread_p = false;
8201     }
8202
8203   if (storage_class && friendp)
8204     {
8205       error ("storage class specifiers invalid in friend function declarations");
8206       storage_class = sc_none;
8207       staticp = 0;
8208     }
8209
8210   if (!id_declarator)
8211     unqualified_id = NULL_TREE;
8212   else
8213     {
8214       unqualified_id = id_declarator->u.id.unqualified_name;
8215       switch (TREE_CODE (unqualified_id))
8216         {
8217         case BIT_NOT_EXPR:
8218           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8219           if (TYPE_P (unqualified_id))
8220             unqualified_id = constructor_name (unqualified_id);
8221           break;
8222
8223         case IDENTIFIER_NODE:
8224         case TEMPLATE_ID_EXPR:
8225           break;
8226
8227         default:
8228           gcc_unreachable ();
8229         }
8230     }
8231
8232   /* Determine the type of the entity declared by recurring on the
8233      declarator.  */
8234   for (; declarator; declarator = declarator->declarator)
8235     {
8236       const cp_declarator *inner_declarator;
8237       tree attrs;
8238
8239       if (type == error_mark_node)
8240         return error_mark_node;
8241
8242       attrs = declarator->attributes;
8243       if (attrs)
8244         {
8245           int attr_flags;
8246
8247           attr_flags = 0;
8248           if (declarator == NULL || declarator->kind == cdk_id)
8249             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8250           if (declarator->kind == cdk_function)
8251             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8252           if (declarator->kind == cdk_array)
8253             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8254           returned_attrs = decl_attributes (&type,
8255                                             chainon (returned_attrs, attrs),
8256                                             attr_flags);
8257         }
8258
8259       if (declarator->kind == cdk_id)
8260         break;
8261
8262       inner_declarator = declarator->declarator;
8263
8264       switch (declarator->kind)
8265         {
8266         case cdk_array:
8267           type = create_array_type_for_decl (dname, type,
8268                                              declarator->u.array.bounds);
8269           break;
8270
8271         case cdk_function:
8272           {
8273             tree arg_types;
8274             int funcdecl_p;
8275
8276             /* Declaring a function type.
8277                Make sure we have a valid type for the function to return.  */
8278
8279             if (type_quals != TYPE_UNQUALIFIED)
8280               {
8281                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8282                   warning (OPT_Wignored_qualifiers,
8283                            "type qualifiers ignored on function return type");
8284                 /* We now know that the TYPE_QUALS don't apply to the
8285                    decl, but to its return type.  */
8286                 type_quals = TYPE_UNQUALIFIED;
8287                 set_no_warning = true;
8288               }
8289             errmsg = targetm.invalid_return_type (type);
8290             if (errmsg)
8291               {
8292                 error (errmsg);
8293                 type = integer_type_node;
8294               }
8295
8296             /* Error about some types functions can't return.  */
8297
8298             if (TREE_CODE (type) == FUNCTION_TYPE)
8299               {
8300                 error ("%qs declared as function returning a function", name);
8301                 return error_mark_node;
8302               }
8303             if (TREE_CODE (type) == ARRAY_TYPE)
8304               {
8305                 error ("%qs declared as function returning an array", name);
8306                 return error_mark_node;
8307               }
8308
8309             /* Pick up type qualifiers which should be applied to `this'.  */
8310             memfn_quals = declarator->u.function.qualifiers;
8311
8312             /* Pick up the exception specifications.  */
8313             raises = declarator->u.function.exception_specification;
8314
8315             /* Say it's a definition only for the CALL_EXPR
8316                closest to the identifier.  */
8317             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8318
8319             /* Handle a late-specified return type.  */
8320             if (funcdecl_p)
8321               {
8322                 if (type_uses_auto (type))
8323                   {
8324                     if (!declarator->u.function.late_return_type)
8325                       {
8326                         error ("%qs function uses %<auto%> type specifier without"
8327                                " late return type", name);
8328                         return error_mark_node;
8329                       }
8330                     else if (!is_auto (type))
8331                       {
8332                         error ("%qs function with late return type has"
8333                                " %qT as its type rather than plain %<auto%>",
8334                                name, type);
8335                         return error_mark_node;
8336                       }
8337                   }
8338                 else if (declarator->u.function.late_return_type)
8339                   {
8340                     error ("%qs function with late return type not declared"
8341                            " with %<auto%> type specifier", name);
8342                     return error_mark_node;
8343                   }
8344               }
8345             type = splice_late_return_type
8346               (type, declarator->u.function.late_return_type);
8347             if (type == error_mark_node)
8348               return error_mark_node;
8349
8350             if (ctype == NULL_TREE
8351                 && decl_context == FIELD
8352                 && funcdecl_p
8353                 && (friendp == 0 || dname == current_class_name))
8354               ctype = current_class_type;
8355
8356             if (ctype && (sfk == sfk_constructor
8357                           || sfk == sfk_destructor))
8358               {
8359                 /* We are within a class's scope. If our declarator name
8360                    is the same as the class name, and we are defining
8361                    a function, then it is a constructor/destructor, and
8362                    therefore returns a void type.  */
8363
8364                 /* ISO C++ 12.4/2.  A destructor may not be declared
8365                    const or volatile.  A destructor may not be
8366                    static.
8367
8368                    ISO C++ 12.1.  A constructor may not be declared
8369                    const or volatile.  A constructor may not be
8370                    virtual.  A constructor may not be static.  */
8371                 if (staticp == 2)
8372                   error ((flags == DTOR_FLAG)
8373                          ? "destructor cannot be static member function"
8374                          : "constructor cannot be static member function");
8375                 if (memfn_quals)
8376                   {
8377                     error ((flags == DTOR_FLAG)
8378                            ? "destructors may not be cv-qualified"
8379                            : "constructors may not be cv-qualified");
8380                     memfn_quals = TYPE_UNQUALIFIED;
8381                   }
8382
8383                 if (decl_context == FIELD
8384                     && !member_function_or_else (ctype,
8385                                                  current_class_type,
8386                                                  flags))
8387                   return error_mark_node;
8388
8389                 if (flags != DTOR_FLAG)
8390                   {
8391                     /* It's a constructor.  */
8392                     if (explicitp == 1)
8393                       explicitp = 2;
8394                     if (virtualp)
8395                       {
8396                         permerror (input_location, "constructors cannot be declared virtual");
8397                         virtualp = 0;
8398                       }
8399                     if (decl_context == FIELD
8400                         && sfk != sfk_constructor)
8401                       return error_mark_node;
8402                   }
8403                 if (decl_context == FIELD)
8404                   staticp = 0;
8405               }
8406             else if (friendp)
8407               {
8408                 if (initialized)
8409                   error ("can't initialize friend function %qs", name);
8410                 if (virtualp)
8411                   {
8412                     /* Cannot be both friend and virtual.  */
8413                     error ("virtual functions cannot be friends");
8414                     friendp = 0;
8415                   }
8416                 if (decl_context == NORMAL)
8417                   error ("friend declaration not in class definition");
8418                 if (current_function_decl && funcdef_flag)
8419                   error ("can't define friend function %qs in a local "
8420                          "class definition",
8421                          name);
8422               }
8423             else if (ctype && sfk == sfk_conversion)
8424               {
8425                 if (explicitp == 1)
8426                   {
8427                     maybe_warn_cpp0x ("explicit conversion operators");
8428                     explicitp = 2;
8429                   }
8430               }
8431
8432             arg_types = grokparms (declarator->u.function.parameters,
8433                                    &parms);
8434
8435             if (inner_declarator
8436                 && inner_declarator->kind == cdk_id
8437                 && inner_declarator->u.id.sfk == sfk_destructor
8438                 && arg_types != void_list_node)
8439               {
8440                 error ("destructors may not have parameters");
8441                 arg_types = void_list_node;
8442                 parms = NULL_TREE;
8443               }
8444
8445             type = build_function_type (type, arg_types);
8446           }
8447           break;
8448
8449         case cdk_pointer:
8450         case cdk_reference:
8451         case cdk_ptrmem:
8452           /* Filter out pointers-to-references and references-to-references.
8453              We can get these if a TYPE_DECL is used.  */
8454
8455           if (TREE_CODE (type) == REFERENCE_TYPE)
8456             {
8457               if (declarator->kind != cdk_reference)
8458                 {
8459                   error ("cannot declare pointer to %q#T", type);
8460                   type = TREE_TYPE (type);
8461                 }
8462
8463               /* In C++0x, we allow reference to reference declarations
8464                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8465                  and template type arguments [14.3.1/4 temp.arg.type]. The
8466                  check for direct reference to reference declarations, which
8467                  are still forbidden, occurs below. Reasoning behind the change
8468                  can be found in DR106, DR540, and the rvalue reference
8469                  proposals. */
8470               else if (cxx_dialect == cxx98)
8471                 {
8472                   error ("cannot declare reference to %q#T", type);
8473                   type = TREE_TYPE (type);
8474                 }
8475             }
8476           else if (VOID_TYPE_P (type))
8477             {
8478               if (declarator->kind == cdk_reference)
8479                 error ("cannot declare reference to %q#T", type);
8480               else if (declarator->kind == cdk_ptrmem)
8481                 error ("cannot declare pointer to %q#T member", type);
8482             }
8483
8484           /* We now know that the TYPE_QUALS don't apply to the decl,
8485              but to the target of the pointer.  */
8486           type_quals = TYPE_UNQUALIFIED;
8487
8488           if (declarator->kind == cdk_ptrmem
8489               && (TREE_CODE (type) == FUNCTION_TYPE
8490                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8491             {
8492               memfn_quals |= cp_type_quals (type);
8493               type = build_memfn_type (type,
8494                                        declarator->u.pointer.class_type,
8495                                        memfn_quals);
8496               memfn_quals = TYPE_UNQUALIFIED;
8497             }
8498
8499           if (TREE_CODE (type) == FUNCTION_TYPE
8500               && cp_type_quals (type) != TYPE_UNQUALIFIED)
8501             error ("cannot declare %s to qualified function type %qT",
8502                    declarator->kind == cdk_reference ? "reference" : "pointer",
8503                    type);
8504
8505           if (declarator->kind == cdk_reference)
8506             {
8507               /* In C++0x, the type we are creating a reference to might be
8508                  a typedef which is itself a reference type. In that case,
8509                  we follow the reference collapsing rules in
8510                  [7.1.3/8 dcl.typedef] to create the final reference type:
8511
8512                  "If a typedef TD names a type that is a reference to a type
8513                  T, an attempt to create the type 'lvalue reference to cv TD'
8514                  creates the type 'lvalue reference to T,' while an attempt
8515                  to create the type "rvalue reference to cv TD' creates the
8516                  type TD."
8517               */
8518               if (!VOID_TYPE_P (type))
8519                 type = cp_build_reference_type
8520                        ((TREE_CODE (type) == REFERENCE_TYPE
8521                          ? TREE_TYPE (type) : type),
8522                         (declarator->u.reference.rvalue_ref
8523                          && (TREE_CODE(type) != REFERENCE_TYPE
8524                              || TYPE_REF_IS_RVALUE (type))));
8525
8526               /* In C++0x, we need this check for direct reference to
8527                  reference declarations, which are forbidden by
8528                  [8.3.2/5 dcl.ref]. Reference to reference declarations
8529                  are only allowed indirectly through typedefs and template
8530                  type arguments. Example:
8531
8532                    void foo(int & &);      // invalid ref-to-ref decl
8533
8534                    typedef int & int_ref;
8535                    void foo(int_ref &);    // valid ref-to-ref decl
8536               */
8537               if (inner_declarator && inner_declarator->kind == cdk_reference)
8538                 error ("cannot declare reference to %q#T, which is not "
8539                        "a typedef or a template type argument", type);
8540             }
8541           else if (TREE_CODE (type) == METHOD_TYPE)
8542             type = build_ptrmemfunc_type (build_pointer_type (type));
8543           else if (declarator->kind == cdk_ptrmem)
8544             {
8545               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8546                           != NAMESPACE_DECL);
8547               if (declarator->u.pointer.class_type == error_mark_node)
8548                 /* We will already have complained.  */
8549                 type = error_mark_node;
8550               else
8551                 type = build_ptrmem_type (declarator->u.pointer.class_type,
8552                                           type);
8553             }
8554           else
8555             type = build_pointer_type (type);
8556
8557           /* Process a list of type modifier keywords (such as
8558              const or volatile) that were given inside the `*' or `&'.  */
8559
8560           if (declarator->u.pointer.qualifiers)
8561             {
8562               type
8563                 = cp_build_qualified_type (type,
8564                                            declarator->u.pointer.qualifiers);
8565               type_quals = cp_type_quals (type);
8566             }
8567           ctype = NULL_TREE;
8568           break;
8569
8570         case cdk_error:
8571           break;
8572
8573         default:
8574           gcc_unreachable ();
8575         }
8576     }
8577
8578   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8579       && TREE_CODE (type) != FUNCTION_TYPE
8580       && TREE_CODE (type) != METHOD_TYPE)
8581     {
8582       error ("template-id %qD used as a declarator",
8583              unqualified_id);
8584       unqualified_id = dname;
8585     }
8586
8587   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8588      qualified with a class-name, turn it into a METHOD_TYPE, unless
8589      we know that the function is static.  We take advantage of this
8590      opportunity to do other processing that pertains to entities
8591      explicitly declared to be class members.  Note that if DECLARATOR
8592      is non-NULL, we know it is a cdk_id declarator; otherwise, we
8593      would not have exited the loop above.  */
8594   if (declarator
8595       && declarator->u.id.qualifying_scope
8596       && TYPE_P (declarator->u.id.qualifying_scope))
8597     {
8598       tree t;
8599
8600       ctype = declarator->u.id.qualifying_scope;
8601       ctype = TYPE_MAIN_VARIANT (ctype);
8602       t = ctype;
8603       while (t != NULL_TREE && CLASS_TYPE_P (t))
8604         {
8605           /* You're supposed to have one `template <...>' for every
8606              template class, but you don't need one for a full
8607              specialization.  For example:
8608
8609                template <class T> struct S{};
8610                template <> struct S<int> { void f(); };
8611                void S<int>::f () {}
8612
8613              is correct; there shouldn't be a `template <>' for the
8614              definition of `S<int>::f'.  */
8615           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8616               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8617             /* T is an explicit (not partial) specialization.  All
8618                containing classes must therefore also be explicitly
8619                specialized.  */
8620             break;
8621           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8622               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8623             template_count += 1;
8624
8625           t = TYPE_MAIN_DECL (t);
8626           t = DECL_CONTEXT (t);
8627         }
8628
8629       if (ctype == current_class_type)
8630         {
8631           if (friendp)
8632             {
8633               permerror (input_location, "member functions are implicitly friends of their class");
8634               friendp = 0;
8635             }
8636           else
8637             permerror (declarator->id_loc, 
8638                           "extra qualification %<%T::%> on member %qs",
8639                           ctype, name);
8640         }
8641       else if (/* If the qualifying type is already complete, then we
8642                   can skip the following checks.  */
8643                !COMPLETE_TYPE_P (ctype)
8644                && (/* If the function is being defined, then
8645                       qualifying type must certainly be complete.  */
8646                    funcdef_flag
8647                    /* A friend declaration of "T::f" is OK, even if
8648                       "T" is a template parameter.  But, if this
8649                       function is not a friend, the qualifying type
8650                       must be a class.  */
8651                    || (!friendp && !CLASS_TYPE_P (ctype))
8652                    /* For a declaration, the type need not be
8653                       complete, if either it is dependent (since there
8654                       is no meaningful definition of complete in that
8655                       case) or the qualifying class is currently being
8656                       defined.  */
8657                    || !(dependent_type_p (ctype)
8658                         || currently_open_class (ctype)))
8659                /* Check that the qualifying type is complete.  */
8660                && !complete_type_or_else (ctype, NULL_TREE))
8661         return error_mark_node;
8662       else if (TREE_CODE (type) == FUNCTION_TYPE)
8663         {
8664           tree sname = declarator->u.id.unqualified_name;
8665
8666           if (current_class_type
8667               && (!friendp || funcdef_flag))
8668             {
8669               error (funcdef_flag
8670                      ? "cannot define member function %<%T::%s%> within %<%T%>"
8671                      : "cannot declare member function %<%T::%s%> within %<%T%>",
8672                      ctype, name, current_class_type);
8673               return error_mark_node;
8674             }
8675
8676           if (TREE_CODE (sname) == IDENTIFIER_NODE
8677               && NEW_DELETE_OPNAME_P (sname))
8678             /* Overloaded operator new and operator delete
8679                are always static functions.  */
8680             ;
8681           else
8682             type = build_memfn_type (type, ctype, memfn_quals);
8683         }
8684       else if (declspecs->specs[(int)ds_typedef]
8685                && current_class_type)
8686         {
8687           error ("cannot declare member %<%T::%s%> within %qT",
8688                  ctype, name, current_class_type);
8689           return error_mark_node;
8690         }
8691     }
8692
8693   /* Now TYPE has the actual type.  */
8694
8695   if (returned_attrs)
8696     {
8697       if (attrlist)
8698         *attrlist = chainon (returned_attrs, *attrlist);
8699       else
8700         attrlist = &returned_attrs;
8701     }
8702
8703   /* Handle parameter packs. */
8704   if (parameter_pack_p)
8705     {
8706       if (decl_context == PARM)
8707         /* Turn the type into a pack expansion.*/
8708         type = make_pack_expansion (type);
8709       else
8710         error ("non-parameter %qs cannot be a parameter pack", name);
8711     }
8712
8713   /* Did array size calculations overflow?  */
8714
8715   if (TREE_CODE (type) == ARRAY_TYPE
8716       && COMPLETE_TYPE_P (type)
8717       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8718       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8719     {
8720       error ("size of array %qs is too large", name);
8721       /* If we proceed with the array type as it is, we'll eventually
8722          crash in tree_low_cst().  */
8723       type = error_mark_node;
8724     }
8725
8726   if ((decl_context == FIELD || decl_context == PARM)
8727       && !processing_template_decl
8728       && variably_modified_type_p (type, NULL_TREE))
8729     {
8730       if (decl_context == FIELD)
8731         error ("data member may not have variably modified type %qT", type);
8732       else
8733         error ("parameter may not have variably modified type %qT", type);
8734       type = error_mark_node;
8735     }
8736
8737   if (explicitp == 1 || (explicitp && friendp))
8738     {
8739       /* [dcl.fct.spec] The explicit specifier shall only be used in
8740          declarations of constructors within a class definition.  */
8741       error ("only declarations of constructors can be %<explicit%>");
8742       explicitp = 0;
8743     }
8744
8745   if (storage_class == sc_mutable)
8746     {
8747       if (decl_context != FIELD || friendp)
8748         {
8749           error ("non-member %qs cannot be declared %<mutable%>", name);
8750           storage_class = sc_none;
8751         }
8752       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8753         {
8754           error ("non-object member %qs cannot be declared %<mutable%>", name);
8755           storage_class = sc_none;
8756         }
8757       else if (TREE_CODE (type) == FUNCTION_TYPE
8758                || TREE_CODE (type) == METHOD_TYPE)
8759         {
8760           error ("function %qs cannot be declared %<mutable%>", name);
8761           storage_class = sc_none;
8762         }
8763       else if (staticp)
8764         {
8765           error ("static %qs cannot be declared %<mutable%>", name);
8766           storage_class = sc_none;
8767         }
8768       else if (type_quals & TYPE_QUAL_CONST)
8769         {
8770           error ("const %qs cannot be declared %<mutable%>", name);
8771           storage_class = sc_none;
8772         }
8773     }
8774
8775   /* If this is declaring a typedef name, return a TYPE_DECL.  */
8776   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8777     {
8778       tree decl;
8779
8780       /* Note that the grammar rejects storage classes
8781          in typenames, fields or parameters.  */
8782       if (current_lang_name == lang_name_java)
8783         TYPE_FOR_JAVA (type) = 1;
8784
8785       /* This declaration:
8786
8787            typedef void f(int) const;
8788
8789          declares a function type which is not a member of any
8790          particular class, but which is cv-qualified; for
8791          example "f S::*" declares a pointer to a const-qualified
8792          member function of S.  We record the cv-qualification in the
8793          function type.  */
8794       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8795         {
8796           type = cp_build_qualified_type (type, memfn_quals);
8797           
8798           /* We have now dealt with these qualifiers.  */
8799           memfn_quals = TYPE_UNQUALIFIED;
8800         }
8801
8802       if (decl_context == FIELD)
8803         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8804       else
8805         decl = build_decl (TYPE_DECL, unqualified_id, type);
8806       if (id_declarator && declarator->u.id.qualifying_scope) {
8807         error ("%Jtypedef name may not be a nested-name-specifier", decl);
8808         TREE_TYPE (decl) = error_mark_node;
8809       }
8810
8811       if (decl_context != FIELD)
8812         {
8813           if (!current_function_decl)
8814             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8815           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8816                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8817                        (current_function_decl)))
8818             /* The TYPE_DECL is "abstract" because there will be
8819                clones of this constructor/destructor, and there will
8820                be copies of this TYPE_DECL generated in those
8821                clones.  */
8822             DECL_ABSTRACT (decl) = 1;
8823         }
8824       else if (constructor_name_p (unqualified_id, current_class_type))
8825         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
8826                    "as enclosing class",
8827                    unqualified_id);
8828
8829       /* If the user declares "typedef struct {...} foo" then the
8830          struct will have an anonymous name.  Fill that name in now.
8831          Nothing can refer to it, so nothing needs know about the name
8832          change.  */
8833       if (type != error_mark_node
8834           && unqualified_id
8835           && TYPE_NAME (type)
8836           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8837           && TYPE_ANONYMOUS_P (type)
8838           && cp_type_quals (type) == TYPE_UNQUALIFIED)
8839         {
8840           tree t;
8841
8842           /* Replace the anonymous name with the real name everywhere.  */
8843           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8844             {
8845               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8846                 {
8847                   debug_hooks->set_name (t, decl);
8848                   TYPE_NAME (t) = decl;
8849                 }
8850             }
8851
8852           if (TYPE_LANG_SPECIFIC (type))
8853             TYPE_WAS_ANONYMOUS (type) = 1;
8854
8855           /* If this is a typedef within a template class, the nested
8856              type is a (non-primary) template.  The name for the
8857              template needs updating as well.  */
8858           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
8859             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
8860               = TYPE_IDENTIFIER (type);
8861
8862           /* FIXME remangle member functions; member functions of a
8863              type with external linkage have external linkage.  */
8864         }
8865
8866       if (signed_p
8867           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
8868         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
8869
8870       bad_specifiers (decl, "type", virtualp,
8871                       memfn_quals != TYPE_UNQUALIFIED,
8872                       inlinep, friendp, raises != NULL_TREE);
8873
8874       return decl;
8875     }
8876
8877   /* Detect the case of an array type of unspecified size
8878      which came, as such, direct from a typedef name.
8879      We must copy the type, so that the array's domain can be
8880      individually set by the object's initializer.  */
8881
8882   if (type && typedef_type
8883       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
8884       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
8885     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
8886
8887   /* Detect where we're using a typedef of function type to declare a
8888      function. PARMS will not be set, so we must create it now.  */
8889
8890   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
8891     {
8892       tree decls = NULL_TREE;
8893       tree args;
8894
8895       for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args))
8896         {
8897           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
8898
8899           TREE_CHAIN (decl) = decls;
8900           decls = decl;
8901         }
8902
8903       parms = nreverse (decls);
8904
8905       if (decl_context != TYPENAME)
8906         {
8907           /* A cv-qualifier-seq shall only be part of the function type
8908              for a non-static member function. [8.3.5/4 dcl.fct] */
8909           if (cp_type_quals (type) != TYPE_UNQUALIFIED
8910               && (current_class_type == NULL_TREE || staticp) )
8911             {
8912               error (staticp
8913                      ? G_("qualified function types cannot be used to "
8914                           "declare static member functions")
8915                      : G_("qualified function types cannot be used to "
8916                           "declare free functions"));
8917               type = TYPE_MAIN_VARIANT (type);
8918             }
8919
8920           /* The qualifiers on the function type become the qualifiers on
8921              the non-static member function. */
8922           memfn_quals |= cp_type_quals (type);
8923         }
8924     }
8925
8926   /* If this is a type name (such as, in a cast or sizeof),
8927      compute the type and return it now.  */
8928
8929   if (decl_context == TYPENAME)
8930     {
8931       /* Note that the grammar rejects storage classes
8932          in typenames, fields or parameters.  */
8933       if (type_quals != TYPE_UNQUALIFIED)
8934         type_quals = TYPE_UNQUALIFIED;
8935
8936       /* Special case: "friend class foo" looks like a TYPENAME context.  */
8937       if (friendp)
8938         {
8939           if (type_quals != TYPE_UNQUALIFIED)
8940             {
8941               error ("type qualifiers specified for friend class declaration");
8942               type_quals = TYPE_UNQUALIFIED;
8943             }
8944           if (inlinep)
8945             {
8946               error ("%<inline%> specified for friend class declaration");
8947               inlinep = 0;
8948             }
8949
8950           if (!current_aggr)
8951             {
8952               /* Don't allow friend declaration without a class-key.  */
8953               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
8954                 permerror (input_location, "template parameters cannot be friends");
8955               else if (TREE_CODE (type) == TYPENAME_TYPE)
8956                 permerror (input_location, "friend declaration requires class-key, "
8957                            "i.e. %<friend class %T::%D%>",
8958                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
8959               else
8960                 permerror (input_location, "friend declaration requires class-key, "
8961                            "i.e. %<friend %#T%>",
8962                            type);
8963             }
8964
8965           /* Only try to do this stuff if we didn't already give up.  */
8966           if (type != integer_type_node)
8967             {
8968               /* A friendly class?  */
8969               if (current_class_type)
8970                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
8971                                    /*complain=*/true);
8972               else
8973                 error ("trying to make class %qT a friend of global scope",
8974                        type);
8975
8976               type = void_type_node;
8977             }
8978         }
8979       else if (memfn_quals)
8980         {
8981           if (ctype == NULL_TREE
8982               && TREE_CODE (type) == METHOD_TYPE)
8983             ctype = TYPE_METHOD_BASETYPE (type);
8984
8985           if (ctype)
8986             type = build_memfn_type (type, ctype, memfn_quals);
8987           /* Core issue #547: need to allow this in template type args.  */
8988           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
8989             type = cp_build_qualified_type (type, memfn_quals);
8990           else
8991             error ("invalid qualifiers on non-member function type");
8992         }
8993
8994       return type;
8995     }
8996   else if (unqualified_id == NULL_TREE && decl_context != PARM
8997            && decl_context != CATCHPARM
8998            && TREE_CODE (type) != UNION_TYPE
8999            && ! bitfield)
9000     {
9001       error ("abstract declarator %qT used as declaration", type);
9002       return error_mark_node;
9003     }
9004
9005   /* Only functions may be declared using an operator-function-id.  */
9006   if (unqualified_id
9007       && IDENTIFIER_OPNAME_P (unqualified_id)
9008       && TREE_CODE (type) != FUNCTION_TYPE
9009       && TREE_CODE (type) != METHOD_TYPE)
9010     {
9011       error ("declaration of %qD as non-function", unqualified_id);
9012       return error_mark_node;
9013     }
9014
9015   /* We don't check parameter types here because we can emit a better
9016      error message later.  */
9017   if (decl_context != PARM)
9018     {
9019       type = check_var_type (unqualified_id, type);
9020       if (type == error_mark_node)
9021         return error_mark_node;
9022     }
9023
9024   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9025      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9026
9027   if (decl_context == PARM || decl_context == CATCHPARM)
9028     {
9029       if (ctype || in_namespace)
9030         error ("cannot use %<::%> in parameter declaration");
9031
9032       /* A parameter declared as an array of T is really a pointer to T.
9033          One declared as a function is really a pointer to a function.
9034          One declared as a member is really a pointer to member.  */
9035
9036       if (TREE_CODE (type) == ARRAY_TYPE)
9037         {
9038           /* Transfer const-ness of array into that of type pointed to.  */
9039           type = build_pointer_type (TREE_TYPE (type));
9040           type_quals = TYPE_UNQUALIFIED;
9041         }
9042       else if (TREE_CODE (type) == FUNCTION_TYPE)
9043         type = build_pointer_type (type);
9044     }
9045
9046   {
9047     tree decl;
9048
9049     if (decl_context == PARM)
9050       {
9051         decl = cp_build_parm_decl (unqualified_id, type);
9052
9053         bad_specifiers (decl, "parameter", virtualp,
9054                         memfn_quals != TYPE_UNQUALIFIED,
9055                         inlinep, friendp, raises != NULL_TREE);
9056       }
9057     else if (decl_context == FIELD)
9058       {
9059         /* The C99 flexible array extension.  */
9060         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9061             && TYPE_DOMAIN (type) == NULL_TREE)
9062           {
9063             tree itype = compute_array_index_type (dname, integer_zero_node);
9064             type = build_cplus_array_type (TREE_TYPE (type), itype);
9065           }
9066
9067         if (type == error_mark_node)
9068           {
9069             /* Happens when declaring arrays of sizes which
9070                are error_mark_node, for example.  */
9071             decl = NULL_TREE;
9072           }
9073         else if (in_namespace && !friendp)
9074           {
9075             /* Something like struct S { int N::j; };  */
9076             error ("invalid use of %<::%>");
9077             return error_mark_node;
9078           }
9079         else if (TREE_CODE (type) == FUNCTION_TYPE)
9080           {
9081             int publicp = 0;
9082             tree function_context;
9083
9084             if (friendp == 0)
9085               {
9086                 if (ctype == NULL_TREE)
9087                   ctype = current_class_type;
9088
9089                 if (ctype == NULL_TREE)
9090                   {
9091                     error ("can't make %qD into a method -- not in a class",
9092                            unqualified_id);
9093                     return error_mark_node;
9094                   }
9095
9096                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9097                    ARM 9.5 */
9098                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9099                   {
9100                     error ("function %qD declared virtual inside a union",
9101                            unqualified_id);
9102                     return error_mark_node;
9103                   }
9104
9105                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9106                   {
9107                     if (virtualp)
9108                       {
9109                         error ("%qD cannot be declared virtual, since it "
9110                                "is always static",
9111                                unqualified_id);
9112                         virtualp = 0;
9113                       }
9114                   }
9115                 else if (staticp < 2)
9116                   type = build_memfn_type (type, ctype, memfn_quals);
9117               }
9118
9119             /* Check that the name used for a destructor makes sense.  */
9120             if (sfk == sfk_destructor)
9121               {
9122                 tree uqname = id_declarator->u.id.unqualified_name;
9123
9124                 if (!ctype)
9125                   {
9126                     gcc_assert (friendp);
9127                     error ("expected qualified name in friend declaration "
9128                            "for destructor %qD", uqname);
9129                     return error_mark_node;
9130                   }
9131
9132                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9133                   {
9134                     error ("declaration of %qD as member of %qT",
9135                            uqname, ctype);
9136                     return error_mark_node;
9137                   }
9138               }
9139             else if (sfk == sfk_constructor && friendp)
9140               {
9141                 error ("expected qualified name in friend declaration "
9142                        "for constructor %qD",
9143                        id_declarator->u.id.unqualified_name);
9144                 return error_mark_node;
9145               }
9146
9147             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9148             function_context = (ctype != NULL_TREE) ?
9149               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9150             publicp = (! friendp || ! staticp)
9151               && function_context == NULL_TREE;
9152             decl = grokfndecl (ctype, type,
9153                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9154                                ? unqualified_id : dname,
9155                                parms,
9156                                unqualified_id,
9157                                virtualp, flags, memfn_quals, raises,
9158                                friendp ? -1 : 0, friendp, publicp, inlinep,
9159                                sfk,
9160                                funcdef_flag, template_count, in_namespace,
9161                                attrlist, declarator->id_loc);
9162             if (decl == NULL_TREE)
9163               return error_mark_node;
9164 #if 0
9165             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9166             /* The decl and setting of decl_attr is also turned off.  */
9167             decl = build_decl_attribute_variant (decl, decl_attr);
9168 #endif
9169
9170             /* [class.conv.ctor]
9171
9172                A constructor declared without the function-specifier
9173                explicit that can be called with a single parameter
9174                specifies a conversion from the type of its first
9175                parameter to the type of its class.  Such a constructor
9176                is called a converting constructor.  */
9177             if (explicitp == 2)
9178               DECL_NONCONVERTING_P (decl) = 1;
9179           }
9180         else if (TREE_CODE (type) == METHOD_TYPE)
9181           {
9182             /* We only get here for friend declarations of
9183                members of other classes.  */
9184             /* All method decls are public, so tell grokfndecl to set
9185                TREE_PUBLIC, also.  */
9186             decl = grokfndecl (ctype, type,
9187                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9188                                ? unqualified_id : dname,
9189                                parms,
9190                                unqualified_id,
9191                                virtualp, flags, memfn_quals, raises,
9192                                friendp ? -1 : 0, friendp, 1, 0, sfk,
9193                                funcdef_flag, template_count, in_namespace,
9194                                attrlist,
9195                                declarator->id_loc);
9196             if (decl == NULL_TREE)
9197               return error_mark_node;
9198           }
9199         else if (!staticp && !dependent_type_p (type)
9200                  && !COMPLETE_TYPE_P (complete_type (type))
9201                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9202           {
9203             if (unqualified_id)
9204               error ("field %qD has incomplete type", unqualified_id);
9205             else
9206               error ("name %qT has incomplete type", type);
9207
9208             /* If we're instantiating a template, tell them which
9209                instantiation made the field's type be incomplete.  */
9210             if (current_class_type
9211                 && TYPE_NAME (current_class_type)
9212                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9213                 && declspecs->type
9214                 && declspecs->type == type)
9215               error ("  in instantiation of template %qT",
9216                      current_class_type);
9217
9218             return error_mark_node;
9219           }
9220         else
9221           {
9222             if (friendp)
9223               {
9224                 error ("%qE is neither function nor member function; "
9225                        "cannot be declared friend", unqualified_id);
9226                 friendp = 0;
9227               }
9228             decl = NULL_TREE;
9229           }
9230
9231         if (friendp)
9232           {
9233             /* Friends are treated specially.  */
9234             if (ctype == current_class_type)
9235               ;  /* We already issued a permerror.  */
9236             else if (decl && DECL_NAME (decl))
9237               {
9238                 if (template_class_depth (current_class_type) == 0)
9239                   {
9240                     decl = check_explicit_specialization
9241                       (unqualified_id, decl, template_count,
9242                        2 * funcdef_flag + 4);
9243                     if (decl == error_mark_node)
9244                       return error_mark_node;
9245                   }
9246
9247                 decl = do_friend (ctype, unqualified_id, decl,
9248                                   *attrlist, flags,
9249                                   funcdef_flag);
9250                 return decl;
9251               }
9252             else
9253               return error_mark_node;
9254           }
9255
9256         /* Structure field.  It may not be a function, except for C++.  */
9257
9258         if (decl == NULL_TREE)
9259           {
9260             if (initialized)
9261               {
9262                 if (!staticp)
9263                   {
9264                     /* An attempt is being made to initialize a non-static
9265                        member.  But, from [class.mem]:
9266
9267                        4 A member-declarator can contain a
9268                        constant-initializer only if it declares a static
9269                        member (_class.static_) of integral or enumeration
9270                        type, see _class.static.data_.
9271
9272                        This used to be relatively common practice, but
9273                        the rest of the compiler does not correctly
9274                        handle the initialization unless the member is
9275                        static so we make it static below.  */
9276                     permerror (input_location, "ISO C++ forbids initialization of member %qD",
9277                                unqualified_id);
9278                     permerror (input_location, "making %qD static", unqualified_id);
9279                     staticp = 1;
9280                   }
9281
9282                 if (uses_template_parms (type))
9283                   /* We'll check at instantiation time.  */
9284                   ;
9285                 else if (check_static_variable_definition (unqualified_id,
9286                                                            type))
9287                   /* If we just return the declaration, crashes
9288                      will sometimes occur.  We therefore return
9289                      void_type_node, as if this was a friend
9290                      declaration, to cause callers to completely
9291                      ignore this declaration.  */
9292                   return error_mark_node;
9293               }
9294
9295             if (staticp)
9296               {
9297                 /* C++ allows static class members.  All other work
9298                    for this is done by grokfield.  */
9299                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9300                 set_linkage_for_static_data_member (decl);
9301                 /* Even if there is an in-class initialization, DECL
9302                    is considered undefined until an out-of-class
9303                    definition is provided.  */
9304                 DECL_EXTERNAL (decl) = 1;
9305
9306                 if (thread_p)
9307                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9308               }
9309             else
9310               {
9311                 decl = build_decl (FIELD_DECL, unqualified_id, type);
9312                 DECL_NONADDRESSABLE_P (decl) = bitfield;
9313                 if (bitfield && !unqualified_id)
9314                   TREE_NO_WARNING (decl) = 1;
9315
9316                 if (storage_class == sc_mutable)
9317                   {
9318                     DECL_MUTABLE_P (decl) = 1;
9319                     storage_class = sc_none;
9320                   }
9321               }
9322
9323             bad_specifiers (decl, "field", virtualp,
9324                             memfn_quals != TYPE_UNQUALIFIED,
9325                             inlinep, friendp, raises != NULL_TREE);
9326           }
9327       }
9328     else if (TREE_CODE (type) == FUNCTION_TYPE
9329              || TREE_CODE (type) == METHOD_TYPE)
9330       {
9331         tree original_name;
9332         int publicp = 0;
9333
9334         if (!unqualified_id)
9335           return error_mark_node;
9336
9337         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9338           original_name = dname;
9339         else
9340           original_name = unqualified_id;
9341
9342         if (storage_class == sc_auto)
9343           error ("storage class %<auto%> invalid for function %qs", name);
9344         else if (storage_class == sc_register)
9345           error ("storage class %<register%> invalid for function %qs", name);
9346         else if (thread_p)
9347           error ("storage class %<__thread%> invalid for function %qs", name);
9348
9349         /* Function declaration not at top level.
9350            Storage classes other than `extern' are not allowed
9351            and `extern' makes no difference.  */
9352         if (! toplevel_bindings_p ()
9353             && (storage_class == sc_static
9354                 || declspecs->specs[(int)ds_inline])
9355             && pedantic)
9356           {
9357             if (storage_class == sc_static)
9358               pedwarn (input_location, OPT_pedantic, 
9359                        "%<static%> specified invalid for function %qs "
9360                        "declared out of global scope", name);
9361             else
9362               pedwarn (input_location, OPT_pedantic, 
9363                        "%<inline%> specifier invalid for function %qs "
9364                        "declared out of global scope", name);
9365           }
9366
9367         if (ctype != NULL_TREE
9368             && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9369           {
9370             error ("%q#T is not a class or a namespace", ctype);
9371             ctype = NULL_TREE;
9372           }
9373
9374         if (ctype == NULL_TREE)
9375           {
9376             if (virtualp)
9377               {
9378                 error ("virtual non-class function %qs", name);
9379                 virtualp = 0;
9380               }
9381             else if (sfk == sfk_constructor
9382                      || sfk == sfk_destructor)
9383               {
9384                 error (funcdef_flag
9385                        ? "%qs defined in a non-class scope"
9386                        : "%qs declared in a non-class scope", name);
9387                 sfk = sfk_none;
9388               }
9389           }
9390         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9391                  && !NEW_DELETE_OPNAME_P (original_name))
9392           type = build_method_type_directly (ctype,
9393                                              TREE_TYPE (type),
9394                                              TYPE_ARG_TYPES (type));
9395
9396         /* Record presence of `static'.  */
9397         publicp = (ctype != NULL_TREE
9398                    || storage_class == sc_extern
9399                    || storage_class != sc_static);
9400
9401         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9402                            virtualp, flags, memfn_quals, raises,
9403                            1, friendp,
9404                            publicp, inlinep, sfk, funcdef_flag,
9405                            template_count, in_namespace, attrlist,
9406                            declarator->id_loc);
9407         if (decl == NULL_TREE)
9408           return error_mark_node;
9409
9410         if (staticp == 1)
9411           {
9412             int invalid_static = 0;
9413
9414             /* Don't allow a static member function in a class, and forbid
9415                declaring main to be static.  */
9416             if (TREE_CODE (type) == METHOD_TYPE)
9417               {
9418                 permerror (input_location, "cannot declare member function %qD to have "
9419                            "static linkage", decl);
9420                 invalid_static = 1;
9421               }
9422             else if (current_function_decl)
9423               {
9424                 /* FIXME need arm citation */
9425                 error ("cannot declare static function inside another function");
9426                 invalid_static = 1;
9427               }
9428
9429             if (invalid_static)
9430               {
9431                 staticp = 0;
9432                 storage_class = sc_none;
9433               }
9434           }
9435       }
9436     else
9437       {
9438         /* It's a variable.  */
9439
9440         /* An uninitialized decl with `extern' is a reference.  */
9441         decl = grokvardecl (type, unqualified_id,
9442                             declspecs,
9443                             initialized,
9444                             (type_quals & TYPE_QUAL_CONST) != 0,
9445                             ctype ? ctype : in_namespace);
9446         bad_specifiers (decl, "variable", virtualp,
9447                         memfn_quals != TYPE_UNQUALIFIED,
9448                         inlinep, friendp, raises != NULL_TREE);
9449
9450         if (ctype)
9451           {
9452             DECL_CONTEXT (decl) = ctype;
9453             if (staticp == 1)
9454               {
9455                 permerror (input_location, "%<static%> may not be used when defining "
9456                            "(as opposed to declaring) a static data member");
9457                 staticp = 0;
9458                 storage_class = sc_none;
9459               }
9460             if (storage_class == sc_register && TREE_STATIC (decl))
9461               {
9462                 error ("static member %qD declared %<register%>", decl);
9463                 storage_class = sc_none;
9464               }
9465             if (storage_class == sc_extern && pedantic)
9466               {
9467                 pedwarn (input_location, OPT_pedantic, 
9468                          "cannot explicitly declare member %q#D to have "
9469                          "extern linkage", decl);
9470                 storage_class = sc_none;
9471               }
9472           }
9473       }
9474
9475     if (storage_class == sc_extern && initialized && !funcdef_flag)
9476       {
9477         if (toplevel_bindings_p ())
9478           {
9479             /* It's common practice (and completely valid) to have a const
9480                be initialized and declared extern.  */
9481             if (!(type_quals & TYPE_QUAL_CONST))
9482               warning (0, "%qs initialized and declared %<extern%>", name);
9483           }
9484         else
9485           {
9486             error ("%qs has both %<extern%> and initializer", name);
9487             return error_mark_node;
9488           }
9489       }
9490
9491     /* Record `register' declaration for warnings on &
9492        and in case doing stupid register allocation.  */
9493
9494     if (storage_class == sc_register)
9495       DECL_REGISTER (decl) = 1;
9496     else if (storage_class == sc_extern)
9497       DECL_THIS_EXTERN (decl) = 1;
9498     else if (storage_class == sc_static)
9499       DECL_THIS_STATIC (decl) = 1;
9500
9501     /* Record constancy and volatility on the DECL itself .  There's
9502        no need to do this when processing a template; we'll do this
9503        for the instantiated declaration based on the type of DECL.  */
9504     if (!processing_template_decl)
9505       cp_apply_type_quals_to_decl (type_quals, decl);
9506
9507     if (set_no_warning)
9508         TREE_NO_WARNING (decl) = 1;
9509
9510     return decl;
9511   }
9512 }
9513 \f
9514 /* Subroutine of start_function.  Ensure that each of the parameter
9515    types (as listed in PARMS) is complete, as is required for a
9516    function definition.  */
9517
9518 static void
9519 require_complete_types_for_parms (tree parms)
9520 {
9521   for (; parms; parms = TREE_CHAIN (parms))
9522     {
9523       if (dependent_type_p (TREE_TYPE (parms)))
9524         continue;
9525       if (!VOID_TYPE_P (TREE_TYPE (parms))
9526           && complete_type_or_else (TREE_TYPE (parms), parms))
9527         {
9528           relayout_decl (parms);
9529           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9530         }
9531       else
9532         /* grokparms or complete_type_or_else will have already issued
9533            an error.  */
9534         TREE_TYPE (parms) = error_mark_node;
9535     }
9536 }
9537
9538 /* Returns nonzero if T is a local variable.  */
9539
9540 int
9541 local_variable_p (const_tree t)
9542 {
9543   if ((TREE_CODE (t) == VAR_DECL
9544        /* A VAR_DECL with a context that is a _TYPE is a static data
9545           member.  */
9546        && !TYPE_P (CP_DECL_CONTEXT (t))
9547        /* Any other non-local variable must be at namespace scope.  */
9548        && !DECL_NAMESPACE_SCOPE_P (t))
9549       || (TREE_CODE (t) == PARM_DECL))
9550     return 1;
9551
9552   return 0;
9553 }
9554
9555 /* Like local_variable_p, but suitable for use as a tree-walking
9556    function.  */
9557
9558 static tree
9559 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9560                          void *data ATTRIBUTE_UNUSED)
9561 {
9562   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9563     return *tp;
9564   else if (TYPE_P (*tp))
9565     *walk_subtrees = 0;
9566
9567   return NULL_TREE;
9568 }
9569
9570
9571 /* Check that ARG, which is a default-argument expression for a
9572    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
9573    something goes wrong.  DECL may also be a _TYPE node, rather than a
9574    DECL, if there is no DECL available.  */
9575
9576 tree
9577 check_default_argument (tree decl, tree arg)
9578 {
9579   tree var;
9580   tree decl_type;
9581
9582   if (TREE_CODE (arg) == DEFAULT_ARG)
9583     /* We get a DEFAULT_ARG when looking at an in-class declaration
9584        with a default argument.  Ignore the argument for now; we'll
9585        deal with it after the class is complete.  */
9586     return arg;
9587
9588   if (TYPE_P (decl))
9589     {
9590       decl_type = decl;
9591       decl = NULL_TREE;
9592     }
9593   else
9594     decl_type = TREE_TYPE (decl);
9595
9596   if (arg == error_mark_node
9597       || decl == error_mark_node
9598       || TREE_TYPE (arg) == error_mark_node
9599       || decl_type == error_mark_node)
9600     /* Something already went wrong.  There's no need to check
9601        further.  */
9602     return error_mark_node;
9603
9604   /* [dcl.fct.default]
9605
9606      A default argument expression is implicitly converted to the
9607      parameter type.  */
9608   if (!TREE_TYPE (arg)
9609       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9610     {
9611       if (decl)
9612         error ("default argument for %q#D has type %qT",
9613                decl, TREE_TYPE (arg));
9614       else
9615         error ("default argument for parameter of type %qT has type %qT",
9616                decl_type, TREE_TYPE (arg));
9617
9618       return error_mark_node;
9619     }
9620
9621   /* [dcl.fct.default]
9622
9623      Local variables shall not be used in default argument
9624      expressions.
9625
9626      The keyword `this' shall not be used in a default argument of a
9627      member function.  */
9628   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9629   if (var)
9630     {
9631       error ("default argument %qE uses local variable %qD", arg, var);
9632       return error_mark_node;
9633     }
9634
9635   /* All is well.  */
9636   return arg;
9637 }
9638
9639 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
9640
9641 static tree
9642 type_is_deprecated (tree type)
9643 {
9644   enum tree_code code;
9645   if (TREE_DEPRECATED (type))
9646     return type;
9647   if (TYPE_NAME (type)
9648       && TREE_DEPRECATED (TYPE_NAME (type)))
9649     return type;
9650
9651   code = TREE_CODE (type);
9652
9653   if (code == POINTER_TYPE || code == REFERENCE_TYPE
9654       || code == OFFSET_TYPE || code == FUNCTION_TYPE
9655       || code == METHOD_TYPE || code == ARRAY_TYPE)
9656     return type_is_deprecated (TREE_TYPE (type));
9657
9658   if (TYPE_PTRMEMFUNC_P (type))
9659     return type_is_deprecated
9660       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9661
9662   return NULL_TREE;
9663 }
9664
9665 /* Decode the list of parameter types for a function type.
9666    Given the list of things declared inside the parens,
9667    return a list of types.
9668
9669    If this parameter does not end with an ellipsis, we append
9670    void_list_node.
9671
9672    *PARMS is set to the chain of PARM_DECLs created.  */
9673
9674 static tree
9675 grokparms (tree parmlist, tree *parms)
9676 {
9677   tree result = NULL_TREE;
9678   tree decls = NULL_TREE;
9679   tree parm;
9680   int any_error = 0;
9681
9682   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9683     {
9684       tree type = NULL_TREE;
9685       tree init = TREE_PURPOSE (parm);
9686       tree decl = TREE_VALUE (parm);
9687       const char *errmsg;
9688
9689       if (parm == void_list_node)
9690         break;
9691
9692       if (! decl || TREE_TYPE (decl) == error_mark_node)
9693         continue;
9694
9695       type = TREE_TYPE (decl);
9696       if (VOID_TYPE_P (type))
9697         {
9698           if (same_type_p (type, void_type_node)
9699               && DECL_SELF_REFERENCE_P (type)
9700               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9701             /* this is a parmlist of `(void)', which is ok.  */
9702             break;
9703           cxx_incomplete_type_error (decl, type);
9704           /* It's not a good idea to actually create parameters of
9705              type `void'; other parts of the compiler assume that a
9706              void type terminates the parameter list.  */
9707           type = error_mark_node;
9708           TREE_TYPE (decl) = error_mark_node;
9709         }
9710
9711       if (type != error_mark_node
9712           && TYPE_FOR_JAVA (type)
9713           && MAYBE_CLASS_TYPE_P (type))
9714         {
9715           error ("parameter %qD has Java class type", decl);
9716           type = error_mark_node;
9717           TREE_TYPE (decl) = error_mark_node;
9718           init = NULL_TREE;
9719         }
9720
9721       if (type != error_mark_node
9722           && (errmsg = targetm.invalid_parameter_type (type)))
9723         {
9724           error (errmsg);
9725           type = error_mark_node;
9726           TREE_TYPE (decl) = error_mark_node;
9727         }
9728
9729       if (type != error_mark_node)
9730         {
9731           if (deprecated_state != DEPRECATED_SUPPRESS)
9732             {
9733               tree deptype = type_is_deprecated (type);
9734               if (deptype)
9735                 warn_deprecated_use (deptype, NULL_TREE);
9736             }
9737
9738           /* Top-level qualifiers on the parameters are
9739              ignored for function types.  */
9740           type = cp_build_qualified_type (type, 0);
9741           if (TREE_CODE (type) == METHOD_TYPE)
9742             {
9743               error ("parameter %qD invalidly declared method type", decl);
9744               type = build_pointer_type (type);
9745               TREE_TYPE (decl) = type;
9746             }
9747           else if (abstract_virtuals_error (decl, type))
9748             any_error = 1;  /* Seems like a good idea.  */
9749           else if (POINTER_TYPE_P (type))
9750             {
9751               /* [dcl.fct]/6, parameter types cannot contain pointers
9752                  (references) to arrays of unknown bound.  */
9753               tree t = TREE_TYPE (type);
9754               int ptr = TYPE_PTR_P (type);
9755
9756               while (1)
9757                 {
9758                   if (TYPE_PTR_P (t))
9759                     ptr = 1;
9760                   else if (TREE_CODE (t) != ARRAY_TYPE)
9761                     break;
9762                   else if (!TYPE_DOMAIN (t))
9763                     break;
9764                   t = TREE_TYPE (t);
9765                 }
9766               if (TREE_CODE (t) == ARRAY_TYPE)
9767                 error ("parameter %qD includes %s to array of unknown "
9768                        "bound %qT",
9769                        decl, ptr ? "pointer" : "reference", t);
9770             }
9771
9772           if (any_error)
9773             init = NULL_TREE;
9774           else if (init && !processing_template_decl)
9775             init = check_default_argument (decl, init);
9776         }
9777
9778       if (TREE_CODE (decl) == PARM_DECL
9779           && FUNCTION_PARAMETER_PACK_P (decl)
9780           && TREE_CHAIN (parm)
9781           && TREE_CHAIN (parm) != void_list_node)
9782         error ("parameter packs must be at the end of the parameter list");
9783
9784       TREE_CHAIN (decl) = decls;
9785       decls = decl;
9786       result = tree_cons (init, type, result);
9787     }
9788   decls = nreverse (decls);
9789   result = nreverse (result);
9790   if (parm)
9791     result = chainon (result, void_list_node);
9792   *parms = decls;
9793
9794   return result;
9795 }
9796
9797 \f
9798 /* D is a constructor or overloaded `operator='.
9799
9800    Let T be the class in which D is declared. Then, this function
9801    returns:
9802
9803    -1 if D's is an ill-formed constructor or copy assignment operator
9804       whose first parameter is of type `T'.
9805    0  if D is not a copy constructor or copy assignment
9806       operator.
9807    1  if D is a copy constructor or copy assignment operator whose
9808       first parameter is a reference to const qualified T.
9809    2  if D is a copy constructor or copy assignment operator whose
9810       first parameter is a reference to non-const qualified T.
9811
9812    This function can be used as a predicate. Positive values indicate
9813    a copy constructor and nonzero values indicate a copy assignment
9814    operator.  */
9815
9816 int
9817 copy_fn_p (const_tree d)
9818 {
9819   tree args;
9820   tree arg_type;
9821   int result = 1;
9822
9823   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9824
9825   if (TREE_CODE (d) == TEMPLATE_DECL
9826       || (DECL_TEMPLATE_INFO (d)
9827           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9828     /* Instantiations of template member functions are never copy
9829        functions.  Note that member functions of templated classes are
9830        represented as template functions internally, and we must
9831        accept those as copy functions.  */
9832     return 0;
9833
9834   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9835   if (!args)
9836     return 0;
9837
9838   arg_type = TREE_VALUE (args);
9839   if (arg_type == error_mark_node)
9840     return 0;
9841
9842   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
9843     {
9844       /* Pass by value copy assignment operator.  */
9845       result = -1;
9846     }
9847   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
9848            && !TYPE_REF_IS_RVALUE (arg_type)
9849            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
9850     {
9851       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
9852         result = 2;
9853     }
9854   else
9855     return 0;
9856
9857   args = TREE_CHAIN (args);
9858
9859   if (args && args != void_list_node && !TREE_PURPOSE (args))
9860     /* There are more non-optional args.  */
9861     return 0;
9862
9863   return result;
9864 }
9865
9866 /* D is a constructor or overloaded `operator='.
9867
9868    Let T be the class in which D is declared. Then, this function
9869    returns true when D is a move constructor or move assignment
9870    operator, false otherwise.  */
9871
9872 bool
9873 move_fn_p (const_tree d)
9874 {
9875   tree args;
9876   tree arg_type;
9877   bool result = false;
9878
9879   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9880
9881   if (cxx_dialect == cxx98)
9882     /* There are no move constructors if we are in C++98 mode.  */
9883     return false;
9884
9885   if (TREE_CODE (d) == TEMPLATE_DECL
9886       || (DECL_TEMPLATE_INFO (d)
9887          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9888     /* Instantiations of template member functions are never copy
9889        functions.  Note that member functions of templated classes are
9890        represented as template functions internally, and we must
9891        accept those as copy functions.  */
9892     return 0;
9893
9894   args = FUNCTION_FIRST_USER_PARMTYPE (d);
9895   if (!args)
9896     return 0;
9897
9898   arg_type = TREE_VALUE (args);
9899   if (arg_type == error_mark_node)
9900     return 0;
9901
9902   if (TREE_CODE (arg_type) == REFERENCE_TYPE
9903       && TYPE_REF_IS_RVALUE (arg_type)
9904       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
9905                       DECL_CONTEXT (d)))
9906     result = true;
9907
9908   args = TREE_CHAIN (args);
9909
9910   if (args && args != void_list_node && !TREE_PURPOSE (args))
9911     /* There are more non-optional args.  */
9912     return false;
9913
9914   return result;
9915 }
9916
9917 /* Remember any special properties of member function DECL.  */
9918
9919 void
9920 grok_special_member_properties (tree decl)
9921 {
9922   tree class_type;
9923
9924   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
9925     return;
9926
9927   class_type = DECL_CONTEXT (decl);
9928   if (DECL_CONSTRUCTOR_P (decl))
9929     {
9930       int ctor = copy_fn_p (decl);
9931
9932       if (!DECL_ARTIFICIAL (decl))
9933         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
9934
9935       if (ctor > 0)
9936         {
9937           /* [class.copy]
9938
9939              A non-template constructor for class X is a copy
9940              constructor if its first parameter is of type X&, const
9941              X&, volatile X& or const volatile X&, and either there
9942              are no other parameters or else all other parameters have
9943              default arguments.  */
9944           TYPE_HAS_INIT_REF (class_type) = 1;
9945           if (!DECL_DEFAULTED_FN (decl))
9946             TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
9947           if (ctor > 1)
9948             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
9949         }
9950       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
9951         {
9952           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
9953           if (TREE_CODE (decl) == TEMPLATE_DECL || !DECL_DEFAULTED_FN (decl))
9954             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
9955         }
9956       else if (is_list_ctor (decl))
9957         TYPE_HAS_LIST_CTOR (class_type) = 1;
9958     }
9959   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
9960     {
9961       /* [class.copy]
9962
9963          A non-template assignment operator for class X is a copy
9964          assignment operator if its parameter is of type X, X&, const
9965          X&, volatile X& or const volatile X&.  */
9966
9967       int assop = copy_fn_p (decl);
9968
9969       if (assop)
9970         {
9971           TYPE_HAS_ASSIGN_REF (class_type) = 1;
9972           if (!DECL_DEFAULTED_FN (decl))
9973             TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
9974           if (assop != 1)
9975             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
9976         }
9977     }
9978 }
9979
9980 /* Check a constructor DECL has the correct form.  Complains
9981    if the class has a constructor of the form X(X).  */
9982
9983 int
9984 grok_ctor_properties (const_tree ctype, const_tree decl)
9985 {
9986   int ctor_parm = copy_fn_p (decl);
9987
9988   if (ctor_parm < 0)
9989     {
9990       /* [class.copy]
9991
9992          A declaration of a constructor for a class X is ill-formed if
9993          its first parameter is of type (optionally cv-qualified) X
9994          and either there are no other parameters or else all other
9995          parameters have default arguments.
9996
9997          We *don't* complain about member template instantiations that
9998          have this form, though; they can occur as we try to decide
9999          what constructor to use during overload resolution.  Since
10000          overload resolution will never prefer such a constructor to
10001          the non-template copy constructor (which is either explicitly
10002          or implicitly defined), there's no need to worry about their
10003          existence.  Theoretically, they should never even be
10004          instantiated, but that's hard to forestall.  */
10005       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10006                 ctype, ctype);
10007       return 0;
10008     }
10009
10010   return 1;
10011 }
10012
10013 /* An operator with this code is unary, but can also be binary.  */
10014
10015 static int
10016 ambi_op_p (enum tree_code code)
10017 {
10018   return (code == INDIRECT_REF
10019           || code == ADDR_EXPR
10020           || code == UNARY_PLUS_EXPR
10021           || code == NEGATE_EXPR
10022           || code == PREINCREMENT_EXPR
10023           || code == PREDECREMENT_EXPR);
10024 }
10025
10026 /* An operator with this name can only be unary.  */
10027
10028 static int
10029 unary_op_p (enum tree_code code)
10030 {
10031   return (code == TRUTH_NOT_EXPR
10032           || code == BIT_NOT_EXPR
10033           || code == COMPONENT_REF
10034           || code == TYPE_EXPR);
10035 }
10036
10037 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10038    errors are issued for invalid declarations.  */
10039
10040 bool
10041 grok_op_properties (tree decl, bool complain)
10042 {
10043   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10044   tree argtype;
10045   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10046   tree name = DECL_NAME (decl);
10047   enum tree_code operator_code;
10048   int arity;
10049   bool ellipsis_p;
10050   tree class_type;
10051
10052   /* Count the number of arguments and check for ellipsis.  */
10053   for (argtype = argtypes, arity = 0;
10054        argtype && argtype != void_list_node;
10055        argtype = TREE_CHAIN (argtype))
10056     ++arity;
10057   ellipsis_p = !argtype;
10058
10059   class_type = DECL_CONTEXT (decl);
10060   if (class_type && !CLASS_TYPE_P (class_type))
10061     class_type = NULL_TREE;
10062
10063   if (DECL_CONV_FN_P (decl))
10064     operator_code = TYPE_EXPR;
10065   else
10066     do
10067       {
10068 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10069         if (ansi_opname (CODE) == name)                         \
10070           {                                                     \
10071             operator_code = (CODE);                             \
10072             break;                                              \
10073           }                                                     \
10074         else if (ansi_assopname (CODE) == name)                 \
10075           {                                                     \
10076             operator_code = (CODE);                             \
10077             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10078             break;                                              \
10079           }
10080
10081 #include "operators.def"
10082 #undef DEF_OPERATOR
10083
10084         gcc_unreachable ();
10085       }
10086     while (0);
10087   gcc_assert (operator_code != MAX_TREE_CODES);
10088   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10089
10090   if (class_type)
10091     switch (operator_code)
10092       {
10093       case NEW_EXPR:
10094         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10095         break;
10096
10097       case DELETE_EXPR:
10098         TYPE_GETS_DELETE (class_type) |= 1;
10099         break;
10100
10101       case VEC_NEW_EXPR:
10102         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10103         break;
10104
10105       case VEC_DELETE_EXPR:
10106         TYPE_GETS_DELETE (class_type) |= 2;
10107         break;
10108
10109       default:
10110         break;
10111       }
10112
10113     /* [basic.std.dynamic.allocation]/1:
10114
10115        A program is ill-formed if an allocation function is declared
10116        in a namespace scope other than global scope or declared static
10117        in global scope.
10118
10119        The same also holds true for deallocation functions.  */
10120   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10121       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10122     {
10123       if (DECL_NAMESPACE_SCOPE_P (decl))
10124         {
10125           if (CP_DECL_CONTEXT (decl) != global_namespace)
10126             {
10127               error ("%qD may not be declared within a namespace", decl);
10128               return false;
10129             }
10130           else if (!TREE_PUBLIC (decl))
10131             {
10132               error ("%qD may not be declared as static", decl);
10133               return false;
10134             }
10135         }
10136     }
10137
10138   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10139     {
10140       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10141       DECL_IS_OPERATOR_NEW (decl) = 1;
10142     }
10143   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10144     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10145   else
10146     {
10147       /* An operator function must either be a non-static member function
10148          or have at least one parameter of a class, a reference to a class,
10149          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10150       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10151         {
10152           if (operator_code == TYPE_EXPR
10153               || operator_code == CALL_EXPR
10154               || operator_code == COMPONENT_REF
10155               || operator_code == ARRAY_REF
10156               || operator_code == NOP_EXPR)
10157             {
10158               error ("%qD must be a nonstatic member function", decl);
10159               return false;
10160             }
10161           else
10162             {
10163               tree p;
10164
10165               if (DECL_STATIC_FUNCTION_P (decl))
10166                 {
10167                   error ("%qD must be either a non-static member "
10168                          "function or a non-member function", decl);
10169                   return false;
10170                 }
10171
10172               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10173                 {
10174                   tree arg = non_reference (TREE_VALUE (p));
10175                   if (arg == error_mark_node)
10176                     return false;
10177
10178                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10179                      because these checks are performed even on
10180                      template functions.  */
10181                   if (MAYBE_CLASS_TYPE_P (arg)
10182                       || TREE_CODE (arg) == ENUMERAL_TYPE)
10183                     break;
10184                 }
10185
10186               if (!p || p == void_list_node)
10187                 {
10188                   if (complain)
10189                     error ("%qD must have an argument of class or "
10190                            "enumerated type", decl);
10191                   return false;
10192                 }
10193             }
10194         }
10195
10196       /* There are no restrictions on the arguments to an overloaded
10197          "operator ()".  */
10198       if (operator_code == CALL_EXPR)
10199         return true;
10200
10201       /* Warn about conversion operators that will never be used.  */
10202       if (IDENTIFIER_TYPENAME_P (name)
10203           && ! DECL_TEMPLATE_INFO (decl)
10204           && warn_conversion
10205           /* Warn only declaring the function; there is no need to
10206              warn again about out-of-class definitions.  */
10207           && class_type == current_class_type)
10208         {
10209           tree t = TREE_TYPE (name);
10210           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10211           const char *what = 0;
10212
10213           if (ref)
10214             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10215
10216           if (TREE_CODE (t) == VOID_TYPE)
10217             what = "void";
10218           else if (class_type)
10219             {
10220               if (t == class_type)
10221                 what = "the same type";
10222               /* Don't force t to be complete here.  */
10223               else if (MAYBE_CLASS_TYPE_P (t)
10224                        && COMPLETE_TYPE_P (t)
10225                        && DERIVED_FROM_P (t, class_type))
10226                 what = "a base class";
10227             }
10228
10229           if (what)
10230             warning (OPT_Wconversion, "conversion to %s%s will never use a type "
10231                      "conversion operator",
10232                      ref ? "a reference to " : "", what);
10233         }
10234
10235       if (operator_code == COND_EXPR)
10236         {
10237           /* 13.4.0.3 */
10238           error ("ISO C++ prohibits overloading operator ?:");
10239           return false;
10240         }
10241       else if (ellipsis_p)
10242         {
10243           error ("%qD must not have variable number of arguments", decl);
10244           return false;
10245         }
10246       else if (ambi_op_p (operator_code))
10247         {
10248           if (arity == 1)
10249             /* We pick the one-argument operator codes by default, so
10250                we don't have to change anything.  */
10251             ;
10252           else if (arity == 2)
10253             {
10254               /* If we thought this was a unary operator, we now know
10255                  it to be a binary operator.  */
10256               switch (operator_code)
10257                 {
10258                 case INDIRECT_REF:
10259                   operator_code = MULT_EXPR;
10260                   break;
10261
10262                 case ADDR_EXPR:
10263                   operator_code = BIT_AND_EXPR;
10264                   break;
10265
10266                 case UNARY_PLUS_EXPR:
10267                   operator_code = PLUS_EXPR;
10268                   break;
10269
10270                 case NEGATE_EXPR:
10271                   operator_code = MINUS_EXPR;
10272                   break;
10273
10274                 case PREINCREMENT_EXPR:
10275                   operator_code = POSTINCREMENT_EXPR;
10276                   break;
10277
10278                 case PREDECREMENT_EXPR:
10279                   operator_code = POSTDECREMENT_EXPR;
10280                   break;
10281
10282                 default:
10283                   gcc_unreachable ();
10284                 }
10285
10286               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10287
10288               if ((operator_code == POSTINCREMENT_EXPR
10289                    || operator_code == POSTDECREMENT_EXPR)
10290                   && ! processing_template_decl
10291                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10292                 {
10293                   if (methodp)
10294                     error ("postfix %qD must take %<int%> as its argument",
10295                            decl);
10296                   else
10297                     error ("postfix %qD must take %<int%> as its second "
10298                            "argument", decl);
10299                   return false;
10300                 }
10301             }
10302           else
10303             {
10304               if (methodp)
10305                 error ("%qD must take either zero or one argument", decl);
10306               else
10307                 error ("%qD must take either one or two arguments", decl);
10308               return false;
10309             }
10310
10311           /* More Effective C++ rule 6.  */
10312           if (warn_ecpp
10313               && (operator_code == POSTINCREMENT_EXPR
10314                   || operator_code == POSTDECREMENT_EXPR
10315                   || operator_code == PREINCREMENT_EXPR
10316                   || operator_code == PREDECREMENT_EXPR))
10317             {
10318               tree arg = TREE_VALUE (argtypes);
10319               tree ret = TREE_TYPE (TREE_TYPE (decl));
10320               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10321                 arg = TREE_TYPE (arg);
10322               arg = TYPE_MAIN_VARIANT (arg);
10323               if (operator_code == PREINCREMENT_EXPR
10324                   || operator_code == PREDECREMENT_EXPR)
10325                 {
10326                   if (TREE_CODE (ret) != REFERENCE_TYPE
10327                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10328                                        arg))
10329                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10330                              build_reference_type (arg));
10331                 }
10332               else
10333                 {
10334                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10335                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10336                 }
10337             }
10338         }
10339       else if (unary_op_p (operator_code))
10340         {
10341           if (arity != 1)
10342             {
10343               if (methodp)
10344                 error ("%qD must take %<void%>", decl);
10345               else
10346                 error ("%qD must take exactly one argument", decl);
10347               return false;
10348             }
10349         }
10350       else /* if (binary_op_p (operator_code)) */
10351         {
10352           if (arity != 2)
10353             {
10354               if (methodp)
10355                 error ("%qD must take exactly one argument", decl);
10356               else
10357                 error ("%qD must take exactly two arguments", decl);
10358               return false;
10359             }
10360
10361           /* More Effective C++ rule 7.  */
10362           if (warn_ecpp
10363               && (operator_code == TRUTH_ANDIF_EXPR
10364                   || operator_code == TRUTH_ORIF_EXPR
10365                   || operator_code == COMPOUND_EXPR))
10366             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10367                      decl);
10368         }
10369
10370       /* Effective C++ rule 23.  */
10371       if (warn_ecpp
10372           && arity == 2
10373           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10374           && (operator_code == PLUS_EXPR
10375               || operator_code == MINUS_EXPR
10376               || operator_code == TRUNC_DIV_EXPR
10377               || operator_code == MULT_EXPR
10378               || operator_code == TRUNC_MOD_EXPR)
10379           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10380         warning (OPT_Weffc__, "%qD should return by value", decl);
10381
10382       /* [over.oper]/8 */
10383       for (; argtypes && argtypes != void_list_node;
10384           argtypes = TREE_CHAIN (argtypes))
10385         if (TREE_PURPOSE (argtypes))
10386           {
10387             TREE_PURPOSE (argtypes) = NULL_TREE;
10388             if (operator_code == POSTINCREMENT_EXPR
10389                 || operator_code == POSTDECREMENT_EXPR)
10390               {
10391                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
10392                          decl);
10393               }
10394             else
10395               {
10396                 error ("%qD cannot have default arguments", decl);
10397                 return false;
10398               }
10399           }
10400     }
10401   return true;
10402 }
10403 \f
10404 /* Return a string giving the keyword associate with CODE.  */
10405
10406 static const char *
10407 tag_name (enum tag_types code)
10408 {
10409   switch (code)
10410     {
10411     case record_type:
10412       return "struct";
10413     case class_type:
10414       return "class";
10415     case union_type:
10416       return "union";
10417     case enum_type:
10418       return "enum";
10419     case typename_type:
10420       return "typename";
10421     default:
10422       gcc_unreachable ();
10423     }
10424 }
10425
10426 /* Name lookup in an elaborated-type-specifier (after the keyword
10427    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
10428    elaborated-type-specifier is invalid, issue a diagnostic and return
10429    error_mark_node; otherwise, return the *_TYPE to which it referred.
10430    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
10431
10432 tree
10433 check_elaborated_type_specifier (enum tag_types tag_code,
10434                                  tree decl,
10435                                  bool allow_template_p)
10436 {
10437   tree type;
10438
10439   /* In the case of:
10440
10441        struct S { struct S *p; };
10442
10443      name lookup will find the TYPE_DECL for the implicit "S::S"
10444      typedef.  Adjust for that here.  */
10445   if (DECL_SELF_REFERENCE_P (decl))
10446     decl = TYPE_NAME (TREE_TYPE (decl));
10447
10448   type = TREE_TYPE (decl);
10449
10450   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10451      is false for this case as well.  */
10452   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10453     {
10454       error ("using template type parameter %qT after %qs",
10455              type, tag_name (tag_code));
10456       return error_mark_node;
10457     }
10458   /*   [dcl.type.elab]
10459
10460        If the identifier resolves to a typedef-name or a template
10461        type-parameter, the elaborated-type-specifier is ill-formed.
10462
10463      In other words, the only legitimate declaration to use in the
10464      elaborated type specifier is the implicit typedef created when
10465      the type is declared.  */
10466   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10467            && tag_code != typename_type)
10468     {
10469       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10470       error ("%q+D has a previous declaration here", decl);
10471       return error_mark_node;
10472     }
10473   else if (TREE_CODE (type) != RECORD_TYPE
10474            && TREE_CODE (type) != UNION_TYPE
10475            && tag_code != enum_type
10476            && tag_code != typename_type)
10477     {
10478       error ("%qT referred to as %qs", type, tag_name (tag_code));
10479       error ("%q+T has a previous declaration here", type);
10480       return error_mark_node;
10481     }
10482   else if (TREE_CODE (type) != ENUMERAL_TYPE
10483            && tag_code == enum_type)
10484     {
10485       error ("%qT referred to as enum", type);
10486       error ("%q+T has a previous declaration here", type);
10487       return error_mark_node;
10488     }
10489   else if (!allow_template_p
10490            && TREE_CODE (type) == RECORD_TYPE
10491            && CLASSTYPE_IS_TEMPLATE (type))
10492     {
10493       /* If a class template appears as elaborated type specifier
10494          without a template header such as:
10495
10496            template <class T> class C {};
10497            void f(class C);             // No template header here
10498
10499          then the required template argument is missing.  */
10500       error ("template argument required for %<%s %T%>",
10501              tag_name (tag_code),
10502              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10503       return error_mark_node;
10504     }
10505
10506   return type;
10507 }
10508
10509 /* Lookup NAME in elaborate type specifier in scope according to
10510    SCOPE and issue diagnostics if necessary.
10511    Return *_TYPE node upon success, NULL_TREE when the NAME is not
10512    found, and ERROR_MARK_NODE for type error.  */
10513
10514 static tree
10515 lookup_and_check_tag (enum tag_types tag_code, tree name,
10516                       tag_scope scope, bool template_header_p)
10517 {
10518   tree t;
10519   tree decl;
10520   if (scope == ts_global)
10521     {
10522       /* First try ordinary name lookup, ignoring hidden class name
10523          injected via friend declaration.  */
10524       decl = lookup_name_prefer_type (name, 2);
10525       /* If that fails, the name will be placed in the smallest
10526          non-class, non-function-prototype scope according to 3.3.1/5.
10527          We may already have a hidden name declared as friend in this
10528          scope.  So lookup again but not ignoring hidden names.
10529          If we find one, that name will be made visible rather than
10530          creating a new tag.  */
10531       if (!decl)
10532         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10533     }
10534   else
10535     decl = lookup_type_scope (name, scope);
10536
10537   if (decl && DECL_CLASS_TEMPLATE_P (decl))
10538     decl = DECL_TEMPLATE_RESULT (decl);
10539
10540   if (decl && TREE_CODE (decl) == TYPE_DECL)
10541     {
10542       /* Look for invalid nested type:
10543            class C {
10544              class C {};
10545            };  */
10546       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10547         {
10548           error ("%qD has the same name as the class in which it is "
10549                  "declared",
10550                  decl);
10551           return error_mark_node;
10552         }
10553
10554       /* Two cases we need to consider when deciding if a class
10555          template is allowed as an elaborated type specifier:
10556          1. It is a self reference to its own class.
10557          2. It comes with a template header.
10558
10559          For example:
10560
10561            template <class T> class C {
10562              class C *c1;               // DECL_SELF_REFERENCE_P is true
10563              class D;
10564            };
10565            template <class U> class C; // template_header_p is true
10566            template <class T> class C<T>::D {
10567              class C *c2;               // DECL_SELF_REFERENCE_P is true
10568            };  */
10569
10570       t = check_elaborated_type_specifier (tag_code,
10571                                            decl,
10572                                            template_header_p
10573                                            | DECL_SELF_REFERENCE_P (decl));
10574       return t;
10575     }
10576   else if (decl && TREE_CODE (decl) == TREE_LIST)
10577     {
10578       error ("reference to %qD is ambiguous", name);
10579       print_candidates (decl);
10580       return error_mark_node;
10581     }
10582   else
10583     return NULL_TREE;
10584 }
10585
10586 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10587    Define the tag as a forward-reference if it is not defined.
10588
10589    If a declaration is given, process it here, and report an error if
10590    multiple declarations are not identical.
10591
10592    SCOPE is TS_CURRENT when this is also a definition.  Only look in
10593    the current frame for the name (since C++ allows new names in any
10594    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10595    declaration.  Only look beginning from the current scope outward up
10596    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
10597
10598    TEMPLATE_HEADER_P is true when this declaration is preceded by
10599    a set of template parameters.  */
10600
10601 tree
10602 xref_tag (enum tag_types tag_code, tree name,
10603           tag_scope scope, bool template_header_p)
10604 {
10605   enum tree_code code;
10606   tree t;
10607   tree context = NULL_TREE;
10608
10609   timevar_push (TV_NAME_LOOKUP);
10610
10611   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10612
10613   switch (tag_code)
10614     {
10615     case record_type:
10616     case class_type:
10617       code = RECORD_TYPE;
10618       break;
10619     case union_type:
10620       code = UNION_TYPE;
10621       break;
10622     case enum_type:
10623       code = ENUMERAL_TYPE;
10624       break;
10625     default:
10626       gcc_unreachable ();
10627     }
10628
10629   /* In case of anonymous name, xref_tag is only called to
10630      make type node and push name.  Name lookup is not required.  */
10631   if (ANON_AGGRNAME_P (name))
10632     t = NULL_TREE;
10633   else
10634     t = lookup_and_check_tag  (tag_code, name,
10635                                scope, template_header_p);
10636
10637   if (t == error_mark_node)
10638     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10639
10640   if (scope != ts_current && t && current_class_type
10641       && template_class_depth (current_class_type)
10642       && template_header_p)
10643     {
10644       /* Since SCOPE is not TS_CURRENT, we are not looking at a
10645          definition of this tag.  Since, in addition, we are currently
10646          processing a (member) template declaration of a template
10647          class, we must be very careful; consider:
10648
10649            template <class X>
10650            struct S1
10651
10652            template <class U>
10653            struct S2
10654            { template <class V>
10655            friend struct S1; };
10656
10657          Here, the S2::S1 declaration should not be confused with the
10658          outer declaration.  In particular, the inner version should
10659          have a template parameter of level 2, not level 1.  This
10660          would be particularly important if the member declaration
10661          were instead:
10662
10663            template <class V = U> friend struct S1;
10664
10665          say, when we should tsubst into `U' when instantiating
10666          S2.  On the other hand, when presented with:
10667
10668            template <class T>
10669            struct S1 {
10670              template <class U>
10671              struct S2 {};
10672              template <class U>
10673              friend struct S2;
10674            };
10675
10676          we must find the inner binding eventually.  We
10677          accomplish this by making sure that the new type we
10678          create to represent this declaration has the right
10679          TYPE_CONTEXT.  */
10680       context = TYPE_CONTEXT (t);
10681       t = NULL_TREE;
10682     }
10683
10684   if (! t)
10685     {
10686       /* If no such tag is yet defined, create a forward-reference node
10687          and record it as the "definition".
10688          When a real declaration of this type is found,
10689          the forward-reference will be altered into a real type.  */
10690       if (code == ENUMERAL_TYPE)
10691         {
10692           error ("use of enum %q#D without previous declaration", name);
10693           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10694         }
10695       else
10696         {
10697           t = make_class_type (code);
10698           TYPE_CONTEXT (t) = context;
10699           t = pushtag (name, t, scope);
10700         }
10701     }
10702   else
10703     {
10704       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10705         {
10706           if (!redeclare_class_template (t, current_template_parms))
10707             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10708         }
10709       else if (!processing_template_decl
10710                && CLASS_TYPE_P (t)
10711                && CLASSTYPE_IS_TEMPLATE (t))
10712         {
10713           error ("redeclaration of %qT as a non-template", t);
10714           error ("previous declaration %q+D", t);
10715           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10716         }
10717
10718       /* Make injected friend class visible.  */
10719       if (scope != ts_within_enclosing_non_class
10720           && hidden_name_p (TYPE_NAME (t)))
10721         {
10722           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10723           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10724
10725           if (TYPE_TEMPLATE_INFO (t))
10726             {
10727               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10728               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10729             }
10730         }
10731     }
10732
10733   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10734 }
10735
10736 tree
10737 xref_tag_from_type (tree old, tree id, tag_scope scope)
10738 {
10739   enum tag_types tag_kind;
10740
10741   if (TREE_CODE (old) == RECORD_TYPE)
10742     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10743   else
10744     tag_kind  = union_type;
10745
10746   if (id == NULL_TREE)
10747     id = TYPE_IDENTIFIER (old);
10748
10749   return xref_tag (tag_kind, id, scope, false);
10750 }
10751
10752 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10753    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
10754    access_* node, and the TREE_VALUE is the type of the base-class.
10755    Non-NULL TREE_TYPE indicates virtual inheritance.  
10756  
10757    Returns true if the binfo hierarchy was successfully created,
10758    false if an error was detected. */
10759
10760 bool
10761 xref_basetypes (tree ref, tree base_list)
10762 {
10763   tree *basep;
10764   tree binfo, base_binfo;
10765   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
10766   unsigned max_bases = 0;  /* Maximum direct bases.  */
10767   int i;
10768   tree default_access;
10769   tree igo_prev; /* Track Inheritance Graph Order.  */
10770
10771   if (ref == error_mark_node)
10772     return false;
10773
10774   /* The base of a derived class is private by default, all others are
10775      public.  */
10776   default_access = (TREE_CODE (ref) == RECORD_TYPE
10777                     && CLASSTYPE_DECLARED_CLASS (ref)
10778                     ? access_private_node : access_public_node);
10779
10780   /* First, make sure that any templates in base-classes are
10781      instantiated.  This ensures that if we call ourselves recursively
10782      we do not get confused about which classes are marked and which
10783      are not.  */
10784   basep = &base_list;
10785   while (*basep)
10786     {
10787       tree basetype = TREE_VALUE (*basep);
10788
10789       if (!(processing_template_decl && uses_template_parms (basetype))
10790           && !complete_type_or_else (basetype, NULL))
10791         /* An incomplete type.  Remove it from the list.  */
10792         *basep = TREE_CHAIN (*basep);
10793       else
10794         {
10795           max_bases++;
10796           if (TREE_TYPE (*basep))
10797             max_vbases++;
10798           if (CLASS_TYPE_P (basetype))
10799             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10800           basep = &TREE_CHAIN (*basep);
10801         }
10802     }
10803
10804   TYPE_MARKED_P (ref) = 1;
10805
10806   /* The binfo slot should be empty, unless this is an (ill-formed)
10807      redefinition.  */
10808   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10809   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10810
10811   binfo = make_tree_binfo (max_bases);
10812
10813   TYPE_BINFO (ref) = binfo;
10814   BINFO_OFFSET (binfo) = size_zero_node;
10815   BINFO_TYPE (binfo) = ref;
10816
10817   /* Apply base-class info set up to the variants of this type.  */
10818   fixup_type_variants (ref);
10819
10820   if (max_bases)
10821     {
10822       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
10823       /* An aggregate cannot have baseclasses.  */
10824       CLASSTYPE_NON_AGGREGATE (ref) = 1;
10825
10826       if (TREE_CODE (ref) == UNION_TYPE)
10827         {
10828           error ("derived union %qT invalid", ref);
10829           return false;
10830         }
10831     }
10832
10833   if (max_bases > 1)
10834     {
10835       if (TYPE_FOR_JAVA (ref))
10836         {
10837           error ("Java class %qT cannot have multiple bases", ref);
10838           return false;
10839         }
10840     }
10841
10842   if (max_vbases)
10843     {
10844       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
10845
10846       if (TYPE_FOR_JAVA (ref))
10847         {
10848           error ("Java class %qT cannot have virtual bases", ref);
10849           return false;
10850         }
10851     }
10852
10853   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
10854     {
10855       tree access = TREE_PURPOSE (base_list);
10856       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
10857       tree basetype = TREE_VALUE (base_list);
10858
10859       if (access == access_default_node)
10860         access = default_access;
10861
10862       if (PACK_EXPANSION_P (basetype))
10863         basetype = PACK_EXPANSION_PATTERN (basetype);
10864       if (TREE_CODE (basetype) == TYPE_DECL)
10865         basetype = TREE_TYPE (basetype);
10866       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
10867         {
10868           error ("base type %qT fails to be a struct or class type",
10869                  basetype);
10870           return false;
10871         }
10872
10873       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
10874         TYPE_FOR_JAVA (ref) = 1;
10875
10876       base_binfo = NULL_TREE;
10877       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
10878         {
10879           base_binfo = TYPE_BINFO (basetype);
10880           /* The original basetype could have been a typedef'd type.  */
10881           basetype = BINFO_TYPE (base_binfo);
10882
10883           /* Inherit flags from the base.  */
10884           TYPE_HAS_NEW_OPERATOR (ref)
10885             |= TYPE_HAS_NEW_OPERATOR (basetype);
10886           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
10887             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
10888           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
10889           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
10890           CLASSTYPE_DIAMOND_SHAPED_P (ref)
10891             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
10892           CLASSTYPE_REPEATED_BASE_P (ref)
10893             |= CLASSTYPE_REPEATED_BASE_P (basetype);
10894         }
10895
10896       /* We must do this test after we've seen through a typedef
10897          type.  */
10898       if (TYPE_MARKED_P (basetype))
10899         {
10900           if (basetype == ref)
10901             error ("recursive type %qT undefined", basetype);
10902           else
10903             error ("duplicate base type %qT invalid", basetype);
10904           return false;
10905         }
10906
10907       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
10908         /* Regenerate the pack expansion for the bases. */
10909         basetype = make_pack_expansion (basetype);
10910
10911       TYPE_MARKED_P (basetype) = 1;
10912
10913       base_binfo = copy_binfo (base_binfo, basetype, ref,
10914                                &igo_prev, via_virtual);
10915       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
10916         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
10917
10918       BINFO_BASE_APPEND (binfo, base_binfo);
10919       BINFO_BASE_ACCESS_APPEND (binfo, access);
10920     }
10921
10922   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
10923     /* If we have space in the vbase vector, we must have shared at
10924        least one of them, and are therefore diamond shaped.  */
10925     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
10926
10927   /* Unmark all the types.  */
10928   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
10929     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10930   TYPE_MARKED_P (ref) = 0;
10931
10932   /* Now see if we have a repeated base type.  */
10933   if (!CLASSTYPE_REPEATED_BASE_P (ref))
10934     {
10935       for (base_binfo = binfo; base_binfo;
10936            base_binfo = TREE_CHAIN (base_binfo))
10937         {
10938           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10939             {
10940               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
10941               break;
10942             }
10943           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
10944         }
10945       for (base_binfo = binfo; base_binfo;
10946            base_binfo = TREE_CHAIN (base_binfo))
10947         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
10948           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
10949         else
10950           break;
10951     }
10952
10953   return true;
10954 }
10955
10956 \f
10957 /* Begin compiling the definition of an enumeration type.
10958    NAME is its name, 
10959
10960    UNDERLYING_TYPE is the type that will be used as the storage for
10961    the enumeration type. This should be NULL_TREE if no storage type
10962    was specified.
10963
10964    SCOPED_ENUM_P is true if this is a scoped enumeration type.
10965
10966    Returns the type object, as yet incomplete.
10967    Also records info about it so that build_enumerator
10968    may be used to declare the individual values as they are read.  */
10969
10970 tree
10971 start_enum (tree name, tree underlying_type, bool scoped_enum_p)
10972 {
10973   tree enumtype;
10974
10975   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10976
10977   /* If this is the real definition for a previous forward reference,
10978      fill in the contents in the same object that used to be the
10979      forward reference.  */
10980
10981   enumtype = lookup_and_check_tag (enum_type, name,
10982                                    /*tag_scope=*/ts_current,
10983                                    /*template_header_p=*/false);
10984
10985   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
10986     {
10987       error ("multiple definition of %q#T", enumtype);
10988       error ("%Jprevious definition here", TYPE_MAIN_DECL (enumtype));
10989       /* Clear out TYPE_VALUES, and start again.  */
10990       TYPE_VALUES (enumtype) = NULL_TREE;
10991     }
10992   else
10993     {
10994       /* In case of error, make a dummy enum to allow parsing to
10995          continue.  */
10996       if (enumtype == error_mark_node)
10997         name = make_anon_name ();
10998
10999       enumtype = make_node (ENUMERAL_TYPE);
11000       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11001     }
11002
11003   if (enumtype == error_mark_node)
11004     return enumtype;
11005
11006   if (scoped_enum_p)
11007     {
11008       SET_SCOPED_ENUM_P (enumtype, 1);
11009       begin_scope (sk_scoped_enum, enumtype);
11010
11011       /* [C++0x dcl.enum]p5: 
11012
11013           If not explicitly specified, the underlying type of a scoped
11014           enumeration type is int.  */
11015       if (!underlying_type)
11016         underlying_type = integer_type_node;
11017     }
11018
11019   if (underlying_type)
11020     {
11021       if (CP_INTEGRAL_TYPE_P (underlying_type))
11022         {
11023           TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11024           TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11025           TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11026           TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11027           SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11028           TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11029           TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11030           TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11031           TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11032           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11033         }
11034       else
11035         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11036                underlying_type, enumtype);
11037     }
11038
11039   return enumtype;
11040 }
11041
11042 /* After processing and defining all the values of an enumeration type,
11043    install their decls in the enumeration type and finish it off.
11044    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
11045
11046 void
11047 finish_enum (tree enumtype)
11048 {
11049   tree values;
11050   tree decl;
11051   tree minnode;
11052   tree maxnode;
11053   tree value;
11054   tree t;
11055   bool unsignedp;
11056   bool use_short_enum;
11057   int lowprec;
11058   int highprec;
11059   int precision;
11060   unsigned int itk;
11061   tree underlying_type = NULL_TREE;
11062   bool fixed_underlying_type_p 
11063     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11064
11065   /* We built up the VALUES in reverse order.  */
11066   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11067
11068   /* For an enum defined in a template, just set the type of the values;
11069      all further processing is postponed until the template is
11070      instantiated.  We need to set the type so that tsubst of a CONST_DECL
11071      works.  */
11072   if (processing_template_decl)
11073     {
11074       for (values = TYPE_VALUES (enumtype);
11075            values;
11076            values = TREE_CHAIN (values))
11077         TREE_TYPE (TREE_VALUE (values)) = enumtype;
11078       if (at_function_scope_p ())
11079         add_stmt (build_min (TAG_DEFN, enumtype));
11080       return;
11081     }
11082
11083   /* Determine the minimum and maximum values of the enumerators.  */
11084   if (TYPE_VALUES (enumtype))
11085     {
11086       minnode = maxnode = NULL_TREE;
11087
11088       for (values = TYPE_VALUES (enumtype);
11089            values;
11090            values = TREE_CHAIN (values))
11091         {
11092           decl = TREE_VALUE (values);
11093
11094           /* [dcl.enum]: Following the closing brace of an enum-specifier,
11095              each enumerator has the type of its enumeration.  Prior to the
11096              closing brace, the type of each enumerator is the type of its
11097              initializing value.  */
11098           TREE_TYPE (decl) = enumtype;
11099
11100           /* Update the minimum and maximum values, if appropriate.  */
11101           value = DECL_INITIAL (decl);
11102           if (value == error_mark_node)
11103             value = integer_zero_node;
11104           /* Figure out what the minimum and maximum values of the
11105              enumerators are.  */
11106           if (!minnode)
11107             minnode = maxnode = value;
11108           else if (tree_int_cst_lt (maxnode, value))
11109             maxnode = value;
11110           else if (tree_int_cst_lt (value, minnode))
11111             minnode = value;
11112         }
11113     }
11114   else
11115     /* [dcl.enum]
11116        
11117        If the enumerator-list is empty, the underlying type is as if
11118        the enumeration had a single enumerator with value 0.  */
11119     minnode = maxnode = integer_zero_node;
11120
11121   /* Compute the number of bits require to represent all values of the
11122      enumeration.  We must do this before the type of MINNODE and
11123      MAXNODE are transformed, since tree_int_cst_min_precision relies
11124      on the TREE_TYPE of the value it is passed.  */
11125   unsignedp = tree_int_cst_sgn (minnode) >= 0;
11126   lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11127   highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11128   precision = MAX (lowprec, highprec);
11129
11130   if (!fixed_underlying_type_p)
11131     {
11132       /* Determine the underlying type of the enumeration.
11133
11134          [dcl.enum]
11135
11136          The underlying type of an enumeration is an integral type that
11137          can represent all the enumerator values defined in the
11138          enumeration.  It is implementation-defined which integral type is
11139          used as the underlying type for an enumeration except that the
11140          underlying type shall not be larger than int unless the value of
11141          an enumerator cannot fit in an int or unsigned int.
11142
11143          We use "int" or an "unsigned int" as the underlying type, even if
11144          a smaller integral type would work, unless the user has
11145          explicitly requested that we use the smallest possible type.  The
11146          user can request that for all enumerations with a command line
11147          flag, or for just one enumeration with an attribute.  */
11148
11149       use_short_enum = flag_short_enums
11150         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11151
11152       for (itk = (use_short_enum ? itk_char : itk_int);
11153            itk != itk_none;
11154            itk++)
11155         {
11156           underlying_type = integer_types[itk];
11157           if (TYPE_PRECISION (underlying_type) >= precision
11158               && TYPE_UNSIGNED (underlying_type) == unsignedp)
11159             break;
11160         }
11161       if (itk == itk_none)
11162         {
11163           /* DR 377
11164
11165              IF no integral type can represent all the enumerator values, the
11166              enumeration is ill-formed.  */
11167           error ("no integral type can represent all of the enumerator values "
11168                  "for %qT", enumtype);
11169           precision = TYPE_PRECISION (long_long_integer_type_node);
11170           underlying_type = integer_types[itk_unsigned_long_long];
11171         }
11172
11173       /* [dcl.enum]
11174
11175          The value of sizeof() applied to an enumeration type, an object
11176          of an enumeration type, or an enumerator, is the value of sizeof()
11177          applied to the underlying type.  */
11178       TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11179       TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11180       SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11181       TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11182       TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11183       TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11184
11185       /* Set the underlying type of the enumeration type to the
11186          computed enumeration type, restricted to the enumerator
11187          values. */
11188       ENUM_UNDERLYING_TYPE (enumtype) = copy_node (underlying_type);
11189       set_min_and_max_values_for_integral_type 
11190         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11191     }
11192   else
11193     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11194
11195   /* Compute the minimum and maximum values for the type.
11196
11197      [dcl.enum]
11198
11199      For an enumeration where emin is the smallest enumerator and emax
11200      is the largest, the values of the enumeration are the values of the
11201      underlying type in the range bmin to bmax, where bmin and bmax are,
11202      respectively, the smallest and largest values of the smallest bit-
11203      field that can store emin and emax.  */
11204   
11205   /* The middle-end currently assumes that types with TYPE_PRECISION
11206      narrower than their underlying type are suitably zero or sign
11207      extended to fill their mode.  g++ doesn't make these guarantees.
11208      Until the middle-end can represent such paradoxical types, we
11209      set the TYPE_PRECISION to the width of the underlying type.  */
11210   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11211   
11212   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
11213   
11214   /* Convert each of the enumerators to the type of the underlying
11215      type of the enumeration.  */
11216   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11217     {
11218       location_t saved_location;
11219
11220       decl = TREE_VALUE (values);
11221       saved_location = input_location;
11222       input_location = DECL_SOURCE_LOCATION (decl);
11223       if (fixed_underlying_type_p)
11224         /* If the enumeration type has a fixed underlying type, we
11225            already checked all of the enumerator values.  */
11226         value = DECL_INITIAL (decl);
11227       else
11228         value = perform_implicit_conversion (underlying_type,
11229                                              DECL_INITIAL (decl),
11230                                              tf_warning_or_error);
11231       input_location = saved_location;
11232
11233       /* Do not clobber shared ints.  */
11234       value = copy_node (value);
11235
11236       TREE_TYPE (value) = enumtype;
11237       DECL_INITIAL (decl) = value;
11238     }
11239
11240   /* Fix up all variant types of this enum type.  */
11241   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11242     {
11243       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11244       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11245       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11246       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11247       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11248       SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11249       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11250       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11251       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11252       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11253       ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11254     }
11255
11256   /* Finish up the scope of a scoped enumeration.  */
11257   if (SCOPED_ENUM_P (enumtype))
11258     finish_scope ();
11259
11260   /* Finish debugging output for this type.  */
11261   rest_of_type_compilation (enumtype, namespace_bindings_p ());
11262 }
11263
11264 /* Build and install a CONST_DECL for an enumeration constant of the
11265    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11266    Assignment of sequential values by default is handled here.  */
11267
11268 void
11269 build_enumerator (tree name, tree value, tree enumtype)
11270 {
11271   tree decl;
11272   tree context;
11273   tree type;
11274
11275   /* If the VALUE was erroneous, pretend it wasn't there; that will
11276      result in the enum being assigned the next value in sequence.  */
11277   if (value == error_mark_node)
11278     value = NULL_TREE;
11279
11280   /* Remove no-op casts from the value.  */
11281   if (value)
11282     STRIP_TYPE_NOPS (value);
11283
11284   if (! processing_template_decl)
11285     {
11286       /* Validate and default VALUE.  */
11287       if (value != NULL_TREE)
11288         {
11289           value = integral_constant_value (value);
11290
11291           if (TREE_CODE (value) == INTEGER_CST)
11292             {
11293               value = perform_integral_promotions (value);
11294               constant_expression_warning (value);
11295             }
11296           else
11297             {
11298               error ("enumerator value for %qD is not an integer constant", name);
11299               value = NULL_TREE;
11300             }
11301         }
11302
11303       /* Default based on previous value.  */
11304       if (value == NULL_TREE)
11305         {
11306           if (TYPE_VALUES (enumtype))
11307             {
11308               HOST_WIDE_INT hi;
11309               unsigned HOST_WIDE_INT lo;
11310               tree prev_value;
11311               bool overflowed;
11312
11313               /* The next value is the previous value plus one.
11314                  add_double doesn't know the type of the target expression,
11315                  so we must check with int_fits_type_p as well.  */
11316               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11317               if (error_operand_p (prev_value))
11318                 value = error_mark_node;
11319               else
11320                 {
11321                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11322                                            TREE_INT_CST_HIGH (prev_value),
11323                                            1, 0, &lo, &hi);
11324                   value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11325                   overflowed
11326                     |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11327
11328                   if (overflowed)
11329                     {
11330                       error ("overflow in enumeration values at %qD", name);
11331                       value = error_mark_node;
11332                     }
11333                 }
11334             }
11335           else
11336             value = integer_zero_node;
11337         }
11338
11339       /* Remove no-op casts from the value.  */
11340       STRIP_TYPE_NOPS (value);
11341
11342       /* If the underlying type of the enum is fixed, check whether
11343          the enumerator values fits in the underlying type.  If it
11344          does not fit, the program is ill-formed [C++0x dcl.enum].  */
11345       if (ENUM_UNDERLYING_TYPE (enumtype)
11346           && value
11347           && TREE_CODE (value) == INTEGER_CST
11348           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11349         {
11350           error ("enumerator value %E is too large for underlying type %<%T%>",
11351                  value, ENUM_UNDERLYING_TYPE (enumtype));
11352
11353           /* Silently convert the value so that we can continue.  */
11354           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11355                                                value, tf_none);
11356         }
11357     }
11358
11359   /* C++ associates enums with global, function, or class declarations.  */
11360   context = current_scope ();
11361
11362   /* Build the actual enumeration constant.  Note that the enumeration
11363      constants have the underlying type of the enum (if it is fixed)
11364      or the type of their initializer (if the underlying type of the
11365      enum is not fixed):
11366
11367       [ C++0x dcl.enum ]
11368
11369         If the underlying type is fixed, the type of each enumerator
11370         prior to the closing brace is the underlying type; if the
11371         initializing value of an enumerator cannot be represented by
11372         the underlying type, the program is ill-formed. If the
11373         underlying type is not fixed, the type of each enumerator is
11374         the type of its initializing value.
11375
11376     If the underlying type is not fixed, it will be computed by
11377     finish_enum and we will reset the type of this enumerator.  Of
11378     course, if we're processing a template, there may be no value.  */
11379   type = value ? TREE_TYPE (value) : NULL_TREE;
11380
11381   if (context && context == current_class_type)
11382     /* This enum declaration is local to the class.  We need the full
11383        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
11384     decl = build_lang_decl (CONST_DECL, name, type);
11385   else
11386     /* It's a global enum, or it's local to a function.  (Note local to
11387       a function could mean local to a class method.  */
11388     decl = build_decl (CONST_DECL, name, type);
11389
11390   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11391   TREE_CONSTANT (decl) = 1;
11392   TREE_READONLY (decl) = 1;
11393   DECL_INITIAL (decl) = value;
11394
11395   if (context && context == current_class_type)
11396     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11397        on the TYPE_FIELDS list for `S'.  (That's so that you can say
11398        things like `S::i' later.)  */
11399     finish_member_declaration (decl);
11400   else
11401     pushdecl (decl);
11402
11403   /* Add this enumeration constant to the list for this type.  */
11404   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11405 }
11406
11407 /* Look for an enumerator with the given NAME within the enumeration
11408    type ENUMTYPE.  This routine is used primarily for qualified name
11409    lookup into an enumerator in C++0x, e.g.,
11410
11411      enum class Color { Red, Green, Blue };
11412
11413      Color color = Color::Red;
11414
11415    Returns the value corresponding to the enumerator, or
11416    NULL_TREE if no such enumerator was found.  */
11417 tree
11418 lookup_enumerator (tree enumtype, tree name)
11419 {
11420   tree e;
11421   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11422
11423   e = purpose_member (name, TYPE_VALUES (enumtype));
11424   return e? TREE_VALUE (e) : NULL_TREE;
11425 }
11426
11427 \f
11428 /* We're defining DECL.  Make sure that it's type is OK.  */
11429
11430 static void
11431 check_function_type (tree decl, tree current_function_parms)
11432 {
11433   tree fntype = TREE_TYPE (decl);
11434   tree return_type = complete_type (TREE_TYPE (fntype));
11435
11436   /* In a function definition, arg types must be complete.  */
11437   require_complete_types_for_parms (current_function_parms);
11438
11439   if (dependent_type_p (return_type))
11440     return;
11441   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11442       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11443     {
11444       tree args = TYPE_ARG_TYPES (fntype);
11445
11446       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11447         error ("return type %q#T is incomplete", return_type);
11448       else
11449         error ("return type has Java class type %q#T", return_type);
11450
11451       /* Make it return void instead.  */
11452       if (TREE_CODE (fntype) == METHOD_TYPE)
11453         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11454                                              void_type_node,
11455                                              TREE_CHAIN (args));
11456       else
11457         fntype = build_function_type (void_type_node, args);
11458       TREE_TYPE (decl)
11459         = build_exception_variant (fntype,
11460                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11461     }
11462   else
11463     abstract_virtuals_error (decl, TREE_TYPE (fntype));
11464 }
11465
11466 /* Create the FUNCTION_DECL for a function definition.
11467    DECLSPECS and DECLARATOR are the parts of the declaration;
11468    they describe the function's name and the type it returns,
11469    but twisted together in a fashion that parallels the syntax of C.
11470
11471    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11472    DECLARATOR is really the DECL for the function we are about to
11473    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11474    indicating that the function is an inline defined in-class.
11475
11476    This function creates a binding context for the function body
11477    as well as setting up the FUNCTION_DECL in current_function_decl.
11478
11479    For C++, we must first check whether that datum makes any sense.
11480    For example, "class A local_a(1,2);" means that variable local_a
11481    is an aggregate of type A, which should have a constructor
11482    applied to it with the argument list [1, 2].
11483
11484    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11485    or may be a BLOCK if the function has been defined previously
11486    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
11487    error_mark_node if the function has never been defined, or
11488    a BLOCK if the function has been defined somewhere.  */
11489
11490 void
11491 start_preparsed_function (tree decl1, tree attrs, int flags)
11492 {
11493   tree ctype = NULL_TREE;
11494   tree fntype;
11495   tree restype;
11496   int doing_friend = 0;
11497   struct cp_binding_level *bl;
11498   tree current_function_parms;
11499   struct c_fileinfo *finfo
11500     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11501   bool honor_interface;
11502
11503   /* Sanity check.  */
11504   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11505   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11506
11507   fntype = TREE_TYPE (decl1);
11508   if (TREE_CODE (fntype) == METHOD_TYPE)
11509     ctype = TYPE_METHOD_BASETYPE (fntype);
11510
11511   /* ISO C++ 11.4/5.  A friend function defined in a class is in
11512      the (lexical) scope of the class in which it is defined.  */
11513   if (!ctype && DECL_FRIEND_P (decl1))
11514     {
11515       ctype = DECL_FRIEND_CONTEXT (decl1);
11516
11517       /* CTYPE could be null here if we're dealing with a template;
11518          for example, `inline friend float foo()' inside a template
11519          will have no CTYPE set.  */
11520       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11521         ctype = NULL_TREE;
11522       else
11523         doing_friend = 1;
11524     }
11525
11526   if (DECL_DECLARED_INLINE_P (decl1)
11527       && lookup_attribute ("noinline", attrs))
11528     warning (0, "inline function %q+D given attribute noinline", decl1);
11529
11530   /* Handle gnu_inline attribute.  */
11531   if (GNU_INLINE_P (decl1))
11532     {
11533       DECL_EXTERNAL (decl1) = 1;
11534       DECL_NOT_REALLY_EXTERN (decl1) = 0;
11535       DECL_INTERFACE_KNOWN (decl1) = 1;
11536       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11537     }
11538
11539   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11540     /* This is a constructor, we must ensure that any default args
11541        introduced by this definition are propagated to the clones
11542        now. The clones are used directly in overload resolution.  */
11543     adjust_clone_args (decl1);
11544
11545   /* Sometimes we don't notice that a function is a static member, and
11546      build a METHOD_TYPE for it.  Fix that up now.  */
11547   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11548       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11549     {
11550       revert_static_member_fn (decl1);
11551       ctype = NULL_TREE;
11552     }
11553
11554   /* Set up current_class_type, and enter the scope of the class, if
11555      appropriate.  */
11556   if (ctype)
11557     push_nested_class (ctype);
11558   else if (DECL_STATIC_FUNCTION_P (decl1))
11559     push_nested_class (DECL_CONTEXT (decl1));
11560
11561   /* Now that we have entered the scope of the class, we must restore
11562      the bindings for any template parameters surrounding DECL1, if it
11563      is an inline member template.  (Order is important; consider the
11564      case where a template parameter has the same name as a field of
11565      the class.)  It is not until after this point that
11566      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
11567   if (flags & SF_INCLASS_INLINE)
11568     maybe_begin_member_template_processing (decl1);
11569
11570   /* Effective C++ rule 15.  */
11571   if (warn_ecpp
11572       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11573       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11574     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11575
11576   /* Make the init_value nonzero so pushdecl knows this is not tentative.
11577      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11578   if (!DECL_INITIAL (decl1))
11579     DECL_INITIAL (decl1) = error_mark_node;
11580
11581   /* This function exists in static storage.
11582      (This does not mean `static' in the C sense!)  */
11583   TREE_STATIC (decl1) = 1;
11584
11585   /* We must call push_template_decl after current_class_type is set
11586      up.  (If we are processing inline definitions after exiting a
11587      class scope, current_class_type will be NULL_TREE until set above
11588      by push_nested_class.)  */
11589   if (processing_template_decl)
11590     {
11591       /* FIXME: Handle error_mark_node more gracefully.  */
11592       tree newdecl1 = push_template_decl (decl1);
11593       if (newdecl1 != error_mark_node)
11594         decl1 = newdecl1;
11595     }
11596
11597   /* We are now in the scope of the function being defined.  */
11598   current_function_decl = decl1;
11599
11600   /* Save the parm names or decls from this function's declarator
11601      where store_parm_decls will find them.  */
11602   current_function_parms = DECL_ARGUMENTS (decl1);
11603
11604   /* Make sure the parameter and return types are reasonable.  When
11605      you declare a function, these types can be incomplete, but they
11606      must be complete when you define the function.  */
11607   check_function_type (decl1, current_function_parms);
11608
11609   /* Build the return declaration for the function.  */
11610   restype = TREE_TYPE (fntype);
11611   if (DECL_RESULT (decl1) == NULL_TREE)
11612     {
11613       tree resdecl;
11614
11615       resdecl = build_decl (RESULT_DECL, 0, restype);
11616       DECL_ARTIFICIAL (resdecl) = 1;
11617       DECL_IGNORED_P (resdecl) = 1;
11618       DECL_RESULT (decl1) = resdecl;
11619
11620       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11621     }
11622
11623   /* Let the user know we're compiling this function.  */
11624   announce_function (decl1);
11625
11626   /* Record the decl so that the function name is defined.
11627      If we already have a decl for this name, and it is a FUNCTION_DECL,
11628      use the old decl.  */
11629   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11630     {
11631       /* A specialization is not used to guide overload resolution.  */
11632       if (!DECL_FUNCTION_MEMBER_P (decl1)
11633           && !(DECL_USE_TEMPLATE (decl1) &&
11634                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11635         {
11636           tree olddecl = pushdecl (decl1);
11637
11638           if (olddecl == error_mark_node)
11639             /* If something went wrong when registering the declaration,
11640                use DECL1; we have to have a FUNCTION_DECL to use when
11641                parsing the body of the function.  */
11642             ;
11643           else
11644             {
11645               /* Otherwise, OLDDECL is either a previous declaration
11646                  of the same function or DECL1 itself.  */
11647
11648               if (warn_missing_declarations
11649                   && olddecl == decl1
11650                   && !DECL_MAIN_P (decl1)
11651                   && TREE_PUBLIC (decl1)
11652                   && !DECL_DECLARED_INLINE_P (decl1))
11653                 {
11654                   tree context;
11655
11656                   /* Check whether DECL1 is in an anonymous
11657                      namespace.  */
11658                   for (context = DECL_CONTEXT (decl1);
11659                        context;
11660                        context = DECL_CONTEXT (context))
11661                     {
11662                       if (TREE_CODE (context) == NAMESPACE_DECL
11663                           && DECL_NAME (context) == NULL_TREE)
11664                         break;
11665                     }
11666
11667                   if (context == NULL)
11668                     warning (OPT_Wmissing_declarations,
11669                              "no previous declaration for %q+D", decl1);
11670                 }
11671
11672               decl1 = olddecl;
11673             }
11674         }
11675       else
11676         {
11677           /* We need to set the DECL_CONTEXT.  */
11678           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11679             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11680         }
11681       fntype = TREE_TYPE (decl1);
11682
11683       /* If #pragma weak applies, mark the decl appropriately now.
11684          The pragma only applies to global functions.  Because
11685          determining whether or not the #pragma applies involves
11686          computing the mangled name for the declaration, we cannot
11687          apply the pragma until after we have merged this declaration
11688          with any previous declarations; if the original declaration
11689          has a linkage specification, that specification applies to
11690          the definition as well, and may affect the mangled name.  */
11691       if (!DECL_CONTEXT (decl1))
11692         maybe_apply_pragma_weak (decl1);
11693     }
11694
11695   /* Reset this in case the call to pushdecl changed it.  */
11696   current_function_decl = decl1;
11697
11698   gcc_assert (DECL_INITIAL (decl1));
11699
11700   /* This function may already have been parsed, in which case just
11701      return; our caller will skip over the body without parsing.  */
11702   if (DECL_INITIAL (decl1) != error_mark_node)
11703     return;
11704
11705   /* Initialize RTL machinery.  We cannot do this until
11706      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
11707      even when processing a template; this is how we get
11708      CFUN set up, and our per-function variables initialized.
11709      FIXME factor out the non-RTL stuff.  */
11710   bl = current_binding_level;
11711   allocate_struct_function (decl1, processing_template_decl);
11712
11713   /* Initialize the language data structures.  Whenever we start
11714      a new function, we destroy temporaries in the usual way.  */
11715   cfun->language = GGC_CNEW (struct language_function);
11716   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11717   current_binding_level = bl;
11718
11719   /* Even though we're inside a function body, we still don't want to
11720      call expand_expr to calculate the size of a variable-sized array.
11721      We haven't necessarily assigned RTL to all variables yet, so it's
11722      not safe to try to expand expressions involving them.  */
11723   cfun->dont_save_pending_sizes_p = 1;
11724
11725   /* Start the statement-tree, start the tree now.  */
11726   DECL_SAVED_TREE (decl1) = push_stmt_list ();
11727
11728   /* If we are (erroneously) defining a function that we have already
11729      defined before, wipe out what we knew before.  */
11730   if (!DECL_PENDING_INLINE_P (decl1))
11731     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11732
11733   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11734     {
11735       /* We know that this was set up by `grokclassfn'.  We do not
11736          wait until `store_parm_decls', since evil parse errors may
11737          never get us to that point.  Here we keep the consistency
11738          between `current_class_type' and `current_class_ptr'.  */
11739       tree t = DECL_ARGUMENTS (decl1);
11740
11741       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11742       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11743
11744       cp_function_chain->x_current_class_ref
11745         = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
11746       cp_function_chain->x_current_class_ptr = t;
11747
11748       /* Constructors and destructors need to know whether they're "in
11749          charge" of initializing virtual base classes.  */
11750       t = TREE_CHAIN (t);
11751       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11752         {
11753           current_in_charge_parm = t;
11754           t = TREE_CHAIN (t);
11755         }
11756       if (DECL_HAS_VTT_PARM_P (decl1))
11757         {
11758           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11759           current_vtt_parm = t;
11760         }
11761     }
11762
11763   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11764                      /* Implicitly-defined methods (like the
11765                         destructor for a class in which no destructor
11766                         is explicitly declared) must not be defined
11767                         until their definition is needed.  So, we
11768                         ignore interface specifications for
11769                         compiler-generated functions.  */
11770                      && !DECL_ARTIFICIAL (decl1));
11771
11772   if (DECL_INTERFACE_KNOWN (decl1))
11773     {
11774       tree ctx = decl_function_context (decl1);
11775
11776       if (DECL_NOT_REALLY_EXTERN (decl1))
11777         DECL_EXTERNAL (decl1) = 0;
11778
11779       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11780           && TREE_PUBLIC (ctx))
11781         /* This is a function in a local class in an extern inline
11782            function.  */
11783         comdat_linkage (decl1);
11784     }
11785   /* If this function belongs to an interface, it is public.
11786      If it belongs to someone else's interface, it is also external.
11787      This only affects inlines and template instantiations.  */
11788   else if (!finfo->interface_unknown && honor_interface)
11789     {
11790       if (DECL_DECLARED_INLINE_P (decl1)
11791           || DECL_TEMPLATE_INSTANTIATION (decl1)
11792           || processing_template_decl)
11793         {
11794           DECL_EXTERNAL (decl1)
11795             = (finfo->interface_only
11796                || (DECL_DECLARED_INLINE_P (decl1)
11797                    && ! flag_implement_inlines
11798                    && !DECL_VINDEX (decl1)));
11799
11800           /* For WIN32 we also want to put these in linkonce sections.  */
11801           maybe_make_one_only (decl1);
11802         }
11803       else
11804         DECL_EXTERNAL (decl1) = 0;
11805       DECL_INTERFACE_KNOWN (decl1) = 1;
11806       /* If this function is in an interface implemented in this file,
11807          make sure that the back end knows to emit this function
11808          here.  */
11809       if (!DECL_EXTERNAL (decl1))
11810         mark_needed (decl1);
11811     }
11812   else if (finfo->interface_unknown && finfo->interface_only
11813            && honor_interface)
11814     {
11815       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
11816          interface, we will have both finfo->interface_unknown and
11817          finfo->interface_only set.  In that case, we don't want to
11818          use the normal heuristics because someone will supply a
11819          #pragma implementation elsewhere, and deducing it here would
11820          produce a conflict.  */
11821       comdat_linkage (decl1);
11822       DECL_EXTERNAL (decl1) = 0;
11823       DECL_INTERFACE_KNOWN (decl1) = 1;
11824       DECL_DEFER_OUTPUT (decl1) = 1;
11825     }
11826   else
11827     {
11828       /* This is a definition, not a reference.
11829          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
11830       if (!GNU_INLINE_P (decl1))
11831         DECL_EXTERNAL (decl1) = 0;
11832
11833       if ((DECL_DECLARED_INLINE_P (decl1)
11834            || DECL_TEMPLATE_INSTANTIATION (decl1))
11835           && ! DECL_INTERFACE_KNOWN (decl1)
11836           /* Don't try to defer nested functions for now.  */
11837           && ! decl_function_context (decl1))
11838         DECL_DEFER_OUTPUT (decl1) = 1;
11839       else
11840         DECL_INTERFACE_KNOWN (decl1) = 1;
11841     }
11842
11843   /* Determine the ELF visibility attribute for the function.  We must not
11844      do this before calling "pushdecl", as we must allow "duplicate_decls"
11845      to merge any attributes appropriately.  We also need to wait until
11846      linkage is set.  */
11847   if (!DECL_CLONED_FUNCTION_P (decl1))
11848     determine_visibility (decl1);
11849
11850   begin_scope (sk_function_parms, decl1);
11851
11852   ++function_depth;
11853
11854   if (DECL_DESTRUCTOR_P (decl1)
11855       || (DECL_CONSTRUCTOR_P (decl1)
11856           && targetm.cxx.cdtor_returns_this ()))
11857     {
11858       cdtor_label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
11859       DECL_CONTEXT (cdtor_label) = current_function_decl;
11860     }
11861
11862   start_fname_decls ();
11863
11864   store_parm_decls (current_function_parms);
11865 }
11866
11867
11868 /* Like start_preparsed_function, except that instead of a
11869    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
11870
11871    Returns 1 on success.  If the DECLARATOR is not suitable for a function
11872    (it defines a datum instead), we return 0, which tells
11873    yyparse to report a parse error.  */
11874
11875 int
11876 start_function (cp_decl_specifier_seq *declspecs,
11877                 const cp_declarator *declarator,
11878                 tree attrs)
11879 {
11880   tree decl1;
11881
11882   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
11883   if (decl1 == error_mark_node)
11884     return 0;
11885   /* If the declarator is not suitable for a function definition,
11886      cause a syntax error.  */
11887   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
11888     {
11889       error ("invalid function declaration");
11890       return 0;
11891     }
11892
11893   if (DECL_MAIN_P (decl1))
11894     /* main must return int.  grokfndecl should have corrected it
11895        (and issued a diagnostic) if the user got it wrong.  */
11896     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
11897                              integer_type_node));
11898
11899   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
11900
11901   return 1;
11902 }
11903 \f
11904 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
11905    FN.  */
11906
11907 static bool
11908 use_eh_spec_block (tree fn)
11909 {
11910   return (flag_exceptions && flag_enforce_eh_specs
11911           && !processing_template_decl
11912           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
11913           /* We insert the EH_SPEC_BLOCK only in the original
11914              function; then, it is copied automatically to the
11915              clones.  */
11916           && !DECL_CLONED_FUNCTION_P (fn)
11917           /* Implicitly-generated constructors and destructors have
11918              exception specifications.  However, those specifications
11919              are the union of the possible exceptions specified by the
11920              constructors/destructors for bases and members, so no
11921              unallowed exception will ever reach this function.  By
11922              not creating the EH_SPEC_BLOCK we save a little memory,
11923              and we avoid spurious warnings about unreachable
11924              code.  */
11925           && !DECL_ARTIFICIAL (fn));
11926 }
11927
11928 /* Store the parameter declarations into the current function declaration.
11929    This is called after parsing the parameter declarations, before
11930    digesting the body of the function.
11931
11932    Also install to binding contour return value identifier, if any.  */
11933
11934 static void
11935 store_parm_decls (tree current_function_parms)
11936 {
11937   tree fndecl = current_function_decl;
11938   tree parm;
11939
11940   /* This is a chain of any other decls that came in among the parm
11941      declarations.  If a parm is declared with  enum {foo, bar} x;
11942      then CONST_DECLs for foo and bar are put here.  */
11943   tree nonparms = NULL_TREE;
11944
11945   if (current_function_parms)
11946     {
11947       /* This case is when the function was defined with an ANSI prototype.
11948          The parms already have decls, so we need not do anything here
11949          except record them as in effect
11950          and complain if any redundant old-style parm decls were written.  */
11951
11952       tree specparms = current_function_parms;
11953       tree next;
11954
11955       /* Must clear this because it might contain TYPE_DECLs declared
11956              at class level.  */
11957       current_binding_level->names = NULL;
11958
11959       /* If we're doing semantic analysis, then we'll call pushdecl
11960              for each of these.  We must do them in reverse order so that
11961              they end in the correct forward order.  */
11962       specparms = nreverse (specparms);
11963
11964       for (parm = specparms; parm; parm = next)
11965         {
11966           next = TREE_CHAIN (parm);
11967           if (TREE_CODE (parm) == PARM_DECL)
11968             {
11969               if (DECL_NAME (parm) == NULL_TREE
11970                   || TREE_CODE (parm) != VOID_TYPE)
11971                 pushdecl (parm);
11972               else
11973                 error ("parameter %qD declared void", parm);
11974             }
11975           else
11976             {
11977               /* If we find an enum constant or a type tag,
11978                  put it aside for the moment.  */
11979               TREE_CHAIN (parm) = NULL_TREE;
11980               nonparms = chainon (nonparms, parm);
11981             }
11982         }
11983
11984       /* Get the decls in their original chain order and record in the
11985          function.  This is all and only the PARM_DECLs that were
11986          pushed into scope by the loop above.  */
11987       DECL_ARGUMENTS (fndecl) = getdecls ();
11988     }
11989   else
11990     DECL_ARGUMENTS (fndecl) = NULL_TREE;
11991
11992   /* Now store the final chain of decls for the arguments
11993      as the decl-chain of the current lexical scope.
11994      Put the enumerators in as well, at the front so that
11995      DECL_ARGUMENTS is not modified.  */
11996   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
11997
11998   if (use_eh_spec_block (current_function_decl))
11999     current_eh_spec_block = begin_eh_spec_block ();
12000 }
12001
12002 \f
12003 /* We have finished doing semantic analysis on DECL, but have not yet
12004    generated RTL for its body.  Save away our current state, so that
12005    when we want to generate RTL later we know what to do.  */
12006
12007 static void
12008 save_function_data (tree decl)
12009 {
12010   struct language_function *f;
12011
12012   /* Save the language-specific per-function data so that we can
12013      get it back when we really expand this function.  */
12014   gcc_assert (!DECL_PENDING_INLINE_P (decl));
12015
12016   /* Make a copy.  */
12017   f = GGC_NEW (struct language_function);
12018   memcpy (f, cp_function_chain, sizeof (struct language_function));
12019   DECL_SAVED_FUNCTION_DATA (decl) = f;
12020
12021   /* Clear out the bits we don't need.  */
12022   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12023   f->bindings = NULL;
12024   f->x_local_names = NULL;
12025 }
12026
12027
12028 /* Set the return value of the constructor (if present).  */
12029
12030 static void
12031 finish_constructor_body (void)
12032 {
12033   tree val;
12034   tree exprstmt;
12035
12036   if (targetm.cxx.cdtor_returns_this ()
12037       && (! TYPE_FOR_JAVA (current_class_type)))
12038     {
12039       /* Any return from a constructor will end up here.  */
12040       add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
12041
12042       val = DECL_ARGUMENTS (current_function_decl);
12043       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12044                     DECL_RESULT (current_function_decl), val);
12045       /* Return the address of the object.  */
12046       exprstmt = build_stmt (RETURN_EXPR, val);
12047       add_stmt (exprstmt);
12048     }
12049 }
12050
12051 /* Do all the processing for the beginning of a destructor; set up the
12052    vtable pointers and cleanups for bases and members.  */
12053
12054 static void
12055 begin_destructor_body (void)
12056 {
12057   tree compound_stmt;
12058
12059   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12060      issued an error message.  We still want to try to process the
12061      body of the function, but initialize_vtbl_ptrs will crash if
12062      TYPE_BINFO is NULL.  */
12063   if (COMPLETE_TYPE_P (current_class_type))
12064     {
12065       compound_stmt = begin_compound_stmt (0);
12066       /* Make all virtual function table pointers in non-virtual base
12067          classes point to CURRENT_CLASS_TYPE's virtual function
12068          tables.  */
12069       initialize_vtbl_ptrs (current_class_ptr);
12070       finish_compound_stmt (compound_stmt);
12071
12072       /* And insert cleanups for our bases and members so that they
12073          will be properly destroyed if we throw.  */
12074       push_base_cleanups ();
12075     }
12076 }
12077
12078 /* At the end of every destructor we generate code to delete the object if
12079    necessary.  Do that now.  */
12080
12081 static void
12082 finish_destructor_body (void)
12083 {
12084   tree exprstmt;
12085
12086   /* Any return from a destructor will end up here; that way all base
12087      and member cleanups will be run when the function returns.  */
12088   add_stmt (build_stmt (LABEL_EXPR, cdtor_label));
12089
12090   /* In a virtual destructor, we must call delete.  */
12091   if (DECL_VIRTUAL_P (current_function_decl))
12092     {
12093       tree if_stmt;
12094       tree virtual_size = cxx_sizeof (current_class_type);
12095
12096       /* [class.dtor]
12097
12098       At the point of definition of a virtual destructor (including
12099       an implicit definition), non-placement operator delete shall
12100       be looked up in the scope of the destructor's class and if
12101       found shall be accessible and unambiguous.  */
12102       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12103                                       virtual_size,
12104                                       /*global_p=*/false,
12105                                       /*placement=*/NULL_TREE,
12106                                       /*alloc_fn=*/NULL_TREE);
12107
12108       if_stmt = begin_if_stmt ();
12109       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12110                                    current_in_charge_parm,
12111                                    integer_one_node),
12112                            if_stmt);
12113       finish_expr_stmt (exprstmt);
12114       finish_then_clause (if_stmt);
12115       finish_if_stmt (if_stmt);
12116     }
12117
12118   if (targetm.cxx.cdtor_returns_this ())
12119     {
12120       tree val;
12121
12122       val = DECL_ARGUMENTS (current_function_decl);
12123       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12124                     DECL_RESULT (current_function_decl), val);
12125       /* Return the address of the object.  */
12126       exprstmt = build_stmt (RETURN_EXPR, val);
12127       add_stmt (exprstmt);
12128     }
12129 }
12130
12131 /* Do the necessary processing for the beginning of a function body, which
12132    in this case includes member-initializers, but not the catch clauses of
12133    a function-try-block.  Currently, this means opening a binding level
12134    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
12135
12136 tree
12137 begin_function_body (void)
12138 {
12139   tree stmt;
12140
12141   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12142     return NULL_TREE;
12143
12144   if (processing_template_decl)
12145     /* Do nothing now.  */;
12146   else
12147     /* Always keep the BLOCK node associated with the outermost pair of
12148        curly braces of a function.  These are needed for correct
12149        operation of dwarfout.c.  */
12150     keep_next_level (true);
12151
12152   stmt = begin_compound_stmt (BCS_FN_BODY);
12153
12154   if (processing_template_decl)
12155     /* Do nothing now.  */;
12156   else if (DECL_DESTRUCTOR_P (current_function_decl))
12157     begin_destructor_body ();
12158
12159   return stmt;
12160 }
12161
12162 /* Do the processing for the end of a function body.  Currently, this means
12163    closing out the cleanups for fully-constructed bases and members, and in
12164    the case of the destructor, deleting the object if desired.  Again, this
12165    is only meaningful for [cd]tors, since they are the only functions where
12166    there is a significant distinction between the main body and any
12167    function catch clauses.  Handling, say, main() return semantics here
12168    would be wrong, as flowing off the end of a function catch clause for
12169    main() would also need to return 0.  */
12170
12171 void
12172 finish_function_body (tree compstmt)
12173 {
12174   if (compstmt == NULL_TREE)
12175     return;
12176
12177   /* Close the block.  */
12178   finish_compound_stmt (compstmt);
12179
12180   if (processing_template_decl)
12181     /* Do nothing now.  */;
12182   else if (DECL_CONSTRUCTOR_P (current_function_decl))
12183     finish_constructor_body ();
12184   else if (DECL_DESTRUCTOR_P (current_function_decl))
12185     finish_destructor_body ();
12186 }
12187
12188 /* Given a function, returns the BLOCK corresponding to the outermost level
12189    of curly braces, skipping the artificial block created for constructor
12190    initializers.  */
12191
12192 tree
12193 outer_curly_brace_block (tree fndecl)
12194 {
12195   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12196   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12197     /* Skip the artificial function body block.  */
12198     block = BLOCK_SUBBLOCKS (block);
12199   return block;
12200 }
12201
12202 /* Finish up a function declaration and compile that function
12203    all the way to assembler language output.  The free the storage
12204    for the function definition.
12205
12206    FLAGS is a bitwise or of the following values:
12207      2 - INCLASS_INLINE
12208        We just finished processing the body of an in-class inline
12209        function definition.  (This processing will have taken place
12210        after the class definition is complete.)  */
12211
12212 tree
12213 finish_function (int flags)
12214 {
12215   tree fndecl = current_function_decl;
12216   tree fntype, ctype = NULL_TREE;
12217   int inclass_inline = (flags & 2) != 0;
12218   int nested;
12219
12220   /* When we get some parse errors, we can end up without a
12221      current_function_decl, so cope.  */
12222   if (fndecl == NULL_TREE)
12223     return error_mark_node;
12224
12225   gcc_assert (!defer_mark_used_calls);
12226   defer_mark_used_calls = true;
12227
12228   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12229       && DECL_VIRTUAL_P (fndecl)
12230       && !processing_template_decl)
12231     {
12232       tree fnclass = DECL_CONTEXT (fndecl);
12233       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12234         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12235     }
12236
12237   nested = function_depth > 1;
12238   fntype = TREE_TYPE (fndecl);
12239
12240   /*  TREE_READONLY (fndecl) = 1;
12241       This caused &foo to be of type ptr-to-const-function
12242       which then got a warning when stored in a ptr-to-function variable.  */
12243
12244   gcc_assert (building_stmt_tree ());
12245   /* The current function is being defined, so its DECL_INITIAL should
12246      be set, and unless there's a multiple definition, it should be
12247      error_mark_node.  */
12248   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12249
12250   /* For a cloned function, we've already got all the code we need;
12251      there's no need to add any extra bits.  */
12252   if (!DECL_CLONED_FUNCTION_P (fndecl))
12253     {
12254       if (DECL_MAIN_P (current_function_decl))
12255         {
12256           tree stmt;
12257
12258           /* Make it so that `main' always returns 0 by default (or
12259              1 for VMS).  */
12260 #if VMS_TARGET
12261           stmt = finish_return_stmt (integer_one_node);
12262 #else
12263           stmt = finish_return_stmt (integer_zero_node);
12264 #endif
12265           /* Hack.  We don't want the middle-end to warn that this
12266              return is unreachable, so put the statement on the
12267              special line 0.  */
12268           {
12269             location_t linezero = linemap_line_start (line_table, 0, 1);
12270             SET_EXPR_LOCATION (stmt, linezero);
12271           }
12272         }
12273
12274       if (use_eh_spec_block (current_function_decl))
12275         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12276                               (TREE_TYPE (current_function_decl)),
12277                               current_eh_spec_block);
12278     }
12279
12280   /* If we're saving up tree structure, tie off the function now.  */
12281   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12282
12283   finish_fname_decls ();
12284
12285   /* If this function can't throw any exceptions, remember that.  */
12286   if (!processing_template_decl
12287       && !cp_function_chain->can_throw
12288       && !flag_non_call_exceptions
12289       && !DECL_REPLACEABLE_P (fndecl))
12290     TREE_NOTHROW (fndecl) = 1;
12291
12292   /* This must come after expand_function_end because cleanups might
12293      have declarations (from inline functions) that need to go into
12294      this function's blocks.  */
12295
12296   /* If the current binding level isn't the outermost binding level
12297      for this function, either there is a bug, or we have experienced
12298      syntax errors and the statement tree is malformed.  */
12299   if (current_binding_level->kind != sk_function_parms)
12300     {
12301       /* Make sure we have already experienced errors.  */
12302       gcc_assert (errorcount);
12303
12304       /* Throw away the broken statement tree and extra binding
12305          levels.  */
12306       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12307
12308       while (current_binding_level->kind != sk_function_parms)
12309         {
12310           if (current_binding_level->kind == sk_class)
12311             pop_nested_class ();
12312           else
12313             poplevel (0, 0, 0);
12314         }
12315     }
12316   poplevel (1, 0, 1);
12317
12318   /* Statements should always be full-expressions at the outermost set
12319      of curly braces for a function.  */
12320   gcc_assert (stmts_are_full_exprs_p ());
12321
12322   /* Set up the named return value optimization, if we can.  Candidate
12323      variables are selected in check_return_expr.  */
12324   if (current_function_return_value)
12325     {
12326       tree r = current_function_return_value;
12327       tree outer;
12328
12329       if (r != error_mark_node
12330           /* This is only worth doing for fns that return in memory--and
12331              simpler, since we don't have to worry about promoted modes.  */
12332           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12333           /* Only allow this for variables declared in the outer scope of
12334              the function so we know that their lifetime always ends with a
12335              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
12336              we were to do this optimization in tree-ssa.  */
12337           && (outer = outer_curly_brace_block (fndecl))
12338           && chain_member (r, BLOCK_VARS (outer)))
12339         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12340
12341       current_function_return_value = NULL_TREE;
12342     }
12343
12344   /* Remember that we were in class scope.  */
12345   if (current_class_name)
12346     ctype = current_class_type;
12347
12348   /* Must mark the RESULT_DECL as being in this function.  */
12349   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12350
12351   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12352      to the FUNCTION_DECL node itself.  */
12353   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12354
12355   /* Save away current state, if appropriate.  */
12356   if (!processing_template_decl)
12357     save_function_data (fndecl);
12358
12359   /* Complain if there's just no return statement.  */
12360   if (warn_return_type
12361       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12362       && !dependent_type_p (TREE_TYPE (fntype))
12363       && !current_function_returns_value && !current_function_returns_null
12364       /* Don't complain if we abort or throw.  */
12365       && !current_function_returns_abnormally
12366       && !DECL_NAME (DECL_RESULT (fndecl))
12367       && !TREE_NO_WARNING (fndecl)
12368       /* Structor return values (if any) are set by the compiler.  */
12369       && !DECL_CONSTRUCTOR_P (fndecl)
12370       && !DECL_DESTRUCTOR_P (fndecl))
12371     {
12372       warning (OPT_Wreturn_type,
12373                "no return statement in function returning non-void");
12374       TREE_NO_WARNING (fndecl) = 1;
12375     }
12376
12377   /* Store the end of the function, so that we get good line number
12378      info for the epilogue.  */
12379   cfun->function_end_locus = input_location;
12380
12381   /* Genericize before inlining.  */
12382   if (!processing_template_decl)
12383     {
12384       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12385       invoke_plugin_callbacks (PLUGIN_CXX_CP_PRE_GENERICIZE, fndecl);
12386       cp_genericize (fndecl);
12387       /* Clear out the bits we don't need.  */
12388       f->x_current_class_ptr = NULL;
12389       f->x_current_class_ref = NULL;
12390       f->x_eh_spec_block = NULL;
12391       f->x_in_charge_parm = NULL;
12392       f->x_vtt_parm = NULL;
12393       f->x_return_value = NULL;
12394       f->bindings = NULL;
12395       f->extern_decl_map = NULL;
12396
12397       /* Handle attribute((warn_unused_result)).  Relies on gimple input.  */
12398       c_warn_unused_result (gimple_body (fndecl));
12399     }
12400   /* Clear out the bits we don't need.  */
12401   local_names = NULL;
12402
12403   /* We're leaving the context of this function, so zap cfun.  It's still in
12404      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
12405   set_cfun (NULL);
12406   current_function_decl = NULL;
12407
12408   /* If this is an in-class inline definition, we may have to pop the
12409      bindings for the template parameters that we added in
12410      maybe_begin_member_template_processing when start_function was
12411      called.  */
12412   if (inclass_inline)
12413     maybe_end_member_template_processing ();
12414
12415   /* Leave the scope of the class.  */
12416   if (ctype)
12417     pop_nested_class ();
12418
12419   --function_depth;
12420
12421   /* Clean up.  */
12422   if (! nested)
12423     /* Let the error reporting routines know that we're outside a
12424        function.  For a nested function, this value is used in
12425        cxx_pop_function_context and then reset via pop_function_context.  */
12426     current_function_decl = NULL_TREE;
12427
12428   defer_mark_used_calls = false;
12429   if (deferred_mark_used_calls)
12430     {
12431       unsigned int i;
12432       tree decl;
12433
12434       for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12435         mark_used (decl);
12436       VEC_free (tree, gc, deferred_mark_used_calls);
12437     }
12438
12439   return fndecl;
12440 }
12441 \f
12442 /* Create the FUNCTION_DECL for a function definition.
12443    DECLSPECS and DECLARATOR are the parts of the declaration;
12444    they describe the return type and the name of the function,
12445    but twisted together in a fashion that parallels the syntax of C.
12446
12447    This function creates a binding context for the function body
12448    as well as setting up the FUNCTION_DECL in current_function_decl.
12449
12450    Returns a FUNCTION_DECL on success.
12451
12452    If the DECLARATOR is not suitable for a function (it defines a datum
12453    instead), we return 0, which tells yyparse to report a parse error.
12454
12455    May return void_type_node indicating that this method is actually
12456    a friend.  See grokfield for more details.
12457
12458    Came here with a `.pushlevel' .
12459
12460    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12461    CHANGES TO CODE IN `grokfield'.  */
12462
12463 tree
12464 start_method (cp_decl_specifier_seq *declspecs,
12465               const cp_declarator *declarator, tree attrlist)
12466 {
12467   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12468                                 &attrlist);
12469
12470   if (fndecl == error_mark_node)
12471     return error_mark_node;
12472
12473   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12474     {
12475       error ("invalid member function declaration");
12476       return error_mark_node;
12477     }
12478
12479   if (attrlist)
12480     cplus_decl_attributes (&fndecl, attrlist, 0);
12481
12482   /* Pass friends other than inline friend functions back.  */
12483   if (fndecl == void_type_node)
12484     return fndecl;
12485
12486   if (DECL_IN_AGGR_P (fndecl))
12487     {
12488       if (DECL_CONTEXT (fndecl)
12489           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12490         error ("%qD is already defined in class %qT", fndecl,
12491                DECL_CONTEXT (fndecl));
12492       return error_mark_node;
12493     }
12494
12495   check_template_shadow (fndecl);
12496
12497   DECL_DECLARED_INLINE_P (fndecl) = 1;
12498   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12499
12500   /* We process method specializations in finish_struct_1.  */
12501   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12502     {
12503       fndecl = push_template_decl (fndecl);
12504       if (fndecl == error_mark_node)
12505         return fndecl;
12506     }
12507
12508   if (! DECL_FRIEND_P (fndecl))
12509     {
12510       if (TREE_CHAIN (fndecl))
12511         {
12512           fndecl = copy_node (fndecl);
12513           TREE_CHAIN (fndecl) = NULL_TREE;
12514         }
12515     }
12516
12517   finish_decl (fndecl, NULL_TREE, NULL_TREE, NULL_TREE);
12518
12519   /* Make a place for the parms.  */
12520   begin_scope (sk_function_parms, fndecl);
12521
12522   DECL_IN_AGGR_P (fndecl) = 1;
12523   return fndecl;
12524 }
12525
12526 /* Go through the motions of finishing a function definition.
12527    We don't compile this method until after the whole class has
12528    been processed.
12529
12530    FINISH_METHOD must return something that looks as though it
12531    came from GROKFIELD (since we are defining a method, after all).
12532
12533    This is called after parsing the body of the function definition.
12534    STMTS is the chain of statements that makes up the function body.
12535
12536    DECL is the ..._DECL that `start_method' provided.  */
12537
12538 tree
12539 finish_method (tree decl)
12540 {
12541   tree fndecl = decl;
12542   tree old_initial;
12543
12544   tree link;
12545
12546   if (decl == void_type_node)
12547     return decl;
12548
12549   old_initial = DECL_INITIAL (fndecl);
12550
12551   /* Undo the level for the parms (from start_method).
12552      This is like poplevel, but it causes nothing to be
12553      saved.  Saving information here confuses symbol-table
12554      output routines.  Besides, this information will
12555      be correctly output when this method is actually
12556      compiled.  */
12557
12558   /* Clear out the meanings of the local variables of this level;
12559      also record in each decl which block it belongs to.  */
12560
12561   for (link = current_binding_level->names; link; link = TREE_CHAIN (link))
12562     {
12563       if (DECL_NAME (link) != NULL_TREE)
12564         pop_binding (DECL_NAME (link), link);
12565       gcc_assert (TREE_CODE (link) != FUNCTION_DECL);
12566       DECL_CONTEXT (link) = NULL_TREE;
12567     }
12568
12569   poplevel (0, 0, 0);
12570
12571   DECL_INITIAL (fndecl) = old_initial;
12572
12573   /* We used to check if the context of FNDECL was different from
12574      current_class_type as another way to get inside here.  This didn't work
12575      for String.cc in libg++.  */
12576   if (DECL_FRIEND_P (fndecl))
12577     {
12578       VEC_safe_push (tree, gc, CLASSTYPE_INLINE_FRIENDS (current_class_type),
12579                      fndecl);
12580       decl = void_type_node;
12581     }
12582
12583   return decl;
12584 }
12585 \f
12586
12587 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
12588    we can lay it out later, when and if its type becomes complete.  */
12589
12590 void
12591 maybe_register_incomplete_var (tree var)
12592 {
12593   gcc_assert (TREE_CODE (var) == VAR_DECL);
12594
12595   /* Keep track of variables with incomplete types.  */
12596   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12597       && DECL_EXTERNAL (var))
12598     {
12599       tree inner_type = TREE_TYPE (var);
12600
12601       while (TREE_CODE (inner_type) == ARRAY_TYPE)
12602         inner_type = TREE_TYPE (inner_type);
12603       inner_type = TYPE_MAIN_VARIANT (inner_type);
12604
12605       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12606           /* RTTI TD entries are created while defining the type_info.  */
12607           || (TYPE_LANG_SPECIFIC (inner_type)
12608               && TYPE_BEING_DEFINED (inner_type)))
12609         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12610     }
12611 }
12612
12613 /* Called when a class type (given by TYPE) is defined.  If there are
12614    any existing VAR_DECLs whose type has been completed by this
12615    declaration, update them now.  */
12616
12617 void
12618 complete_vars (tree type)
12619 {
12620   tree *list = &incomplete_vars;
12621
12622   gcc_assert (CLASS_TYPE_P (type));
12623   while (*list)
12624     {
12625       if (same_type_p (type, TREE_PURPOSE (*list)))
12626         {
12627           tree var = TREE_VALUE (*list);
12628           tree type = TREE_TYPE (var);
12629           /* Complete the type of the variable.  The VAR_DECL itself
12630              will be laid out in expand_expr.  */
12631           complete_type (type);
12632           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12633           /* Remove this entry from the list.  */
12634           *list = TREE_CHAIN (*list);
12635         }
12636       else
12637         list = &TREE_CHAIN (*list);
12638     }
12639
12640   /* Check for pending declarations which may have abstract type.  */
12641   complete_type_check_abstract (type);
12642 }
12643
12644 /* If DECL is of a type which needs a cleanup, build and return an
12645    expression to perform that cleanup here.  Return NULL_TREE if no
12646    cleanup need be done.  */
12647
12648 tree
12649 cxx_maybe_build_cleanup (tree decl)
12650 {
12651   tree type;
12652   tree attr;
12653   tree cleanup;
12654
12655   /* Assume no cleanup is required.  */
12656   cleanup = NULL_TREE;
12657
12658   if (error_operand_p (decl))
12659     return cleanup;
12660
12661   /* Handle "__attribute__((cleanup))".  We run the cleanup function
12662      before the destructor since the destructor is what actually
12663      terminates the lifetime of the object.  */
12664   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12665   if (attr)
12666     {
12667       tree id;
12668       tree fn;
12669       tree arg;
12670
12671       /* Get the name specified by the user for the cleanup function.  */
12672       id = TREE_VALUE (TREE_VALUE (attr));
12673       /* Look up the name to find the cleanup function to call.  It is
12674          important to use lookup_name here because that is what is
12675          used in c-common.c:handle_cleanup_attribute when performing
12676          initial checks on the attribute.  Note that those checks
12677          include ensuring that the function found is not an overloaded
12678          function, or an object with an overloaded call operator,
12679          etc.; we can rely on the fact that the function found is an
12680          ordinary FUNCTION_DECL.  */
12681       fn = lookup_name (id);
12682       arg = build_address (decl);
12683       mark_used (decl);
12684       cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12685                                                              arg),
12686                                         tf_warning_or_error);
12687     }
12688   /* Handle ordinary C++ destructors.  */
12689   type = TREE_TYPE (decl);
12690   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12691     {
12692       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12693       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12694                          && CLASSTYPE_VBASECLASSES (type));
12695       tree addr;
12696       tree call;
12697
12698       if (TREE_CODE (type) == ARRAY_TYPE)
12699         addr = decl;
12700       else
12701         addr = build_address (decl);
12702
12703       /* Optimize for space over speed here.  */
12704       if (!has_vbases || flag_expensive_optimizations)
12705         flags |= LOOKUP_NONVIRTUAL;
12706
12707       call = build_delete (TREE_TYPE (addr), addr,
12708                            sfk_complete_destructor, flags, 0);
12709       if (cleanup)
12710         cleanup = build_compound_expr (cleanup, call);
12711       else
12712         cleanup = call;
12713     }
12714
12715   return cleanup;
12716 }
12717 \f
12718 /* When a stmt has been parsed, this function is called.  */
12719
12720 void
12721 finish_stmt (void)
12722 {
12723 }
12724
12725 /* DECL was originally constructed as a non-static member function,
12726    but turned out to be static.  Update it accordingly.  */
12727
12728 void
12729 revert_static_member_fn (tree decl)
12730 {
12731   tree tmp;
12732   tree function = TREE_TYPE (decl);
12733   tree args = TYPE_ARG_TYPES (function);
12734
12735   if (cp_type_quals (TREE_TYPE (TREE_VALUE (args)))
12736       != TYPE_UNQUALIFIED)
12737     error ("static member function %q#D declared with type qualifiers", decl);
12738
12739   args = TREE_CHAIN (args);
12740   tmp = build_function_type (TREE_TYPE (function), args);
12741   tmp = build_qualified_type (tmp, cp_type_quals (function));
12742   tmp = build_exception_variant (tmp,
12743                                  TYPE_RAISES_EXCEPTIONS (function));
12744   TREE_TYPE (decl) = tmp;
12745   if (DECL_ARGUMENTS (decl))
12746     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12747   DECL_STATIC_FUNCTION_P (decl) = 1;
12748 }
12749
12750 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12751    one of the language-independent trees.  */
12752
12753 enum cp_tree_node_structure_enum
12754 cp_tree_node_structure (union lang_tree_node * t)
12755 {
12756   switch (TREE_CODE (&t->generic))
12757     {
12758     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
12759     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
12760     case OVERLOAD:              return TS_CP_OVERLOAD;
12761     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
12762     case PTRMEM_CST:            return TS_CP_PTRMEM;
12763     case BASELINK:              return TS_CP_BASELINK;
12764     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
12765     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
12766     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
12767     default:                    return TS_CP_GENERIC;
12768     }
12769 }
12770
12771 /* Build the void_list_node (void_type_node having been created).  */
12772 tree
12773 build_void_list_node (void)
12774 {
12775   tree t = build_tree_list (NULL_TREE, void_type_node);
12776   return t;
12777 }
12778
12779 bool
12780 cp_missing_noreturn_ok_p (tree decl)
12781 {
12782   /* A missing noreturn is ok for the `main' function.  */
12783   return DECL_MAIN_P (decl);
12784 }
12785
12786 /* Return the COMDAT group into which DECL should be placed.  */
12787
12788 const char *
12789 cxx_comdat_group (tree decl)
12790 {
12791   tree name;
12792
12793   /* Virtual tables, construction virtual tables, and virtual table
12794      tables all go in a single COMDAT group, named after the primary
12795      virtual table.  */
12796   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12797     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12798   /* For all other DECLs, the COMDAT group is the mangled name of the
12799      declaration itself.  */
12800   else
12801     {
12802       while (DECL_THUNK_P (decl))
12803         {
12804           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12805              into the same section as the target function.  In that case
12806              we must return target's name.  */
12807           tree target = THUNK_TARGET (decl);
12808           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12809               && DECL_SECTION_NAME (target) != NULL
12810               && DECL_ONE_ONLY (target))
12811             decl = target;
12812           else
12813             break;
12814         }
12815       name = DECL_ASSEMBLER_NAME (decl);
12816     }
12817
12818   return IDENTIFIER_POINTER (name);
12819 }
12820
12821 #include "gt-cp-decl.h"