OSDN Git Service

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