OSDN Git Service

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