OSDN Git Service

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