OSDN Git Service

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