OSDN Git Service

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