re PR c++/9335 (repeated diagnostic when maximum template depth is exceeded)
[platform/upstream/gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5    Contributed by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23
24 /* Process declarations and symbol lookup for C++ front end.
25    Also constructs types; the standard scalar types at initialization,
26    and structure, union, array and enum types when they are declared.  */
27
28 /* ??? not all decl nodes are given the most useful possible
29    line numbers.  For example, the CONST_DECLs for enum values.  */
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "rtl.h"
37 #include "expr.h"
38 #include "flags.h"
39 #include "cp-tree.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "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 = 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       && !DECL_INITIAL (decl))
4709     error ("uninitialized const %qD", decl);
4710 }
4711
4712 \f
4713 /* Structure holding the current initializer being processed by reshape_init.
4714    CUR is a pointer to the current element being processed, END is a pointer
4715    after the last element present in the initializer.  */
4716 typedef struct reshape_iterator_t
4717 {
4718   constructor_elt *cur;
4719   constructor_elt *end;
4720 } reshape_iter;
4721
4722 static tree reshape_init_r (tree, reshape_iter *, bool);
4723
4724 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4725    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4726    initialized.  If there are no more such fields, the return value
4727    will be NULL.  */
4728
4729 tree
4730 next_initializable_field (tree field)
4731 {
4732   while (field
4733          && (TREE_CODE (field) != FIELD_DECL
4734              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4735              || DECL_ARTIFICIAL (field)))
4736     field = TREE_CHAIN (field);
4737
4738   return field;
4739 }
4740
4741 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4742    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4743    INTEGER_CST representing the size of the array minus one (the maximum index),
4744    or NULL_TREE if the array was declared without specifying the size. D is
4745    the iterator within the constructor.  */
4746
4747 static tree
4748 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d)
4749 {
4750   tree new_init;
4751   bool sized_array_p = (max_index != NULL_TREE);
4752   unsigned HOST_WIDE_INT max_index_cst = 0;
4753   unsigned HOST_WIDE_INT index;
4754
4755   /* The initializer for an array is always a CONSTRUCTOR.  */
4756   new_init = build_constructor (init_list_type_node, NULL);
4757
4758   if (sized_array_p)
4759     {
4760       /* Minus 1 is used for zero sized arrays.  */
4761       if (integer_all_onesp (max_index))
4762         return new_init;
4763
4764       if (host_integerp (max_index, 1))
4765         max_index_cst = tree_low_cst (max_index, 1);
4766       /* sizetype is sign extended, not zero extended.  */
4767       else
4768         max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4769                                       1);
4770     }
4771
4772   /* Loop until there are no more initializers.  */
4773   for (index = 0;
4774        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4775        ++index)
4776     {
4777       tree elt_init;
4778
4779       check_array_designated_initializer (d->cur);
4780       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false);
4781       if (elt_init == error_mark_node)
4782         return error_mark_node;
4783       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), NULL_TREE, elt_init);
4784     }
4785
4786   return new_init;
4787 }
4788
4789 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4790    Parameters are the same of reshape_init_r.  */
4791
4792 static tree
4793 reshape_init_array (tree type, reshape_iter *d)
4794 {
4795   tree max_index = NULL_TREE;
4796
4797   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4798
4799   if (TYPE_DOMAIN (type))
4800     max_index = array_type_nelts (type);
4801
4802   return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4803 }
4804
4805 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4806    Parameters are the same of reshape_init_r.  */
4807
4808 static tree
4809 reshape_init_vector (tree type, reshape_iter *d)
4810 {
4811   tree max_index = NULL_TREE;
4812   tree rtype;
4813
4814   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
4815
4816   if (COMPOUND_LITERAL_P (d->cur->value))
4817     {
4818       tree value = d->cur->value;
4819       if (!same_type_p (TREE_TYPE (value), type))
4820         {
4821           error ("invalid type %qT as initializer for a vector of type %qT",
4822                 TREE_TYPE (d->cur->value), type);
4823           value = error_mark_node;
4824         }
4825       ++d->cur;
4826       return value;
4827     }
4828
4829   /* For a vector, the representation type is a struct
4830       containing a single member which is an array of the
4831       appropriate size.  */
4832   rtype = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4833   if (rtype && TYPE_DOMAIN (TREE_TYPE (TYPE_FIELDS (rtype))))
4834     max_index = array_type_nelts (TREE_TYPE (TYPE_FIELDS (rtype)));
4835
4836   return reshape_init_array_1 (TREE_TYPE (type), max_index, d);
4837 }
4838
4839 /* Subroutine of reshape_init_r, processes the initializers for classes
4840    or union. Parameters are the same of reshape_init_r.  */
4841
4842 static tree
4843 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p)
4844 {
4845   tree field;
4846   tree new_init;
4847
4848   gcc_assert (CLASS_TYPE_P (type));
4849
4850   /* The initializer for a class is always a CONSTRUCTOR.  */
4851   new_init = build_constructor (init_list_type_node, NULL);
4852   field = next_initializable_field (TYPE_FIELDS (type));
4853
4854   if (!field)
4855     {
4856       /* [dcl.init.aggr]
4857
4858         An initializer for an aggregate member that is an
4859         empty class shall have the form of an empty
4860         initializer-list {}.  */
4861       if (!first_initializer_p)
4862         {
4863           error ("initializer for %qT must be brace-enclosed", type);
4864           return error_mark_node;
4865         }
4866       return new_init;
4867     }
4868
4869   /* Loop through the initializable fields, gathering initializers.  */
4870   while (d->cur != d->end)
4871     {
4872       tree field_init;
4873
4874       /* Handle designated initializers, as an extension.  */
4875       if (d->cur->index)
4876         {
4877           field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
4878
4879           if (!field || TREE_CODE (field) != FIELD_DECL)
4880             {
4881               error ("%qT has no non-static data member named %qD", type,
4882                     d->cur->index);
4883               return error_mark_node;
4884             }
4885         }
4886
4887       /* If we processed all the member of the class, we are done.  */
4888       if (!field)
4889         break;
4890
4891       field_init = reshape_init_r (TREE_TYPE (field), d,
4892                                    /*first_initializer_p=*/false);
4893       if (field_init == error_mark_node)
4894         return error_mark_node;
4895
4896       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
4897
4898       /* [dcl.init.aggr]
4899
4900         When a union  is  initialized with a brace-enclosed
4901         initializer, the braces shall only contain an
4902         initializer for the first member of the union.  */
4903       if (TREE_CODE (type) == UNION_TYPE)
4904         break;
4905
4906       field = next_initializable_field (TREE_CHAIN (field));
4907     }
4908
4909   return new_init;
4910 }
4911
4912 /* Subroutine of reshape_init, which processes a single initializer (part of
4913    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
4914    iterator within the CONSTRUCTOR which points to the initializer to process.
4915    FIRST_INITIALIZER_P is true if this is the first initializer of the
4916    outermost CONSTRUCTOR node.  */
4917
4918 static tree
4919 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
4920 {
4921   tree init = d->cur->value;
4922
4923   if (error_operand_p (init))
4924     return error_mark_node;
4925
4926   /* A non-aggregate type is always initialized with a single
4927      initializer.  */
4928   if (!CP_AGGREGATE_TYPE_P (type))
4929     {
4930       /* It is invalid to initialize a non-aggregate type with a
4931          brace-enclosed initializer before C++0x.
4932          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
4933          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
4934          a CONSTRUCTOR (with a record type).  */
4935       if (TREE_CODE (init) == CONSTRUCTOR
4936           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
4937         {
4938           if (SCALAR_TYPE_P (type))
4939             {
4940               error ("braces around scalar initializer for type %qT", type);
4941               init = error_mark_node;
4942             }
4943           else
4944             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
4945         }
4946
4947       d->cur++;
4948       return init;
4949     }
4950
4951   /* [dcl.init.aggr]
4952
4953      All implicit type conversions (clause _conv_) are considered when
4954      initializing the aggregate member with an initializer from an
4955      initializer-list.  If the initializer can initialize a member,
4956      the member is initialized.  Otherwise, if the member is itself a
4957      non-empty subaggregate, brace elision is assumed and the
4958      initializer is considered for the initialization of the first
4959      member of the subaggregate.  */
4960   if (TREE_CODE (init) != CONSTRUCTOR
4961       /* But don't try this for the first initializer, since that would be
4962          looking through the outermost braces; A a2 = { a1 }; is not a
4963          valid aggregate initialization.  */
4964       && !first_initializer_p
4965       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
4966           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
4967     {
4968       d->cur++;
4969       return init;
4970     }
4971
4972   /* [dcl.init.string]
4973
4974       A char array (whether plain char, signed char, or unsigned char)
4975       can be initialized by a string-literal (optionally enclosed in
4976       braces); a wchar_t array can be initialized by a wide
4977       string-literal (optionally enclosed in braces).  */
4978   if (TREE_CODE (type) == ARRAY_TYPE
4979       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
4980     {
4981       tree str_init = init;
4982
4983       /* Strip one level of braces if and only if they enclose a single
4984          element (as allowed by [dcl.init.string]).  */
4985       if (!first_initializer_p
4986           && TREE_CODE (str_init) == CONSTRUCTOR
4987           && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
4988         {
4989           str_init = VEC_index (constructor_elt,
4990                                 CONSTRUCTOR_ELTS (str_init), 0)->value;
4991         }
4992
4993       /* If it's a string literal, then it's the initializer for the array
4994          as a whole. Otherwise, continue with normal initialization for
4995          array types (one value per array element).  */
4996       if (TREE_CODE (str_init) == STRING_CST)
4997         {
4998           d->cur++;
4999           return str_init;
5000         }
5001     }
5002
5003   /* The following cases are about aggregates. If we are not within a full
5004      initializer already, and there is not a CONSTRUCTOR, it means that there
5005      is a missing set of braces (that is, we are processing the case for
5006      which reshape_init exists).  */
5007   if (!first_initializer_p)
5008     {
5009       if (TREE_CODE (init) == CONSTRUCTOR)
5010         {
5011           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5012             /* There is no need to reshape pointer-to-member function
5013                initializers, as they are always constructed correctly
5014                by the front end.  */
5015            ;
5016           else if (COMPOUND_LITERAL_P (init))
5017           /* For a nested compound literal, there is no need to reshape since
5018              brace elision is not allowed. Even if we decided to allow it,
5019              we should add a call to reshape_init in finish_compound_literal,
5020              before calling digest_init, so changing this code would still
5021              not be necessary.  */
5022             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5023           else
5024             {
5025               ++d->cur;
5026               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5027               return reshape_init (type, init);
5028             }
5029         }
5030
5031       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5032                type);
5033     }
5034
5035   /* Dispatch to specialized routines.  */
5036   if (CLASS_TYPE_P (type))
5037     return reshape_init_class (type, d, first_initializer_p);
5038   else if (TREE_CODE (type) == ARRAY_TYPE)
5039     return reshape_init_array (type, d);
5040   else if (TREE_CODE (type) == VECTOR_TYPE)
5041     return reshape_init_vector (type, d);
5042   else
5043     gcc_unreachable();
5044 }
5045
5046 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5047    brace-enclosed aggregate initializer.
5048
5049    INIT is the CONSTRUCTOR containing the list of initializers describing
5050    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5051    It may not presently match the shape of the TYPE; for example:
5052
5053      struct S { int a; int b; };
5054      struct S a[] = { 1, 2, 3, 4 };
5055
5056    Here INIT will hold a VEC of four elements, rather than a
5057    VEC of two elements, each itself a VEC of two elements.  This
5058    routine transforms INIT from the former form into the latter.  The
5059    revised CONSTRUCTOR node is returned.  */
5060
5061 tree
5062 reshape_init (tree type, tree init)
5063 {
5064   VEC(constructor_elt, gc) *v;
5065   reshape_iter d;
5066   tree new_init;
5067
5068   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5069
5070   v = CONSTRUCTOR_ELTS (init);
5071
5072   /* An empty constructor does not need reshaping, and it is always a valid
5073      initializer.  */
5074   if (VEC_empty (constructor_elt, v))
5075     return init;
5076
5077   /* Recurse on this CONSTRUCTOR.  */
5078   d.cur = VEC_index (constructor_elt, v, 0);
5079   d.end = d.cur + VEC_length (constructor_elt, v);
5080
5081   new_init = reshape_init_r (type, &d, true);
5082   if (new_init == error_mark_node)
5083     return error_mark_node;
5084
5085   /* Make sure all the element of the constructor were used. Otherwise,
5086      issue an error about exceeding initializers.  */
5087   if (d.cur != d.end)
5088     error ("too many initializers for %qT", type);
5089
5090   return new_init;
5091 }
5092
5093 /* Verify array initializer.  Returns true if errors have been reported.  */
5094
5095 bool
5096 check_array_initializer (tree decl, tree type, tree init)
5097 {
5098   tree element_type = TREE_TYPE (type);
5099
5100   /* The array type itself need not be complete, because the
5101      initializer may tell us how many elements are in the array.
5102      But, the elements of the array must be complete.  */
5103   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5104     {
5105       if (decl)
5106         error ("elements of array %q#D have incomplete type", decl);
5107       else
5108         error ("elements of array %q#T have incomplete type", type);
5109       return true;
5110     }
5111   /* It is not valid to initialize a VLA.  */
5112   if (init
5113       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5114           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5115     {
5116       if (decl)
5117         error ("variable-sized object %qD may not be initialized", decl);
5118       else
5119         error ("variable-sized compound literal");
5120       return true;
5121     }
5122   return false;
5123 }
5124
5125 /* Subroutine of check_initializer; args are passed down from that function.
5126    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5127
5128 static tree
5129 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5130      
5131 {
5132   int saved_stmts_are_full_exprs_p = 0;
5133   if (building_stmt_tree ())
5134     {
5135       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5136       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5137     }
5138   init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5139   if (building_stmt_tree ())
5140     current_stmt_tree ()->stmts_are_full_exprs_p =
5141       saved_stmts_are_full_exprs_p;
5142   return init;
5143 }
5144
5145 /* Verify INIT (the initializer for DECL), and record the
5146    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5147    grok_reference_init.
5148
5149    If the return value is non-NULL, it is an expression that must be
5150    evaluated dynamically to initialize DECL.  */
5151
5152 static tree
5153 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5154 {
5155   tree type = TREE_TYPE (decl);
5156   tree init_code = NULL;
5157
5158   /* Things that are going to be initialized need to have complete
5159      type.  */
5160   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5161
5162   if (type == error_mark_node)
5163     /* We will have already complained.  */
5164     return NULL_TREE;
5165
5166   if (TREE_CODE (type) == ARRAY_TYPE)
5167     {
5168       if (check_array_initializer (decl, type, init))
5169         return NULL_TREE;
5170     }
5171   else if (!COMPLETE_TYPE_P (type))
5172     {
5173       error ("%qD has incomplete type", decl);
5174       TREE_TYPE (decl) = error_mark_node;
5175       return NULL_TREE;
5176     }
5177   else
5178     /* There is no way to make a variable-sized class type in GNU C++.  */
5179     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5180
5181   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5182     {
5183       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5184       if (SCALAR_TYPE_P (type))
5185         {
5186           if (init_len == 0)
5187             {
5188               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5189               init = build_zero_init (type, NULL_TREE, false);
5190             }
5191           else if (init_len != 1)
5192             {
5193               error ("scalar object %qD requires one element in initializer",
5194                      decl);
5195               TREE_TYPE (decl) = error_mark_node;
5196               return NULL_TREE;
5197             }
5198         }
5199     }
5200
5201   if (TREE_CODE (decl) == CONST_DECL)
5202     {
5203       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5204
5205       DECL_INITIAL (decl) = init;
5206
5207       gcc_assert (init != NULL_TREE);
5208       init = NULL_TREE;
5209     }
5210   else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
5211     init = grok_reference_init (decl, type, init, cleanup);
5212   else if (init)
5213     {
5214       /* Do not reshape constructors of vectors (they don't need to be
5215          reshaped.  */
5216       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5217         {
5218           if (is_std_init_list (type))
5219             return build_init_list_var_init (decl, type, init, cleanup);
5220           else if (TYPE_NON_AGGREGATE_CLASS (type))
5221             {
5222               /* Don't reshape if the class has constructors.  */
5223               if (cxx_dialect == cxx98)
5224                 error ("in C++98 %qD must be initialized by constructor, "
5225                        "not by %<{...}%>",
5226                        decl);
5227               init = build_tree_list (NULL_TREE, init);
5228             }
5229           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5230             {
5231               error ("opaque vector types cannot be initialized");
5232               init = error_mark_node;
5233             }
5234           else
5235             init = reshape_init (type, init);       
5236         }
5237
5238       /* If DECL has an array type without a specific bound, deduce the
5239          array size from the initializer.  */
5240       maybe_deduce_size_from_array_init (decl, init);
5241       type = TREE_TYPE (decl);
5242       if (type == error_mark_node)
5243         return NULL_TREE;
5244
5245       if (TYPE_NEEDS_CONSTRUCTING (type)
5246           || (CLASS_TYPE_P (type)
5247               && !BRACE_ENCLOSED_INITIALIZER_P (init)))
5248         return build_aggr_init_full_exprs (decl, init, flags);
5249       else if (TREE_CODE (init) != TREE_VEC)
5250         {
5251           init_code = store_init_value (decl, init, flags);
5252           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5253               && DECL_INITIAL (decl)
5254               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5255               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5256             warning (0, "array %qD initialized by parenthesized string literal %qE",
5257                      decl, DECL_INITIAL (decl));
5258           init = NULL;
5259         }
5260     }
5261   else if (DECL_EXTERNAL (decl))
5262     ;
5263   else if (TYPE_P (type) && TYPE_NEEDS_CONSTRUCTING (type))
5264     return build_aggr_init_full_exprs (decl, init, flags);
5265   else if (MAYBE_CLASS_TYPE_P (type))
5266     {
5267       tree core_type = strip_array_types (type);
5268
5269       if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type))
5270         error ("structure %qD with uninitialized const members", decl);
5271       if (CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))
5272         error ("structure %qD with uninitialized reference members", decl);
5273
5274       check_for_uninitialized_const_var (decl);
5275     }
5276   else
5277     check_for_uninitialized_const_var (decl);
5278
5279   if (init && init != error_mark_node)
5280     init_code = build2 (INIT_EXPR, type, decl, init);
5281
5282   return init_code;
5283 }
5284
5285 /* If DECL is not a local variable, give it RTL.  */
5286
5287 static void
5288 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5289 {
5290   int toplev = toplevel_bindings_p ();
5291   int defer_p;
5292   const char *filename;
5293
5294   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5295   if (asmspec)
5296     {
5297       /* The `register' keyword, when used together with an
5298          asm-specification, indicates that the variable should be
5299          placed in a particular register.  */
5300       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5301         {
5302           set_user_assembler_name (decl, asmspec);
5303           DECL_HARD_REGISTER (decl) = 1;
5304         }
5305       else
5306         {
5307           if (TREE_CODE (decl) == FUNCTION_DECL
5308               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5309             set_builtin_user_assembler_name (decl, asmspec);
5310           set_user_assembler_name (decl, asmspec);
5311         }
5312     }
5313
5314   /* Handle non-variables up front.  */
5315   if (TREE_CODE (decl) != VAR_DECL)
5316     {
5317       rest_of_decl_compilation (decl, toplev, at_eof);
5318       return;
5319     }
5320
5321   /* If we see a class member here, it should be a static data
5322      member.  */
5323   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5324     {
5325       gcc_assert (TREE_STATIC (decl));
5326       /* An in-class declaration of a static data member should be
5327          external; it is only a declaration, and not a definition.  */
5328       if (init == NULL_TREE)
5329         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5330     }
5331
5332   /* We don't create any RTL for local variables.  */
5333   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5334     return;
5335
5336   /* We defer emission of local statics until the corresponding
5337      DECL_EXPR is expanded.  */
5338   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5339
5340   /* We try to defer namespace-scope static constants so that they are
5341      not emitted into the object file unnecessarily.  */
5342   filename = input_filename;
5343   if (!DECL_VIRTUAL_P (decl)
5344       && TREE_READONLY (decl)
5345       && DECL_INITIAL (decl) != NULL_TREE
5346       && DECL_INITIAL (decl) != error_mark_node
5347       && filename != NULL
5348       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5349       && toplev
5350       && !TREE_PUBLIC (decl))
5351     {
5352       /* Fool with the linkage of static consts according to #pragma
5353          interface.  */
5354       struct c_fileinfo *finfo = get_fileinfo (filename);
5355       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5356         {
5357           TREE_PUBLIC (decl) = 1;
5358           DECL_EXTERNAL (decl) = finfo->interface_only;
5359         }
5360
5361       defer_p = 1;
5362     }
5363   /* Likewise for template instantiations.  */
5364   else if (DECL_LANG_SPECIFIC (decl)
5365            && DECL_IMPLICIT_INSTANTIATION (decl))
5366     defer_p = 1;
5367
5368   /* If we're not deferring, go ahead and assemble the variable.  */
5369   if (!defer_p)
5370     rest_of_decl_compilation (decl, toplev, at_eof);
5371 }
5372
5373 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5374
5375 static tree
5376 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5377 {
5378   if (TYPE_P (*stmt_p))
5379     {
5380       *walk_subtrees = 0;
5381       return NULL_TREE;
5382     }
5383
5384   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5385     {
5386       tree guard = (tree)data;
5387       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5388
5389       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5390       /* Tell honor_protect_cleanup_actions to handle this as a separate
5391          cleanup.  */
5392       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5393  
5394       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5395     }
5396
5397   return NULL_TREE;
5398 }
5399
5400 /* We're initializing a local variable which has a cleanup GUARD.  If there
5401    are any temporaries used in the initializer INIT of this variable, we
5402    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5403    variable will be cleaned up properly if one of them throws.
5404
5405    Unfortunately, there's no way to express this properly in terms of
5406    nesting, as the regions for the temporaries overlap the region for the
5407    variable itself; if there are two temporaries, the variable needs to be
5408    the first thing destroyed if either of them throws.  However, we only
5409    want to run the variable's cleanup if it actually got constructed.  So
5410    we need to guard the temporary cleanups with the variable's cleanup if
5411    they are run on the normal path, but not if they are run on the
5412    exceptional path.  We implement this by telling
5413    honor_protect_cleanup_actions to strip the variable cleanup from the
5414    exceptional path.  */
5415
5416 static void
5417 wrap_temporary_cleanups (tree init, tree guard)
5418 {
5419   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5420 }
5421
5422 /* Generate code to initialize DECL (a local variable).  */
5423
5424 static void
5425 initialize_local_var (tree decl, tree init)
5426 {
5427   tree type = TREE_TYPE (decl);
5428   tree cleanup;
5429   int already_used;
5430
5431   gcc_assert (TREE_CODE (decl) == VAR_DECL
5432               || TREE_CODE (decl) == RESULT_DECL);
5433   gcc_assert (!TREE_STATIC (decl));
5434
5435   if (DECL_SIZE (decl) == NULL_TREE)
5436     {
5437       /* If we used it already as memory, it must stay in memory.  */
5438       DECL_INITIAL (decl) = NULL_TREE;
5439       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5440       return;
5441     }
5442
5443   if (type == error_mark_node)
5444     return;
5445
5446   /* Compute and store the initial value.  */
5447   already_used = TREE_USED (decl) || TREE_USED (type);
5448
5449   /* Generate a cleanup, if necessary.  */
5450   cleanup = cxx_maybe_build_cleanup (decl);
5451
5452   /* Perform the initialization.  */
5453   if (init)
5454     {
5455       int saved_stmts_are_full_exprs_p;
5456
5457       /* If we're only initializing a single object, guard the destructors
5458          of any temporaries used in its initializer with its destructor.
5459          This isn't right for arrays because each element initialization is
5460          a full-expression.  */
5461       if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5462         wrap_temporary_cleanups (init, cleanup);
5463
5464       gcc_assert (building_stmt_tree ());
5465       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5466       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5467       finish_expr_stmt (init);
5468       current_stmt_tree ()->stmts_are_full_exprs_p =
5469         saved_stmts_are_full_exprs_p;
5470     }
5471
5472   /* Set this to 0 so we can tell whether an aggregate which was
5473      initialized was ever used.  Don't do this if it has a
5474      destructor, so we don't complain about the 'resource
5475      allocation is initialization' idiom.  Now set
5476      attribute((unused)) on types so decls of that type will be
5477      marked used. (see TREE_USED, above.)  */
5478   if (TYPE_NEEDS_CONSTRUCTING (type)
5479       && ! already_used
5480       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5481       && DECL_NAME (decl))
5482     TREE_USED (decl) = 0;
5483   else if (already_used)
5484     TREE_USED (decl) = 1;
5485
5486   if (cleanup)
5487     finish_decl_cleanup (decl, cleanup);
5488 }
5489
5490 /* DECL is a VAR_DECL for a compiler-generated variable with static
5491    storage duration (like a virtual table) whose initializer is a
5492    compile-time constant.  INIT must be either a TREE_LIST of values,
5493    or a CONSTRUCTOR.  Initialize the variable and provide it to the
5494    back end.  */
5495
5496 void
5497 initialize_artificial_var (tree decl, tree init)
5498 {
5499   gcc_assert (DECL_ARTIFICIAL (decl));
5500   if (TREE_CODE (init) == TREE_LIST)
5501     init = build_constructor_from_list (TREE_TYPE (decl), init);
5502   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5503   DECL_INITIAL (decl) = init;
5504   DECL_INITIALIZED_P (decl) = 1;
5505   determine_visibility (decl);
5506   layout_var_decl (decl);
5507   maybe_commonize_var (decl);
5508   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5509 }
5510
5511 /* INIT is the initializer for a variable, as represented by the
5512    parser.  Returns true iff INIT is value-dependent.  */
5513
5514 static bool
5515 value_dependent_init_p (tree init)
5516 {
5517   if (TREE_CODE (init) == TREE_LIST)
5518     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5519     return any_value_dependent_elements_p (init);
5520   else if (TREE_CODE (init) == CONSTRUCTOR)
5521   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5522     {
5523       VEC(constructor_elt, gc) *elts;
5524       size_t nelts;
5525       size_t i;
5526
5527       elts = CONSTRUCTOR_ELTS (init);
5528       nelts = VEC_length (constructor_elt, elts);
5529       for (i = 0; i < nelts; ++i)
5530         if (value_dependent_init_p (VEC_index (constructor_elt,
5531                                                elts, i)->value))
5532           return true;
5533     }
5534   else
5535     /* It must be a simple expression, e.g., int i = 3;  */
5536     return value_dependent_expression_p (init);
5537   
5538   return false;
5539 }
5540
5541 /* Finish processing of a declaration;
5542    install its line number and initial value.
5543    If the length of an array type is not known before,
5544    it must be determined now, from the initial value, or it is an error.
5545
5546    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5547    true, then INIT is an integral constant expression.
5548
5549    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5550    if the (init) syntax was used.  */
5551
5552 void
5553 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5554                 tree asmspec_tree, int flags)
5555 {
5556   tree type;
5557   tree cleanup;
5558   const char *asmspec = NULL;
5559   int was_readonly = 0;
5560   bool var_definition_p = false;
5561   int saved_processing_template_decl;
5562   tree auto_node;
5563
5564   if (decl == error_mark_node)
5565     return;
5566   else if (! decl)
5567     {
5568       if (init)
5569         error ("assignment (not initialization) in declaration");
5570       return;
5571     }
5572
5573   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5574   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5575   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5576
5577   type = TREE_TYPE (decl);
5578   if (type == error_mark_node)
5579     return;
5580
5581   /* Assume no cleanup is required.  */
5582   cleanup = NULL_TREE;
5583   saved_processing_template_decl = processing_template_decl;
5584
5585   /* If a name was specified, get the string.  */
5586   if (global_scope_p (current_binding_level))
5587     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5588   if (asmspec_tree && asmspec_tree != error_mark_node)
5589     asmspec = TREE_STRING_POINTER (asmspec_tree);
5590
5591   if (current_class_type
5592       && CP_DECL_CONTEXT (decl) == current_class_type
5593       && TYPE_BEING_DEFINED (current_class_type)
5594       && (DECL_INITIAL (decl) || init))
5595     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5596
5597   auto_node = type_uses_auto (type);
5598   if (auto_node)
5599     {
5600       if (init == NULL_TREE)
5601         {
5602           error ("declaration of %q#D has no initializer", decl);
5603           TREE_TYPE (decl) = error_mark_node;
5604           return;
5605         }
5606       if (TREE_CODE (init) == TREE_LIST)
5607         init = build_x_compound_expr_from_list (init, "initializer");
5608       if (describable_type (init))
5609         {
5610           type = TREE_TYPE (decl) = do_auto_deduction (type, init, auto_node);
5611           if (type == error_mark_node)
5612             return;
5613         }
5614     }
5615
5616   if (init && TREE_CODE (decl) == FUNCTION_DECL)
5617     {
5618       tree clone;
5619       if (init == ridpointers[(int)RID_DELETE])
5620         {
5621           /* FIXME check this is 1st decl.  */
5622           DECL_DELETED_FN (decl) = 1;
5623           DECL_DECLARED_INLINE_P (decl) = 1;
5624           DECL_INITIAL (decl) = error_mark_node;
5625           FOR_EACH_CLONE (clone, decl)
5626             {
5627               DECL_DELETED_FN (clone) = 1;
5628               DECL_DECLARED_INLINE_P (clone) = 1;
5629               DECL_INITIAL (clone) = error_mark_node;
5630             }
5631           init = NULL_TREE;
5632         }
5633       else if (init == ridpointers[(int)RID_DEFAULT])
5634         {
5635           if (defaultable_fn_check (decl))
5636             DECL_DEFAULTED_FN (decl) = 1;
5637           else
5638             DECL_INITIAL (decl) = NULL_TREE;
5639         }
5640     }
5641     
5642   if (processing_template_decl)
5643     {
5644       bool type_dependent_p;
5645
5646       /* Add this declaration to the statement-tree.  */
5647       if (at_function_scope_p ())
5648         add_decl_expr (decl);
5649
5650       type_dependent_p = dependent_type_p (type);
5651
5652       if (check_for_bare_parameter_packs (init))
5653         {
5654           init = NULL_TREE;
5655           DECL_INITIAL (decl) = NULL_TREE;
5656         }
5657
5658       if (init && init_const_expr_p && TREE_CODE (decl) == VAR_DECL)
5659         {
5660           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5661           if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5662             TREE_CONSTANT (decl) = 1;
5663         }
5664
5665       /* Generally, initializers in templates are expanded when the
5666          template is instantiated.  But, if DECL is an integral
5667          constant static data member, then it can be used in future
5668          integral constant expressions, and its value must be
5669          available. */
5670       if (!(init
5671             && DECL_CLASS_SCOPE_P (decl)
5672             && DECL_INTEGRAL_CONSTANT_VAR_P (decl)
5673             && !type_dependent_p
5674             && !value_dependent_init_p (init)))
5675         {
5676           if (init)
5677             DECL_INITIAL (decl) = init;
5678           if (TREE_CODE (decl) == VAR_DECL
5679               && !DECL_PRETTY_FUNCTION_P (decl)
5680               && !type_dependent_p)
5681             maybe_deduce_size_from_array_init (decl, init);
5682           goto finish_end;
5683         }
5684
5685       if (TREE_CODE (init) == TREE_LIST)
5686         {
5687           /* If the parenthesized-initializer form was used (e.g.,
5688              "int A<N>::i(X)"), then INIT will be a TREE_LIST of initializer
5689              arguments.  (There is generally only one.)  We convert them
5690              individually.  */
5691           tree list = init;
5692           for (; list; list = TREE_CHAIN (list))
5693             {
5694               tree elt = TREE_VALUE (list);
5695               TREE_VALUE (list) = fold_non_dependent_expr (elt);
5696             }
5697         }
5698       else
5699         init = fold_non_dependent_expr (init);
5700       processing_template_decl = 0;
5701     }
5702
5703   /* Take care of TYPE_DECLs up front.  */
5704   if (TREE_CODE (decl) == TYPE_DECL)
5705     {
5706       if (type != error_mark_node
5707           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
5708         {
5709           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
5710             warning (0, "shadowing previous type declaration of %q#D", decl);
5711           set_identifier_type_value (DECL_NAME (decl), decl);
5712         }
5713
5714       /* If we have installed this as the canonical typedef for this
5715          type, and that type has not been defined yet, delay emitting
5716          the debug information for it, as we will emit it later.  */
5717       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
5718           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
5719         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
5720
5721       rest_of_decl_compilation (decl, DECL_CONTEXT (decl) == NULL_TREE,
5722                                 at_eof);
5723       goto finish_end;
5724     }
5725
5726   /* A reference will be modified here, as it is initialized.  */
5727   if (! DECL_EXTERNAL (decl)
5728       && TREE_READONLY (decl)
5729       && TREE_CODE (type) == REFERENCE_TYPE)
5730     {
5731       was_readonly = 1;
5732       TREE_READONLY (decl) = 0;
5733     }
5734
5735   if (TREE_CODE (decl) == VAR_DECL)
5736     {
5737       /* Only variables with trivial initialization and destruction can
5738          have thread-local storage.  */
5739       if (DECL_THREAD_LOCAL_P (decl)
5740           && (type_has_nontrivial_default_init (TREE_TYPE (decl))
5741               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
5742         error ("%qD cannot be thread-local because it has non-trivial "
5743                "type %qT", decl, TREE_TYPE (decl));
5744       /* If this is a local variable that will need a mangled name,
5745          register it now.  We must do this before processing the
5746          initializer for the variable, since the initialization might
5747          require a guard variable, and since the mangled name of the
5748          guard variable will depend on the mangled name of this
5749          variable.  */
5750       if (DECL_FUNCTION_SCOPE_P (decl)
5751           && TREE_STATIC (decl)
5752           && !DECL_ARTIFICIAL (decl))
5753         {
5754           push_local_name (decl);
5755           if (DECL_CONSTRUCTOR_P (current_function_decl)
5756               || DECL_DESTRUCTOR_P (current_function_decl))
5757             /* Normally local_decls is populated during GIMPLE lowering,
5758                but [cd]tors are never actually compiled directly.  We need
5759                to put statics on the list so we can deal with the label
5760                address extension.  */
5761             cfun->local_decls = tree_cons (NULL_TREE, decl,
5762                                            cfun->local_decls);
5763         }
5764
5765       /* Convert the initializer to the type of DECL, if we have not
5766          already initialized DECL.  */
5767       if (!DECL_INITIALIZED_P (decl)
5768           /* If !DECL_EXTERNAL then DECL is being defined.  In the
5769              case of a static data member initialized inside the
5770              class-specifier, there can be an initializer even if DECL
5771              is *not* defined.  */
5772           && (!DECL_EXTERNAL (decl) || init))
5773         {
5774           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5775             {
5776               tree jclass
5777                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
5778               /* Allow libjava/prims.cc define primitive classes.  */
5779               if (init != NULL_TREE
5780                   || jclass == NULL_TREE
5781                   || TREE_CODE (jclass) != TYPE_DECL
5782                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
5783                   || !same_type_ignoring_top_level_qualifiers_p
5784                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
5785                 error ("Java object %qD not allocated with %<new%>", decl);
5786               init = NULL_TREE;
5787             }
5788           if (init)
5789             {
5790               DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5791               if (init_const_expr_p)
5792                 {
5793                   DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5794                   if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
5795                     TREE_CONSTANT (decl) = 1;
5796                 }
5797             }
5798           init = check_initializer (decl, init, flags, &cleanup);
5799           /* Thread-local storage cannot be dynamically initialized.  */
5800           if (DECL_THREAD_LOCAL_P (decl) && init)
5801             {
5802               error ("%qD is thread-local and so cannot be dynamically "
5803                      "initialized", decl);
5804               init = NULL_TREE;
5805             }
5806
5807           /* Check that the initializer for a static data member was a
5808              constant.  Although we check in the parser that the
5809              initializer is an integral constant expression, we do not
5810              simplify division-by-zero at the point at which it
5811              occurs.  Therefore, in:
5812
5813                struct S { static const int i = 7 / 0; };
5814
5815              we issue an error at this point.  It would
5816              probably be better to forbid division by zero in
5817              integral constant expressions.  */
5818           if (DECL_EXTERNAL (decl) && init)
5819             {
5820               error ("%qD cannot be initialized by a non-constant expression"
5821                      " when being declared", decl);
5822               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
5823               init = NULL_TREE;
5824             }
5825
5826           /* Handle:
5827
5828              [dcl.init]
5829
5830              The memory occupied by any object of static storage
5831              duration is zero-initialized at program startup before
5832              any other initialization takes place.
5833
5834              We cannot create an appropriate initializer until after
5835              the type of DECL is finalized.  If DECL_INITIAL is set,
5836              then the DECL is statically initialized, and any
5837              necessary zero-initialization has already been performed.  */
5838           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
5839             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
5840                                                    /*nelts=*/NULL_TREE,
5841                                                    /*static_storage_p=*/true);
5842           /* Remember that the initialization for this variable has
5843              taken place.  */
5844           DECL_INITIALIZED_P (decl) = 1;
5845           /* This declaration is the definition of this variable,
5846              unless we are initializing a static data member within
5847              the class specifier.  */
5848           if (!DECL_EXTERNAL (decl))
5849             var_definition_p = true;
5850         }
5851       /* If the variable has an array type, lay out the type, even if
5852          there is no initializer.  It is valid to index through the
5853          array, and we must get TYPE_ALIGN set correctly on the array
5854          type.  */
5855       else if (TREE_CODE (type) == ARRAY_TYPE)
5856         layout_type (type);
5857
5858       if (!processing_template_decl
5859           && TREE_STATIC (decl)
5860           && !at_function_scope_p ()
5861           && current_function_decl == NULL)
5862         /* So decl is a global variable or a static member of a
5863            non local class. Record the types it uses
5864            so that we can decide later to emit debug info for them.  */
5865         record_types_used_by_current_var_decl (decl);
5866     }
5867   else if (TREE_CODE (decl) == FIELD_DECL
5868            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
5869     error ("non-static data member %qD has Java class type", decl);
5870
5871   /* Add this declaration to the statement-tree.  This needs to happen
5872      after the call to check_initializer so that the DECL_EXPR for a
5873      reference temp is added before the DECL_EXPR for the reference itself.  */
5874   if (at_function_scope_p ())
5875     add_decl_expr (decl);
5876
5877   /* Let the middle end know about variables and functions -- but not
5878      static data members in uninstantiated class templates.  */
5879   if (!saved_processing_template_decl
5880       && (TREE_CODE (decl) == VAR_DECL 
5881           || TREE_CODE (decl) == FUNCTION_DECL))
5882     {
5883       if (TREE_CODE (decl) == VAR_DECL)
5884         {
5885           layout_var_decl (decl);
5886           maybe_commonize_var (decl);
5887         }
5888
5889       /* This needs to happen after the linkage is set. */
5890       determine_visibility (decl);
5891
5892       if (var_definition_p && TREE_STATIC (decl))
5893         {
5894           /* If a TREE_READONLY variable needs initialization
5895              at runtime, it is no longer readonly and we need to
5896              avoid MEM_READONLY_P being set on RTL created for it.  */
5897           if (init)
5898             {
5899               if (TREE_READONLY (decl))
5900                 TREE_READONLY (decl) = 0;
5901               was_readonly = 0;
5902             }
5903           else if (was_readonly)
5904             TREE_READONLY (decl) = 1;
5905         }
5906
5907       make_rtl_for_nonlocal_decl (decl, init, asmspec);
5908
5909       /* Check for abstractness of the type. Notice that there is no
5910          need to strip array types here since the check for those types
5911          is already done within create_array_type_for_decl.  */
5912       if (TREE_CODE (type) == FUNCTION_TYPE
5913           || TREE_CODE (type) == METHOD_TYPE)
5914         abstract_virtuals_error (decl, TREE_TYPE (type));
5915       else
5916         abstract_virtuals_error (decl, type);
5917
5918       if (TREE_TYPE (decl) == error_mark_node)
5919         /* No initialization required.  */
5920         ;
5921       else if (TREE_CODE (decl) == FUNCTION_DECL)
5922         {
5923           if (init)
5924             {
5925               if (init == ridpointers[(int)RID_DEFAULT])
5926                 {
5927                   /* An out-of-class default definition is defined at
5928                      the point where it is explicitly defaulted.  */
5929                   if (DECL_INITIAL (decl) == error_mark_node)
5930                     synthesize_method (decl);
5931                 }
5932               else
5933                 error ("function %q#D is initialized like a variable", decl);
5934             }
5935           /* else no initialization required.  */
5936         }
5937       else if (DECL_EXTERNAL (decl)
5938                && ! (DECL_LANG_SPECIFIC (decl)
5939                      && DECL_NOT_REALLY_EXTERN (decl)))
5940         {
5941           if (init)
5942             DECL_INITIAL (decl) = init;
5943         }
5944       /* A variable definition.  */
5945       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5946         /* Initialize the local variable.  */
5947         initialize_local_var (decl, init);
5948
5949       /* If a variable is defined, and then a subsequent
5950          definition with external linkage is encountered, we will
5951          get here twice for the same variable.  We want to avoid
5952          calling expand_static_init more than once.  For variables
5953          that are not static data members, we can call
5954          expand_static_init only when we actually process the
5955          initializer.  It is not legal to redeclare a static data
5956          member, so this issue does not arise in that case.  */
5957       else if (var_definition_p && TREE_STATIC (decl))
5958         expand_static_init (decl, init);
5959     }
5960
5961   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
5962      reference, insert it in the statement-tree now.  */
5963   if (cleanup)
5964     push_cleanup (decl, cleanup, false);
5965
5966  finish_end:
5967   processing_template_decl = saved_processing_template_decl;
5968
5969   if (was_readonly)
5970     TREE_READONLY (decl) = 1;
5971
5972   /* If this was marked 'used', be sure it will be output.  */
5973   if (lookup_attribute ("used", DECL_ATTRIBUTES (decl)))
5974     mark_decl_referenced (decl);
5975 }
5976
5977 /* Returns a declaration for a VAR_DECL as if:
5978
5979      extern "C" TYPE NAME;
5980
5981    had been seen.  Used to create compiler-generated global
5982    variables.  */
5983
5984 static tree
5985 declare_global_var (tree name, tree type)
5986 {
5987   tree decl;
5988
5989   push_to_top_level ();
5990   decl = build_decl (input_location, VAR_DECL, name, type);
5991   TREE_PUBLIC (decl) = 1;
5992   DECL_EXTERNAL (decl) = 1;
5993   DECL_ARTIFICIAL (decl) = 1;
5994   /* If the user has explicitly declared this variable (perhaps
5995      because the code we are compiling is part of a low-level runtime
5996      library), then it is possible that our declaration will be merged
5997      with theirs by pushdecl.  */
5998   decl = pushdecl (decl);
5999   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6000   pop_from_top_level ();
6001
6002   return decl;
6003 }
6004
6005 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6006    if "__cxa_atexit" is not being used) corresponding to the function
6007    to be called when the program exits.  */
6008
6009 static tree
6010 get_atexit_fn_ptr_type (void)
6011 {
6012   tree arg_types;
6013   tree fn_type;
6014
6015   if (!atexit_fn_ptr_type_node)
6016     {
6017       if (flag_use_cxa_atexit 
6018           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6019         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6020         arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6021       else
6022         /* The parameter to "atexit" is "void (*)(void)".  */
6023         arg_types = void_list_node;
6024       
6025       fn_type = build_function_type (void_type_node, arg_types);
6026       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6027     }
6028
6029   return atexit_fn_ptr_type_node;
6030 }
6031
6032 /* Returns a pointer to the `atexit' function.  Note that if
6033    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6034    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6035
6036 static tree
6037 get_atexit_node (void)
6038 {
6039   tree atexit_fndecl;
6040   tree arg_types;
6041   tree fn_type;
6042   tree fn_ptr_type;
6043   const char *name;
6044   bool use_aeabi_atexit;
6045
6046   if (atexit_node)
6047     return atexit_node;
6048
6049   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6050     {
6051       /* The declaration for `__cxa_atexit' is:
6052
6053            int __cxa_atexit (void (*)(void *), void *, void *)
6054
6055          We build up the argument types and then then function type
6056          itself.  */
6057
6058       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6059       /* First, build the pointer-to-function type for the first
6060          argument.  */
6061       fn_ptr_type = get_atexit_fn_ptr_type ();
6062       /* Then, build the rest of the argument types.  */
6063       arg_types = tree_cons (NULL_TREE, ptr_type_node, void_list_node);
6064       if (use_aeabi_atexit)
6065         {
6066           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6067           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6068         }
6069       else
6070         {
6071           arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types);
6072           arg_types = tree_cons (NULL_TREE, fn_ptr_type, arg_types);
6073         }
6074       /* And the final __cxa_atexit type.  */
6075       fn_type = build_function_type (integer_type_node, arg_types);
6076       fn_ptr_type = build_pointer_type (fn_type);
6077       if (use_aeabi_atexit)
6078         name = "__aeabi_atexit";
6079       else
6080         name = "__cxa_atexit";
6081     }
6082   else
6083     {
6084       /* The declaration for `atexit' is:
6085
6086            int atexit (void (*)());
6087
6088          We build up the argument types and then then function type
6089          itself.  */
6090       fn_ptr_type = get_atexit_fn_ptr_type ();
6091       arg_types = tree_cons (NULL_TREE, fn_ptr_type, void_list_node);
6092       /* Build the final atexit type.  */
6093       fn_type = build_function_type (integer_type_node, arg_types);
6094       name = "atexit";
6095     }
6096
6097   /* Now, build the function declaration.  */
6098   push_lang_context (lang_name_c);
6099   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6100   mark_used (atexit_fndecl);
6101   pop_lang_context ();
6102   atexit_node = decay_conversion (atexit_fndecl);
6103
6104   return atexit_node;
6105 }
6106
6107 /* Returns the __dso_handle VAR_DECL.  */
6108
6109 static tree
6110 get_dso_handle_node (void)
6111 {
6112   if (dso_handle_node)
6113     return dso_handle_node;
6114
6115   /* Declare the variable.  */
6116   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6117                                         ptr_type_node);
6118
6119   return dso_handle_node;
6120 }
6121
6122 /* Begin a new function with internal linkage whose job will be simply
6123    to destroy some particular variable.  */
6124
6125 static GTY(()) int start_cleanup_cnt;
6126
6127 static tree
6128 start_cleanup_fn (void)
6129 {
6130   char name[32];
6131   tree fntype;
6132   tree fndecl;
6133   bool use_cxa_atexit = flag_use_cxa_atexit
6134                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6135
6136   push_to_top_level ();
6137
6138   /* No need to mangle this.  */
6139   push_lang_context (lang_name_c);
6140
6141   /* Build the name of the function.  */
6142   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6143   /* Build the function declaration.  */
6144   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6145   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6146   /* It's a function with internal linkage, generated by the
6147      compiler.  */
6148   TREE_PUBLIC (fndecl) = 0;
6149   DECL_ARTIFICIAL (fndecl) = 1;
6150   /* Make the function `inline' so that it is only emitted if it is
6151      actually needed.  It is unlikely that it will be inlined, since
6152      it is only called via a function pointer, but we avoid unnecessary
6153      emissions this way.  */
6154   DECL_DECLARED_INLINE_P (fndecl) = 1;
6155   DECL_INTERFACE_KNOWN (fndecl) = 1;
6156   /* Build the parameter.  */
6157   if (use_cxa_atexit)
6158     {
6159       tree parmdecl;
6160
6161       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6162       DECL_CONTEXT (parmdecl) = fndecl;
6163       TREE_USED (parmdecl) = 1;
6164       DECL_ARGUMENTS (fndecl) = parmdecl;
6165     }
6166
6167   pushdecl (fndecl);
6168   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6169
6170   pop_lang_context ();
6171
6172   return current_function_decl;
6173 }
6174
6175 /* Finish the cleanup function begun by start_cleanup_fn.  */
6176
6177 static void
6178 end_cleanup_fn (void)
6179 {
6180   expand_or_defer_fn (finish_function (0));
6181
6182   pop_from_top_level ();
6183 }
6184
6185 /* Generate code to handle the destruction of DECL, an object with
6186    static storage duration.  */
6187
6188 tree
6189 register_dtor_fn (tree decl)
6190 {
6191   tree cleanup;
6192   tree compound_stmt;
6193   tree args;
6194   tree fcall;
6195   tree type;
6196   bool use_dtor;
6197
6198   type = TREE_TYPE (decl);
6199   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6200     return void_zero_node;
6201
6202   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6203      a class object, we can just pass the destructor to
6204      "__cxa_atexit"; we don't have to build a temporary function to do
6205      the cleanup.  */
6206   use_dtor = (flag_use_cxa_atexit 
6207               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6208               && CLASS_TYPE_P (type));
6209   if (use_dtor)
6210     {
6211       int idx;
6212
6213       /* Find the destructor.  */
6214       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6215       gcc_assert (idx >= 0);
6216       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6217       /* Make sure it is accessible.  */
6218       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6219     }
6220   else
6221     {
6222       /* Call build_cleanup before we enter the anonymous function so
6223          that any access checks will be done relative to the current
6224          scope, rather than the scope of the anonymous function.  */
6225       build_cleanup (decl);
6226   
6227       /* Now start the function.  */
6228       cleanup = start_cleanup_fn ();
6229       
6230       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6231          to the original function, rather than the anonymous one.  That
6232          will make the back end think that nested functions are in use,
6233          which causes confusion.  */
6234       push_deferring_access_checks (dk_no_check);
6235       fcall = build_cleanup (decl);
6236       pop_deferring_access_checks ();
6237       
6238       /* Create the body of the anonymous function.  */
6239       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6240       finish_expr_stmt (fcall);
6241       finish_compound_stmt (compound_stmt);
6242       end_cleanup_fn ();
6243     }
6244
6245   /* Call atexit with the cleanup function.  */
6246   mark_used (cleanup);
6247   cleanup = build_address (cleanup);
6248   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6249     {
6250       tree addr;
6251
6252       if (use_dtor)
6253         {
6254           /* We must convert CLEANUP to the type that "__cxa_atexit"
6255              expects.  */
6256           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6257           /* "__cxa_atexit" will pass the address of DECL to the
6258              cleanup function.  */
6259           mark_used (decl);
6260           addr = build_address (decl);
6261           /* The declared type of the parameter to "__cxa_atexit" is
6262              "void *".  For plain "T*", we could just let the
6263              machinery in cp_build_function_call convert it -- but if the
6264              type is "cv-qualified T *", then we need to convert it
6265              before passing it in, to avoid spurious errors.  */
6266           addr = build_nop (ptr_type_node, addr);
6267         }
6268       else
6269         /* Since the cleanup functions we build ignore the address
6270            they're given, there's no reason to pass the actual address
6271            in, and, in general, it's cheaper to pass NULL than any
6272            other value.  */
6273         addr = null_pointer_node;
6274       args = tree_cons (NULL_TREE,
6275                         cp_build_unary_op (ADDR_EXPR, get_dso_handle_node (), 0,
6276                                         tf_warning_or_error),
6277                         NULL_TREE);
6278       if (targetm.cxx.use_aeabi_atexit ())
6279         {
6280           args = tree_cons (NULL_TREE, cleanup, args);
6281           args = tree_cons (NULL_TREE, addr, args);
6282         }
6283       else
6284         {
6285           args = tree_cons (NULL_TREE, addr, args);
6286           args = tree_cons (NULL_TREE, cleanup, args);
6287         }
6288     }
6289   else
6290     args = tree_cons (NULL_TREE, cleanup, NULL_TREE);
6291   return cp_build_function_call (get_atexit_node (), args, 
6292                                  tf_warning_or_error);
6293 }
6294
6295 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6296    is its initializer.  Generate code to handle the construction
6297    and destruction of DECL.  */
6298
6299 static void
6300 expand_static_init (tree decl, tree init)
6301 {
6302   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6303   gcc_assert (TREE_STATIC (decl));
6304
6305   /* Some variables require no initialization.  */
6306   if (!init
6307       && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))
6308       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6309     return;
6310
6311   if (DECL_FUNCTION_SCOPE_P (decl))
6312     {
6313       /* Emit code to perform this initialization but once.  */
6314       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6315       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6316       tree guard, guard_addr;
6317       tree acquire_fn, release_fn, abort_fn;
6318       tree flag, begin;
6319
6320       /* Emit code to perform this initialization but once.  This code
6321          looks like:
6322
6323            static <type> guard;
6324            if (!guard.first_byte) {
6325              if (__cxa_guard_acquire (&guard)) {
6326                bool flag = false;
6327                try {
6328                  // Do initialization.
6329                  flag = true; __cxa_guard_release (&guard);
6330                  // Register variable for destruction at end of program.
6331                } catch {
6332                  if (!flag) __cxa_guard_abort (&guard);
6333                }
6334            }
6335
6336          Note that the `flag' variable is only set to 1 *after* the
6337          initialization is complete.  This ensures that an exception,
6338          thrown during the construction, will cause the variable to
6339          reinitialized when we pass through this code again, as per:
6340
6341            [stmt.dcl]
6342
6343            If the initialization exits by throwing an exception, the
6344            initialization is not complete, so it will be tried again
6345            the next time control enters the declaration.
6346
6347          This process should be thread-safe, too; multiple threads
6348          should not be able to initialize the variable more than
6349          once.  */
6350
6351       /* Create the guard variable.  */
6352       guard = get_guard (decl);
6353
6354       /* This optimization isn't safe on targets with relaxed memory
6355          consistency.  On such targets we force synchronization in
6356          __cxa_guard_acquire.  */
6357       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6358         {
6359           /* Begin the conditional initialization.  */
6360           if_stmt = begin_if_stmt ();
6361           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6362           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6363         }
6364
6365       if (flag_threadsafe_statics)
6366         {
6367           guard_addr = build_address (guard);
6368
6369           acquire_fn = get_identifier ("__cxa_guard_acquire");
6370           release_fn = get_identifier ("__cxa_guard_release");
6371           abort_fn = get_identifier ("__cxa_guard_abort");
6372           if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6373             {
6374               tree argtypes = tree_cons (NULL_TREE, TREE_TYPE (guard_addr),
6375                                          void_list_node);
6376               tree vfntype = build_function_type (void_type_node, argtypes);
6377               acquire_fn = push_library_fn
6378                 (acquire_fn, build_function_type (integer_type_node, argtypes),
6379                  NULL_TREE);
6380               release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6381               abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6382             }
6383           else
6384             {
6385               release_fn = identifier_global_value (release_fn);
6386               abort_fn = identifier_global_value (abort_fn);
6387             }
6388
6389           inner_if_stmt = begin_if_stmt ();
6390           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6391                                inner_if_stmt);
6392
6393           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6394           begin = get_target_expr (boolean_false_node);
6395           flag = TARGET_EXPR_SLOT (begin);
6396
6397           TARGET_EXPR_CLEANUP (begin)
6398             = build3 (COND_EXPR, void_type_node, flag,
6399                       void_zero_node,
6400                       build_call_n (abort_fn, 1, guard_addr));
6401           CLEANUP_EH_ONLY (begin) = 1;
6402
6403           /* Do the initialization itself.  */
6404           init = add_stmt_to_compound (begin, init);
6405           init = add_stmt_to_compound
6406             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6407           init = add_stmt_to_compound
6408             (init, build_call_n (release_fn, 1, guard_addr));
6409         }
6410       else
6411         init = add_stmt_to_compound (init, set_guard (guard));
6412
6413       /* Use atexit to register a function for destroying this static
6414          variable.  */
6415       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6416
6417       finish_expr_stmt (init);
6418
6419       if (flag_threadsafe_statics)
6420         {
6421           finish_compound_stmt (inner_then_clause);
6422           finish_then_clause (inner_if_stmt);
6423           finish_if_stmt (inner_if_stmt);
6424         }
6425
6426       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6427         {
6428           finish_compound_stmt (then_clause);
6429           finish_then_clause (if_stmt);
6430           finish_if_stmt (if_stmt);
6431         }
6432     }
6433   else
6434     static_aggregates = tree_cons (init, decl, static_aggregates);
6435 }
6436
6437 \f
6438 /* Make TYPE a complete type based on INITIAL_VALUE.
6439    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6440    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6441    3 if the initializer list is empty (in pedantic mode). */
6442
6443 int
6444 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6445 {
6446   int failure;
6447   tree type, elt_type;
6448
6449   if (initial_value)
6450     {
6451       unsigned HOST_WIDE_INT i;
6452       tree value;
6453
6454       /* An array of character type can be initialized from a
6455          brace-enclosed string constant.
6456
6457          FIXME: this code is duplicated from reshape_init. Probably
6458          we should just call reshape_init here?  */
6459       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6460           && TREE_CODE (initial_value) == CONSTRUCTOR
6461           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6462         {
6463           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6464           tree value = VEC_index (constructor_elt, v, 0)->value;
6465
6466           if (TREE_CODE (value) == STRING_CST
6467               && VEC_length (constructor_elt, v) == 1)
6468             initial_value = value;
6469         }
6470
6471       /* If any of the elements are parameter packs, we can't actually
6472          complete this type now because the array size is dependent.  */
6473       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6474         {
6475           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6476                                       i, value)
6477             {
6478               if (PACK_EXPANSION_P (value))
6479                 return 0;
6480             }
6481         }
6482     }
6483
6484   failure = complete_array_type (ptype, initial_value, do_default);
6485
6486   /* We can create the array before the element type is complete, which
6487      means that we didn't have these two bits set in the original type
6488      either.  In completing the type, we are expected to propagate these
6489      bits.  See also complete_type which does the same thing for arrays
6490      of fixed size.  */
6491   type = *ptype;
6492   if (TYPE_DOMAIN (type))
6493     {
6494       elt_type = TREE_TYPE (type);
6495       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6496       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6497         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6498     }
6499
6500   return failure;
6501 }
6502 \f
6503 /* Return zero if something is declared to be a member of type
6504    CTYPE when in the context of CUR_TYPE.  STRING is the error
6505    message to print in that case.  Otherwise, quietly return 1.  */
6506
6507 static int
6508 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6509 {
6510   if (ctype && ctype != cur_type)
6511     {
6512       if (flags == DTOR_FLAG)
6513         error ("destructor for alien class %qT cannot be a member", ctype);
6514       else
6515         error ("constructor for alien class %qT cannot be a member", ctype);
6516       return 0;
6517     }
6518   return 1;
6519 }
6520 \f
6521 /* Subroutine of `grokdeclarator'.  */
6522
6523 /* Generate errors possibly applicable for a given set of specifiers.
6524    This is for ARM $7.1.2.  */
6525
6526 static void
6527 bad_specifiers (tree object,
6528                 const char* type,
6529                 int virtualp,
6530                 int quals,
6531                 int inlinep,
6532                 int friendp,
6533                 int raises)
6534 {
6535   if (virtualp)
6536     error ("%qD declared as a %<virtual%> %s", object, type);
6537   if (inlinep)
6538     error ("%qD declared as an %<inline%> %s", object, type);
6539   if (quals)
6540     error ("%<const%> and %<volatile%> function specifiers on "
6541            "%qD invalid in %s declaration",
6542            object, type);
6543   if (friendp)
6544     error ("%q+D declared as a friend", object);
6545   if (raises
6546       && (TREE_CODE (object) == TYPE_DECL
6547           || (!TYPE_PTRFN_P (TREE_TYPE (object))
6548               && !TYPE_REFFN_P (TREE_TYPE (object))
6549               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6550     error ("%q+D declared with an exception specification", object);
6551 }
6552
6553 /* DECL is a member function or static data member and is presently
6554    being defined.  Check that the definition is taking place in a
6555    valid namespace.  */
6556
6557 static void
6558 check_class_member_definition_namespace (tree decl)
6559 {
6560   /* These checks only apply to member functions and static data
6561      members.  */
6562   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6563               || TREE_CODE (decl) == VAR_DECL);
6564   /* We check for problems with specializations in pt.c in
6565      check_specialization_namespace, where we can issue better
6566      diagnostics.  */
6567   if (processing_specialization)
6568     return;
6569   /* There are no restrictions on the placement of
6570      explicit instantiations.  */
6571   if (processing_explicit_instantiation)
6572     return;
6573   /* [class.mfct]
6574
6575      A member function definition that appears outside of the
6576      class definition shall appear in a namespace scope enclosing
6577      the class definition.
6578
6579      [class.static.data]
6580
6581      The definition for a static data member shall appear in a
6582      namespace scope enclosing the member's class definition.  */
6583   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6584     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6585                decl, DECL_CONTEXT (decl));
6586 }
6587
6588 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
6589    METHOD_TYPE for a non-static member function; QUALS are the
6590    cv-qualifiers that apply to the function.  */
6591
6592 tree
6593 build_this_parm (tree type, cp_cv_quals quals)
6594 {
6595   tree this_type;
6596   tree qual_type;
6597   tree parm;
6598   cp_cv_quals this_quals;
6599
6600   this_type = TREE_VALUE (TYPE_ARG_TYPES (type));
6601   /* The `this' parameter is implicitly `const'; it cannot be
6602      assigned to.  */
6603   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
6604   qual_type = cp_build_qualified_type (this_type, this_quals);
6605   parm = build_artificial_parm (this_identifier, qual_type);
6606   cp_apply_type_quals_to_decl (this_quals, parm);
6607   return parm;
6608 }
6609
6610 /* CTYPE is class type, or null if non-class.
6611    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
6612    or METHOD_TYPE.
6613    DECLARATOR is the function's name.
6614    PARMS is a chain of PARM_DECLs for the function.
6615    VIRTUALP is truthvalue of whether the function is virtual or not.
6616    FLAGS are to be passed through to `grokclassfn'.
6617    QUALS are qualifiers indicating whether the function is `const'
6618    or `volatile'.
6619    RAISES is a list of exceptions that this function can raise.
6620    CHECK is 1 if we must find this method in CTYPE, 0 if we should
6621    not look, and -1 if we should not call `grokclassfn' at all.
6622
6623    SFK is the kind of special function (if any) for the new function.
6624
6625    Returns `NULL_TREE' if something goes wrong, after issuing
6626    applicable error messages.  */
6627
6628 static tree
6629 grokfndecl (tree ctype,
6630             tree type,
6631             tree declarator,
6632             tree parms,
6633             tree orig_declarator,
6634             int virtualp,
6635             enum overload_flags flags,
6636             cp_cv_quals quals,
6637             tree raises,
6638             int check,
6639             int friendp,
6640             int publicp,
6641             int inlinep,
6642             special_function_kind sfk,
6643             bool funcdef_flag,
6644             int template_count,
6645             tree in_namespace,
6646             tree* attrlist,
6647             location_t location)
6648 {
6649   tree decl;
6650   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
6651   tree t;
6652
6653   if (raises)
6654     type = build_exception_variant (type, raises);
6655
6656   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
6657
6658   /* If we have an explicit location, use it, otherwise use whatever
6659      build_lang_decl used (probably input_location).  */
6660   if (location != UNKNOWN_LOCATION)
6661     DECL_SOURCE_LOCATION (decl) = location;
6662
6663   if (TREE_CODE (type) == METHOD_TYPE)
6664     {
6665       tree parm;
6666       parm = build_this_parm (type, quals);
6667       TREE_CHAIN (parm) = parms;
6668       parms = parm;
6669     }
6670   DECL_ARGUMENTS (decl) = parms;
6671   for (t = parms; t; t = TREE_CHAIN (t))
6672     DECL_CONTEXT (t) = decl;
6673   /* Propagate volatile out from type to decl.  */
6674   if (TYPE_VOLATILE (type))
6675     TREE_THIS_VOLATILE (decl) = 1;
6676
6677   /* Setup decl according to sfk.  */
6678   switch (sfk)
6679     {
6680     case sfk_constructor:
6681     case sfk_copy_constructor:
6682     case sfk_move_constructor:
6683       DECL_CONSTRUCTOR_P (decl) = 1;
6684       break;
6685     case sfk_destructor:
6686       DECL_DESTRUCTOR_P (decl) = 1;
6687       break;
6688     default:
6689       break;
6690     }
6691
6692   /* If pointers to member functions use the least significant bit to
6693      indicate whether a function is virtual, ensure a pointer
6694      to this function will have that bit clear.  */
6695   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
6696       && TREE_CODE (type) == METHOD_TYPE
6697       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
6698     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
6699
6700   if (friendp
6701       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
6702     {
6703       if (funcdef_flag)
6704         error
6705           ("defining explicit specialization %qD in friend declaration",
6706            orig_declarator);
6707       else
6708         {
6709           tree fns = TREE_OPERAND (orig_declarator, 0);
6710           tree args = TREE_OPERAND (orig_declarator, 1);
6711
6712           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
6713             {
6714               /* Something like `template <class T> friend void f<T>()'.  */
6715               error ("invalid use of template-id %qD in declaration "
6716                      "of primary template",
6717                      orig_declarator);
6718               return NULL_TREE;
6719             }
6720
6721
6722           /* A friend declaration of the form friend void f<>().  Record
6723              the information in the TEMPLATE_ID_EXPR.  */
6724           SET_DECL_IMPLICIT_INSTANTIATION (decl);
6725
6726           if (TREE_CODE (fns) == COMPONENT_REF)
6727             {
6728               /* Due to bison parser ickiness, we will have already looked
6729                  up an operator_name or PFUNCNAME within the current class
6730                  (see template_id in parse.y). If the current class contains
6731                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
6732
6733               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
6734                           == current_class_type);
6735               fns = TREE_OPERAND (fns, 1);
6736             }
6737           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
6738                       || TREE_CODE (fns) == OVERLOAD);
6739           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
6740
6741           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
6742             if (TREE_PURPOSE (t)
6743                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
6744             {
6745               error ("default arguments are not allowed in declaration "
6746                      "of friend template specialization %qD",
6747                      decl);
6748               return NULL_TREE;
6749             }
6750
6751           if (inlinep)
6752             {
6753               error ("%<inline%> is not allowed in declaration of friend "
6754                      "template specialization %qD",
6755                      decl);
6756               return NULL_TREE;
6757             }
6758         }
6759     }
6760
6761   /* If this decl has namespace scope, set that up.  */
6762   if (in_namespace)
6763     set_decl_namespace (decl, in_namespace, friendp);
6764   else if (!ctype)
6765     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
6766
6767   /* `main' and builtins have implicit 'C' linkage.  */
6768   if ((MAIN_NAME_P (declarator)
6769        || (IDENTIFIER_LENGTH (declarator) > 10
6770            && IDENTIFIER_POINTER (declarator)[0] == '_'
6771            && IDENTIFIER_POINTER (declarator)[1] == '_'
6772            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
6773       && current_lang_name == lang_name_cplusplus
6774       && ctype == NULL_TREE
6775       /* NULL_TREE means global namespace.  */
6776       && DECL_CONTEXT (decl) == NULL_TREE)
6777     SET_DECL_LANGUAGE (decl, lang_c);
6778
6779   /* Should probably propagate const out from type to decl I bet (mrs).  */
6780   if (staticp)
6781     {
6782       DECL_STATIC_FUNCTION_P (decl) = 1;
6783       DECL_CONTEXT (decl) = ctype;
6784     }
6785
6786   if (ctype)
6787     {
6788       DECL_CONTEXT (decl) = ctype;
6789       if (funcdef_flag)
6790         check_class_member_definition_namespace (decl);
6791     }
6792
6793   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6794     {
6795       if (processing_template_decl)
6796         error ("cannot declare %<::main%> to be a template");
6797       if (inlinep)
6798         error ("cannot declare %<::main%> to be inline");
6799       if (!publicp)
6800         error ("cannot declare %<::main%> to be static");
6801       inlinep = 0;
6802       publicp = 1;
6803     }
6804
6805   /* Members of anonymous types and local classes have no linkage; make
6806      them internal.  If a typedef is made later, this will be changed.  */
6807   if (ctype && (TYPE_ANONYMOUS_P (ctype)
6808                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
6809     publicp = 0;
6810
6811   if (publicp && cxx_dialect == cxx98)
6812     {
6813       /* [basic.link]: A name with no linkage (notably, the name of a class
6814          or enumeration declared in a local scope) shall not be used to
6815          declare an entity with linkage.
6816
6817          DR 757 relaxes this restriction for C++0x.  */
6818       t = no_linkage_check (TREE_TYPE (decl),
6819                             /*relaxed_p=*/false);
6820       if (t)
6821         {
6822           if (TYPE_ANONYMOUS_P (t))
6823             {
6824               if (DECL_EXTERN_C_P (decl))
6825                 /* Allow this; it's pretty common in C.  */;
6826               else
6827                 {
6828                   permerror (input_location, "anonymous type with no linkage "
6829                              "used to declare function %q#D with linkage",
6830                              decl);
6831                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
6832                     permerror (input_location, "%q+#D does not refer to the unqualified "
6833                                "type, so it is not used for linkage",
6834                                TYPE_NAME (t));
6835                 }
6836             }
6837           else
6838             permerror (input_location, "type %qT with no linkage used to "
6839                        "declare function %q#D with linkage", t, decl);
6840         }
6841     }
6842
6843   TREE_PUBLIC (decl) = publicp;
6844   if (! publicp)
6845     {
6846       DECL_INTERFACE_KNOWN (decl) = 1;
6847       DECL_NOT_REALLY_EXTERN (decl) = 1;
6848     }
6849
6850   /* If the declaration was declared inline, mark it as such.  */
6851   if (inlinep)
6852     DECL_DECLARED_INLINE_P (decl) = 1;
6853
6854   DECL_EXTERNAL (decl) = 1;
6855   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
6856     {
6857       error (ctype
6858              ? G_("static member function %qD cannot have cv-qualifier")
6859              : G_("non-member function %qD cannot have cv-qualifier"),
6860              decl);
6861       quals = TYPE_UNQUALIFIED;
6862     }
6863
6864   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
6865       && !grok_op_properties (decl, /*complain=*/true))
6866     return NULL_TREE;
6867
6868   if (funcdef_flag)
6869     /* Make the init_value nonzero so pushdecl knows this is not
6870        tentative.  error_mark_node is replaced later with the BLOCK.  */
6871     DECL_INITIAL (decl) = error_mark_node;
6872
6873   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
6874     TREE_NOTHROW (decl) = 1;
6875
6876   /* Caller will do the rest of this.  */
6877   if (check < 0)
6878     return decl;
6879
6880   if (ctype != NULL_TREE)
6881     grokclassfn (ctype, decl, flags);
6882
6883   decl = check_explicit_specialization (orig_declarator, decl,
6884                                         template_count,
6885                                         2 * funcdef_flag +
6886                                         4 * (friendp != 0));
6887   if (decl == error_mark_node)
6888     return NULL_TREE;
6889
6890   if (attrlist)
6891     {
6892       cplus_decl_attributes (&decl, *attrlist, 0);
6893       *attrlist = NULL_TREE;
6894     }
6895
6896   /* Check main's type after attributes have been applied.  */
6897   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
6898     {
6899       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
6900                         integer_type_node))
6901         {
6902           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
6903           tree newtype;
6904           error ("%<::main%> must return %<int%>");
6905           newtype = build_function_type (integer_type_node, oldtypeargs);
6906           TREE_TYPE (decl) = newtype;
6907         }
6908       if (warn_main)
6909         check_main_parameter_types (decl);
6910     }
6911
6912   if (ctype != NULL_TREE
6913       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
6914       && check)
6915     {
6916       tree old_decl = check_classfn (ctype, decl,
6917                                      (processing_template_decl
6918                                       > template_class_depth (ctype))
6919                                      ? current_template_parms
6920                                      : NULL_TREE);
6921
6922       if (old_decl == error_mark_node)
6923         return NULL_TREE;
6924
6925       if (old_decl)
6926         {
6927           tree ok;
6928           tree pushed_scope;
6929
6930           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
6931             /* Because grokfndecl is always supposed to return a
6932                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
6933                here.  We depend on our callers to figure out that its
6934                really a template that's being returned.  */
6935             old_decl = DECL_TEMPLATE_RESULT (old_decl);
6936
6937           if (DECL_STATIC_FUNCTION_P (old_decl)
6938               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
6939             /* Remove the `this' parm added by grokclassfn.
6940                XXX Isn't this done in start_function, too?  */
6941             revert_static_member_fn (decl);
6942           if (DECL_ARTIFICIAL (old_decl))
6943             {
6944               error ("definition of implicitly-declared %qD", old_decl);
6945               return NULL_TREE;
6946             }
6947
6948           /* Since we've smashed OLD_DECL to its
6949              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
6950           if (TREE_CODE (decl) == TEMPLATE_DECL)
6951             decl = DECL_TEMPLATE_RESULT (decl);
6952
6953           /* Attempt to merge the declarations.  This can fail, in
6954              the case of some invalid specialization declarations.  */
6955           pushed_scope = push_scope (ctype);
6956           ok = duplicate_decls (decl, old_decl, friendp);
6957           if (pushed_scope)
6958             pop_scope (pushed_scope);
6959           if (!ok)
6960             {
6961               error ("no %q#D member function declared in class %qT",
6962                      decl, ctype);
6963               return NULL_TREE;
6964             }
6965           return old_decl;
6966         }
6967     }
6968
6969   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
6970     return NULL_TREE;
6971
6972   if (ctype == NULL_TREE || check)
6973     return decl;
6974
6975   if (virtualp)
6976     DECL_VIRTUAL_P (decl) = 1;
6977
6978   return decl;
6979 }
6980
6981 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
6982    the linkage that DECL will receive in the object file.  */
6983
6984 static void
6985 set_linkage_for_static_data_member (tree decl)
6986 {
6987   /* A static data member always has static storage duration and
6988      external linkage.  Note that static data members are forbidden in
6989      local classes -- the only situation in which a class has
6990      non-external linkage.  */
6991   TREE_PUBLIC (decl) = 1;
6992   TREE_STATIC (decl) = 1;
6993   /* For non-template classes, static data members are always put
6994      out in exactly those files where they are defined, just as
6995      with ordinary namespace-scope variables.  */
6996   if (!processing_template_decl)
6997     DECL_INTERFACE_KNOWN (decl) = 1;
6998 }
6999
7000 /* Create a VAR_DECL named NAME with the indicated TYPE.
7001
7002    If SCOPE is non-NULL, it is the class type or namespace containing
7003    the variable.  If SCOPE is NULL, the variable should is created in
7004    the innermost enclosings scope.  */
7005
7006 static tree
7007 grokvardecl (tree type,
7008              tree name,
7009              const cp_decl_specifier_seq *declspecs,
7010              int initialized,
7011              int constp,
7012              tree scope)
7013 {
7014   tree decl;
7015   tree explicit_scope;
7016
7017   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7018
7019   /* Compute the scope in which to place the variable, but remember
7020      whether or not that scope was explicitly specified by the user.   */
7021   explicit_scope = scope;
7022   if (!scope)
7023     {
7024       /* An explicit "extern" specifier indicates a namespace-scope
7025          variable.  */
7026       if (declspecs->storage_class == sc_extern)
7027         scope = current_decl_namespace ();
7028       else if (!at_function_scope_p ())
7029         scope = current_scope ();
7030     }
7031
7032   if (scope
7033       && (/* If the variable is a namespace-scope variable declared in a
7034              template, we need DECL_LANG_SPECIFIC.  */
7035           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7036           /* Similarly for namespace-scope variables with language linkage
7037              other than C++.  */
7038           || (TREE_CODE (scope) == NAMESPACE_DECL
7039               && current_lang_name != lang_name_cplusplus)
7040           /* Similarly for static data members.  */
7041           || TYPE_P (scope)))
7042     decl = build_lang_decl (VAR_DECL, name, type);
7043   else
7044     decl = build_decl (input_location, VAR_DECL, name, type);
7045
7046   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7047     set_decl_namespace (decl, explicit_scope, 0);
7048   else
7049     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7050
7051   if (declspecs->storage_class == sc_extern)
7052     {
7053       DECL_THIS_EXTERN (decl) = 1;
7054       DECL_EXTERNAL (decl) = !initialized;
7055     }
7056
7057   if (DECL_CLASS_SCOPE_P (decl))
7058     {
7059       set_linkage_for_static_data_member (decl);
7060       /* This function is only called with out-of-class definitions.  */
7061       DECL_EXTERNAL (decl) = 0;
7062       check_class_member_definition_namespace (decl);
7063     }
7064   /* At top level, either `static' or no s.c. makes a definition
7065      (perhaps tentative), and absence of `static' makes it public.  */
7066   else if (toplevel_bindings_p ())
7067     {
7068       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7069                             && (DECL_THIS_EXTERN (decl) || ! constp));
7070       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7071     }
7072   /* Not at top level, only `static' makes a static definition.  */
7073   else
7074     {
7075       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7076       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7077     }
7078
7079   if (declspecs->specs[(int)ds_thread])
7080     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7081
7082   /* If the type of the decl has no linkage, make sure that we'll
7083      notice that in mark_used.  */
7084   if (cxx_dialect > cxx98
7085       && decl_linkage (decl) != lk_none
7086       && DECL_LANG_SPECIFIC (decl) == NULL
7087       && !DECL_EXTERN_C_P (decl)
7088       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7089     retrofit_lang_decl (decl);
7090
7091   if (TREE_PUBLIC (decl))
7092     {
7093       /* [basic.link]: A name with no linkage (notably, the name of a class
7094          or enumeration declared in a local scope) shall not be used to
7095          declare an entity with linkage.
7096
7097          DR 757 relaxes this restriction for C++0x.  */
7098       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7099                 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7100       if (t)
7101         {
7102           if (TYPE_ANONYMOUS_P (t))
7103             {
7104               if (DECL_EXTERN_C_P (decl))
7105                 /* Allow this; it's pretty common in C.  */
7106                 ;
7107               else
7108                 {
7109                   /* DRs 132, 319 and 389 seem to indicate types with
7110                      no linkage can only be used to declare extern "C"
7111                      entities.  Since it's not always an error in the
7112                      ISO C++ 90 Standard, we only issue a warning.  */
7113                   warning (0, "anonymous type with no linkage used to declare "
7114                            "variable %q#D with linkage", decl);
7115                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7116                     warning (0, "%q+#D does not refer to the unqualified "
7117                              "type, so it is not used for linkage",
7118                              TYPE_NAME (t));
7119                 }
7120             }
7121           else
7122             warning (0, "type %qT with no linkage used to declare variable "
7123                      "%q#D with linkage", t, decl);
7124         }
7125     }
7126   else
7127     DECL_INTERFACE_KNOWN (decl) = 1;
7128
7129   return decl;
7130 }
7131
7132 /* Create and return a canonical pointer to member function type, for
7133    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7134
7135 tree
7136 build_ptrmemfunc_type (tree type)
7137 {
7138   tree field, fields;
7139   tree t;
7140   tree unqualified_variant = NULL_TREE;
7141
7142   if (type == error_mark_node)
7143     return type;
7144
7145   /* If a canonical type already exists for this type, use it.  We use
7146      this method instead of type_hash_canon, because it only does a
7147      simple equality check on the list of field members.  */
7148
7149   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7150     return t;
7151
7152   /* Make sure that we always have the unqualified pointer-to-member
7153      type first.  */
7154   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7155     unqualified_variant
7156       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7157
7158   t = make_class_type (RECORD_TYPE);
7159   xref_basetypes (t, NULL_TREE);
7160
7161   /* Let the front end know this is a pointer to member function...  */
7162   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7163   /* ... and not really a class type.  */
7164   SET_CLASS_TYPE_P (t, 0);
7165
7166   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7167   fields = field;
7168
7169   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
7170                       delta_type_node);
7171   TREE_CHAIN (field) = fields;
7172   fields = field;
7173
7174   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7175
7176   /* Zap out the name so that the back end will give us the debugging
7177      information for this anonymous RECORD_TYPE.  */
7178   TYPE_NAME (t) = NULL_TREE;
7179
7180   /* If this is not the unqualified form of this pointer-to-member
7181      type, set the TYPE_MAIN_VARIANT for this type to be the
7182      unqualified type.  Since they are actually RECORD_TYPEs that are
7183      not variants of each other, we must do this manually.
7184      As we just built a new type there is no need to do yet another copy.  */
7185   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7186     {
7187       int type_quals = cp_type_quals (type);
7188       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7189       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7190       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7191       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7192       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7193       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7194       TREE_TYPE (TYPE_BINFO (t)) = t;
7195     }
7196
7197   /* Cache this pointer-to-member type so that we can find it again
7198      later.  */
7199   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7200
7201   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7202     SET_TYPE_STRUCTURAL_EQUALITY (t);
7203   else if (TYPE_CANONICAL (type) != type)
7204     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7205
7206   return t;
7207 }
7208
7209 /* Create and return a pointer to data member type.  */
7210
7211 tree
7212 build_ptrmem_type (tree class_type, tree member_type)
7213 {
7214   if (TREE_CODE (member_type) == METHOD_TYPE)
7215     {
7216       tree arg_types = TYPE_ARG_TYPES (member_type);
7217       cp_cv_quals quals = cp_type_quals (TREE_TYPE (TREE_VALUE (arg_types)));
7218       member_type = build_memfn_type (member_type, class_type, quals);
7219       return build_ptrmemfunc_type (build_pointer_type (member_type));
7220     }
7221   else
7222     {
7223       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7224       return build_offset_type (class_type, member_type);
7225     }
7226 }
7227
7228 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7229    Check to see that the definition is valid.  Issue appropriate error
7230    messages.  Return 1 if the definition is particularly bad, or 0
7231    otherwise.  */
7232
7233 int
7234 check_static_variable_definition (tree decl, tree type)
7235 {
7236   /* Motion 10 at San Diego: If a static const integral data member is
7237      initialized with an integral constant expression, the initializer
7238      may appear either in the declaration (within the class), or in
7239      the definition, but not both.  If it appears in the class, the
7240      member is a member constant.  The file-scope definition is always
7241      required.  */
7242   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7243     {
7244       error ("invalid in-class initialization of static data member "
7245              "of non-integral type %qT",
7246              type);
7247       /* If we just return the declaration, crashes will sometimes
7248          occur.  We therefore return void_type_node, as if this were a
7249          friend declaration, to cause callers to completely ignore
7250          this declaration.  */
7251       return 1;
7252     }
7253   else if (!CP_TYPE_CONST_P (type))
7254     error ("ISO C++ forbids in-class initialization of non-const "
7255            "static member %qD",
7256            decl);
7257   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7258     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7259              "%qD of non-integral type %qT", decl, type);
7260
7261   return 0;
7262 }
7263
7264 /* Given the SIZE (i.e., number of elements) in an array, compute an
7265    appropriate index type for the array.  If non-NULL, NAME is the
7266    name of the thing being declared.  */
7267
7268 tree
7269 compute_array_index_type (tree name, tree size)
7270 {
7271   tree type;
7272   tree itype;
7273   tree abi_1_itype = NULL_TREE;
7274
7275   if (error_operand_p (size))
7276     return error_mark_node;
7277
7278   type = TREE_TYPE (size);
7279   /* The array bound must be an integer type.  */
7280   if (!dependent_type_p (type) && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7281     {
7282       if (name)
7283         error ("size of array %qD has non-integral type %qT", name, type);
7284       else
7285         error ("size of array has non-integral type %qT", type);
7286       size = integer_one_node;
7287       type = TREE_TYPE (size);
7288     }
7289
7290   /* We can only call value_dependent_expression_p on integral constant
7291      expressions; the parser adds a dummy NOP_EXPR with TREE_SIDE_EFFECTS
7292      set if this isn't one.  */
7293   if (processing_template_decl
7294       && (TREE_SIDE_EFFECTS (size) || value_dependent_expression_p (size)))
7295     {
7296       /* We cannot do any checking for a SIZE that isn't known to be
7297          constant. Just build the index type and mark that it requires
7298          structural equality checks.  */
7299       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7300                                            size, integer_one_node));
7301       TYPE_DEPENDENT_P (itype) = 1;
7302       TYPE_DEPENDENT_P_VALID (itype) = 1;
7303       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7304       return itype;
7305     }
7306   
7307   if (!abi_version_at_least (2) && processing_template_decl)
7308     /* For abi-1, we handled all instances in templates the same way,
7309        even when they were non-dependent. This affects the manglings
7310        produced.  So, we do the normal checking for non-dependent
7311        sizes, but at the end we'll return the same type that abi-1
7312        would have, but with TYPE_CANONICAL set to the "right"
7313        value that the current ABI would provide. */
7314     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7315                                                size, integer_one_node));
7316
7317   /* The size might be the result of a cast.  */
7318   STRIP_TYPE_NOPS (size);
7319
7320   /* It might be a const variable or enumeration constant.  */
7321   size = integral_constant_value (size);
7322   if (error_operand_p (size))
7323     return error_mark_node;
7324
7325   /* Normally, the array-bound will be a constant.  */
7326   if (TREE_CODE (size) == INTEGER_CST)
7327     {
7328       /* Check to see if the array bound overflowed.  Make that an
7329          error, no matter how generous we're being.  */
7330       constant_expression_error (size);
7331
7332       /* An array must have a positive number of elements.  */
7333       if (INT_CST_LT (size, integer_zero_node))
7334         {
7335           if (name)
7336             error ("size of array %qD is negative", name);
7337           else
7338             error ("size of array is negative");
7339           size = integer_one_node;
7340         }
7341       /* As an extension we allow zero-sized arrays.  We always allow
7342          them in system headers because glibc uses them.  */
7343       else if (integer_zerop (size) && !in_system_header)
7344         {
7345           if (name)
7346             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7347           else
7348             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7349         }
7350     }
7351   else if (TREE_CONSTANT (size))
7352     {
7353       /* `(int) &fn' is not a valid array bound.  */
7354       if (name)
7355         error ("size of array %qD is not an integral constant-expression",
7356                name);
7357       else
7358         error ("size of array is not an integral constant-expression");
7359       size = integer_one_node;
7360     }
7361   else if (pedantic && warn_vla != 0)
7362     {
7363       if (name)
7364         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7365       else
7366         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7367     }
7368   else if (warn_vla > 0)
7369     {
7370       if (name)
7371         warning (OPT_Wvla, 
7372                  "variable length array %qD is used", name);
7373       else
7374         warning (OPT_Wvla, 
7375                  "variable length array is used");
7376     }
7377
7378   if (processing_template_decl && !TREE_CONSTANT (size))
7379     /* A variable sized array.  */
7380     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7381   else
7382     {
7383       HOST_WIDE_INT saved_processing_template_decl;
7384
7385       /* Compute the index of the largest element in the array.  It is
7386          one less than the number of elements in the array.  We save
7387          and restore PROCESSING_TEMPLATE_DECL so that computations in
7388          cp_build_binary_op will be appropriately folded.  */
7389       saved_processing_template_decl = processing_template_decl;
7390       processing_template_decl = 0;
7391       itype = cp_build_binary_op (input_location,
7392                                   MINUS_EXPR,
7393                                   cp_convert (ssizetype, size),
7394                                   cp_convert (ssizetype, integer_one_node),
7395                                   tf_warning_or_error);
7396       itype = fold (itype);
7397       processing_template_decl = saved_processing_template_decl;
7398
7399       if (!TREE_CONSTANT (itype))
7400         /* A variable sized array.  */
7401         itype = variable_size (itype);
7402       /* Make sure that there was no overflow when creating to a signed
7403          index type.  (For example, on a 32-bit machine, an array with
7404          size 2^32 - 1 is too big.)  */
7405       else if (TREE_CODE (itype) == INTEGER_CST
7406                && TREE_OVERFLOW (itype))
7407         {
7408           error ("overflow in array dimension");
7409           TREE_OVERFLOW (itype) = 0;
7410         }
7411     }
7412
7413   /* Create and return the appropriate index type.  */
7414   if (abi_1_itype)
7415     {
7416       tree t = build_index_type (itype);
7417       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7418       return abi_1_itype;
7419     }
7420   else
7421     return build_index_type (itype);
7422 }
7423
7424 /* Returns the scope (if any) in which the entity declared by
7425    DECLARATOR will be located.  If the entity was declared with an
7426    unqualified name, NULL_TREE is returned.  */
7427
7428 tree
7429 get_scope_of_declarator (const cp_declarator *declarator)
7430 {
7431   while (declarator && declarator->kind != cdk_id)
7432     declarator = declarator->declarator;
7433
7434   /* If the declarator-id is a SCOPE_REF, the scope in which the
7435      declaration occurs is the first operand.  */
7436   if (declarator
7437       && declarator->u.id.qualifying_scope)
7438     return declarator->u.id.qualifying_scope;
7439
7440   /* Otherwise, the declarator is not a qualified name; the entity will
7441      be declared in the current scope.  */
7442   return NULL_TREE;
7443 }
7444
7445 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7446    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
7447    with this type.  */
7448
7449 static tree
7450 create_array_type_for_decl (tree name, tree type, tree size)
7451 {
7452   tree itype = NULL_TREE;
7453
7454   /* If things have already gone awry, bail now.  */
7455   if (type == error_mark_node || size == error_mark_node)
7456     return error_mark_node;
7457
7458   /* If there are some types which cannot be array elements,
7459      issue an error-message and return.  */
7460   switch (TREE_CODE (type))
7461     {
7462     case VOID_TYPE:
7463       if (name)
7464         error ("declaration of %qD as array of void", name);
7465       else
7466         error ("creating array of void");
7467       return error_mark_node;
7468
7469     case FUNCTION_TYPE:
7470       if (name)
7471         error ("declaration of %qD as array of functions", name);
7472       else
7473         error ("creating array of functions");
7474       return error_mark_node;
7475
7476     case REFERENCE_TYPE:
7477       if (name)
7478         error ("declaration of %qD as array of references", name);
7479       else
7480         error ("creating array of references");
7481       return error_mark_node;
7482
7483     case METHOD_TYPE:
7484       if (name)
7485         error ("declaration of %qD as array of function members", name);
7486       else
7487         error ("creating array of function members");
7488       return error_mark_node;
7489
7490     default:
7491       break;
7492     }
7493
7494   /* [dcl.array]
7495
7496      The constant expressions that specify the bounds of the arrays
7497      can be omitted only for the first member of the sequence.  */
7498   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
7499     {
7500       if (name)
7501         error ("declaration of %qD as multidimensional array must "
7502                "have bounds for all dimensions except the first",
7503                name);
7504       else
7505         error ("multidimensional array must have bounds for all "
7506                "dimensions except the first");
7507
7508       return error_mark_node;
7509     }
7510
7511   /* Figure out the index type for the array.  */
7512   if (size)
7513     itype = compute_array_index_type (name, size);
7514
7515   /* [dcl.array]
7516      T is called the array element type; this type shall not be [...] an
7517      abstract class type.  */
7518   abstract_virtuals_error (name, type);
7519
7520   return build_cplus_array_type (type, itype);
7521 }
7522
7523 /* Check that it's OK to declare a function with the indicated TYPE.
7524    SFK indicates the kind of special function (if any) that this
7525    function is.  OPTYPE is the type given in a conversion operator
7526    declaration, or the class type for a constructor/destructor.
7527    Returns the actual return type of the function; that
7528    may be different than TYPE if an error occurs, or for certain
7529    special functions.  */
7530
7531 static tree
7532 check_special_function_return_type (special_function_kind sfk,
7533                                     tree type,
7534                                     tree optype)
7535 {
7536   switch (sfk)
7537     {
7538     case sfk_constructor:
7539       if (type)
7540         error ("return type specification for constructor invalid");
7541
7542       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7543         type = build_pointer_type (optype);
7544       else
7545         type = void_type_node;
7546       break;
7547
7548     case sfk_destructor:
7549       if (type)
7550         error ("return type specification for destructor invalid");
7551       /* We can't use the proper return type here because we run into
7552          problems with ambiguous bases and covariant returns.
7553          Java classes are left unchanged because (void *) isn't a valid
7554          Java type, and we don't want to change the Java ABI.  */
7555       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
7556         type = build_pointer_type (void_type_node);
7557       else
7558         type = void_type_node;
7559       break;
7560
7561     case sfk_conversion:
7562       if (type)
7563         error ("return type specified for %<operator %T%>",  optype);
7564       type = optype;
7565       break;
7566
7567     default:
7568       gcc_unreachable ();
7569     }
7570
7571   return type;
7572 }
7573
7574 /* A variable or data member (whose unqualified name is IDENTIFIER)
7575    has been declared with the indicated TYPE.  If the TYPE is not
7576    acceptable, issue an error message and return a type to use for
7577    error-recovery purposes.  */
7578
7579 tree
7580 check_var_type (tree identifier, tree type)
7581 {
7582   if (VOID_TYPE_P (type))
7583     {
7584       if (!identifier)
7585         error ("unnamed variable or field declared void");
7586       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
7587         {
7588           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
7589           error ("variable or field %qE declared void", identifier);
7590         }
7591       else
7592         error ("variable or field declared void");
7593       type = error_mark_node;
7594     }
7595
7596   return type;
7597 }
7598
7599 /* Given declspecs and a declarator (abstract or otherwise), determine
7600    the name and type of the object declared and construct a DECL node
7601    for it.
7602
7603    DECLSPECS points to the representation of declaration-specifier
7604    sequence that precedes declarator.
7605
7606    DECL_CONTEXT says which syntactic context this declaration is in:
7607      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
7608      FUNCDEF for a function definition.  Like NORMAL but a few different
7609       error messages in each case.  Return value may be zero meaning
7610       this definition is too screwy to try to parse.
7611      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
7612       handle member functions (which have FIELD context).
7613       Return value may be zero meaning this definition is too screwy to
7614       try to parse.
7615      PARM for a parameter declaration (either within a function prototype
7616       or before a function body).  Make a PARM_DECL, or return void_type_node.
7617      TPARM for a template parameter declaration.
7618      CATCHPARM for a parameter declaration before a catch clause.
7619      TYPENAME if for a typename (in a cast or sizeof).
7620       Don't make a DECL node; just return the ..._TYPE node.
7621      FIELD for a struct or union field; make a FIELD_DECL.
7622      BITFIELD for a field with specified width.
7623
7624    INITIALIZED is as for start_decl.
7625
7626    ATTRLIST is a pointer to the list of attributes, which may be NULL
7627    if there are none; *ATTRLIST may be modified if attributes from inside
7628    the declarator should be applied to the declaration.
7629
7630    When this function is called, scoping variables (such as
7631    CURRENT_CLASS_TYPE) should reflect the scope in which the
7632    declaration occurs, not the scope in which the new declaration will
7633    be placed.  For example, on:
7634
7635      void S::f() { ... }
7636
7637    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
7638    should not be `S'.
7639
7640    Returns a DECL (if a declarator is present), a TYPE (if there is no
7641    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
7642    error occurs. */
7643
7644 tree
7645 grokdeclarator (const cp_declarator *declarator,
7646                 const cp_decl_specifier_seq *declspecs,
7647                 enum decl_context decl_context,
7648                 int initialized,
7649                 tree* attrlist)
7650 {
7651   tree type = NULL_TREE;
7652   int longlong = 0;
7653   int virtualp, explicitp, friendp, inlinep, staticp;
7654   int explicit_int = 0;
7655   int explicit_char = 0;
7656   int defaulted_int = 0;
7657   tree dependent_name = NULL_TREE;
7658
7659   tree typedef_decl = NULL_TREE;
7660   const char *name = NULL;
7661   tree typedef_type = NULL_TREE;
7662   /* True if this declarator is a function definition.  */
7663   bool funcdef_flag = false;
7664   cp_declarator_kind innermost_code = cdk_error;
7665   int bitfield = 0;
7666 #if 0
7667   /* See the code below that used this.  */
7668   tree decl_attr = NULL_TREE;
7669 #endif
7670
7671   /* Keep track of what sort of function is being processed
7672      so that we can warn about default return values, or explicit
7673      return values which do not match prescribed defaults.  */
7674   special_function_kind sfk = sfk_none;
7675
7676   tree dname = NULL_TREE;
7677   tree ctor_return_type = NULL_TREE;
7678   enum overload_flags flags = NO_SPECIAL;
7679   /* cv-qualifiers that apply to the declarator, for a declaration of
7680      a member function.  */
7681   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
7682   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
7683   int type_quals;
7684   tree raises = NULL_TREE;
7685   int template_count = 0;
7686   tree returned_attrs = NULL_TREE;
7687   tree parms = NULL_TREE;
7688   const cp_declarator *id_declarator;
7689   /* The unqualified name of the declarator; either an
7690      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
7691   tree unqualified_id;
7692   /* The class type, if any, in which this entity is located,
7693      or NULL_TREE if none.  Note that this value may be different from
7694      the current class type; for example if an attempt is made to declare
7695      "A::f" inside "B", this value will be "A".  */
7696   tree ctype = current_class_type;
7697   /* The NAMESPACE_DECL for the namespace in which this entity is
7698      located.  If an unqualified name is used to declare the entity,
7699      this value will be NULL_TREE, even if the entity is located at
7700      namespace scope.  */
7701   tree in_namespace = NULL_TREE;
7702   cp_storage_class storage_class;
7703   bool unsigned_p, signed_p, short_p, long_p, thread_p;
7704   bool type_was_error_mark_node = false;
7705   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
7706   bool template_type_arg = false;
7707   bool template_parm_flag = false;
7708   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
7709   const char *errmsg;
7710
7711   signed_p = declspecs->specs[(int)ds_signed];
7712   unsigned_p = declspecs->specs[(int)ds_unsigned];
7713   short_p = declspecs->specs[(int)ds_short];
7714   long_p = declspecs->specs[(int)ds_long];
7715   longlong = declspecs->specs[(int)ds_long] >= 2;
7716   thread_p = declspecs->specs[(int)ds_thread];
7717
7718   if (decl_context == FUNCDEF)
7719     funcdef_flag = true, decl_context = NORMAL;
7720   else if (decl_context == MEMFUNCDEF)
7721     funcdef_flag = true, decl_context = FIELD;
7722   else if (decl_context == BITFIELD)
7723     bitfield = 1, decl_context = FIELD;
7724   else if (decl_context == TEMPLATE_TYPE_ARG)
7725     template_type_arg = true, decl_context = TYPENAME;
7726   else if (decl_context == TPARM)
7727     template_parm_flag = true, decl_context = PARM;
7728
7729   if (initialized > 1)
7730     funcdef_flag = true;
7731
7732   /* Look inside a declarator for the name being declared
7733      and get it as a string, for an error message.  */
7734   for (id_declarator = declarator;
7735        id_declarator;
7736        id_declarator = id_declarator->declarator)
7737     {
7738       if (id_declarator->kind != cdk_id)
7739         innermost_code = id_declarator->kind;
7740
7741       switch (id_declarator->kind)
7742         {
7743         case cdk_function:
7744           if (id_declarator->declarator
7745               && id_declarator->declarator->kind == cdk_id)
7746             {
7747               sfk = id_declarator->declarator->u.id.sfk;
7748               if (sfk == sfk_destructor)
7749                 flags = DTOR_FLAG;
7750             }
7751           break;
7752
7753         case cdk_id:
7754           {
7755             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
7756             tree decl = id_declarator->u.id.unqualified_name;
7757             if (!decl)
7758               break;
7759             if (qualifying_scope)
7760               {
7761                 if (at_function_scope_p ())
7762                   {
7763                     /* [dcl.meaning] 
7764
7765                        A declarator-id shall not be qualified except
7766                        for ... 
7767
7768                        None of the cases are permitted in block
7769                        scope.  */
7770                     if (qualifying_scope == global_namespace)
7771                       error ("invalid use of qualified-name %<::%D%>",
7772                              decl);
7773                     else if (TYPE_P (qualifying_scope))
7774                       error ("invalid use of qualified-name %<%T::%D%>",
7775                              qualifying_scope, decl);
7776                     else 
7777                       error ("invalid use of qualified-name %<%D::%D%>",
7778                              qualifying_scope, decl);
7779                     return error_mark_node;
7780                   }
7781                 else if (TYPE_P (qualifying_scope))
7782                   {
7783                     ctype = qualifying_scope;
7784                     if (innermost_code != cdk_function
7785                         && current_class_type
7786                         && !UNIQUELY_DERIVED_FROM_P (ctype,
7787                                                      current_class_type))
7788                       {
7789                         error ("type %qT is not derived from type %qT",
7790                                ctype, current_class_type);
7791                         return error_mark_node;
7792                       }
7793                   }
7794                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
7795                   in_namespace = qualifying_scope;
7796               }
7797             switch (TREE_CODE (decl))
7798               {
7799               case BIT_NOT_EXPR:
7800                 {
7801                   tree type;
7802
7803                   if (innermost_code != cdk_function)
7804                     {
7805                       error ("declaration of %qD as non-function", decl);
7806                       return error_mark_node;
7807                     }
7808                   else if (!qualifying_scope
7809                            && !(current_class_type && at_class_scope_p ()))
7810                     {
7811                       error ("declaration of %qD as non-member", decl);
7812                       return error_mark_node;
7813                     }
7814
7815                   type = TREE_OPERAND (decl, 0);
7816                   if (TYPE_P (type))
7817                     type = constructor_name (type);
7818                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
7819                   dname = decl;
7820                 }
7821                 break;
7822
7823               case TEMPLATE_ID_EXPR:
7824                 {
7825                   tree fns = TREE_OPERAND (decl, 0);
7826
7827                   dname = fns;
7828                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
7829                     {
7830                       gcc_assert (is_overloaded_fn (dname));
7831                       dname = DECL_NAME (get_first_fn (dname));
7832                     }
7833                 }
7834                 /* Fall through.  */
7835
7836               case IDENTIFIER_NODE:
7837                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
7838                   dname = decl;
7839
7840                 if (C_IS_RESERVED_WORD (dname))
7841                   {
7842                     error ("declarator-id missing; using reserved word %qD",
7843                            dname);
7844                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7845                   }
7846                 else if (!IDENTIFIER_TYPENAME_P (dname))
7847                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7848                 else
7849                   {
7850                     gcc_assert (flags == NO_SPECIAL);
7851                     flags = TYPENAME_FLAG;
7852                     ctor_return_type = TREE_TYPE (dname);
7853                     sfk = sfk_conversion;
7854                     if (is_typename_at_global_scope (dname))
7855                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
7856                     else
7857                       name = "<invalid operator>";
7858                   }
7859                 break;
7860
7861               default:
7862                 gcc_unreachable ();
7863               }
7864             break;
7865           }
7866
7867         case cdk_array:
7868         case cdk_pointer:
7869         case cdk_reference:
7870         case cdk_ptrmem:
7871           break;
7872
7873         case cdk_error:
7874           return error_mark_node;
7875
7876         default:
7877           gcc_unreachable ();
7878         }
7879       if (id_declarator->kind == cdk_id)
7880         break;
7881     }
7882
7883   /* [dcl.fct.edf]
7884
7885      The declarator in a function-definition shall have the form
7886      D1 ( parameter-declaration-clause) ...  */
7887   if (funcdef_flag && innermost_code != cdk_function)
7888     {
7889       error ("function definition does not declare parameters");
7890       return error_mark_node;
7891     }
7892
7893   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
7894       && innermost_code != cdk_function
7895       && ! (ctype && !declspecs->any_specifiers_p))
7896     {
7897       error ("declaration of %qD as non-function", dname);
7898       return error_mark_node;
7899     }
7900
7901   /* Anything declared one level down from the top level
7902      must be one of the parameters of a function
7903      (because the body is at least two levels down).  */
7904
7905   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
7906      by not allowing C++ class definitions to specify their parameters
7907      with xdecls (must be spec.d in the parmlist).
7908
7909      Since we now wait to push a class scope until we are sure that
7910      we are in a legitimate method context, we must set oldcname
7911      explicitly (since current_class_name is not yet alive).
7912
7913      We also want to avoid calling this a PARM if it is in a namespace.  */
7914
7915   if (decl_context == NORMAL && !toplevel_bindings_p ())
7916     {
7917       struct cp_binding_level *b = current_binding_level;
7918       current_binding_level = b->level_chain;
7919       if (current_binding_level != 0 && toplevel_bindings_p ())
7920         decl_context = PARM;
7921       current_binding_level = b;
7922     }
7923
7924   if (name == NULL)
7925     name = decl_context == PARM ? "parameter" : "type name";
7926
7927   /* If there were multiple types specified in the decl-specifier-seq,
7928      issue an error message.  */
7929   if (declspecs->multiple_types_p)
7930     {
7931       error ("two or more data types in declaration of %qs", name);
7932       return error_mark_node;
7933     }
7934
7935   if (declspecs->conflicting_specifiers_p)
7936     {
7937       error ("conflicting specifiers in declaration of %qs", name);
7938       return error_mark_node;
7939     }
7940
7941   /* Extract the basic type from the decl-specifier-seq.  */
7942   type = declspecs->type;
7943   if (type == error_mark_node)
7944     {
7945       type = NULL_TREE;
7946       type_was_error_mark_node = true;
7947     }
7948   /* If the entire declaration is itself tagged as deprecated then
7949      suppress reports of deprecated items.  */
7950   if (type && TREE_DEPRECATED (type)
7951       && deprecated_state != DEPRECATED_SUPPRESS)
7952     warn_deprecated_use (type, NULL_TREE);
7953   if (type && TREE_CODE (type) == TYPE_DECL)
7954     {
7955       typedef_decl = type;
7956       type = TREE_TYPE (typedef_decl);
7957       if (TREE_DEPRECATED (type)
7958           && DECL_ARTIFICIAL (typedef_decl)
7959           && deprecated_state != DEPRECATED_SUPPRESS)
7960         warn_deprecated_use (type, NULL_TREE);
7961     }
7962   /* No type at all: default to `int', and set DEFAULTED_INT
7963      because it was not a user-defined typedef.  */
7964   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
7965     {
7966       /* These imply 'int'.  */
7967       type = integer_type_node;
7968       defaulted_int = 1;
7969     }
7970   /* Gather flags.  */
7971   explicit_int = declspecs->explicit_int_p;
7972   explicit_char = declspecs->explicit_char_p;
7973
7974 #if 0
7975   /* See the code below that used this.  */
7976   if (typedef_decl)
7977     decl_attr = DECL_ATTRIBUTES (typedef_decl);
7978 #endif
7979   typedef_type = type;
7980
7981
7982   if (sfk != sfk_conversion)
7983     ctor_return_type = ctype;
7984
7985   if (sfk != sfk_none)
7986     type = check_special_function_return_type (sfk, type,
7987                                                ctor_return_type);
7988   else if (type == NULL_TREE)
7989     {
7990       int is_main;
7991
7992       explicit_int = -1;
7993
7994       /* We handle `main' specially here, because 'main () { }' is so
7995          common.  With no options, it is allowed.  With -Wreturn-type,
7996          it is a warning.  It is only an error with -pedantic-errors.  */
7997       is_main = (funcdef_flag
7998                  && dname && MAIN_NAME_P (dname)
7999                  && ctype == NULL_TREE
8000                  && in_namespace == NULL_TREE
8001                  && current_namespace == global_namespace);
8002
8003       if (type_was_error_mark_node)
8004         /* We've already issued an error, don't complain more.  */;
8005       else if (in_system_header || flag_ms_extensions)
8006         /* Allow it, sigh.  */;
8007       else if (! is_main)
8008         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8009       else if (pedantic)
8010         pedwarn (input_location, OPT_pedantic,
8011                  "ISO C++ forbids declaration of %qs with no type", name);
8012       else
8013         warning (OPT_Wreturn_type,
8014                  "ISO C++ forbids declaration of %qs with no type", name);
8015
8016       type = integer_type_node;
8017     }
8018
8019   ctype = NULL_TREE;
8020
8021   /* Now process the modifiers that were specified
8022      and check for invalid combinations.  */
8023
8024   /* Long double is a special combination.  */
8025   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8026     {
8027       long_p = false;
8028       type = build_qualified_type (long_double_type_node,
8029                                    cp_type_quals (type));
8030     }
8031
8032   /* Check all other uses of type modifiers.  */
8033
8034   if (unsigned_p || signed_p || long_p || short_p)
8035     {
8036       int ok = 0;
8037
8038       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8039         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8040       else if (signed_p && unsigned_p)
8041         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8042       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8043         error ("%<long long%> invalid for %qs", name);
8044       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8045         error ("%<long%> invalid for %qs", name);
8046       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8047         error ("%<short%> invalid for %qs", name);
8048       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8049         error ("%<long%> or %<short%> invalid for %qs", name);
8050       else if ((long_p || short_p) && explicit_char)
8051         error ("%<long%> or %<short%> specified with char for %qs", name);
8052       else if (long_p && short_p)
8053         error ("%<long%> and %<short%> specified together for %qs", name);
8054       else if (type == char16_type_node || type == char32_type_node)
8055         {
8056           if (signed_p || unsigned_p)
8057             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8058           else if (short_p || long_p)
8059             error ("%<short%> or %<long%> invalid for %qs", name);
8060         }
8061       else
8062         {
8063           ok = 1;
8064           if (!explicit_int && !defaulted_int && !explicit_char && pedantic)
8065             {
8066               pedwarn (input_location, OPT_pedantic, 
8067                        "long, short, signed or unsigned used invalidly for %qs",
8068                        name);
8069               if (flag_pedantic_errors)
8070                 ok = 0;
8071             }
8072         }
8073
8074       /* Discard the type modifiers if they are invalid.  */
8075       if (! ok)
8076         {
8077           unsigned_p = false;
8078           signed_p = false;
8079           long_p = false;
8080           short_p = false;
8081           longlong = 0;
8082         }
8083     }
8084
8085   /* Decide whether an integer type is signed or not.
8086      Optionally treat bitfields as signed by default.  */
8087   if (unsigned_p
8088       /* [class.bit]
8089
8090          It is implementation-defined whether a plain (neither
8091          explicitly signed or unsigned) char, short, int, or long
8092          bit-field is signed or unsigned.
8093
8094          Naturally, we extend this to long long as well.  Note that
8095          this does not include wchar_t.  */
8096       || (bitfield && !flag_signed_bitfields
8097           && !signed_p
8098           /* A typedef for plain `int' without `signed' can be
8099              controlled just like plain `int', but a typedef for
8100              `signed int' cannot be so controlled.  */
8101           && !(typedef_decl
8102                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8103           && TREE_CODE (type) == INTEGER_TYPE
8104           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8105     {
8106       if (longlong)
8107         type = long_long_unsigned_type_node;
8108       else if (long_p)
8109         type = long_unsigned_type_node;
8110       else if (short_p)
8111         type = short_unsigned_type_node;
8112       else if (type == char_type_node)
8113         type = unsigned_char_type_node;
8114       else if (typedef_decl)
8115         type = unsigned_type_for (type);
8116       else
8117         type = unsigned_type_node;
8118     }
8119   else if (signed_p && type == char_type_node)
8120     type = signed_char_type_node;
8121   else if (longlong)
8122     type = long_long_integer_type_node;
8123   else if (long_p)
8124     type = long_integer_type_node;
8125   else if (short_p)
8126     type = short_integer_type_node;
8127
8128   if (declspecs->specs[(int)ds_complex])
8129     {
8130       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8131         error ("complex invalid for %qs", name);
8132       /* If we just have "complex", it is equivalent to
8133          "complex double", but if any modifiers at all are specified it is
8134          the complex form of TYPE.  E.g, "complex short" is
8135          "complex short int".  */
8136
8137       else if (defaulted_int && ! longlong
8138                && ! (long_p || short_p || signed_p || unsigned_p))
8139         type = complex_double_type_node;
8140       else if (type == integer_type_node)
8141         type = complex_integer_type_node;
8142       else if (type == float_type_node)
8143         type = complex_float_type_node;
8144       else if (type == double_type_node)
8145         type = complex_double_type_node;
8146       else if (type == long_double_type_node)
8147         type = complex_long_double_type_node;
8148       else
8149         type = build_complex_type (type);
8150     }
8151
8152   type_quals = TYPE_UNQUALIFIED;
8153   if (declspecs->specs[(int)ds_const])
8154     type_quals |= TYPE_QUAL_CONST;
8155   /* A `constexpr' specifier used in an object declaration declares
8156      the object as `const'.  */
8157   if (constexpr_p)
8158     {
8159       if (innermost_code == cdk_function)
8160         ;
8161       else if (declspecs->specs[(int)ds_const] != 0)
8162         error ("both %<const%> and %<constexpr%> cannot be used here");
8163       else
8164         type_quals |= TYPE_QUAL_CONST;
8165     }
8166   if (declspecs->specs[(int)ds_volatile])
8167     type_quals |= TYPE_QUAL_VOLATILE;
8168   if (declspecs->specs[(int)ds_restrict])
8169     type_quals |= TYPE_QUAL_RESTRICT;
8170   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8171     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8172            ctor_return_type);
8173
8174   if (TREE_CODE (type) == FUNCTION_TYPE
8175       && type_quals != TYPE_UNQUALIFIED)
8176     {
8177       /* This was an error in C++98 (cv-qualifiers cannot be added to
8178          a function type), but DR 295 makes the code well-formed by
8179          dropping the extra qualifiers. */
8180       if (pedantic && cxx_dialect == cxx98)
8181         {
8182           tree bad_type = build_qualified_type (type, type_quals);
8183           pedwarn (input_location, OPT_pedantic, 
8184                    "ignoring %qV qualifiers added to function type %qT",
8185                    bad_type, type);
8186         }
8187       type_quals = TYPE_UNQUALIFIED;
8188     }
8189   type_quals |= cp_type_quals (type);
8190   type = cp_build_qualified_type_real
8191     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8192                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8193   /* We might have ignored or rejected some of the qualifiers.  */
8194   type_quals = cp_type_quals (type);
8195
8196   staticp = 0;
8197   inlinep = !! declspecs->specs[(int)ds_inline];
8198   virtualp = !! declspecs->specs[(int)ds_virtual];
8199   explicitp = !! declspecs->specs[(int)ds_explicit];
8200
8201   storage_class = declspecs->storage_class;
8202   if (storage_class == sc_static)
8203     staticp = 1 + (decl_context == FIELD);
8204
8205   if (virtualp && staticp == 2)
8206     {
8207       error ("member %qD cannot be declared both virtual and static", dname);
8208       storage_class = sc_none;
8209       staticp = 0;
8210     }
8211   friendp = !! declspecs->specs[(int)ds_friend];
8212
8213   if (dependent_name && !friendp)
8214     {
8215       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8216       return error_mark_node;
8217     }
8218
8219   /* Issue errors about use of storage classes for parameters.  */
8220   if (decl_context == PARM)
8221     {
8222       if (declspecs->specs[(int)ds_typedef])
8223         {
8224           error ("typedef declaration invalid in parameter declaration");
8225           return error_mark_node;
8226         }
8227       else if (template_parm_flag && storage_class != sc_none)
8228         {
8229           error ("storage class specified for template parameter %qs", name);
8230           return error_mark_node;
8231         }
8232       else if (storage_class == sc_static
8233                || storage_class == sc_extern
8234                || thread_p)
8235         error ("storage class specifiers invalid in parameter declarations");
8236
8237       if (type_uses_auto (type))
8238         {
8239           error ("parameter declared %<auto%>");
8240           type = error_mark_node;
8241         }
8242
8243       /* Function parameters cannot be constexpr.  If we saw one, moan
8244          and pretend it wasn't there.  */
8245       if (constexpr_p)
8246         {
8247           error ("a parameter cannot be declared %<constexpr%>");
8248           constexpr_p = 0;
8249         }
8250     }
8251
8252   /* Give error if `virtual' is used outside of class declaration.  */
8253   if (virtualp
8254       && (current_class_name == NULL_TREE || decl_context != FIELD))
8255     {
8256       error ("%<virtual%> outside class declaration");
8257       virtualp = 0;
8258     }
8259
8260   /* Static anonymous unions are dealt with here.  */
8261   if (staticp && decl_context == TYPENAME
8262       && declspecs->type
8263       && ANON_AGGR_TYPE_P (declspecs->type))
8264     decl_context = FIELD;
8265
8266   /* Warn about storage classes that are invalid for certain
8267      kinds of declarations (parameters, typenames, etc.).  */
8268   if (thread_p
8269       && ((storage_class
8270            && storage_class != sc_extern
8271            && storage_class != sc_static)
8272           || declspecs->specs[(int)ds_typedef]))
8273     {
8274       error ("multiple storage classes in declaration of %qs", name);
8275       thread_p = false;
8276     }
8277   if (decl_context != NORMAL
8278       && ((storage_class != sc_none
8279            && storage_class != sc_mutable)
8280           || thread_p))
8281     {
8282       if ((decl_context == PARM || decl_context == CATCHPARM)
8283           && (storage_class == sc_register
8284               || storage_class == sc_auto))
8285         ;
8286       else if (declspecs->specs[(int)ds_typedef])
8287         ;
8288       else if (decl_context == FIELD
8289                /* C++ allows static class elements.  */
8290                && storage_class == sc_static)
8291         /* C++ also allows inlines and signed and unsigned elements,
8292            but in those cases we don't come in here.  */
8293         ;
8294       else
8295         {
8296           if (decl_context == FIELD)
8297             error ("storage class specified for %qs", name);
8298           else
8299             {
8300               if (decl_context == PARM || decl_context == CATCHPARM)
8301                 error ("storage class specified for parameter %qs", name);
8302               else
8303                 error ("storage class specified for typename");
8304             }
8305           if (storage_class == sc_register
8306               || storage_class == sc_auto
8307               || storage_class == sc_extern
8308               || thread_p)
8309             storage_class = sc_none;
8310         }
8311     }
8312   else if (storage_class == sc_extern && funcdef_flag
8313            && ! toplevel_bindings_p ())
8314     error ("nested function %qs declared %<extern%>", name);
8315   else if (toplevel_bindings_p ())
8316     {
8317       if (storage_class == sc_auto)
8318         error ("top-level declaration of %qs specifies %<auto%>", name);
8319     }
8320   else if (thread_p
8321            && storage_class != sc_extern
8322            && storage_class != sc_static)
8323     {
8324       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8325              name);
8326       thread_p = false;
8327     }
8328
8329   if (storage_class && friendp)
8330     {
8331       error ("storage class specifiers invalid in friend function declarations");
8332       storage_class = sc_none;
8333       staticp = 0;
8334     }
8335
8336   if (!id_declarator)
8337     unqualified_id = NULL_TREE;
8338   else
8339     {
8340       unqualified_id = id_declarator->u.id.unqualified_name;
8341       switch (TREE_CODE (unqualified_id))
8342         {
8343         case BIT_NOT_EXPR:
8344           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8345           if (TYPE_P (unqualified_id))
8346             unqualified_id = constructor_name (unqualified_id);
8347           break;
8348
8349         case IDENTIFIER_NODE:
8350         case TEMPLATE_ID_EXPR:
8351           break;
8352
8353         default:
8354           gcc_unreachable ();
8355         }
8356     }
8357
8358   /* Determine the type of the entity declared by recurring on the
8359      declarator.  */
8360   for (; declarator; declarator = declarator->declarator)
8361     {
8362       const cp_declarator *inner_declarator;
8363       tree attrs;
8364
8365       if (type == error_mark_node)
8366         return error_mark_node;
8367
8368       attrs = declarator->attributes;
8369       if (attrs)
8370         {
8371           int attr_flags;
8372
8373           attr_flags = 0;
8374           if (declarator == NULL || declarator->kind == cdk_id)
8375             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8376           if (declarator->kind == cdk_function)
8377             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8378           if (declarator->kind == cdk_array)
8379             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8380           returned_attrs = decl_attributes (&type,
8381                                             chainon (returned_attrs, attrs),
8382                                             attr_flags);
8383         }
8384
8385       if (declarator->kind == cdk_id)
8386         break;
8387
8388       inner_declarator = declarator->declarator;
8389
8390       switch (declarator->kind)
8391         {
8392         case cdk_array:
8393           type = create_array_type_for_decl (dname, type,
8394                                              declarator->u.array.bounds);
8395           break;
8396
8397         case cdk_function:
8398           {
8399             tree arg_types;
8400             int funcdecl_p;
8401
8402             /* Declaring a function type.
8403                Make sure we have a valid type for the function to return.  */
8404
8405             if (type_quals != TYPE_UNQUALIFIED)
8406               {
8407                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8408                   warning (OPT_Wignored_qualifiers,
8409                            "type qualifiers ignored on function return type");
8410                 /* We now know that the TYPE_QUALS don't apply to the
8411                    decl, but to its return type.  */
8412                 type_quals = TYPE_UNQUALIFIED;
8413               }
8414             errmsg = targetm.invalid_return_type (type);
8415             if (errmsg)
8416               {
8417                 error (errmsg);
8418                 type = integer_type_node;
8419               }
8420
8421             /* Error about some types functions can't return.  */
8422
8423             if (TREE_CODE (type) == FUNCTION_TYPE)
8424               {
8425                 error ("%qs declared as function returning a function", name);
8426                 return error_mark_node;
8427               }
8428             if (TREE_CODE (type) == ARRAY_TYPE)
8429               {
8430                 error ("%qs declared as function returning an array", name);
8431                 return error_mark_node;
8432               }
8433
8434             /* Pick up type qualifiers which should be applied to `this'.  */
8435             memfn_quals = declarator->u.function.qualifiers;
8436
8437             /* Pick up the exception specifications.  */
8438             raises = declarator->u.function.exception_specification;
8439
8440             /* Say it's a definition only for the CALL_EXPR
8441                closest to the identifier.  */
8442             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
8443
8444             /* Handle a late-specified return type.  */
8445             if (funcdecl_p)
8446               {
8447                 if (type_uses_auto (type))
8448                   {
8449                     if (!declarator->u.function.late_return_type)
8450                       {
8451                         error ("%qs function uses %<auto%> type specifier without"
8452                                " late return type", name);
8453                         return error_mark_node;
8454                       }
8455                     else if (!is_auto (type))
8456                       {
8457                         error ("%qs function with late return type has"
8458                                " %qT as its type rather than plain %<auto%>",
8459                                name, type);
8460                         return error_mark_node;
8461                       }
8462                   }
8463                 else if (declarator->u.function.late_return_type)
8464                   {
8465                     error ("%qs function with late return type not declared"
8466                            " with %<auto%> type specifier", name);
8467                     return error_mark_node;
8468                   }
8469               }
8470             type = splice_late_return_type
8471               (type, declarator->u.function.late_return_type);
8472             if (type == error_mark_node)
8473               return error_mark_node;
8474
8475             if (ctype == NULL_TREE
8476                 && decl_context == FIELD
8477                 && funcdecl_p
8478                 && (friendp == 0 || dname == current_class_name))
8479               ctype = current_class_type;
8480
8481             if (ctype && (sfk == sfk_constructor
8482                           || sfk == sfk_destructor))
8483               {
8484                 /* We are within a class's scope. If our declarator name
8485                    is the same as the class name, and we are defining
8486                    a function, then it is a constructor/destructor, and
8487                    therefore returns a void type.  */
8488
8489                 /* ISO C++ 12.4/2.  A destructor may not be declared
8490                    const or volatile.  A destructor may not be
8491                    static.
8492
8493                    ISO C++ 12.1.  A constructor may not be declared
8494                    const or volatile.  A constructor may not be
8495                    virtual.  A constructor may not be static.  */
8496                 if (staticp == 2)
8497                   error ((flags == DTOR_FLAG)
8498                          ? "destructor cannot be static member function"
8499                          : "constructor cannot be static member function");
8500                 if (memfn_quals)
8501                   {
8502                     error ((flags == DTOR_FLAG)
8503                            ? "destructors may not be cv-qualified"
8504                            : "constructors may not be cv-qualified");
8505                     memfn_quals = TYPE_UNQUALIFIED;
8506                   }
8507
8508                 if (decl_context == FIELD
8509                     && !member_function_or_else (ctype,
8510                                                  current_class_type,
8511                                                  flags))
8512                   return error_mark_node;
8513
8514                 if (flags != DTOR_FLAG)
8515                   {
8516                     /* It's a constructor.  */
8517                     if (explicitp == 1)
8518                       explicitp = 2;
8519                     if (virtualp)
8520                       {
8521                         permerror (input_location, "constructors cannot be declared virtual");
8522                         virtualp = 0;
8523                       }
8524                     if (decl_context == FIELD
8525                         && sfk != sfk_constructor)
8526                       return error_mark_node;
8527                   }
8528                 if (decl_context == FIELD)
8529                   staticp = 0;
8530               }
8531             else if (friendp)
8532               {
8533                 if (initialized)
8534                   error ("can't initialize friend function %qs", name);
8535                 if (virtualp)
8536                   {
8537                     /* Cannot be both friend and virtual.  */
8538                     error ("virtual functions cannot be friends");
8539                     friendp = 0;
8540                   }
8541                 if (decl_context == NORMAL)
8542                   error ("friend declaration not in class definition");
8543                 if (current_function_decl && funcdef_flag)
8544                   error ("can't define friend function %qs in a local "
8545                          "class definition",
8546                          name);
8547               }
8548             else if (ctype && sfk == sfk_conversion)
8549               {
8550                 if (explicitp == 1)
8551                   {
8552                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
8553                     explicitp = 2;
8554                   }
8555               }
8556
8557             /* It is not allowed to use `constexpr' in a function
8558                declaration that is not a definition.
8559                That is too strict, though.  */
8560             if (constexpr_p && !funcdef_flag)
8561               {
8562                 error ("the %<constexpr%> specifier cannot be used in "
8563                        "a function declaration that is not a definition");
8564                 constexpr_p = false;
8565               }
8566
8567             /* A constexpr non-static member function is implicitly const.  */
8568             if (constexpr_p && decl_context == FIELD && staticp == 0
8569                 && sfk != sfk_constructor && sfk != sfk_destructor)
8570               memfn_quals |= TYPE_QUAL_CONST;
8571
8572             arg_types = grokparms (declarator->u.function.parameters,
8573                                    &parms);
8574
8575             if (inner_declarator
8576                 && inner_declarator->kind == cdk_id
8577                 && inner_declarator->u.id.sfk == sfk_destructor
8578                 && arg_types != void_list_node)
8579               {
8580                 error ("destructors may not have parameters");
8581                 arg_types = void_list_node;
8582                 parms = NULL_TREE;
8583               }
8584
8585             type = build_function_type (type, arg_types);
8586           }
8587           break;
8588
8589         case cdk_pointer:
8590         case cdk_reference:
8591         case cdk_ptrmem:
8592           /* Filter out pointers-to-references and references-to-references.
8593              We can get these if a TYPE_DECL is used.  */
8594
8595           if (TREE_CODE (type) == REFERENCE_TYPE)
8596             {
8597               if (declarator->kind != cdk_reference)
8598                 {
8599                   error ("cannot declare pointer to %q#T", type);
8600                   type = TREE_TYPE (type);
8601                 }
8602
8603               /* In C++0x, we allow reference to reference declarations
8604                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
8605                  and template type arguments [14.3.1/4 temp.arg.type]. The
8606                  check for direct reference to reference declarations, which
8607                  are still forbidden, occurs below. Reasoning behind the change
8608                  can be found in DR106, DR540, and the rvalue reference
8609                  proposals. */
8610               else if (cxx_dialect == cxx98)
8611                 {
8612                   error ("cannot declare reference to %q#T", type);
8613                   type = TREE_TYPE (type);
8614                 }
8615             }
8616           else if (VOID_TYPE_P (type))
8617             {
8618               if (declarator->kind == cdk_reference)
8619                 error ("cannot declare reference to %q#T", type);
8620               else if (declarator->kind == cdk_ptrmem)
8621                 error ("cannot declare pointer to %q#T member", type);
8622             }
8623
8624           /* We now know that the TYPE_QUALS don't apply to the decl,
8625              but to the target of the pointer.  */
8626           type_quals = TYPE_UNQUALIFIED;
8627
8628           if (declarator->kind == cdk_ptrmem
8629               && (TREE_CODE (type) == FUNCTION_TYPE
8630                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
8631             {
8632               memfn_quals |= cp_type_quals (type);
8633               type = build_memfn_type (type,
8634                                        declarator->u.pointer.class_type,
8635                                        memfn_quals);
8636               memfn_quals = TYPE_UNQUALIFIED;
8637             }
8638
8639           if (TREE_CODE (type) == FUNCTION_TYPE
8640               && cp_type_quals (type) != TYPE_UNQUALIFIED)
8641             error (declarator->kind == cdk_reference
8642                    ? G_("cannot declare reference to qualified function type %qT")
8643                    : G_("cannot declare pointer to qualified function type %qT"),
8644                    type);
8645
8646           if (declarator->kind == cdk_reference)
8647             {
8648               /* In C++0x, the type we are creating a reference to might be
8649                  a typedef which is itself a reference type. In that case,
8650                  we follow the reference collapsing rules in
8651                  [7.1.3/8 dcl.typedef] to create the final reference type:
8652
8653                  "If a typedef TD names a type that is a reference to a type
8654                  T, an attempt to create the type 'lvalue reference to cv TD'
8655                  creates the type 'lvalue reference to T,' while an attempt
8656                  to create the type "rvalue reference to cv TD' creates the
8657                  type TD."
8658               */
8659               if (!VOID_TYPE_P (type))
8660                 type = cp_build_reference_type
8661                        ((TREE_CODE (type) == REFERENCE_TYPE
8662                          ? TREE_TYPE (type) : type),
8663                         (declarator->u.reference.rvalue_ref
8664                          && (TREE_CODE(type) != REFERENCE_TYPE
8665                              || TYPE_REF_IS_RVALUE (type))));
8666
8667               /* In C++0x, we need this check for direct reference to
8668                  reference declarations, which are forbidden by
8669                  [8.3.2/5 dcl.ref]. Reference to reference declarations
8670                  are only allowed indirectly through typedefs and template
8671                  type arguments. Example:
8672
8673                    void foo(int & &);      // invalid ref-to-ref decl
8674
8675                    typedef int & int_ref;
8676                    void foo(int_ref &);    // valid ref-to-ref decl
8677               */
8678               if (inner_declarator && inner_declarator->kind == cdk_reference)
8679                 error ("cannot declare reference to %q#T, which is not "
8680                        "a typedef or a template type argument", type);
8681             }
8682           else if (TREE_CODE (type) == METHOD_TYPE)
8683             type = build_ptrmemfunc_type (build_pointer_type (type));
8684           else if (declarator->kind == cdk_ptrmem)
8685             {
8686               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
8687                           != NAMESPACE_DECL);
8688               if (declarator->u.pointer.class_type == error_mark_node)
8689                 /* We will already have complained.  */
8690                 type = error_mark_node;
8691               else
8692                 type = build_ptrmem_type (declarator->u.pointer.class_type,
8693                                           type);
8694             }
8695           else
8696             type = build_pointer_type (type);
8697
8698           /* Process a list of type modifier keywords (such as
8699              const or volatile) that were given inside the `*' or `&'.  */
8700
8701           if (declarator->u.pointer.qualifiers)
8702             {
8703               type
8704                 = cp_build_qualified_type (type,
8705                                            declarator->u.pointer.qualifiers);
8706               type_quals = cp_type_quals (type);
8707             }
8708           ctype = NULL_TREE;
8709           break;
8710
8711         case cdk_error:
8712           break;
8713
8714         default:
8715           gcc_unreachable ();
8716         }
8717     }
8718
8719   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
8720       && TREE_CODE (type) != FUNCTION_TYPE
8721       && TREE_CODE (type) != METHOD_TYPE)
8722     {
8723       error ("template-id %qD used as a declarator",
8724              unqualified_id);
8725       unqualified_id = dname;
8726     }
8727
8728   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
8729      qualified with a class-name, turn it into a METHOD_TYPE, unless
8730      we know that the function is static.  We take advantage of this
8731      opportunity to do other processing that pertains to entities
8732      explicitly declared to be class members.  Note that if DECLARATOR
8733      is non-NULL, we know it is a cdk_id declarator; otherwise, we
8734      would not have exited the loop above.  */
8735   if (declarator
8736       && declarator->u.id.qualifying_scope
8737       && TYPE_P (declarator->u.id.qualifying_scope))
8738     {
8739       tree t;
8740
8741       ctype = declarator->u.id.qualifying_scope;
8742       ctype = TYPE_MAIN_VARIANT (ctype);
8743       t = ctype;
8744       while (t != NULL_TREE && CLASS_TYPE_P (t))
8745         {
8746           /* You're supposed to have one `template <...>' for every
8747              template class, but you don't need one for a full
8748              specialization.  For example:
8749
8750                template <class T> struct S{};
8751                template <> struct S<int> { void f(); };
8752                void S<int>::f () {}
8753
8754              is correct; there shouldn't be a `template <>' for the
8755              definition of `S<int>::f'.  */
8756           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
8757               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
8758             /* T is an explicit (not partial) specialization.  All
8759                containing classes must therefore also be explicitly
8760                specialized.  */
8761             break;
8762           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
8763               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
8764             template_count += 1;
8765
8766           t = TYPE_MAIN_DECL (t);
8767           t = DECL_CONTEXT (t);
8768         }
8769
8770       if (ctype == current_class_type)
8771         {
8772           if (friendp)
8773             {
8774               permerror (input_location, "member functions are implicitly friends of their class");
8775               friendp = 0;
8776             }
8777           else
8778             permerror (declarator->id_loc, 
8779                           "extra qualification %<%T::%> on member %qs",
8780                           ctype, name);
8781         }
8782       else if (/* If the qualifying type is already complete, then we
8783                   can skip the following checks.  */
8784                !COMPLETE_TYPE_P (ctype)
8785                && (/* If the function is being defined, then
8786                       qualifying type must certainly be complete.  */
8787                    funcdef_flag
8788                    /* A friend declaration of "T::f" is OK, even if
8789                       "T" is a template parameter.  But, if this
8790                       function is not a friend, the qualifying type
8791                       must be a class.  */
8792                    || (!friendp && !CLASS_TYPE_P (ctype))
8793                    /* For a declaration, the type need not be
8794                       complete, if either it is dependent (since there
8795                       is no meaningful definition of complete in that
8796                       case) or the qualifying class is currently being
8797                       defined.  */
8798                    || !(dependent_type_p (ctype)
8799                         || currently_open_class (ctype)))
8800                /* Check that the qualifying type is complete.  */
8801                && !complete_type_or_else (ctype, NULL_TREE))
8802         return error_mark_node;
8803       else if (TREE_CODE (type) == FUNCTION_TYPE)
8804         {
8805           tree sname = declarator->u.id.unqualified_name;
8806
8807           if (current_class_type
8808               && (!friendp || funcdef_flag))
8809             {
8810               error (funcdef_flag
8811                      ? "cannot define member function %<%T::%s%> within %<%T%>"
8812                      : "cannot declare member function %<%T::%s%> within %<%T%>",
8813                      ctype, name, current_class_type);
8814               return error_mark_node;
8815             }
8816
8817           /* It is not permitted to define a member function outside ist
8818              membership class as `constexpr'.  */
8819           if (constexpr_p)
8820             error ("a constexpr function cannot be defined "
8821                    "outside of its class");
8822
8823           if (TREE_CODE (sname) == IDENTIFIER_NODE
8824               && NEW_DELETE_OPNAME_P (sname))
8825             /* Overloaded operator new and operator delete
8826                are always static functions.  */
8827             ;
8828           else
8829             type = build_memfn_type (type, ctype, memfn_quals);
8830         }
8831       else if (declspecs->specs[(int)ds_typedef]
8832                && current_class_type)
8833         {
8834           error ("cannot declare member %<%T::%s%> within %qT",
8835                  ctype, name, current_class_type);
8836           return error_mark_node;
8837         }
8838     }
8839
8840   /* Now TYPE has the actual type.  */
8841
8842   if (returned_attrs)
8843     {
8844       if (attrlist)
8845         *attrlist = chainon (returned_attrs, *attrlist);
8846       else
8847         attrlist = &returned_attrs;
8848     }
8849
8850   /* Handle parameter packs. */
8851   if (parameter_pack_p)
8852     {
8853       if (decl_context == PARM)
8854         /* Turn the type into a pack expansion.*/
8855         type = make_pack_expansion (type);
8856       else
8857         error ("non-parameter %qs cannot be a parameter pack", name);
8858     }
8859
8860   /* Did array size calculations overflow?  */
8861
8862   if (TREE_CODE (type) == ARRAY_TYPE
8863       && COMPLETE_TYPE_P (type)
8864       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
8865       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
8866     {
8867       error ("size of array %qs is too large", name);
8868       /* If we proceed with the array type as it is, we'll eventually
8869          crash in tree_low_cst().  */
8870       type = error_mark_node;
8871     }
8872
8873   if ((decl_context == FIELD || decl_context == PARM)
8874       && !processing_template_decl
8875       && variably_modified_type_p (type, NULL_TREE))
8876     {
8877       if (decl_context == FIELD)
8878         error ("data member may not have variably modified type %qT", type);
8879       else
8880         error ("parameter may not have variably modified type %qT", type);
8881       type = error_mark_node;
8882     }
8883
8884   if (explicitp == 1 || (explicitp && friendp))
8885     {
8886       /* [dcl.fct.spec] The explicit specifier shall only be used in
8887          declarations of constructors within a class definition.  */
8888       error ("only declarations of constructors can be %<explicit%>");
8889       explicitp = 0;
8890     }
8891
8892   if (storage_class == sc_mutable)
8893     {
8894       if (decl_context != FIELD || friendp)
8895         {
8896           error ("non-member %qs cannot be declared %<mutable%>", name);
8897           storage_class = sc_none;
8898         }
8899       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
8900         {
8901           error ("non-object member %qs cannot be declared %<mutable%>", name);
8902           storage_class = sc_none;
8903         }
8904       else if (TREE_CODE (type) == FUNCTION_TYPE
8905                || TREE_CODE (type) == METHOD_TYPE)
8906         {
8907           error ("function %qs cannot be declared %<mutable%>", name);
8908           storage_class = sc_none;
8909         }
8910       else if (staticp)
8911         {
8912           error ("static %qs cannot be declared %<mutable%>", name);
8913           storage_class = sc_none;
8914         }
8915       else if (type_quals & TYPE_QUAL_CONST)
8916         {
8917           error ("const %qs cannot be declared %<mutable%>", name);
8918           storage_class = sc_none;
8919         }
8920     }
8921
8922   /* If this is declaring a typedef name, return a TYPE_DECL.  */
8923   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
8924     {
8925       tree decl;
8926
8927       /* Note that the grammar rejects storage classes
8928          in typenames, fields or parameters.  */
8929       if (current_lang_name == lang_name_java)
8930         TYPE_FOR_JAVA (type) = 1;
8931
8932       /* This declaration:
8933
8934            typedef void f(int) const;
8935
8936          declares a function type which is not a member of any
8937          particular class, but which is cv-qualified; for
8938          example "f S::*" declares a pointer to a const-qualified
8939          member function of S.  We record the cv-qualification in the
8940          function type.  */
8941       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
8942         {
8943           type = cp_build_qualified_type (type, memfn_quals);
8944           
8945           /* We have now dealt with these qualifiers.  */
8946           memfn_quals = TYPE_UNQUALIFIED;
8947         }
8948
8949       if (decl_context == FIELD)
8950         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
8951       else
8952         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
8953       if (id_declarator && declarator->u.id.qualifying_scope) {
8954         error_at (DECL_SOURCE_LOCATION (decl), 
8955                   "typedef name may not be a nested-name-specifier");
8956         TREE_TYPE (decl) = error_mark_node;
8957       }
8958
8959       if (decl_context != FIELD)
8960         {
8961           if (!current_function_decl)
8962             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
8963           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
8964                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
8965                        (current_function_decl)))
8966             /* The TYPE_DECL is "abstract" because there will be
8967                clones of this constructor/destructor, and there will
8968                be copies of this TYPE_DECL generated in those
8969                clones.  */
8970             DECL_ABSTRACT (decl) = 1;
8971         }
8972       else if (constructor_name_p (unqualified_id, current_class_type))
8973         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
8974                    "as enclosing class",
8975                    unqualified_id);
8976
8977       /* If the user declares "typedef struct {...} foo" then the
8978          struct will have an anonymous name.  Fill that name in now.
8979          Nothing can refer to it, so nothing needs know about the name
8980          change.  */
8981       if (type != error_mark_node
8982           && unqualified_id
8983           && TYPE_NAME (type)
8984           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8985           && TYPE_ANONYMOUS_P (type)
8986           && cp_type_quals (type) == TYPE_UNQUALIFIED)
8987         {
8988           tree t;
8989
8990           /* Replace the anonymous name with the real name everywhere.  */
8991           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
8992             {
8993               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8994                 {
8995                   debug_hooks->set_name (t, decl);
8996                   TYPE_NAME (t) = decl;
8997                 }
8998             }
8999
9000           if (TYPE_LANG_SPECIFIC (type))
9001             TYPE_WAS_ANONYMOUS (type) = 1;
9002
9003           /* If this is a typedef within a template class, the nested
9004              type is a (non-primary) template.  The name for the
9005              template needs updating as well.  */
9006           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9007             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9008               = TYPE_IDENTIFIER (type);
9009
9010           /* Adjust linkage now that we aren't anonymous anymore.  */
9011           set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9012           determine_visibility (TYPE_MAIN_DECL (type));
9013
9014           /* FIXME remangle member functions; member functions of a
9015              type with external linkage have external linkage.  */
9016         }
9017
9018       if (signed_p
9019           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9020         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9021
9022       bad_specifiers (decl, "type", virtualp,
9023                       memfn_quals != TYPE_UNQUALIFIED,
9024                       inlinep, friendp, raises != NULL_TREE);
9025
9026       return decl;
9027     }
9028
9029   /* Detect the case of an array type of unspecified size
9030      which came, as such, direct from a typedef name.
9031      We must copy the type, so that the array's domain can be
9032      individually set by the object's initializer.  */
9033
9034   if (type && typedef_type
9035       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9036       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9037     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9038
9039   /* Detect where we're using a typedef of function type to declare a
9040      function. PARMS will not be set, so we must create it now.  */
9041
9042   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9043     {
9044       tree decls = NULL_TREE;
9045       tree args;
9046
9047       for (args = TYPE_ARG_TYPES (type);
9048            args && args != void_list_node;
9049            args = TREE_CHAIN (args))
9050         {
9051           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9052
9053           TREE_CHAIN (decl) = decls;
9054           decls = decl;
9055         }
9056
9057       parms = nreverse (decls);
9058
9059       if (decl_context != TYPENAME)
9060         {
9061           /* A cv-qualifier-seq shall only be part of the function type
9062              for a non-static member function. [8.3.5/4 dcl.fct] */
9063           if (cp_type_quals (type) != TYPE_UNQUALIFIED
9064               && (current_class_type == NULL_TREE || staticp) )
9065             {
9066               error (staticp
9067                      ? G_("qualified function types cannot be used to "
9068                           "declare static member functions")
9069                      : G_("qualified function types cannot be used to "
9070                           "declare free functions"));
9071               type = TYPE_MAIN_VARIANT (type);
9072             }
9073
9074           /* The qualifiers on the function type become the qualifiers on
9075              the non-static member function. */
9076           memfn_quals |= cp_type_quals (type);
9077           type_quals = TYPE_UNQUALIFIED;
9078         }
9079     }
9080
9081   /* If this is a type name (such as, in a cast or sizeof),
9082      compute the type and return it now.  */
9083
9084   if (decl_context == TYPENAME)
9085     {
9086       /* Note that the grammar rejects storage classes
9087          in typenames, fields or parameters.  */
9088       if (type_quals != TYPE_UNQUALIFIED)
9089         type_quals = TYPE_UNQUALIFIED;
9090
9091       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9092       if (friendp)
9093         {
9094           if (type_quals != TYPE_UNQUALIFIED)
9095             {
9096               error ("type qualifiers specified for friend class declaration");
9097               type_quals = TYPE_UNQUALIFIED;
9098             }
9099           if (inlinep)
9100             {
9101               error ("%<inline%> specified for friend class declaration");
9102               inlinep = 0;
9103             }
9104
9105           if (!current_aggr)
9106             {
9107               /* Don't allow friend declaration without a class-key.  */
9108               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9109                 permerror (input_location, "template parameters cannot be friends");
9110               else if (TREE_CODE (type) == TYPENAME_TYPE)
9111                 permerror (input_location, "friend declaration requires class-key, "
9112                            "i.e. %<friend class %T::%D%>",
9113                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9114               else
9115                 permerror (input_location, "friend declaration requires class-key, "
9116                            "i.e. %<friend %#T%>",
9117                            type);
9118             }
9119
9120           /* Only try to do this stuff if we didn't already give up.  */
9121           if (type != integer_type_node)
9122             {
9123               /* A friendly class?  */
9124               if (current_class_type)
9125                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9126                                    /*complain=*/true);
9127               else
9128                 error ("trying to make class %qT a friend of global scope",
9129                        type);
9130
9131               type = void_type_node;
9132             }
9133         }
9134       else if (memfn_quals)
9135         {
9136           if (ctype == NULL_TREE
9137               && TREE_CODE (type) == METHOD_TYPE)
9138             ctype = TYPE_METHOD_BASETYPE (type);
9139
9140           if (ctype)
9141             type = build_memfn_type (type, ctype, memfn_quals);
9142           /* Core issue #547: need to allow this in template type args.  */
9143           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9144             type = cp_build_qualified_type (type, memfn_quals);
9145           else
9146             error ("invalid qualifiers on non-member function type");
9147         }
9148
9149       return type;
9150     }
9151   else if (unqualified_id == NULL_TREE && decl_context != PARM
9152            && decl_context != CATCHPARM
9153            && TREE_CODE (type) != UNION_TYPE
9154            && ! bitfield)
9155     {
9156       error ("abstract declarator %qT used as declaration", type);
9157       return error_mark_node;
9158     }
9159
9160   /* Only functions may be declared using an operator-function-id.  */
9161   if (unqualified_id
9162       && IDENTIFIER_OPNAME_P (unqualified_id)
9163       && TREE_CODE (type) != FUNCTION_TYPE
9164       && TREE_CODE (type) != METHOD_TYPE)
9165     {
9166       error ("declaration of %qD as non-function", unqualified_id);
9167       return error_mark_node;
9168     }
9169
9170   /* We don't check parameter types here because we can emit a better
9171      error message later.  */
9172   if (decl_context != PARM)
9173     {
9174       type = check_var_type (unqualified_id, type);
9175       if (type == error_mark_node)
9176         return error_mark_node;
9177     }
9178
9179   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9180      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9181
9182   if (decl_context == PARM || decl_context == CATCHPARM)
9183     {
9184       if (ctype || in_namespace)
9185         error ("cannot use %<::%> in parameter declaration");
9186
9187       /* A parameter declared as an array of T is really a pointer to T.
9188          One declared as a function is really a pointer to a function.
9189          One declared as a member is really a pointer to member.  */
9190
9191       if (TREE_CODE (type) == ARRAY_TYPE)
9192         {
9193           /* Transfer const-ness of array into that of type pointed to.  */
9194           type = build_pointer_type (TREE_TYPE (type));
9195           type_quals = TYPE_UNQUALIFIED;
9196         }
9197       else if (TREE_CODE (type) == FUNCTION_TYPE)
9198         type = build_pointer_type (type);
9199     }
9200
9201   {
9202     tree decl;
9203
9204     if (decl_context == PARM)
9205       {
9206         decl = cp_build_parm_decl (unqualified_id, type);
9207
9208         bad_specifiers (decl, "parameter", virtualp,
9209                         memfn_quals != TYPE_UNQUALIFIED,
9210                         inlinep, friendp, raises != NULL_TREE);
9211       }
9212     else if (decl_context == FIELD)
9213       {
9214         /* The C99 flexible array extension.  */
9215         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9216             && TYPE_DOMAIN (type) == NULL_TREE)
9217           {
9218             tree itype = compute_array_index_type (dname, integer_zero_node);
9219             type = build_cplus_array_type (TREE_TYPE (type), itype);
9220           }
9221
9222         if (type == error_mark_node)
9223           {
9224             /* Happens when declaring arrays of sizes which
9225                are error_mark_node, for example.  */
9226             decl = NULL_TREE;
9227           }
9228         else if (in_namespace && !friendp)
9229           {
9230             /* Something like struct S { int N::j; };  */
9231             error ("invalid use of %<::%>");
9232             return error_mark_node;
9233           }
9234         else if (TREE_CODE (type) == FUNCTION_TYPE)
9235           {
9236             int publicp = 0;
9237             tree function_context;
9238
9239             if (friendp == 0)
9240               {
9241                 if (ctype == NULL_TREE)
9242                   ctype = current_class_type;
9243
9244                 if (ctype == NULL_TREE)
9245                   {
9246                     error ("can't make %qD into a method -- not in a class",
9247                            unqualified_id);
9248                     return error_mark_node;
9249                   }
9250
9251                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9252                    ARM 9.5 */
9253                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9254                   {
9255                     error ("function %qD declared virtual inside a union",
9256                            unqualified_id);
9257                     return error_mark_node;
9258                   }
9259
9260                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9261                   {
9262                     if (virtualp)
9263                       {
9264                         error ("%qD cannot be declared virtual, since it "
9265                                "is always static",
9266                                unqualified_id);
9267                         virtualp = 0;
9268                       }
9269                   }
9270                 else if (staticp < 2)
9271                   type = build_memfn_type (type, ctype, memfn_quals);
9272               }
9273
9274             /* Check that the name used for a destructor makes sense.  */
9275             if (sfk == sfk_destructor)
9276               {
9277                 tree uqname = id_declarator->u.id.unqualified_name;
9278
9279                 if (!ctype)
9280                   {
9281                     gcc_assert (friendp);
9282                     error ("expected qualified name in friend declaration "
9283                            "for destructor %qD", uqname);
9284                     return error_mark_node;
9285                   }
9286
9287                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9288                   {
9289                     error ("declaration of %qD as member of %qT",
9290                            uqname, ctype);
9291                     return error_mark_node;
9292                   }
9293                 if (constexpr_p)
9294                   error ("a destructor cannot be %<constexpr%>");
9295               }
9296             else if (sfk == sfk_constructor && friendp)
9297               {
9298                 error ("expected qualified name in friend declaration "
9299                        "for constructor %qD",
9300                        id_declarator->u.id.unqualified_name);
9301                 return error_mark_node;
9302               }
9303
9304             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9305             function_context = (ctype != NULL_TREE) ?
9306               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9307             publicp = (! friendp || ! staticp)
9308               && function_context == NULL_TREE;
9309             decl = grokfndecl (ctype, type,
9310                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9311                                ? unqualified_id : dname,
9312                                parms,
9313                                unqualified_id,
9314                                virtualp, flags, memfn_quals, raises,
9315                                friendp ? -1 : 0, friendp, publicp,
9316                                inlinep || constexpr_p,
9317                                sfk,
9318                                funcdef_flag, template_count, in_namespace,
9319                                attrlist, declarator->id_loc);
9320             if (decl == NULL_TREE)
9321               return error_mark_node;
9322 #if 0
9323             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9324             /* The decl and setting of decl_attr is also turned off.  */
9325             decl = build_decl_attribute_variant (decl, decl_attr);
9326 #endif
9327
9328             /* [class.conv.ctor]
9329
9330                A constructor declared without the function-specifier
9331                explicit that can be called with a single parameter
9332                specifies a conversion from the type of its first
9333                parameter to the type of its class.  Such a constructor
9334                is called a converting constructor.  */
9335             if (explicitp == 2)
9336               DECL_NONCONVERTING_P (decl) = 1;
9337           }
9338         else if (TREE_CODE (type) == METHOD_TYPE)
9339           {
9340             /* We only get here for friend declarations of
9341                members of other classes.  */
9342             /* All method decls are public, so tell grokfndecl to set
9343                TREE_PUBLIC, also.  */
9344             decl = grokfndecl (ctype, type,
9345                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9346                                ? unqualified_id : dname,
9347                                parms,
9348                                unqualified_id,
9349                                virtualp, flags, memfn_quals, raises,
9350                                friendp ? -1 : 0, friendp, 1, 0, sfk,
9351                                funcdef_flag, template_count, in_namespace,
9352                                attrlist,
9353                                declarator->id_loc);
9354             if (decl == NULL_TREE)
9355               return error_mark_node;
9356           }
9357         else if (!staticp && !dependent_type_p (type)
9358                  && !COMPLETE_TYPE_P (complete_type (type))
9359                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9360           {
9361             if (unqualified_id)
9362               error ("field %qD has incomplete type", unqualified_id);
9363             else
9364               error ("name %qT has incomplete type", type);
9365
9366             /* If we're instantiating a template, tell them which
9367                instantiation made the field's type be incomplete.  */
9368             if (current_class_type
9369                 && TYPE_NAME (current_class_type)
9370                 && IDENTIFIER_TEMPLATE (TYPE_IDENTIFIER (current_class_type))
9371                 && declspecs->type
9372                 && declspecs->type == type)
9373               error ("  in instantiation of template %qT",
9374                      current_class_type);
9375
9376             return error_mark_node;
9377           }
9378         else
9379           {
9380             if (friendp)
9381               {
9382                 error ("%qE is neither function nor member function; "
9383                        "cannot be declared friend", unqualified_id);
9384                 friendp = 0;
9385               }
9386             decl = NULL_TREE;
9387           }
9388
9389         if (friendp)
9390           {
9391             /* Friends are treated specially.  */
9392             if (ctype == current_class_type)
9393               ;  /* We already issued a permerror.  */
9394             else if (decl && DECL_NAME (decl))
9395               {
9396                 if (template_class_depth (current_class_type) == 0)
9397                   {
9398                     decl = check_explicit_specialization
9399                       (unqualified_id, decl, template_count,
9400                        2 * funcdef_flag + 4);
9401                     if (decl == error_mark_node)
9402                       return error_mark_node;
9403                   }
9404
9405                 DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9406                 decl = do_friend (ctype, unqualified_id, decl,
9407                                   *attrlist, flags,
9408                                   funcdef_flag);
9409                 return decl;
9410               }
9411             else
9412               return error_mark_node;
9413           }
9414
9415         /* Structure field.  It may not be a function, except for C++.  */
9416
9417         if (decl == NULL_TREE)
9418           {
9419             if (initialized)
9420               {
9421                 if (!staticp)
9422                   {
9423                     /* An attempt is being made to initialize a non-static
9424                        member.  But, from [class.mem]:
9425
9426                        4 A member-declarator can contain a
9427                        constant-initializer only if it declares a static
9428                        member (_class.static_) of integral or enumeration
9429                        type, see _class.static.data_.
9430
9431                        This used to be relatively common practice, but
9432                        the rest of the compiler does not correctly
9433                        handle the initialization unless the member is
9434                        static so we make it static below.  */
9435                     permerror (input_location, "ISO C++ forbids initialization of member %qD",
9436                                unqualified_id);
9437                     permerror (input_location, "making %qD static", unqualified_id);
9438                     staticp = 1;
9439                   }
9440
9441                 if (uses_template_parms (type))
9442                   /* We'll check at instantiation time.  */
9443                   ;
9444                 else if (check_static_variable_definition (unqualified_id,
9445                                                            type))
9446                   /* If we just return the declaration, crashes
9447                      will sometimes occur.  We therefore return
9448                      void_type_node, as if this was a friend
9449                      declaration, to cause callers to completely
9450                      ignore this declaration.  */
9451                   return error_mark_node;
9452               }
9453
9454             if (staticp)
9455               {
9456                 /* C++ allows static class members.  All other work
9457                    for this is done by grokfield.  */
9458                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
9459                 set_linkage_for_static_data_member (decl);
9460                 /* Even if there is an in-class initialization, DECL
9461                    is considered undefined until an out-of-class
9462                    definition is provided.  */
9463                 DECL_EXTERNAL (decl) = 1;
9464
9465                 if (thread_p)
9466                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
9467               }
9468             else
9469               {
9470                 if (constexpr_p)
9471                   error ("non-static data member %qE declared %<constexpr%>",
9472                          unqualified_id);
9473                 decl = build_decl (input_location,
9474                                    FIELD_DECL, unqualified_id, type);
9475                 DECL_NONADDRESSABLE_P (decl) = bitfield;
9476                 if (bitfield && !unqualified_id)
9477                   TREE_NO_WARNING (decl) = 1;
9478
9479                 if (storage_class == sc_mutable)
9480                   {
9481                     DECL_MUTABLE_P (decl) = 1;
9482                     storage_class = sc_none;
9483                   }
9484               }
9485
9486             bad_specifiers (decl, "field", virtualp,
9487                             memfn_quals != TYPE_UNQUALIFIED,
9488                             inlinep, friendp, raises != NULL_TREE);
9489           }
9490       }
9491     else if (TREE_CODE (type) == FUNCTION_TYPE
9492              || TREE_CODE (type) == METHOD_TYPE)
9493       {
9494         tree original_name;
9495         int publicp = 0;
9496
9497         if (!unqualified_id)
9498           return error_mark_node;
9499
9500         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
9501           original_name = dname;
9502         else
9503           original_name = unqualified_id;
9504
9505         if (storage_class == sc_auto)
9506           error ("storage class %<auto%> invalid for function %qs", name);
9507         else if (storage_class == sc_register)
9508           error ("storage class %<register%> invalid for function %qs", name);
9509         else if (thread_p)
9510           error ("storage class %<__thread%> invalid for function %qs", name);
9511
9512         /* Function declaration not at top level.
9513            Storage classes other than `extern' are not allowed
9514            and `extern' makes no difference.  */
9515         if (! toplevel_bindings_p ()
9516             && (storage_class == sc_static
9517                 || declspecs->specs[(int)ds_inline])
9518             && pedantic)
9519           {
9520             if (storage_class == sc_static)
9521               pedwarn (input_location, OPT_pedantic, 
9522                        "%<static%> specified invalid for function %qs "
9523                        "declared out of global scope", name);
9524             else
9525               pedwarn (input_location, OPT_pedantic, 
9526                        "%<inline%> specifier invalid for function %qs "
9527                        "declared out of global scope", name);
9528           }
9529
9530         if (ctype != NULL_TREE
9531             && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
9532           {
9533             error ("%q#T is not a class or a namespace", ctype);
9534             ctype = NULL_TREE;
9535           }
9536
9537         if (ctype == NULL_TREE)
9538           {
9539             if (virtualp)
9540               {
9541                 error ("virtual non-class function %qs", name);
9542                 virtualp = 0;
9543               }
9544             else if (sfk == sfk_constructor
9545                      || sfk == sfk_destructor)
9546               {
9547                 error (funcdef_flag
9548                        ? "%qs defined in a non-class scope"
9549                        : "%qs declared in a non-class scope", name);
9550                 sfk = sfk_none;
9551               }
9552           }
9553         else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9554                  && !NEW_DELETE_OPNAME_P (original_name))
9555           type = build_method_type_directly (ctype,
9556                                              TREE_TYPE (type),
9557                                              TYPE_ARG_TYPES (type));
9558
9559         /* Record presence of `static'.  */
9560         publicp = (ctype != NULL_TREE
9561                    || storage_class == sc_extern
9562                    || storage_class != sc_static);
9563
9564         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
9565                            virtualp, flags, memfn_quals, raises,
9566                            1, friendp,
9567                            publicp, inlinep || constexpr_p, sfk, funcdef_flag,
9568                            template_count, in_namespace, attrlist,
9569                            declarator->id_loc);
9570         if (decl == NULL_TREE)
9571           return error_mark_node;
9572
9573         if (staticp == 1)
9574           {
9575             int invalid_static = 0;
9576
9577             /* Don't allow a static member function in a class, and forbid
9578                declaring main to be static.  */
9579             if (TREE_CODE (type) == METHOD_TYPE)
9580               {
9581                 permerror (input_location, "cannot declare member function %qD to have "
9582                            "static linkage", decl);
9583                 invalid_static = 1;
9584               }
9585             else if (current_function_decl)
9586               {
9587                 /* FIXME need arm citation */
9588                 error ("cannot declare static function inside another function");
9589                 invalid_static = 1;
9590               }
9591
9592             if (invalid_static)
9593               {
9594                 staticp = 0;
9595                 storage_class = sc_none;
9596               }
9597           }
9598       }
9599     else
9600       {
9601         /* It's a variable.  */
9602
9603         /* An uninitialized decl with `extern' is a reference.  */
9604         decl = grokvardecl (type, unqualified_id,
9605                             declspecs,
9606                             initialized,
9607                             (type_quals & TYPE_QUAL_CONST) != 0,
9608                             ctype ? ctype : in_namespace);
9609         bad_specifiers (decl, "variable", virtualp,
9610                         memfn_quals != TYPE_UNQUALIFIED,
9611                         inlinep, friendp, raises != NULL_TREE);
9612
9613         if (ctype)
9614           {
9615             DECL_CONTEXT (decl) = ctype;
9616             if (staticp == 1)
9617               {
9618                 permerror (input_location, "%<static%> may not be used when defining "
9619                            "(as opposed to declaring) a static data member");
9620                 staticp = 0;
9621                 storage_class = sc_none;
9622               }
9623             if (storage_class == sc_register && TREE_STATIC (decl))
9624               {
9625                 error ("static member %qD declared %<register%>", decl);
9626                 storage_class = sc_none;
9627               }
9628             if (storage_class == sc_extern && pedantic)
9629               {
9630                 pedwarn (input_location, OPT_pedantic, 
9631                          "cannot explicitly declare member %q#D to have "
9632                          "extern linkage", decl);
9633                 storage_class = sc_none;
9634               }
9635           }
9636       }
9637
9638     if (storage_class == sc_extern && initialized && !funcdef_flag)
9639       {
9640         if (toplevel_bindings_p ())
9641           {
9642             /* It's common practice (and completely valid) to have a const
9643                be initialized and declared extern.  */
9644             if (!(type_quals & TYPE_QUAL_CONST))
9645               warning (0, "%qs initialized and declared %<extern%>", name);
9646           }
9647         else
9648           {
9649             error ("%qs has both %<extern%> and initializer", name);
9650             return error_mark_node;
9651           }
9652       }
9653
9654     /* Record `register' declaration for warnings on &
9655        and in case doing stupid register allocation.  */
9656
9657     if (storage_class == sc_register)
9658       DECL_REGISTER (decl) = 1;
9659     else if (storage_class == sc_extern)
9660       DECL_THIS_EXTERN (decl) = 1;
9661     else if (storage_class == sc_static)
9662       DECL_THIS_STATIC (decl) = 1;
9663
9664     /* Don't forget constexprness.  */
9665     if (VAR_OR_FUNCTION_DECL_P (decl))
9666       DECL_DECLARED_CONSTEXPR_P (decl) = constexpr_p;
9667
9668     /* Record constancy and volatility on the DECL itself .  There's
9669        no need to do this when processing a template; we'll do this
9670        for the instantiated declaration based on the type of DECL.  */
9671     if (!processing_template_decl)
9672       cp_apply_type_quals_to_decl (type_quals, decl);
9673
9674     return decl;
9675   }
9676 }
9677 \f
9678 /* Subroutine of start_function.  Ensure that each of the parameter
9679    types (as listed in PARMS) is complete, as is required for a
9680    function definition.  */
9681
9682 static void
9683 require_complete_types_for_parms (tree parms)
9684 {
9685   for (; parms; parms = TREE_CHAIN (parms))
9686     {
9687       if (dependent_type_p (TREE_TYPE (parms)))
9688         continue;
9689       if (!VOID_TYPE_P (TREE_TYPE (parms))
9690           && complete_type_or_else (TREE_TYPE (parms), parms))
9691         {
9692           relayout_decl (parms);
9693           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
9694         }
9695       else
9696         /* grokparms or complete_type_or_else will have already issued
9697            an error.  */
9698         TREE_TYPE (parms) = error_mark_node;
9699     }
9700 }
9701
9702 /* Returns nonzero if T is a local variable.  */
9703
9704 int
9705 local_variable_p (const_tree t)
9706 {
9707   if ((TREE_CODE (t) == VAR_DECL
9708        /* A VAR_DECL with a context that is a _TYPE is a static data
9709           member.  */
9710        && !TYPE_P (CP_DECL_CONTEXT (t))
9711        /* Any other non-local variable must be at namespace scope.  */
9712        && !DECL_NAMESPACE_SCOPE_P (t))
9713       || (TREE_CODE (t) == PARM_DECL))
9714     return 1;
9715
9716   return 0;
9717 }
9718
9719 /* Like local_variable_p, but suitable for use as a tree-walking
9720    function.  */
9721
9722 static tree
9723 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
9724                          void *data ATTRIBUTE_UNUSED)
9725 {
9726   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
9727     return *tp;
9728   else if (TYPE_P (*tp))
9729     *walk_subtrees = 0;
9730
9731   return NULL_TREE;
9732 }
9733
9734
9735 /* Check that ARG, which is a default-argument expression for a
9736    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
9737    something goes wrong.  DECL may also be a _TYPE node, rather than a
9738    DECL, if there is no DECL available.  */
9739
9740 tree
9741 check_default_argument (tree decl, tree arg)
9742 {
9743   tree var;
9744   tree decl_type;
9745
9746   if (TREE_CODE (arg) == DEFAULT_ARG)
9747     /* We get a DEFAULT_ARG when looking at an in-class declaration
9748        with a default argument.  Ignore the argument for now; we'll
9749        deal with it after the class is complete.  */
9750     return arg;
9751
9752   if (TYPE_P (decl))
9753     {
9754       decl_type = decl;
9755       decl = NULL_TREE;
9756     }
9757   else
9758     decl_type = TREE_TYPE (decl);
9759
9760   if (arg == error_mark_node
9761       || decl == error_mark_node
9762       || TREE_TYPE (arg) == error_mark_node
9763       || decl_type == error_mark_node)
9764     /* Something already went wrong.  There's no need to check
9765        further.  */
9766     return error_mark_node;
9767
9768   /* [dcl.fct.default]
9769
9770      A default argument expression is implicitly converted to the
9771      parameter type.  */
9772   if (!TREE_TYPE (arg)
9773       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
9774     {
9775       if (decl)
9776         error ("default argument for %q#D has type %qT",
9777                decl, TREE_TYPE (arg));
9778       else
9779         error ("default argument for parameter of type %qT has type %qT",
9780                decl_type, TREE_TYPE (arg));
9781
9782       return error_mark_node;
9783     }
9784
9785   /* [dcl.fct.default]
9786
9787      Local variables shall not be used in default argument
9788      expressions.
9789
9790      The keyword `this' shall not be used in a default argument of a
9791      member function.  */
9792   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
9793   if (var)
9794     {
9795       error ("default argument %qE uses local variable %qD", arg, var);
9796       return error_mark_node;
9797     }
9798
9799   /* All is well.  */
9800   return arg;
9801 }
9802
9803 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
9804
9805 static tree
9806 type_is_deprecated (tree type)
9807 {
9808   enum tree_code code;
9809   if (TREE_DEPRECATED (type))
9810     return type;
9811   if (TYPE_NAME (type)
9812       && TREE_DEPRECATED (TYPE_NAME (type)))
9813     return type;
9814
9815   /* Do warn about using typedefs to a deprecated class.  */
9816   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
9817     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
9818
9819   code = TREE_CODE (type);
9820
9821   if (code == POINTER_TYPE || code == REFERENCE_TYPE
9822       || code == OFFSET_TYPE || code == FUNCTION_TYPE
9823       || code == METHOD_TYPE || code == ARRAY_TYPE)
9824     return type_is_deprecated (TREE_TYPE (type));
9825
9826   if (TYPE_PTRMEMFUNC_P (type))
9827     return type_is_deprecated
9828       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
9829
9830   return NULL_TREE;
9831 }
9832
9833 /* Decode the list of parameter types for a function type.
9834    Given the list of things declared inside the parens,
9835    return a list of types.
9836
9837    If this parameter does not end with an ellipsis, we append
9838    void_list_node.
9839
9840    *PARMS is set to the chain of PARM_DECLs created.  */
9841
9842 static tree
9843 grokparms (tree parmlist, tree *parms)
9844 {
9845   tree result = NULL_TREE;
9846   tree decls = NULL_TREE;
9847   tree parm;
9848   int any_error = 0;
9849
9850   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
9851     {
9852       tree type = NULL_TREE;
9853       tree init = TREE_PURPOSE (parm);
9854       tree decl = TREE_VALUE (parm);
9855       const char *errmsg;
9856
9857       if (parm == void_list_node)
9858         break;
9859
9860       if (! decl || TREE_TYPE (decl) == error_mark_node)
9861         continue;
9862
9863       type = TREE_TYPE (decl);
9864       if (VOID_TYPE_P (type))
9865         {
9866           if (same_type_p (type, void_type_node)
9867               && DECL_SELF_REFERENCE_P (type)
9868               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
9869             /* this is a parmlist of `(void)', which is ok.  */
9870             break;
9871           cxx_incomplete_type_error (decl, type);
9872           /* It's not a good idea to actually create parameters of
9873              type `void'; other parts of the compiler assume that a
9874              void type terminates the parameter list.  */
9875           type = error_mark_node;
9876           TREE_TYPE (decl) = error_mark_node;
9877         }
9878
9879       if (type != error_mark_node
9880           && TYPE_FOR_JAVA (type)
9881           && MAYBE_CLASS_TYPE_P (type))
9882         {
9883           error ("parameter %qD has Java class type", decl);
9884           type = error_mark_node;
9885           TREE_TYPE (decl) = error_mark_node;
9886           init = NULL_TREE;
9887         }
9888
9889       if (type != error_mark_node
9890           && (errmsg = targetm.invalid_parameter_type (type)))
9891         {
9892           error (errmsg);
9893           type = error_mark_node;
9894           TREE_TYPE (decl) = error_mark_node;
9895         }
9896
9897       if (type != error_mark_node)
9898         {
9899           if (deprecated_state != DEPRECATED_SUPPRESS)
9900             {
9901               tree deptype = type_is_deprecated (type);
9902               if (deptype)
9903                 warn_deprecated_use (deptype, NULL_TREE);
9904             }
9905
9906           /* Top-level qualifiers on the parameters are
9907              ignored for function types.  */
9908           type = cp_build_qualified_type (type, 0);
9909           if (TREE_CODE (type) == METHOD_TYPE)
9910             {
9911               error ("parameter %qD invalidly declared method type", decl);
9912               type = build_pointer_type (type);
9913               TREE_TYPE (decl) = type;
9914             }
9915           else if (abstract_virtuals_error (decl, type))
9916             any_error = 1;  /* Seems like a good idea.  */
9917           else if (POINTER_TYPE_P (type))
9918             {
9919               /* [dcl.fct]/6, parameter types cannot contain pointers
9920                  (references) to arrays of unknown bound.  */
9921               tree t = TREE_TYPE (type);
9922               int ptr = TYPE_PTR_P (type);
9923
9924               while (1)
9925                 {
9926                   if (TYPE_PTR_P (t))
9927                     ptr = 1;
9928                   else if (TREE_CODE (t) != ARRAY_TYPE)
9929                     break;
9930                   else if (!TYPE_DOMAIN (t))
9931                     break;
9932                   t = TREE_TYPE (t);
9933                 }
9934               if (TREE_CODE (t) == ARRAY_TYPE)
9935                 error (ptr
9936                        ? G_("parameter %qD includes pointer to array of "
9937                             "unknown bound %qT")
9938                        : G_("parameter %qD includes reference to array of "
9939                             "unknown bound %qT"),
9940                        decl, t);
9941             }
9942
9943           if (any_error)
9944             init = NULL_TREE;
9945           else if (init && !processing_template_decl)
9946             init = check_default_argument (decl, init);
9947         }
9948
9949       if (TREE_CODE (decl) == PARM_DECL
9950           && FUNCTION_PARAMETER_PACK_P (decl)
9951           && TREE_CHAIN (parm)
9952           && TREE_CHAIN (parm) != void_list_node)
9953         error ("parameter packs must be at the end of the parameter list");
9954
9955       TREE_CHAIN (decl) = decls;
9956       decls = decl;
9957       result = tree_cons (init, type, result);
9958     }
9959   decls = nreverse (decls);
9960   result = nreverse (result);
9961   if (parm)
9962     result = chainon (result, void_list_node);
9963   *parms = decls;
9964
9965   return result;
9966 }
9967
9968 \f
9969 /* D is a constructor or overloaded `operator='.
9970
9971    Let T be the class in which D is declared. Then, this function
9972    returns:
9973
9974    -1 if D's is an ill-formed constructor or copy assignment operator
9975       whose first parameter is of type `T'.
9976    0  if D is not a copy constructor or copy assignment
9977       operator.
9978    1  if D is a copy constructor or copy assignment operator whose
9979       first parameter is a reference to non-const qualified T.
9980    2  if D is a copy constructor or copy assignment operator whose
9981       first parameter is a reference to const qualified T.
9982
9983    This function can be used as a predicate. Positive values indicate
9984    a copy constructor and nonzero values indicate a copy assignment
9985    operator.  */
9986
9987 int
9988 copy_fn_p (const_tree d)
9989 {
9990   tree args;
9991   tree arg_type;
9992   int result = 1;
9993
9994   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
9995
9996   if (TREE_CODE (d) == TEMPLATE_DECL
9997       || (DECL_TEMPLATE_INFO (d)
9998           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
9999     /* Instantiations of template member functions are never copy
10000        functions.  Note that member functions of templated classes are
10001        represented as template functions internally, and we must
10002        accept those as copy functions.  */
10003     return 0;
10004
10005   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10006   if (!args)
10007     return 0;
10008
10009   arg_type = TREE_VALUE (args);
10010   if (arg_type == error_mark_node)
10011     return 0;
10012
10013   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10014     {
10015       /* Pass by value copy assignment operator.  */
10016       result = -1;
10017     }
10018   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10019            && !TYPE_REF_IS_RVALUE (arg_type)
10020            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10021     {
10022       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10023         result = 2;
10024     }
10025   else
10026     return 0;
10027
10028   args = TREE_CHAIN (args);
10029
10030   if (args && args != void_list_node && !TREE_PURPOSE (args))
10031     /* There are more non-optional args.  */
10032     return 0;
10033
10034   return result;
10035 }
10036
10037 /* D is a constructor or overloaded `operator='.
10038
10039    Let T be the class in which D is declared. Then, this function
10040    returns true when D is a move constructor or move assignment
10041    operator, false otherwise.  */
10042
10043 bool
10044 move_fn_p (const_tree d)
10045 {
10046   tree args;
10047   tree arg_type;
10048   bool result = false;
10049
10050   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10051
10052   if (cxx_dialect == cxx98)
10053     /* There are no move constructors if we are in C++98 mode.  */
10054     return false;
10055
10056   if (TREE_CODE (d) == TEMPLATE_DECL
10057       || (DECL_TEMPLATE_INFO (d)
10058          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10059     /* Instantiations of template member functions are never copy
10060        functions.  Note that member functions of templated classes are
10061        represented as template functions internally, and we must
10062        accept those as copy functions.  */
10063     return 0;
10064
10065   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10066   if (!args)
10067     return 0;
10068
10069   arg_type = TREE_VALUE (args);
10070   if (arg_type == error_mark_node)
10071     return 0;
10072
10073   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10074       && TYPE_REF_IS_RVALUE (arg_type)
10075       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10076                       DECL_CONTEXT (d)))
10077     result = true;
10078
10079   args = TREE_CHAIN (args);
10080
10081   if (args && args != void_list_node && !TREE_PURPOSE (args))
10082     /* There are more non-optional args.  */
10083     return false;
10084
10085   return result;
10086 }
10087
10088 /* Remember any special properties of member function DECL.  */
10089
10090 void
10091 grok_special_member_properties (tree decl)
10092 {
10093   tree class_type;
10094
10095   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10096     return;
10097
10098   class_type = DECL_CONTEXT (decl);
10099   if (DECL_CONSTRUCTOR_P (decl))
10100     {
10101       int ctor = copy_fn_p (decl);
10102
10103       if (!DECL_ARTIFICIAL (decl))
10104         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10105
10106       if (ctor > 0)
10107         {
10108           /* [class.copy]
10109
10110              A non-template constructor for class X is a copy
10111              constructor if its first parameter is of type X&, const
10112              X&, volatile X& or const volatile X&, and either there
10113              are no other parameters or else all other parameters have
10114              default arguments.  */
10115           TYPE_HAS_INIT_REF (class_type) = 1;
10116           if (user_provided_p (decl))
10117             TYPE_HAS_COMPLEX_INIT_REF (class_type) = 1;
10118           if (ctor > 1)
10119             TYPE_HAS_CONST_INIT_REF (class_type) = 1;
10120         }
10121       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10122         {
10123           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10124           if (user_provided_p (decl))
10125             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10126         }
10127       else if (is_list_ctor (decl))
10128         TYPE_HAS_LIST_CTOR (class_type) = 1;
10129     }
10130   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10131     {
10132       /* [class.copy]
10133
10134          A non-template assignment operator for class X is a copy
10135          assignment operator if its parameter is of type X, X&, const
10136          X&, volatile X& or const volatile X&.  */
10137
10138       int assop = copy_fn_p (decl);
10139
10140       if (assop)
10141         {
10142           TYPE_HAS_ASSIGN_REF (class_type) = 1;
10143           if (user_provided_p (decl))
10144             TYPE_HAS_COMPLEX_ASSIGN_REF (class_type) = 1;
10145           if (assop != 1)
10146             TYPE_HAS_CONST_ASSIGN_REF (class_type) = 1;
10147         }
10148     }
10149 }
10150
10151 /* Check a constructor DECL has the correct form.  Complains
10152    if the class has a constructor of the form X(X).  */
10153
10154 int
10155 grok_ctor_properties (const_tree ctype, const_tree decl)
10156 {
10157   int ctor_parm = copy_fn_p (decl);
10158
10159   if (ctor_parm < 0)
10160     {
10161       /* [class.copy]
10162
10163          A declaration of a constructor for a class X is ill-formed if
10164          its first parameter is of type (optionally cv-qualified) X
10165          and either there are no other parameters or else all other
10166          parameters have default arguments.
10167
10168          We *don't* complain about member template instantiations that
10169          have this form, though; they can occur as we try to decide
10170          what constructor to use during overload resolution.  Since
10171          overload resolution will never prefer such a constructor to
10172          the non-template copy constructor (which is either explicitly
10173          or implicitly defined), there's no need to worry about their
10174          existence.  Theoretically, they should never even be
10175          instantiated, but that's hard to forestall.  */
10176       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10177                 ctype, ctype);
10178       return 0;
10179     }
10180
10181   return 1;
10182 }
10183
10184 /* An operator with this code is unary, but can also be binary.  */
10185
10186 static int
10187 ambi_op_p (enum tree_code code)
10188 {
10189   return (code == INDIRECT_REF
10190           || code == ADDR_EXPR
10191           || code == UNARY_PLUS_EXPR
10192           || code == NEGATE_EXPR
10193           || code == PREINCREMENT_EXPR
10194           || code == PREDECREMENT_EXPR);
10195 }
10196
10197 /* An operator with this name can only be unary.  */
10198
10199 static int
10200 unary_op_p (enum tree_code code)
10201 {
10202   return (code == TRUTH_NOT_EXPR
10203           || code == BIT_NOT_EXPR
10204           || code == COMPONENT_REF
10205           || code == TYPE_EXPR);
10206 }
10207
10208 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10209    errors are issued for invalid declarations.  */
10210
10211 bool
10212 grok_op_properties (tree decl, bool complain)
10213 {
10214   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10215   tree argtype;
10216   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10217   tree name = DECL_NAME (decl);
10218   enum tree_code operator_code;
10219   int arity;
10220   bool ellipsis_p;
10221   tree class_type;
10222
10223   /* Count the number of arguments and check for ellipsis.  */
10224   for (argtype = argtypes, arity = 0;
10225        argtype && argtype != void_list_node;
10226        argtype = TREE_CHAIN (argtype))
10227     ++arity;
10228   ellipsis_p = !argtype;
10229
10230   class_type = DECL_CONTEXT (decl);
10231   if (class_type && !CLASS_TYPE_P (class_type))
10232     class_type = NULL_TREE;
10233
10234   if (DECL_CONV_FN_P (decl))
10235     operator_code = TYPE_EXPR;
10236   else
10237     do
10238       {
10239 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10240         if (ansi_opname (CODE) == name)                         \
10241           {                                                     \
10242             operator_code = (CODE);                             \
10243             break;                                              \
10244           }                                                     \
10245         else if (ansi_assopname (CODE) == name)                 \
10246           {                                                     \
10247             operator_code = (CODE);                             \
10248             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10249             break;                                              \
10250           }
10251
10252 #include "operators.def"
10253 #undef DEF_OPERATOR
10254
10255         gcc_unreachable ();
10256       }
10257     while (0);
10258   gcc_assert (operator_code != MAX_TREE_CODES);
10259   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10260
10261   if (class_type)
10262     switch (operator_code)
10263       {
10264       case NEW_EXPR:
10265         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10266         break;
10267
10268       case DELETE_EXPR:
10269         TYPE_GETS_DELETE (class_type) |= 1;
10270         break;
10271
10272       case VEC_NEW_EXPR:
10273         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10274         break;
10275
10276       case VEC_DELETE_EXPR:
10277         TYPE_GETS_DELETE (class_type) |= 2;
10278         break;
10279
10280       default:
10281         break;
10282       }
10283
10284     /* [basic.std.dynamic.allocation]/1:
10285
10286        A program is ill-formed if an allocation function is declared
10287        in a namespace scope other than global scope or declared static
10288        in global scope.
10289
10290        The same also holds true for deallocation functions.  */
10291   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10292       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10293     {
10294       if (DECL_NAMESPACE_SCOPE_P (decl))
10295         {
10296           if (CP_DECL_CONTEXT (decl) != global_namespace)
10297             {
10298               error ("%qD may not be declared within a namespace", decl);
10299               return false;
10300             }
10301           else if (!TREE_PUBLIC (decl))
10302             {
10303               error ("%qD may not be declared as static", decl);
10304               return false;
10305             }
10306         }
10307     }
10308
10309   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10310     {
10311       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10312       DECL_IS_OPERATOR_NEW (decl) = 1;
10313     }
10314   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10315     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10316   else
10317     {
10318       /* An operator function must either be a non-static member function
10319          or have at least one parameter of a class, a reference to a class,
10320          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10321       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10322         {
10323           if (operator_code == TYPE_EXPR
10324               || operator_code == CALL_EXPR
10325               || operator_code == COMPONENT_REF
10326               || operator_code == ARRAY_REF
10327               || operator_code == NOP_EXPR)
10328             {
10329               error ("%qD must be a nonstatic member function", decl);
10330               return false;
10331             }
10332           else
10333             {
10334               tree p;
10335
10336               if (DECL_STATIC_FUNCTION_P (decl))
10337                 {
10338                   error ("%qD must be either a non-static member "
10339                          "function or a non-member function", decl);
10340                   return false;
10341                 }
10342
10343               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10344                 {
10345                   tree arg = non_reference (TREE_VALUE (p));
10346                   if (arg == error_mark_node)
10347                     return false;
10348
10349                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10350                      because these checks are performed even on
10351                      template functions.  */
10352                   if (MAYBE_CLASS_TYPE_P (arg)
10353                       || TREE_CODE (arg) == ENUMERAL_TYPE)
10354                     break;
10355                 }
10356
10357               if (!p || p == void_list_node)
10358                 {
10359                   if (complain)
10360                     error ("%qD must have an argument of class or "
10361                            "enumerated type", decl);
10362                   return false;
10363                 }
10364             }
10365         }
10366
10367       /* There are no restrictions on the arguments to an overloaded
10368          "operator ()".  */
10369       if (operator_code == CALL_EXPR)
10370         return true;
10371
10372       /* Warn about conversion operators that will never be used.  */
10373       if (IDENTIFIER_TYPENAME_P (name)
10374           && ! DECL_TEMPLATE_INFO (decl)
10375           && warn_conversion
10376           /* Warn only declaring the function; there is no need to
10377              warn again about out-of-class definitions.  */
10378           && class_type == current_class_type)
10379         {
10380           tree t = TREE_TYPE (name);
10381           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
10382
10383           if (ref)
10384             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
10385
10386           if (TREE_CODE (t) == VOID_TYPE)
10387             warning (OPT_Wconversion,
10388                      ref
10389                      ? G_("conversion to a reference to void "
10390                           "will never use a type conversion operator")
10391                      : G_("conversion to void "
10392                           "will never use a type conversion operator"));
10393           else if (class_type)
10394             {
10395               if (t == class_type)
10396                 warning (OPT_Wconversion,
10397                      ref
10398                      ? G_("conversion to a reference to the same type "
10399                           "will never use a type conversion operator")
10400                      : G_("conversion to the same type "
10401                           "will never use a type conversion operator"));                
10402               /* Don't force t to be complete here.  */
10403               else if (MAYBE_CLASS_TYPE_P (t)
10404                        && COMPLETE_TYPE_P (t)
10405                        && DERIVED_FROM_P (t, class_type))
10406                  warning (OPT_Wconversion,
10407                           ref
10408                           ? G_("conversion to a reference to a base class "
10409                                "will never use a type conversion operator")
10410                           : G_("conversion to a base class "
10411                                "will never use a type conversion operator"));           
10412             }
10413
10414         }
10415
10416       if (operator_code == COND_EXPR)
10417         {
10418           /* 13.4.0.3 */
10419           error ("ISO C++ prohibits overloading operator ?:");
10420           return false;
10421         }
10422       else if (ellipsis_p)
10423         {
10424           error ("%qD must not have variable number of arguments", decl);
10425           return false;
10426         }
10427       else if (ambi_op_p (operator_code))
10428         {
10429           if (arity == 1)
10430             /* We pick the one-argument operator codes by default, so
10431                we don't have to change anything.  */
10432             ;
10433           else if (arity == 2)
10434             {
10435               /* If we thought this was a unary operator, we now know
10436                  it to be a binary operator.  */
10437               switch (operator_code)
10438                 {
10439                 case INDIRECT_REF:
10440                   operator_code = MULT_EXPR;
10441                   break;
10442
10443                 case ADDR_EXPR:
10444                   operator_code = BIT_AND_EXPR;
10445                   break;
10446
10447                 case UNARY_PLUS_EXPR:
10448                   operator_code = PLUS_EXPR;
10449                   break;
10450
10451                 case NEGATE_EXPR:
10452                   operator_code = MINUS_EXPR;
10453                   break;
10454
10455                 case PREINCREMENT_EXPR:
10456                   operator_code = POSTINCREMENT_EXPR;
10457                   break;
10458
10459                 case PREDECREMENT_EXPR:
10460                   operator_code = POSTDECREMENT_EXPR;
10461                   break;
10462
10463                 default:
10464                   gcc_unreachable ();
10465                 }
10466
10467               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10468
10469               if ((operator_code == POSTINCREMENT_EXPR
10470                    || operator_code == POSTDECREMENT_EXPR)
10471                   && ! processing_template_decl
10472                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
10473                 {
10474                   if (methodp)
10475                     error ("postfix %qD must take %<int%> as its argument",
10476                            decl);
10477                   else
10478                     error ("postfix %qD must take %<int%> as its second "
10479                            "argument", decl);
10480                   return false;
10481                 }
10482             }
10483           else
10484             {
10485               if (methodp)
10486                 error ("%qD must take either zero or one argument", decl);
10487               else
10488                 error ("%qD must take either one or two arguments", decl);
10489               return false;
10490             }
10491
10492           /* More Effective C++ rule 6.  */
10493           if (warn_ecpp
10494               && (operator_code == POSTINCREMENT_EXPR
10495                   || operator_code == POSTDECREMENT_EXPR
10496                   || operator_code == PREINCREMENT_EXPR
10497                   || operator_code == PREDECREMENT_EXPR))
10498             {
10499               tree arg = TREE_VALUE (argtypes);
10500               tree ret = TREE_TYPE (TREE_TYPE (decl));
10501               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
10502                 arg = TREE_TYPE (arg);
10503               arg = TYPE_MAIN_VARIANT (arg);
10504               if (operator_code == PREINCREMENT_EXPR
10505                   || operator_code == PREDECREMENT_EXPR)
10506                 {
10507                   if (TREE_CODE (ret) != REFERENCE_TYPE
10508                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
10509                                        arg))
10510                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
10511                              build_reference_type (arg));
10512                 }
10513               else
10514                 {
10515                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
10516                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
10517                 }
10518             }
10519         }
10520       else if (unary_op_p (operator_code))
10521         {
10522           if (arity != 1)
10523             {
10524               if (methodp)
10525                 error ("%qD must take %<void%>", decl);
10526               else
10527                 error ("%qD must take exactly one argument", decl);
10528               return false;
10529             }
10530         }
10531       else /* if (binary_op_p (operator_code)) */
10532         {
10533           if (arity != 2)
10534             {
10535               if (methodp)
10536                 error ("%qD must take exactly one argument", decl);
10537               else
10538                 error ("%qD must take exactly two arguments", decl);
10539               return false;
10540             }
10541
10542           /* More Effective C++ rule 7.  */
10543           if (warn_ecpp
10544               && (operator_code == TRUTH_ANDIF_EXPR
10545                   || operator_code == TRUTH_ORIF_EXPR
10546                   || operator_code == COMPOUND_EXPR))
10547             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
10548                      decl);
10549         }
10550
10551       /* Effective C++ rule 23.  */
10552       if (warn_ecpp
10553           && arity == 2
10554           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
10555           && (operator_code == PLUS_EXPR
10556               || operator_code == MINUS_EXPR
10557               || operator_code == TRUNC_DIV_EXPR
10558               || operator_code == MULT_EXPR
10559               || operator_code == TRUNC_MOD_EXPR)
10560           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
10561         warning (OPT_Weffc__, "%qD should return by value", decl);
10562
10563       /* [over.oper]/8 */
10564       for (; argtypes && argtypes != void_list_node;
10565           argtypes = TREE_CHAIN (argtypes))
10566         if (TREE_PURPOSE (argtypes))
10567           {
10568             TREE_PURPOSE (argtypes) = NULL_TREE;
10569             if (operator_code == POSTINCREMENT_EXPR
10570                 || operator_code == POSTDECREMENT_EXPR)
10571               {
10572                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
10573                          decl);
10574               }
10575             else
10576               {
10577                 error ("%qD cannot have default arguments", decl);
10578                 return false;
10579               }
10580           }
10581     }
10582   return true;
10583 }
10584 \f
10585 /* Return a string giving the keyword associate with CODE.  */
10586
10587 static const char *
10588 tag_name (enum tag_types code)
10589 {
10590   switch (code)
10591     {
10592     case record_type:
10593       return "struct";
10594     case class_type:
10595       return "class";
10596     case union_type:
10597       return "union";
10598     case enum_type:
10599       return "enum";
10600     case typename_type:
10601       return "typename";
10602     default:
10603       gcc_unreachable ();
10604     }
10605 }
10606
10607 /* Name lookup in an elaborated-type-specifier (after the keyword
10608    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
10609    elaborated-type-specifier is invalid, issue a diagnostic and return
10610    error_mark_node; otherwise, return the *_TYPE to which it referred.
10611    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
10612
10613 tree
10614 check_elaborated_type_specifier (enum tag_types tag_code,
10615                                  tree decl,
10616                                  bool allow_template_p)
10617 {
10618   tree type;
10619
10620   /* In the case of:
10621
10622        struct S { struct S *p; };
10623
10624      name lookup will find the TYPE_DECL for the implicit "S::S"
10625      typedef.  Adjust for that here.  */
10626   if (DECL_SELF_REFERENCE_P (decl))
10627     decl = TYPE_NAME (TREE_TYPE (decl));
10628
10629   type = TREE_TYPE (decl);
10630
10631   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
10632      is false for this case as well.  */
10633   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
10634     {
10635       error ("using template type parameter %qT after %qs",
10636              type, tag_name (tag_code));
10637       return error_mark_node;
10638     }
10639   /*   [dcl.type.elab]
10640
10641        If the identifier resolves to a typedef-name or a template
10642        type-parameter, the elaborated-type-specifier is ill-formed.
10643
10644      In other words, the only legitimate declaration to use in the
10645      elaborated type specifier is the implicit typedef created when
10646      the type is declared.  */
10647   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
10648            && !DECL_SELF_REFERENCE_P (decl)
10649            && tag_code != typename_type)
10650     {
10651       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
10652       error ("%q+D has a previous declaration here", decl);
10653       return error_mark_node;
10654     }
10655   else if (TREE_CODE (type) != RECORD_TYPE
10656            && TREE_CODE (type) != UNION_TYPE
10657            && tag_code != enum_type
10658            && tag_code != typename_type)
10659     {
10660       error ("%qT referred to as %qs", type, tag_name (tag_code));
10661       error ("%q+T has a previous declaration here", type);
10662       return error_mark_node;
10663     }
10664   else if (TREE_CODE (type) != ENUMERAL_TYPE
10665            && tag_code == enum_type)
10666     {
10667       error ("%qT referred to as enum", type);
10668       error ("%q+T has a previous declaration here", type);
10669       return error_mark_node;
10670     }
10671   else if (!allow_template_p
10672            && TREE_CODE (type) == RECORD_TYPE
10673            && CLASSTYPE_IS_TEMPLATE (type))
10674     {
10675       /* If a class template appears as elaborated type specifier
10676          without a template header such as:
10677
10678            template <class T> class C {};
10679            void f(class C);             // No template header here
10680
10681          then the required template argument is missing.  */
10682       error ("template argument required for %<%s %T%>",
10683              tag_name (tag_code),
10684              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
10685       return error_mark_node;
10686     }
10687
10688   return type;
10689 }
10690
10691 /* Lookup NAME in elaborate type specifier in scope according to
10692    SCOPE and issue diagnostics if necessary.
10693    Return *_TYPE node upon success, NULL_TREE when the NAME is not
10694    found, and ERROR_MARK_NODE for type error.  */
10695
10696 static tree
10697 lookup_and_check_tag (enum tag_types tag_code, tree name,
10698                       tag_scope scope, bool template_header_p)
10699 {
10700   tree t;
10701   tree decl;
10702   if (scope == ts_global)
10703     {
10704       /* First try ordinary name lookup, ignoring hidden class name
10705          injected via friend declaration.  */
10706       decl = lookup_name_prefer_type (name, 2);
10707       /* If that fails, the name will be placed in the smallest
10708          non-class, non-function-prototype scope according to 3.3.1/5.
10709          We may already have a hidden name declared as friend in this
10710          scope.  So lookup again but not ignoring hidden names.
10711          If we find one, that name will be made visible rather than
10712          creating a new tag.  */
10713       if (!decl)
10714         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
10715     }
10716   else
10717     decl = lookup_type_scope (name, scope);
10718
10719   if (decl && DECL_CLASS_TEMPLATE_P (decl))
10720     decl = DECL_TEMPLATE_RESULT (decl);
10721
10722   if (decl && TREE_CODE (decl) == TYPE_DECL)
10723     {
10724       /* Look for invalid nested type:
10725            class C {
10726              class C {};
10727            };  */
10728       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
10729         {
10730           error ("%qD has the same name as the class in which it is "
10731                  "declared",
10732                  decl);
10733           return error_mark_node;
10734         }
10735
10736       /* Two cases we need to consider when deciding if a class
10737          template is allowed as an elaborated type specifier:
10738          1. It is a self reference to its own class.
10739          2. It comes with a template header.
10740
10741          For example:
10742
10743            template <class T> class C {
10744              class C *c1;               // DECL_SELF_REFERENCE_P is true
10745              class D;
10746            };
10747            template <class U> class C; // template_header_p is true
10748            template <class T> class C<T>::D {
10749              class C *c2;               // DECL_SELF_REFERENCE_P is true
10750            };  */
10751
10752       t = check_elaborated_type_specifier (tag_code,
10753                                            decl,
10754                                            template_header_p
10755                                            | DECL_SELF_REFERENCE_P (decl));
10756       return t;
10757     }
10758   else if (decl && TREE_CODE (decl) == TREE_LIST)
10759     {
10760       error ("reference to %qD is ambiguous", name);
10761       print_candidates (decl);
10762       return error_mark_node;
10763     }
10764   else
10765     return NULL_TREE;
10766 }
10767
10768 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
10769    Define the tag as a forward-reference if it is not defined.
10770
10771    If a declaration is given, process it here, and report an error if
10772    multiple declarations are not identical.
10773
10774    SCOPE is TS_CURRENT when this is also a definition.  Only look in
10775    the current frame for the name (since C++ allows new names in any
10776    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
10777    declaration.  Only look beginning from the current scope outward up
10778    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
10779
10780    TEMPLATE_HEADER_P is true when this declaration is preceded by
10781    a set of template parameters.  */
10782
10783 tree
10784 xref_tag (enum tag_types tag_code, tree name,
10785           tag_scope scope, bool template_header_p)
10786 {
10787   enum tree_code code;
10788   tree t;
10789   tree context = NULL_TREE;
10790
10791   timevar_push (TV_NAME_LOOKUP);
10792
10793   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
10794
10795   switch (tag_code)
10796     {
10797     case record_type:
10798     case class_type:
10799       code = RECORD_TYPE;
10800       break;
10801     case union_type:
10802       code = UNION_TYPE;
10803       break;
10804     case enum_type:
10805       code = ENUMERAL_TYPE;
10806       break;
10807     default:
10808       gcc_unreachable ();
10809     }
10810
10811   /* In case of anonymous name, xref_tag is only called to
10812      make type node and push name.  Name lookup is not required.  */
10813   if (ANON_AGGRNAME_P (name))
10814     t = NULL_TREE;
10815   else
10816     t = lookup_and_check_tag  (tag_code, name,
10817                                scope, template_header_p);
10818
10819   if (t == error_mark_node)
10820     POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10821
10822   if (scope != ts_current && t && current_class_type
10823       && template_class_depth (current_class_type)
10824       && template_header_p)
10825     {
10826       /* Since SCOPE is not TS_CURRENT, we are not looking at a
10827          definition of this tag.  Since, in addition, we are currently
10828          processing a (member) template declaration of a template
10829          class, we must be very careful; consider:
10830
10831            template <class X>
10832            struct S1
10833
10834            template <class U>
10835            struct S2
10836            { template <class V>
10837            friend struct S1; };
10838
10839          Here, the S2::S1 declaration should not be confused with the
10840          outer declaration.  In particular, the inner version should
10841          have a template parameter of level 2, not level 1.  This
10842          would be particularly important if the member declaration
10843          were instead:
10844
10845            template <class V = U> friend struct S1;
10846
10847          say, when we should tsubst into `U' when instantiating
10848          S2.  On the other hand, when presented with:
10849
10850            template <class T>
10851            struct S1 {
10852              template <class U>
10853              struct S2 {};
10854              template <class U>
10855              friend struct S2;
10856            };
10857
10858          we must find the inner binding eventually.  We
10859          accomplish this by making sure that the new type we
10860          create to represent this declaration has the right
10861          TYPE_CONTEXT.  */
10862       context = TYPE_CONTEXT (t);
10863       t = NULL_TREE;
10864     }
10865
10866   if (! t)
10867     {
10868       /* If no such tag is yet defined, create a forward-reference node
10869          and record it as the "definition".
10870          When a real declaration of this type is found,
10871          the forward-reference will be altered into a real type.  */
10872       if (code == ENUMERAL_TYPE)
10873         {
10874           error ("use of enum %q#D without previous declaration", name);
10875           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10876         }
10877       else
10878         {
10879           t = make_class_type (code);
10880           TYPE_CONTEXT (t) = context;
10881           t = pushtag (name, t, scope);
10882         }
10883     }
10884   else
10885     {
10886       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
10887         {
10888           if (!redeclare_class_template (t, current_template_parms))
10889             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10890         }
10891       else if (!processing_template_decl
10892                && CLASS_TYPE_P (t)
10893                && CLASSTYPE_IS_TEMPLATE (t))
10894         {
10895           error ("redeclaration of %qT as a non-template", t);
10896           error ("previous declaration %q+D", t);
10897           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
10898         }
10899
10900       /* Make injected friend class visible.  */
10901       if (scope != ts_within_enclosing_non_class
10902           && hidden_name_p (TYPE_NAME (t)))
10903         {
10904           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
10905           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
10906
10907           if (TYPE_TEMPLATE_INFO (t))
10908             {
10909               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
10910               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
10911             }
10912         }
10913     }
10914
10915   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
10916 }
10917
10918 tree
10919 xref_tag_from_type (tree old, tree id, tag_scope scope)
10920 {
10921   enum tag_types tag_kind;
10922
10923   if (TREE_CODE (old) == RECORD_TYPE)
10924     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
10925   else
10926     tag_kind  = union_type;
10927
10928   if (id == NULL_TREE)
10929     id = TYPE_IDENTIFIER (old);
10930
10931   return xref_tag (tag_kind, id, scope, false);
10932 }
10933
10934 /* Create the binfo hierarchy for REF with (possibly NULL) base list
10935    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
10936    access_* node, and the TREE_VALUE is the type of the base-class.
10937    Non-NULL TREE_TYPE indicates virtual inheritance.  
10938  
10939    Returns true if the binfo hierarchy was successfully created,
10940    false if an error was detected. */
10941
10942 bool
10943 xref_basetypes (tree ref, tree base_list)
10944 {
10945   tree *basep;
10946   tree binfo, base_binfo;
10947   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
10948   unsigned max_bases = 0;  /* Maximum direct bases.  */
10949   int i;
10950   tree default_access;
10951   tree igo_prev; /* Track Inheritance Graph Order.  */
10952
10953   if (ref == error_mark_node)
10954     return false;
10955
10956   /* The base of a derived class is private by default, all others are
10957      public.  */
10958   default_access = (TREE_CODE (ref) == RECORD_TYPE
10959                     && CLASSTYPE_DECLARED_CLASS (ref)
10960                     ? access_private_node : access_public_node);
10961
10962   /* First, make sure that any templates in base-classes are
10963      instantiated.  This ensures that if we call ourselves recursively
10964      we do not get confused about which classes are marked and which
10965      are not.  */
10966   basep = &base_list;
10967   while (*basep)
10968     {
10969       tree basetype = TREE_VALUE (*basep);
10970
10971       if (!(processing_template_decl && uses_template_parms (basetype))
10972           && !complete_type_or_else (basetype, NULL))
10973         /* An incomplete type.  Remove it from the list.  */
10974         *basep = TREE_CHAIN (*basep);
10975       else
10976         {
10977           max_bases++;
10978           if (TREE_TYPE (*basep))
10979             max_vbases++;
10980           if (CLASS_TYPE_P (basetype))
10981             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
10982           basep = &TREE_CHAIN (*basep);
10983         }
10984     }
10985
10986   TYPE_MARKED_P (ref) = 1;
10987
10988   /* The binfo slot should be empty, unless this is an (ill-formed)
10989      redefinition.  */
10990   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
10991   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
10992
10993   binfo = make_tree_binfo (max_bases);
10994
10995   TYPE_BINFO (ref) = binfo;
10996   BINFO_OFFSET (binfo) = size_zero_node;
10997   BINFO_TYPE (binfo) = ref;
10998
10999   /* Apply base-class info set up to the variants of this type.  */
11000   fixup_type_variants (ref);
11001
11002   if (max_bases)
11003     {
11004       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11005       /* An aggregate cannot have baseclasses.  */
11006       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11007
11008       if (TREE_CODE (ref) == UNION_TYPE)
11009         {
11010           error ("derived union %qT invalid", ref);
11011           return false;
11012         }
11013     }
11014
11015   if (max_bases > 1)
11016     {
11017       if (TYPE_FOR_JAVA (ref))
11018         {
11019           error ("Java class %qT cannot have multiple bases", ref);
11020           return false;
11021         }
11022     }
11023
11024   if (max_vbases)
11025     {
11026       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11027
11028       if (TYPE_FOR_JAVA (ref))
11029         {
11030           error ("Java class %qT cannot have virtual bases", ref);
11031           return false;
11032         }
11033     }
11034
11035   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11036     {
11037       tree access = TREE_PURPOSE (base_list);
11038       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11039       tree basetype = TREE_VALUE (base_list);
11040
11041       if (access == access_default_node)
11042         access = default_access;
11043
11044       if (PACK_EXPANSION_P (basetype))
11045         basetype = PACK_EXPANSION_PATTERN (basetype);
11046       if (TREE_CODE (basetype) == TYPE_DECL)
11047         basetype = TREE_TYPE (basetype);
11048       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11049         {
11050           error ("base type %qT fails to be a struct or class type",
11051                  basetype);
11052           return false;
11053         }
11054
11055       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11056         TYPE_FOR_JAVA (ref) = 1;
11057
11058       base_binfo = NULL_TREE;
11059       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11060         {
11061           base_binfo = TYPE_BINFO (basetype);
11062           /* The original basetype could have been a typedef'd type.  */
11063           basetype = BINFO_TYPE (base_binfo);
11064
11065           /* Inherit flags from the base.  */
11066           TYPE_HAS_NEW_OPERATOR (ref)
11067             |= TYPE_HAS_NEW_OPERATOR (basetype);
11068           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11069             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11070           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11071           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11072           CLASSTYPE_DIAMOND_SHAPED_P (ref)
11073             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11074           CLASSTYPE_REPEATED_BASE_P (ref)
11075             |= CLASSTYPE_REPEATED_BASE_P (basetype);
11076         }
11077
11078       /* We must do this test after we've seen through a typedef
11079          type.  */
11080       if (TYPE_MARKED_P (basetype))
11081         {
11082           if (basetype == ref)
11083             error ("recursive type %qT undefined", basetype);
11084           else
11085             error ("duplicate base type %qT invalid", basetype);
11086           return false;
11087         }
11088
11089       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11090         /* Regenerate the pack expansion for the bases. */
11091         basetype = make_pack_expansion (basetype);
11092
11093       TYPE_MARKED_P (basetype) = 1;
11094
11095       base_binfo = copy_binfo (base_binfo, basetype, ref,
11096                                &igo_prev, via_virtual);
11097       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11098         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11099
11100       BINFO_BASE_APPEND (binfo, base_binfo);
11101       BINFO_BASE_ACCESS_APPEND (binfo, access);
11102     }
11103
11104   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11105     /* If we have space in the vbase vector, we must have shared at
11106        least one of them, and are therefore diamond shaped.  */
11107     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11108
11109   /* Unmark all the types.  */
11110   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11111     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11112   TYPE_MARKED_P (ref) = 0;
11113
11114   /* Now see if we have a repeated base type.  */
11115   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11116     {
11117       for (base_binfo = binfo; base_binfo;
11118            base_binfo = TREE_CHAIN (base_binfo))
11119         {
11120           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11121             {
11122               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11123               break;
11124             }
11125           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11126         }
11127       for (base_binfo = binfo; base_binfo;
11128            base_binfo = TREE_CHAIN (base_binfo))
11129         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11130           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11131         else
11132           break;
11133     }
11134
11135   return true;
11136 }
11137
11138 \f
11139 /* Begin compiling the definition of an enumeration type.
11140    NAME is its name, 
11141
11142    UNDERLYING_TYPE is the type that will be used as the storage for
11143    the enumeration type. This should be NULL_TREE if no storage type
11144    was specified.
11145
11146    SCOPED_ENUM_P is true if this is a scoped enumeration type.
11147
11148    Returns the type object, as yet incomplete.
11149    Also records info about it so that build_enumerator
11150    may be used to declare the individual values as they are read.  */
11151
11152 tree
11153 start_enum (tree name, tree underlying_type, bool scoped_enum_p)
11154 {
11155   tree enumtype;
11156
11157   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11158
11159   /* If this is the real definition for a previous forward reference,
11160      fill in the contents in the same object that used to be the
11161      forward reference.  */
11162
11163   enumtype = lookup_and_check_tag (enum_type, name,
11164                                    /*tag_scope=*/ts_current,
11165                                    /*template_header_p=*/false);
11166
11167   if (enumtype != NULL_TREE && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11168     {
11169       error_at (input_location, "multiple definition of %q#T", enumtype);
11170       error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11171                 "previous definition here");
11172       /* Clear out TYPE_VALUES, and start again.  */
11173       TYPE_VALUES (enumtype) = NULL_TREE;
11174     }
11175   else
11176     {
11177       /* In case of error, make a dummy enum to allow parsing to
11178          continue.  */
11179       if (enumtype == error_mark_node)
11180         name = make_anon_name ();
11181
11182       enumtype = cxx_make_type (ENUMERAL_TYPE);
11183       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11184     }
11185
11186   if (enumtype == error_mark_node)
11187     return enumtype;
11188
11189   if (scoped_enum_p)
11190     {
11191       SET_SCOPED_ENUM_P (enumtype, 1);
11192       begin_scope (sk_scoped_enum, enumtype);
11193
11194       /* [C++0x dcl.enum]p5: 
11195
11196           If not explicitly specified, the underlying type of a scoped
11197           enumeration type is int.  */
11198       if (!underlying_type)
11199         underlying_type = integer_type_node;
11200     }
11201
11202   if (underlying_type)
11203     {
11204       if (CP_INTEGRAL_TYPE_P (underlying_type))
11205         {
11206           TYPE_MIN_VALUE (enumtype) = TYPE_MIN_VALUE (underlying_type);
11207           TYPE_MAX_VALUE (enumtype) = TYPE_MAX_VALUE (underlying_type);
11208           TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11209           TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11210           SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11211           TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11212           TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11213           TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11214           TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11215           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11216         }
11217       else if (!dependent_type_p (underlying_type))
11218         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11219                underlying_type, enumtype);
11220     }
11221
11222   return enumtype;
11223 }
11224
11225 /* After processing and defining all the values of an enumeration type,
11226    install their decls in the enumeration type and finish it off.
11227    ENUMTYPE is the type object and VALUES a list of name-value pairs.  */
11228
11229 void
11230 finish_enum (tree enumtype)
11231 {
11232   tree values;
11233   tree decl;
11234   tree minnode;
11235   tree maxnode;
11236   tree value;
11237   tree t;
11238   bool unsignedp;
11239   bool use_short_enum;
11240   int lowprec;
11241   int highprec;
11242   int precision;
11243   unsigned int itk;
11244   tree underlying_type = NULL_TREE;
11245   bool fixed_underlying_type_p 
11246     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11247
11248   /* We built up the VALUES in reverse order.  */
11249   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11250
11251   /* For an enum defined in a template, just set the type of the values;
11252      all further processing is postponed until the template is
11253      instantiated.  We need to set the type so that tsubst of a CONST_DECL
11254      works.  */
11255   if (processing_template_decl)
11256     {
11257       for (values = TYPE_VALUES (enumtype);
11258            values;
11259            values = TREE_CHAIN (values))
11260         TREE_TYPE (TREE_VALUE (values)) = enumtype;
11261       if (at_function_scope_p ())
11262         add_stmt (build_min (TAG_DEFN, enumtype));
11263       if (SCOPED_ENUM_P (enumtype))
11264         finish_scope ();
11265       return;
11266     }
11267
11268   /* Determine the minimum and maximum values of the enumerators.  */
11269   if (TYPE_VALUES (enumtype))
11270     {
11271       minnode = maxnode = NULL_TREE;
11272
11273       for (values = TYPE_VALUES (enumtype);
11274            values;
11275            values = TREE_CHAIN (values))
11276         {
11277           decl = TREE_VALUE (values);
11278
11279           /* [dcl.enum]: Following the closing brace of an enum-specifier,
11280              each enumerator has the type of its enumeration.  Prior to the
11281              closing brace, the type of each enumerator is the type of its
11282              initializing value.  */
11283           TREE_TYPE (decl) = enumtype;
11284
11285           /* Update the minimum and maximum values, if appropriate.  */
11286           value = DECL_INITIAL (decl);
11287           if (value == error_mark_node)
11288             value = integer_zero_node;
11289           /* Figure out what the minimum and maximum values of the
11290              enumerators are.  */
11291           if (!minnode)
11292             minnode = maxnode = value;
11293           else if (tree_int_cst_lt (maxnode, value))
11294             maxnode = value;
11295           else if (tree_int_cst_lt (value, minnode))
11296             minnode = value;
11297         }
11298     }
11299   else
11300     /* [dcl.enum]
11301        
11302        If the enumerator-list is empty, the underlying type is as if
11303        the enumeration had a single enumerator with value 0.  */
11304     minnode = maxnode = integer_zero_node;
11305
11306   /* Compute the number of bits require to represent all values of the
11307      enumeration.  We must do this before the type of MINNODE and
11308      MAXNODE are transformed, since tree_int_cst_min_precision relies
11309      on the TREE_TYPE of the value it is passed.  */
11310   unsignedp = tree_int_cst_sgn (minnode) >= 0;
11311   lowprec = tree_int_cst_min_precision (minnode, unsignedp);
11312   highprec = tree_int_cst_min_precision (maxnode, unsignedp);
11313   precision = MAX (lowprec, highprec);
11314
11315   if (!fixed_underlying_type_p)
11316     {
11317       /* Determine the underlying type of the enumeration.
11318
11319          [dcl.enum]
11320
11321          The underlying type of an enumeration is an integral type that
11322          can represent all the enumerator values defined in the
11323          enumeration.  It is implementation-defined which integral type is
11324          used as the underlying type for an enumeration except that the
11325          underlying type shall not be larger than int unless the value of
11326          an enumerator cannot fit in an int or unsigned int.
11327
11328          We use "int" or an "unsigned int" as the underlying type, even if
11329          a smaller integral type would work, unless the user has
11330          explicitly requested that we use the smallest possible type.  The
11331          user can request that for all enumerations with a command line
11332          flag, or for just one enumeration with an attribute.  */
11333
11334       use_short_enum = flag_short_enums
11335         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
11336
11337       for (itk = (use_short_enum ? itk_char : itk_int);
11338            itk != itk_none;
11339            itk++)
11340         {
11341           underlying_type = integer_types[itk];
11342           if (TYPE_PRECISION (underlying_type) >= precision
11343               && TYPE_UNSIGNED (underlying_type) == unsignedp)
11344             break;
11345         }
11346       if (itk == itk_none)
11347         {
11348           /* DR 377
11349
11350              IF no integral type can represent all the enumerator values, the
11351              enumeration is ill-formed.  */
11352           error ("no integral type can represent all of the enumerator values "
11353                  "for %qT", enumtype);
11354           precision = TYPE_PRECISION (long_long_integer_type_node);
11355           underlying_type = integer_types[itk_unsigned_long_long];
11356         }
11357
11358       /* [dcl.enum]
11359
11360          The value of sizeof() applied to an enumeration type, an object
11361          of an enumeration type, or an enumerator, is the value of sizeof()
11362          applied to the underlying type.  */
11363       TYPE_SIZE (enumtype) = TYPE_SIZE (underlying_type);
11364       TYPE_SIZE_UNIT (enumtype) = TYPE_SIZE_UNIT (underlying_type);
11365       SET_TYPE_MODE (enumtype, TYPE_MODE (underlying_type));
11366       TYPE_ALIGN (enumtype) = TYPE_ALIGN (underlying_type);
11367       TYPE_USER_ALIGN (enumtype) = TYPE_USER_ALIGN (underlying_type);
11368       TYPE_UNSIGNED (enumtype) = TYPE_UNSIGNED (underlying_type);
11369
11370       /* Set the underlying type of the enumeration type to the
11371          computed enumeration type, restricted to the enumerator
11372          values. */
11373       ENUM_UNDERLYING_TYPE (enumtype)
11374         = build_distinct_type_copy (underlying_type);
11375       set_min_and_max_values_for_integral_type 
11376         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
11377     }
11378   else
11379     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
11380
11381   /* Compute the minimum and maximum values for the type.
11382
11383      [dcl.enum]
11384
11385      For an enumeration where emin is the smallest enumerator and emax
11386      is the largest, the values of the enumeration are the values of the
11387      underlying type in the range bmin to bmax, where bmin and bmax are,
11388      respectively, the smallest and largest values of the smallest bit-
11389      field that can store emin and emax.  */
11390   
11391   /* The middle-end currently assumes that types with TYPE_PRECISION
11392      narrower than their underlying type are suitably zero or sign
11393      extended to fill their mode.  g++ doesn't make these guarantees.
11394      Until the middle-end can represent such paradoxical types, we
11395      set the TYPE_PRECISION to the width of the underlying type.  */
11396   TYPE_PRECISION (enumtype) = TYPE_PRECISION (underlying_type);
11397   
11398   set_min_and_max_values_for_integral_type (enumtype, precision, unsignedp);
11399   
11400   /* Convert each of the enumerators to the type of the underlying
11401      type of the enumeration.  */
11402   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
11403     {
11404       location_t saved_location;
11405
11406       decl = TREE_VALUE (values);
11407       saved_location = input_location;
11408       input_location = DECL_SOURCE_LOCATION (decl);
11409       if (fixed_underlying_type_p)
11410         /* If the enumeration type has a fixed underlying type, we
11411            already checked all of the enumerator values.  */
11412         value = DECL_INITIAL (decl);
11413       else
11414         value = perform_implicit_conversion (underlying_type,
11415                                              DECL_INITIAL (decl),
11416                                              tf_warning_or_error);
11417       input_location = saved_location;
11418
11419       /* Do not clobber shared ints.  */
11420       value = copy_node (value);
11421
11422       TREE_TYPE (value) = enumtype;
11423       DECL_INITIAL (decl) = value;
11424     }
11425
11426   /* Fix up all variant types of this enum type.  */
11427   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
11428     {
11429       TYPE_VALUES (t) = TYPE_VALUES (enumtype);
11430       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (enumtype);
11431       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (enumtype);
11432       TYPE_SIZE (t) = TYPE_SIZE (enumtype);
11433       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (enumtype);
11434       SET_TYPE_MODE (t, TYPE_MODE (enumtype));
11435       TYPE_PRECISION (t) = TYPE_PRECISION (enumtype);
11436       TYPE_ALIGN (t) = TYPE_ALIGN (enumtype);
11437       TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (enumtype);
11438       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (enumtype);
11439       ENUM_UNDERLYING_TYPE (t) = ENUM_UNDERLYING_TYPE (enumtype);
11440     }
11441
11442   /* Finish up the scope of a scoped enumeration.  */
11443   if (SCOPED_ENUM_P (enumtype))
11444     finish_scope ();
11445
11446   /* Finish debugging output for this type.  */
11447   rest_of_type_compilation (enumtype, namespace_bindings_p ());
11448 }
11449
11450 /* Build and install a CONST_DECL for an enumeration constant of the
11451    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
11452    Assignment of sequential values by default is handled here.  */
11453
11454 void
11455 build_enumerator (tree name, tree value, tree enumtype)
11456 {
11457   tree decl;
11458   tree context;
11459   tree type;
11460
11461   /* If the VALUE was erroneous, pretend it wasn't there; that will
11462      result in the enum being assigned the next value in sequence.  */
11463   if (value == error_mark_node)
11464     value = NULL_TREE;
11465
11466   /* Remove no-op casts from the value.  */
11467   if (value)
11468     STRIP_TYPE_NOPS (value);
11469
11470   if (! processing_template_decl)
11471     {
11472       /* Validate and default VALUE.  */
11473       if (value != NULL_TREE)
11474         {
11475           value = integral_constant_value (value);
11476
11477           if (TREE_CODE (value) == INTEGER_CST)
11478             {
11479               value = perform_integral_promotions (value);
11480               constant_expression_warning (value);
11481             }
11482           else
11483             {
11484               error ("enumerator value for %qD is not an integer constant", name);
11485               value = NULL_TREE;
11486             }
11487         }
11488
11489       /* Default based on previous value.  */
11490       if (value == NULL_TREE)
11491         {
11492           if (TYPE_VALUES (enumtype))
11493             {
11494               HOST_WIDE_INT hi;
11495               unsigned HOST_WIDE_INT lo;
11496               tree prev_value;
11497               bool overflowed;
11498
11499               /* The next value is the previous value plus one.
11500                  add_double doesn't know the type of the target expression,
11501                  so we must check with int_fits_type_p as well.  */
11502               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
11503               if (error_operand_p (prev_value))
11504                 value = error_mark_node;
11505               else
11506                 {
11507                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
11508                                            TREE_INT_CST_HIGH (prev_value),
11509                                            1, 0, &lo, &hi);
11510                   value = build_int_cst_wide (TREE_TYPE (prev_value), lo, hi);
11511                   overflowed
11512                     |= !int_fits_type_p (value, TREE_TYPE (prev_value));
11513
11514                   if (overflowed)
11515                     {
11516                       error ("overflow in enumeration values at %qD", name);
11517                       value = error_mark_node;
11518                     }
11519                 }
11520             }
11521           else
11522             value = integer_zero_node;
11523         }
11524
11525       /* Remove no-op casts from the value.  */
11526       STRIP_TYPE_NOPS (value);
11527
11528       /* If the underlying type of the enum is fixed, check whether
11529          the enumerator values fits in the underlying type.  If it
11530          does not fit, the program is ill-formed [C++0x dcl.enum].  */
11531       if (ENUM_UNDERLYING_TYPE (enumtype)
11532           && value
11533           && TREE_CODE (value) == INTEGER_CST
11534           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
11535         {
11536           error ("enumerator value %E is too large for underlying type %<%T%>",
11537                  value, ENUM_UNDERLYING_TYPE (enumtype));
11538
11539           /* Silently convert the value so that we can continue.  */
11540           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
11541                                                value, tf_none);
11542         }
11543     }
11544
11545   /* C++ associates enums with global, function, or class declarations.  */
11546   context = current_scope ();
11547
11548   /* Build the actual enumeration constant.  Note that the enumeration
11549      constants have the underlying type of the enum (if it is fixed)
11550      or the type of their initializer (if the underlying type of the
11551      enum is not fixed):
11552
11553       [ C++0x dcl.enum ]
11554
11555         If the underlying type is fixed, the type of each enumerator
11556         prior to the closing brace is the underlying type; if the
11557         initializing value of an enumerator cannot be represented by
11558         the underlying type, the program is ill-formed. If the
11559         underlying type is not fixed, the type of each enumerator is
11560         the type of its initializing value.
11561
11562     If the underlying type is not fixed, it will be computed by
11563     finish_enum and we will reset the type of this enumerator.  Of
11564     course, if we're processing a template, there may be no value.  */
11565   type = value ? TREE_TYPE (value) : NULL_TREE;
11566
11567   if (context && context == current_class_type)
11568     /* This enum declaration is local to the class.  We need the full
11569        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
11570     decl = build_lang_decl (CONST_DECL, name, type);
11571   else
11572     /* It's a global enum, or it's local to a function.  (Note local to
11573       a function could mean local to a class method.  */
11574     decl = build_decl (input_location, CONST_DECL, name, type);
11575
11576   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
11577   TREE_CONSTANT (decl) = 1;
11578   TREE_READONLY (decl) = 1;
11579   DECL_INITIAL (decl) = value;
11580
11581   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
11582     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
11583        on the TYPE_FIELDS list for `S'.  (That's so that you can say
11584        things like `S::i' later.)  */
11585     finish_member_declaration (decl);
11586   else
11587     pushdecl (decl);
11588
11589   /* Add this enumeration constant to the list for this type.  */
11590   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
11591 }
11592
11593 /* Look for an enumerator with the given NAME within the enumeration
11594    type ENUMTYPE.  This routine is used primarily for qualified name
11595    lookup into an enumerator in C++0x, e.g.,
11596
11597      enum class Color { Red, Green, Blue };
11598
11599      Color color = Color::Red;
11600
11601    Returns the value corresponding to the enumerator, or
11602    NULL_TREE if no such enumerator was found.  */
11603 tree
11604 lookup_enumerator (tree enumtype, tree name)
11605 {
11606   tree e;
11607   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
11608
11609   e = purpose_member (name, TYPE_VALUES (enumtype));
11610   return e? TREE_VALUE (e) : NULL_TREE;
11611 }
11612
11613 \f
11614 /* We're defining DECL.  Make sure that its type is OK.  */
11615
11616 static void
11617 check_function_type (tree decl, tree current_function_parms)
11618 {
11619   tree fntype = TREE_TYPE (decl);
11620   tree return_type = complete_type (TREE_TYPE (fntype));
11621
11622   /* In a function definition, arg types must be complete.  */
11623   require_complete_types_for_parms (current_function_parms);
11624
11625   /* constexpr functions must have literal argument types and
11626      literal return type.  */
11627   validate_constexpr_fundecl (decl);
11628
11629   if (dependent_type_p (return_type))
11630     return;
11631   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
11632       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
11633     {
11634       tree args = TYPE_ARG_TYPES (fntype);
11635
11636       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
11637         error ("return type %q#T is incomplete", return_type);
11638       else
11639         error ("return type has Java class type %q#T", return_type);
11640
11641       /* Make it return void instead.  */
11642       if (TREE_CODE (fntype) == METHOD_TYPE)
11643         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
11644                                              void_type_node,
11645                                              TREE_CHAIN (args));
11646       else
11647         fntype = build_function_type (void_type_node, args);
11648       fntype
11649         = build_exception_variant (fntype,
11650                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
11651       fntype = (cp_build_type_attribute_variant
11652                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
11653       TREE_TYPE (decl) = fntype;
11654     }
11655   else
11656     abstract_virtuals_error (decl, TREE_TYPE (fntype));
11657 }
11658
11659 /* Create the FUNCTION_DECL for a function definition.
11660    DECLSPECS and DECLARATOR are the parts of the declaration;
11661    they describe the function's name and the type it returns,
11662    but twisted together in a fashion that parallels the syntax of C.
11663
11664    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
11665    DECLARATOR is really the DECL for the function we are about to
11666    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
11667    indicating that the function is an inline defined in-class.
11668
11669    This function creates a binding context for the function body
11670    as well as setting up the FUNCTION_DECL in current_function_decl.
11671
11672    For C++, we must first check whether that datum makes any sense.
11673    For example, "class A local_a(1,2);" means that variable local_a
11674    is an aggregate of type A, which should have a constructor
11675    applied to it with the argument list [1, 2].
11676
11677    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
11678    or may be a BLOCK if the function has been defined previously
11679    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
11680    error_mark_node if the function has never been defined, or
11681    a BLOCK if the function has been defined somewhere.  */
11682
11683 void
11684 start_preparsed_function (tree decl1, tree attrs, int flags)
11685 {
11686   tree ctype = NULL_TREE;
11687   tree fntype;
11688   tree restype;
11689   int doing_friend = 0;
11690   struct cp_binding_level *bl;
11691   tree current_function_parms;
11692   struct c_fileinfo *finfo
11693     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
11694   bool honor_interface;
11695
11696   /* Sanity check.  */
11697   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
11698   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
11699
11700   fntype = TREE_TYPE (decl1);
11701   if (TREE_CODE (fntype) == METHOD_TYPE)
11702     ctype = TYPE_METHOD_BASETYPE (fntype);
11703
11704   /* ISO C++ 11.4/5.  A friend function defined in a class is in
11705      the (lexical) scope of the class in which it is defined.  */
11706   if (!ctype && DECL_FRIEND_P (decl1))
11707     {
11708       ctype = DECL_FRIEND_CONTEXT (decl1);
11709
11710       /* CTYPE could be null here if we're dealing with a template;
11711          for example, `inline friend float foo()' inside a template
11712          will have no CTYPE set.  */
11713       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
11714         ctype = NULL_TREE;
11715       else
11716         doing_friend = 1;
11717     }
11718
11719   if (DECL_DECLARED_INLINE_P (decl1)
11720       && lookup_attribute ("noinline", attrs))
11721     warning (0, "inline function %q+D given attribute noinline", decl1);
11722
11723   /* Handle gnu_inline attribute.  */
11724   if (GNU_INLINE_P (decl1))
11725     {
11726       DECL_EXTERNAL (decl1) = 1;
11727       DECL_NOT_REALLY_EXTERN (decl1) = 0;
11728       DECL_INTERFACE_KNOWN (decl1) = 1;
11729       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
11730     }
11731
11732   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
11733     /* This is a constructor, we must ensure that any default args
11734        introduced by this definition are propagated to the clones
11735        now. The clones are used directly in overload resolution.  */
11736     adjust_clone_args (decl1);
11737
11738   /* Sometimes we don't notice that a function is a static member, and
11739      build a METHOD_TYPE for it.  Fix that up now.  */
11740   if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
11741       && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)
11742     {
11743       revert_static_member_fn (decl1);
11744       ctype = NULL_TREE;
11745     }
11746
11747   /* Set up current_class_type, and enter the scope of the class, if
11748      appropriate.  */
11749   if (ctype)
11750     push_nested_class (ctype);
11751   else if (DECL_STATIC_FUNCTION_P (decl1))
11752     push_nested_class (DECL_CONTEXT (decl1));
11753
11754   /* Now that we have entered the scope of the class, we must restore
11755      the bindings for any template parameters surrounding DECL1, if it
11756      is an inline member template.  (Order is important; consider the
11757      case where a template parameter has the same name as a field of
11758      the class.)  It is not until after this point that
11759      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
11760   if (flags & SF_INCLASS_INLINE)
11761     maybe_begin_member_template_processing (decl1);
11762
11763   /* Effective C++ rule 15.  */
11764   if (warn_ecpp
11765       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
11766       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
11767     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
11768
11769   /* Make the init_value nonzero so pushdecl knows this is not tentative.
11770      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
11771   if (!DECL_INITIAL (decl1))
11772     DECL_INITIAL (decl1) = error_mark_node;
11773
11774   /* This function exists in static storage.
11775      (This does not mean `static' in the C sense!)  */
11776   TREE_STATIC (decl1) = 1;
11777
11778   /* We must call push_template_decl after current_class_type is set
11779      up.  (If we are processing inline definitions after exiting a
11780      class scope, current_class_type will be NULL_TREE until set above
11781      by push_nested_class.)  */
11782   if (processing_template_decl)
11783     {
11784       /* FIXME: Handle error_mark_node more gracefully.  */
11785       tree newdecl1 = push_template_decl (decl1);
11786       if (newdecl1 != error_mark_node)
11787         decl1 = newdecl1;
11788     }
11789
11790   /* We are now in the scope of the function being defined.  */
11791   current_function_decl = decl1;
11792
11793   /* Save the parm names or decls from this function's declarator
11794      where store_parm_decls will find them.  */
11795   current_function_parms = DECL_ARGUMENTS (decl1);
11796
11797   /* Make sure the parameter and return types are reasonable.  When
11798      you declare a function, these types can be incomplete, but they
11799      must be complete when you define the function.  */
11800   check_function_type (decl1, current_function_parms);
11801
11802   /* Build the return declaration for the function.  */
11803   restype = TREE_TYPE (fntype);
11804   if (DECL_RESULT (decl1) == NULL_TREE)
11805     {
11806       tree resdecl;
11807
11808       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
11809       DECL_ARTIFICIAL (resdecl) = 1;
11810       DECL_IGNORED_P (resdecl) = 1;
11811       DECL_RESULT (decl1) = resdecl;
11812
11813       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
11814     }
11815
11816   /* Let the user know we're compiling this function.  */
11817   announce_function (decl1);
11818
11819   /* Record the decl so that the function name is defined.
11820      If we already have a decl for this name, and it is a FUNCTION_DECL,
11821      use the old decl.  */
11822   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
11823     {
11824       /* A specialization is not used to guide overload resolution.  */
11825       if (!DECL_FUNCTION_MEMBER_P (decl1)
11826           && !(DECL_USE_TEMPLATE (decl1) &&
11827                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
11828         {
11829           tree olddecl = pushdecl (decl1);
11830
11831           if (olddecl == error_mark_node)
11832             /* If something went wrong when registering the declaration,
11833                use DECL1; we have to have a FUNCTION_DECL to use when
11834                parsing the body of the function.  */
11835             ;
11836           else
11837             {
11838               /* Otherwise, OLDDECL is either a previous declaration
11839                  of the same function or DECL1 itself.  */
11840
11841               if (warn_missing_declarations
11842                   && olddecl == decl1
11843                   && !DECL_MAIN_P (decl1)
11844                   && TREE_PUBLIC (decl1)
11845                   && !DECL_DECLARED_INLINE_P (decl1))
11846                 {
11847                   tree context;
11848
11849                   /* Check whether DECL1 is in an anonymous
11850                      namespace.  */
11851                   for (context = DECL_CONTEXT (decl1);
11852                        context;
11853                        context = DECL_CONTEXT (context))
11854                     {
11855                       if (TREE_CODE (context) == NAMESPACE_DECL
11856                           && DECL_NAME (context) == NULL_TREE)
11857                         break;
11858                     }
11859
11860                   if (context == NULL)
11861                     warning (OPT_Wmissing_declarations,
11862                              "no previous declaration for %q+D", decl1);
11863                 }
11864
11865               decl1 = olddecl;
11866             }
11867         }
11868       else
11869         {
11870           /* We need to set the DECL_CONTEXT.  */
11871           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
11872             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
11873         }
11874       fntype = TREE_TYPE (decl1);
11875
11876       /* If #pragma weak applies, mark the decl appropriately now.
11877          The pragma only applies to global functions.  Because
11878          determining whether or not the #pragma applies involves
11879          computing the mangled name for the declaration, we cannot
11880          apply the pragma until after we have merged this declaration
11881          with any previous declarations; if the original declaration
11882          has a linkage specification, that specification applies to
11883          the definition as well, and may affect the mangled name.  */
11884       if (!DECL_CONTEXT (decl1))
11885         maybe_apply_pragma_weak (decl1);
11886     }
11887
11888   /* Reset this in case the call to pushdecl changed it.  */
11889   current_function_decl = decl1;
11890
11891   gcc_assert (DECL_INITIAL (decl1));
11892
11893   /* This function may already have been parsed, in which case just
11894      return; our caller will skip over the body without parsing.  */
11895   if (DECL_INITIAL (decl1) != error_mark_node)
11896     return;
11897
11898   /* Initialize RTL machinery.  We cannot do this until
11899      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
11900      even when processing a template; this is how we get
11901      CFUN set up, and our per-function variables initialized.
11902      FIXME factor out the non-RTL stuff.  */
11903   bl = current_binding_level;
11904   allocate_struct_function (decl1, processing_template_decl);
11905
11906   /* Initialize the language data structures.  Whenever we start
11907      a new function, we destroy temporaries in the usual way.  */
11908   cfun->language = GGC_CNEW (struct language_function);
11909   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
11910   current_binding_level = bl;
11911
11912   /* Even though we're inside a function body, we still don't want to
11913      call expand_expr to calculate the size of a variable-sized array.
11914      We haven't necessarily assigned RTL to all variables yet, so it's
11915      not safe to try to expand expressions involving them.  */
11916   cfun->dont_save_pending_sizes_p = 1;
11917
11918   /* Start the statement-tree, start the tree now.  */
11919   DECL_SAVED_TREE (decl1) = push_stmt_list ();
11920
11921   /* If we are (erroneously) defining a function that we have already
11922      defined before, wipe out what we knew before.  */
11923   if (!DECL_PENDING_INLINE_P (decl1))
11924     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
11925
11926   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
11927     {
11928       /* We know that this was set up by `grokclassfn'.  We do not
11929          wait until `store_parm_decls', since evil parse errors may
11930          never get us to that point.  Here we keep the consistency
11931          between `current_class_type' and `current_class_ptr'.  */
11932       tree t = DECL_ARGUMENTS (decl1);
11933
11934       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
11935       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
11936
11937       cp_function_chain->x_current_class_ref
11938         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
11939       cp_function_chain->x_current_class_ptr = t;
11940
11941       /* Constructors and destructors need to know whether they're "in
11942          charge" of initializing virtual base classes.  */
11943       t = TREE_CHAIN (t);
11944       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
11945         {
11946           current_in_charge_parm = t;
11947           t = TREE_CHAIN (t);
11948         }
11949       if (DECL_HAS_VTT_PARM_P (decl1))
11950         {
11951           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
11952           current_vtt_parm = t;
11953         }
11954     }
11955
11956   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
11957                      /* Implicitly-defined methods (like the
11958                         destructor for a class in which no destructor
11959                         is explicitly declared) must not be defined
11960                         until their definition is needed.  So, we
11961                         ignore interface specifications for
11962                         compiler-generated functions.  */
11963                      && !DECL_ARTIFICIAL (decl1));
11964
11965   if (DECL_INTERFACE_KNOWN (decl1))
11966     {
11967       tree ctx = decl_function_context (decl1);
11968
11969       if (DECL_NOT_REALLY_EXTERN (decl1))
11970         DECL_EXTERNAL (decl1) = 0;
11971
11972       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
11973           && TREE_PUBLIC (ctx))
11974         /* This is a function in a local class in an extern inline
11975            function.  */
11976         comdat_linkage (decl1);
11977     }
11978   /* If this function belongs to an interface, it is public.
11979      If it belongs to someone else's interface, it is also external.
11980      This only affects inlines and template instantiations.  */
11981   else if (!finfo->interface_unknown && honor_interface)
11982     {
11983       if (DECL_DECLARED_INLINE_P (decl1)
11984           || DECL_TEMPLATE_INSTANTIATION (decl1)
11985           || processing_template_decl)
11986         {
11987           DECL_EXTERNAL (decl1)
11988             = (finfo->interface_only
11989                || (DECL_DECLARED_INLINE_P (decl1)
11990                    && ! flag_implement_inlines
11991                    && !DECL_VINDEX (decl1)));
11992
11993           /* For WIN32 we also want to put these in linkonce sections.  */
11994           maybe_make_one_only (decl1);
11995         }
11996       else
11997         DECL_EXTERNAL (decl1) = 0;
11998       DECL_INTERFACE_KNOWN (decl1) = 1;
11999       /* If this function is in an interface implemented in this file,
12000          make sure that the back end knows to emit this function
12001          here.  */
12002       if (!DECL_EXTERNAL (decl1))
12003         mark_needed (decl1);
12004     }
12005   else if (finfo->interface_unknown && finfo->interface_only
12006            && honor_interface)
12007     {
12008       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12009          interface, we will have both finfo->interface_unknown and
12010          finfo->interface_only set.  In that case, we don't want to
12011          use the normal heuristics because someone will supply a
12012          #pragma implementation elsewhere, and deducing it here would
12013          produce a conflict.  */
12014       comdat_linkage (decl1);
12015       DECL_EXTERNAL (decl1) = 0;
12016       DECL_INTERFACE_KNOWN (decl1) = 1;
12017       DECL_DEFER_OUTPUT (decl1) = 1;
12018     }
12019   else
12020     {
12021       /* This is a definition, not a reference.
12022          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12023       if (!GNU_INLINE_P (decl1))
12024         DECL_EXTERNAL (decl1) = 0;
12025
12026       if ((DECL_DECLARED_INLINE_P (decl1)
12027            || DECL_TEMPLATE_INSTANTIATION (decl1))
12028           && ! DECL_INTERFACE_KNOWN (decl1))
12029         DECL_DEFER_OUTPUT (decl1) = 1;
12030       else
12031         DECL_INTERFACE_KNOWN (decl1) = 1;
12032     }
12033
12034   /* Determine the ELF visibility attribute for the function.  We must not
12035      do this before calling "pushdecl", as we must allow "duplicate_decls"
12036      to merge any attributes appropriately.  We also need to wait until
12037      linkage is set.  */
12038   if (!DECL_CLONED_FUNCTION_P (decl1))
12039     determine_visibility (decl1);
12040
12041   begin_scope (sk_function_parms, decl1);
12042
12043   ++function_depth;
12044
12045   if (DECL_DESTRUCTOR_P (decl1)
12046       || (DECL_CONSTRUCTOR_P (decl1)
12047           && targetm.cxx.cdtor_returns_this ()))
12048     {
12049       cdtor_label = build_decl (input_location, 
12050                                 LABEL_DECL, NULL_TREE, NULL_TREE);
12051       DECL_CONTEXT (cdtor_label) = current_function_decl;
12052     }
12053
12054   start_fname_decls ();
12055
12056   store_parm_decls (current_function_parms);
12057 }
12058
12059
12060 /* Like start_preparsed_function, except that instead of a
12061    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12062
12063    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12064    (it defines a datum instead), we return 0, which tells
12065    yyparse to report a parse error.  */
12066
12067 int
12068 start_function (cp_decl_specifier_seq *declspecs,
12069                 const cp_declarator *declarator,
12070                 tree attrs)
12071 {
12072   tree decl1;
12073
12074   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12075   if (decl1 == error_mark_node)
12076     return 0;
12077   /* If the declarator is not suitable for a function definition,
12078      cause a syntax error.  */
12079   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12080     {
12081       error ("invalid function declaration");
12082       return 0;
12083     }
12084
12085   if (DECL_MAIN_P (decl1))
12086     /* main must return int.  grokfndecl should have corrected it
12087        (and issued a diagnostic) if the user got it wrong.  */
12088     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12089                              integer_type_node));
12090
12091   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12092
12093   return 1;
12094 }
12095 \f
12096 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12097    FN.  */
12098
12099 static bool
12100 use_eh_spec_block (tree fn)
12101 {
12102   return (flag_exceptions && flag_enforce_eh_specs
12103           && !processing_template_decl
12104           && TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn))
12105           /* We insert the EH_SPEC_BLOCK only in the original
12106              function; then, it is copied automatically to the
12107              clones.  */
12108           && !DECL_CLONED_FUNCTION_P (fn)
12109           /* Implicitly-generated constructors and destructors have
12110              exception specifications.  However, those specifications
12111              are the union of the possible exceptions specified by the
12112              constructors/destructors for bases and members, so no
12113              unallowed exception will ever reach this function.  By
12114              not creating the EH_SPEC_BLOCK we save a little memory,
12115              and we avoid spurious warnings about unreachable
12116              code.  */
12117           && !DECL_ARTIFICIAL (fn));
12118 }
12119
12120 /* Store the parameter declarations into the current function declaration.
12121    This is called after parsing the parameter declarations, before
12122    digesting the body of the function.
12123
12124    Also install to binding contour return value identifier, if any.  */
12125
12126 static void
12127 store_parm_decls (tree current_function_parms)
12128 {
12129   tree fndecl = current_function_decl;
12130   tree parm;
12131
12132   /* This is a chain of any other decls that came in among the parm
12133      declarations.  If a parm is declared with  enum {foo, bar} x;
12134      then CONST_DECLs for foo and bar are put here.  */
12135   tree nonparms = NULL_TREE;
12136
12137   if (current_function_parms)
12138     {
12139       /* This case is when the function was defined with an ANSI prototype.
12140          The parms already have decls, so we need not do anything here
12141          except record them as in effect
12142          and complain if any redundant old-style parm decls were written.  */
12143
12144       tree specparms = current_function_parms;
12145       tree next;
12146
12147       /* Must clear this because it might contain TYPE_DECLs declared
12148              at class level.  */
12149       current_binding_level->names = NULL;
12150
12151       /* If we're doing semantic analysis, then we'll call pushdecl
12152              for each of these.  We must do them in reverse order so that
12153              they end in the correct forward order.  */
12154       specparms = nreverse (specparms);
12155
12156       for (parm = specparms; parm; parm = next)
12157         {
12158           next = TREE_CHAIN (parm);
12159           if (TREE_CODE (parm) == PARM_DECL)
12160             {
12161               if (DECL_NAME (parm) == NULL_TREE
12162                   || TREE_CODE (parm) != VOID_TYPE)
12163                 pushdecl (parm);
12164               else
12165                 error ("parameter %qD declared void", parm);
12166             }
12167           else
12168             {
12169               /* If we find an enum constant or a type tag,
12170                  put it aside for the moment.  */
12171               TREE_CHAIN (parm) = NULL_TREE;
12172               nonparms = chainon (nonparms, parm);
12173             }
12174         }
12175
12176       /* Get the decls in their original chain order and record in the
12177          function.  This is all and only the PARM_DECLs that were
12178          pushed into scope by the loop above.  */
12179       DECL_ARGUMENTS (fndecl) = getdecls ();
12180     }
12181   else
12182     DECL_ARGUMENTS (fndecl) = NULL_TREE;
12183
12184   /* Now store the final chain of decls for the arguments
12185      as the decl-chain of the current lexical scope.
12186      Put the enumerators in as well, at the front so that
12187      DECL_ARGUMENTS is not modified.  */
12188   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12189
12190   if (use_eh_spec_block (current_function_decl))
12191     current_eh_spec_block = begin_eh_spec_block ();
12192 }
12193
12194 \f
12195 /* We have finished doing semantic analysis on DECL, but have not yet
12196    generated RTL for its body.  Save away our current state, so that
12197    when we want to generate RTL later we know what to do.  */
12198
12199 static void
12200 save_function_data (tree decl)
12201 {
12202   struct language_function *f;
12203
12204   /* Save the language-specific per-function data so that we can
12205      get it back when we really expand this function.  */
12206   gcc_assert (!DECL_PENDING_INLINE_P (decl));
12207
12208   /* Make a copy.  */
12209   f = GGC_NEW (struct language_function);
12210   memcpy (f, cp_function_chain, sizeof (struct language_function));
12211   DECL_SAVED_FUNCTION_DATA (decl) = f;
12212
12213   /* Clear out the bits we don't need.  */
12214   f->base.x_stmt_tree.x_cur_stmt_list = NULL_TREE;
12215   f->bindings = NULL;
12216   f->x_local_names = NULL;
12217 }
12218
12219
12220 /* Set the return value of the constructor (if present).  */
12221
12222 static void
12223 finish_constructor_body (void)
12224 {
12225   tree val;
12226   tree exprstmt;
12227
12228   if (targetm.cxx.cdtor_returns_this ()
12229       && (! TYPE_FOR_JAVA (current_class_type)))
12230     {
12231       /* Any return from a constructor will end up here.  */
12232       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12233
12234       val = DECL_ARGUMENTS (current_function_decl);
12235       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12236                     DECL_RESULT (current_function_decl), val);
12237       /* Return the address of the object.  */
12238       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12239       add_stmt (exprstmt);
12240     }
12241 }
12242
12243 /* Do all the processing for the beginning of a destructor; set up the
12244    vtable pointers and cleanups for bases and members.  */
12245
12246 static void
12247 begin_destructor_body (void)
12248 {
12249   tree compound_stmt;
12250
12251   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12252      issued an error message.  We still want to try to process the
12253      body of the function, but initialize_vtbl_ptrs will crash if
12254      TYPE_BINFO is NULL.  */
12255   if (COMPLETE_TYPE_P (current_class_type))
12256     {
12257       compound_stmt = begin_compound_stmt (0);
12258       /* Make all virtual function table pointers in non-virtual base
12259          classes point to CURRENT_CLASS_TYPE's virtual function
12260          tables.  */
12261       initialize_vtbl_ptrs (current_class_ptr);
12262       finish_compound_stmt (compound_stmt);
12263
12264       /* And insert cleanups for our bases and members so that they
12265          will be properly destroyed if we throw.  */
12266       push_base_cleanups ();
12267     }
12268 }
12269
12270 /* At the end of every destructor we generate code to delete the object if
12271    necessary.  Do that now.  */
12272
12273 static void
12274 finish_destructor_body (void)
12275 {
12276   tree exprstmt;
12277
12278   /* Any return from a destructor will end up here; that way all base
12279      and member cleanups will be run when the function returns.  */
12280   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12281
12282   /* In a virtual destructor, we must call delete.  */
12283   if (DECL_VIRTUAL_P (current_function_decl))
12284     {
12285       tree if_stmt;
12286       tree virtual_size = cxx_sizeof (current_class_type);
12287
12288       /* [class.dtor]
12289
12290       At the point of definition of a virtual destructor (including
12291       an implicit definition), non-placement operator delete shall
12292       be looked up in the scope of the destructor's class and if
12293       found shall be accessible and unambiguous.  */
12294       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
12295                                       virtual_size,
12296                                       /*global_p=*/false,
12297                                       /*placement=*/NULL_TREE,
12298                                       /*alloc_fn=*/NULL_TREE);
12299
12300       if_stmt = begin_if_stmt ();
12301       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
12302                                    current_in_charge_parm,
12303                                    integer_one_node),
12304                            if_stmt);
12305       finish_expr_stmt (exprstmt);
12306       finish_then_clause (if_stmt);
12307       finish_if_stmt (if_stmt);
12308     }
12309
12310   if (targetm.cxx.cdtor_returns_this ())
12311     {
12312       tree val;
12313
12314       val = DECL_ARGUMENTS (current_function_decl);
12315       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12316                     DECL_RESULT (current_function_decl), val);
12317       /* Return the address of the object.  */
12318       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12319       add_stmt (exprstmt);
12320     }
12321 }
12322
12323 /* Do the necessary processing for the beginning of a function body, which
12324    in this case includes member-initializers, but not the catch clauses of
12325    a function-try-block.  Currently, this means opening a binding level
12326    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
12327
12328 tree
12329 begin_function_body (void)
12330 {
12331   tree stmt;
12332
12333   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12334     return NULL_TREE;
12335
12336   if (processing_template_decl)
12337     /* Do nothing now.  */;
12338   else
12339     /* Always keep the BLOCK node associated with the outermost pair of
12340        curly braces of a function.  These are needed for correct
12341        operation of dwarfout.c.  */
12342     keep_next_level (true);
12343
12344   stmt = begin_compound_stmt (BCS_FN_BODY);
12345
12346   if (processing_template_decl)
12347     /* Do nothing now.  */;
12348   else if (DECL_DESTRUCTOR_P (current_function_decl))
12349     begin_destructor_body ();
12350
12351   return stmt;
12352 }
12353
12354 /* Do the processing for the end of a function body.  Currently, this means
12355    closing out the cleanups for fully-constructed bases and members, and in
12356    the case of the destructor, deleting the object if desired.  Again, this
12357    is only meaningful for [cd]tors, since they are the only functions where
12358    there is a significant distinction between the main body and any
12359    function catch clauses.  Handling, say, main() return semantics here
12360    would be wrong, as flowing off the end of a function catch clause for
12361    main() would also need to return 0.  */
12362
12363 void
12364 finish_function_body (tree compstmt)
12365 {
12366   if (compstmt == NULL_TREE)
12367     return;
12368
12369   /* Close the block.  */
12370   finish_compound_stmt (compstmt);
12371
12372   if (processing_template_decl)
12373     /* Do nothing now.  */;
12374   else if (DECL_CONSTRUCTOR_P (current_function_decl))
12375     finish_constructor_body ();
12376   else if (DECL_DESTRUCTOR_P (current_function_decl))
12377     finish_destructor_body ();
12378 }
12379
12380 /* Given a function, returns the BLOCK corresponding to the outermost level
12381    of curly braces, skipping the artificial block created for constructor
12382    initializers.  */
12383
12384 tree
12385 outer_curly_brace_block (tree fndecl)
12386 {
12387   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
12388   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
12389     /* Skip the artificial function body block.  */
12390     block = BLOCK_SUBBLOCKS (block);
12391   return block;
12392 }
12393
12394 /* Finish up a function declaration and compile that function
12395    all the way to assembler language output.  The free the storage
12396    for the function definition.
12397
12398    FLAGS is a bitwise or of the following values:
12399      2 - INCLASS_INLINE
12400        We just finished processing the body of an in-class inline
12401        function definition.  (This processing will have taken place
12402        after the class definition is complete.)  */
12403
12404 tree
12405 finish_function (int flags)
12406 {
12407   tree fndecl = current_function_decl;
12408   tree fntype, ctype = NULL_TREE;
12409   int inclass_inline = (flags & 2) != 0;
12410   int nested;
12411
12412   /* When we get some parse errors, we can end up without a
12413      current_function_decl, so cope.  */
12414   if (fndecl == NULL_TREE)
12415     return error_mark_node;
12416
12417   gcc_assert (!defer_mark_used_calls);
12418   defer_mark_used_calls = true;
12419
12420   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
12421       && DECL_VIRTUAL_P (fndecl)
12422       && !processing_template_decl)
12423     {
12424       tree fnclass = DECL_CONTEXT (fndecl);
12425       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
12426         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
12427     }
12428
12429   nested = function_depth > 1;
12430   fntype = TREE_TYPE (fndecl);
12431
12432   /*  TREE_READONLY (fndecl) = 1;
12433       This caused &foo to be of type ptr-to-const-function
12434       which then got a warning when stored in a ptr-to-function variable.  */
12435
12436   gcc_assert (building_stmt_tree ());
12437   /* The current function is being defined, so its DECL_INITIAL should
12438      be set, and unless there's a multiple definition, it should be
12439      error_mark_node.  */
12440   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
12441
12442   /* For a cloned function, we've already got all the code we need;
12443      there's no need to add any extra bits.  */
12444   if (!DECL_CLONED_FUNCTION_P (fndecl))
12445     {
12446       if (DECL_MAIN_P (current_function_decl))
12447         {
12448           tree stmt;
12449
12450           /* Make it so that `main' always returns 0 by default (or
12451              1 for VMS).  */
12452 #if VMS_TARGET
12453           stmt = finish_return_stmt (integer_one_node);
12454 #else
12455           stmt = finish_return_stmt (integer_zero_node);
12456 #endif
12457           /* Hack.  We don't want the middle-end to warn that this
12458              return is unreachable, so put the statement on the
12459              special line 0.  */
12460           {
12461             location_t linezero = linemap_line_start (line_table, 0, 1);
12462             SET_EXPR_LOCATION (stmt, linezero);
12463           }
12464         }
12465
12466       if (use_eh_spec_block (current_function_decl))
12467         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
12468                               (TREE_TYPE (current_function_decl)),
12469                               current_eh_spec_block);
12470     }
12471
12472   /* If we're saving up tree structure, tie off the function now.  */
12473   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
12474
12475   finish_fname_decls ();
12476
12477   /* If this function can't throw any exceptions, remember that.  */
12478   if (!processing_template_decl
12479       && !cp_function_chain->can_throw
12480       && !flag_non_call_exceptions
12481       && !DECL_REPLACEABLE_P (fndecl))
12482     TREE_NOTHROW (fndecl) = 1;
12483
12484   /* This must come after expand_function_end because cleanups might
12485      have declarations (from inline functions) that need to go into
12486      this function's blocks.  */
12487
12488   /* If the current binding level isn't the outermost binding level
12489      for this function, either there is a bug, or we have experienced
12490      syntax errors and the statement tree is malformed.  */
12491   if (current_binding_level->kind != sk_function_parms)
12492     {
12493       /* Make sure we have already experienced errors.  */
12494       gcc_assert (errorcount);
12495
12496       /* Throw away the broken statement tree and extra binding
12497          levels.  */
12498       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
12499
12500       while (current_binding_level->kind != sk_function_parms)
12501         {
12502           if (current_binding_level->kind == sk_class)
12503             pop_nested_class ();
12504           else
12505             poplevel (0, 0, 0);
12506         }
12507     }
12508   poplevel (1, 0, 1);
12509
12510   /* Statements should always be full-expressions at the outermost set
12511      of curly braces for a function.  */
12512   gcc_assert (stmts_are_full_exprs_p ());
12513
12514   /* Set up the named return value optimization, if we can.  Candidate
12515      variables are selected in check_return_expr.  */
12516   if (current_function_return_value)
12517     {
12518       tree r = current_function_return_value;
12519       tree outer;
12520
12521       if (r != error_mark_node
12522           /* This is only worth doing for fns that return in memory--and
12523              simpler, since we don't have to worry about promoted modes.  */
12524           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
12525           /* Only allow this for variables declared in the outer scope of
12526              the function so we know that their lifetime always ends with a
12527              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
12528              we were to do this optimization in tree-ssa.  */
12529           && (outer = outer_curly_brace_block (fndecl))
12530           && chain_member (r, BLOCK_VARS (outer)))
12531         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
12532
12533       current_function_return_value = NULL_TREE;
12534     }
12535
12536   /* Remember that we were in class scope.  */
12537   if (current_class_name)
12538     ctype = current_class_type;
12539
12540   /* Must mark the RESULT_DECL as being in this function.  */
12541   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
12542
12543   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
12544      to the FUNCTION_DECL node itself.  */
12545   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
12546
12547   /* Save away current state, if appropriate.  */
12548   if (!processing_template_decl)
12549     save_function_data (fndecl);
12550
12551   /* Complain if there's just no return statement.  */
12552   if (warn_return_type
12553       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
12554       && !dependent_type_p (TREE_TYPE (fntype))
12555       && !current_function_returns_value && !current_function_returns_null
12556       /* Don't complain if we abort or throw.  */
12557       && !current_function_returns_abnormally
12558       /* Don't complain if we are declared noreturn.  */
12559       && !TREE_THIS_VOLATILE (fndecl)
12560       && !DECL_NAME (DECL_RESULT (fndecl))
12561       && !TREE_NO_WARNING (fndecl)
12562       /* Structor return values (if any) are set by the compiler.  */
12563       && !DECL_CONSTRUCTOR_P (fndecl)
12564       && !DECL_DESTRUCTOR_P (fndecl))
12565     {
12566       warning (OPT_Wreturn_type,
12567                "no return statement in function returning non-void");
12568       TREE_NO_WARNING (fndecl) = 1;
12569     }
12570
12571   /* Store the end of the function, so that we get good line number
12572      info for the epilogue.  */
12573   cfun->function_end_locus = input_location;
12574
12575   /* Genericize before inlining.  */
12576   if (!processing_template_decl)
12577     {
12578       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
12579       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
12580       cp_genericize (fndecl);
12581       /* Clear out the bits we don't need.  */
12582       f->x_current_class_ptr = NULL;
12583       f->x_current_class_ref = NULL;
12584       f->x_eh_spec_block = NULL;
12585       f->x_in_charge_parm = NULL;
12586       f->x_vtt_parm = NULL;
12587       f->x_return_value = NULL;
12588       f->bindings = NULL;
12589       f->extern_decl_map = NULL;
12590     }
12591   /* Clear out the bits we don't need.  */
12592   local_names = NULL;
12593
12594   /* We're leaving the context of this function, so zap cfun.  It's still in
12595      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
12596   set_cfun (NULL);
12597   current_function_decl = NULL;
12598
12599   /* If this is an in-class inline definition, we may have to pop the
12600      bindings for the template parameters that we added in
12601      maybe_begin_member_template_processing when start_function was
12602      called.  */
12603   if (inclass_inline)
12604     maybe_end_member_template_processing ();
12605
12606   /* Leave the scope of the class.  */
12607   if (ctype)
12608     pop_nested_class ();
12609
12610   --function_depth;
12611
12612   /* Clean up.  */
12613   if (! nested)
12614     /* Let the error reporting routines know that we're outside a
12615        function.  For a nested function, this value is used in
12616        cxx_pop_function_context and then reset via pop_function_context.  */
12617     current_function_decl = NULL_TREE;
12618
12619   defer_mark_used_calls = false;
12620   if (deferred_mark_used_calls)
12621     {
12622       unsigned int i;
12623       tree decl;
12624
12625       for (i = 0; VEC_iterate (tree, deferred_mark_used_calls, i, decl); i++)
12626         mark_used (decl);
12627       VEC_free (tree, gc, deferred_mark_used_calls);
12628     }
12629
12630   return fndecl;
12631 }
12632 \f
12633 /* Create the FUNCTION_DECL for a function definition.
12634    DECLSPECS and DECLARATOR are the parts of the declaration;
12635    they describe the return type and the name of the function,
12636    but twisted together in a fashion that parallels the syntax of C.
12637
12638    This function creates a binding context for the function body
12639    as well as setting up the FUNCTION_DECL in current_function_decl.
12640
12641    Returns a FUNCTION_DECL on success.
12642
12643    If the DECLARATOR is not suitable for a function (it defines a datum
12644    instead), we return 0, which tells yyparse to report a parse error.
12645
12646    May return void_type_node indicating that this method is actually
12647    a friend.  See grokfield for more details.
12648
12649    Came here with a `.pushlevel' .
12650
12651    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
12652    CHANGES TO CODE IN `grokfield'.  */
12653
12654 tree
12655 grokmethod (cp_decl_specifier_seq *declspecs,
12656             const cp_declarator *declarator, tree attrlist)
12657 {
12658   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
12659                                 &attrlist);
12660
12661   if (fndecl == error_mark_node)
12662     return error_mark_node;
12663
12664   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
12665     {
12666       error ("invalid member function declaration");
12667       return error_mark_node;
12668     }
12669
12670   if (attrlist)
12671     cplus_decl_attributes (&fndecl, attrlist, 0);
12672
12673   /* Pass friends other than inline friend functions back.  */
12674   if (fndecl == void_type_node)
12675     return fndecl;
12676
12677   if (DECL_IN_AGGR_P (fndecl))
12678     {
12679       if (DECL_CONTEXT (fndecl)
12680           && TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
12681         error ("%qD is already defined in class %qT", fndecl,
12682                DECL_CONTEXT (fndecl));
12683       return error_mark_node;
12684     }
12685
12686   check_template_shadow (fndecl);
12687
12688   DECL_DECLARED_INLINE_P (fndecl) = 1;
12689   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
12690
12691   /* We process method specializations in finish_struct_1.  */
12692   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
12693     {
12694       fndecl = push_template_decl (fndecl);
12695       if (fndecl == error_mark_node)
12696         return fndecl;
12697     }
12698
12699   if (! DECL_FRIEND_P (fndecl))
12700     {
12701       if (TREE_CHAIN (fndecl))
12702         {
12703           fndecl = copy_node (fndecl);
12704           TREE_CHAIN (fndecl) = NULL_TREE;
12705         }
12706     }
12707
12708   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
12709
12710   DECL_IN_AGGR_P (fndecl) = 1;
12711   return fndecl;
12712 }
12713 \f
12714
12715 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
12716    we can lay it out later, when and if its type becomes complete.  */
12717
12718 void
12719 maybe_register_incomplete_var (tree var)
12720 {
12721   gcc_assert (TREE_CODE (var) == VAR_DECL);
12722
12723   /* Keep track of variables with incomplete types.  */
12724   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
12725       && DECL_EXTERNAL (var))
12726     {
12727       tree inner_type = TREE_TYPE (var);
12728
12729       while (TREE_CODE (inner_type) == ARRAY_TYPE)
12730         inner_type = TREE_TYPE (inner_type);
12731       inner_type = TYPE_MAIN_VARIANT (inner_type);
12732
12733       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
12734           /* RTTI TD entries are created while defining the type_info.  */
12735           || (TYPE_LANG_SPECIFIC (inner_type)
12736               && TYPE_BEING_DEFINED (inner_type)))
12737         incomplete_vars = tree_cons (inner_type, var, incomplete_vars);
12738     }
12739 }
12740
12741 /* Called when a class type (given by TYPE) is defined.  If there are
12742    any existing VAR_DECLs whose type has been completed by this
12743    declaration, update them now.  */
12744
12745 void
12746 complete_vars (tree type)
12747 {
12748   tree *list = &incomplete_vars;
12749
12750   gcc_assert (CLASS_TYPE_P (type));
12751   while (*list)
12752     {
12753       if (same_type_p (type, TREE_PURPOSE (*list)))
12754         {
12755           tree var = TREE_VALUE (*list);
12756           tree type = TREE_TYPE (var);
12757           /* Complete the type of the variable.  The VAR_DECL itself
12758              will be laid out in expand_expr.  */
12759           complete_type (type);
12760           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
12761           /* Remove this entry from the list.  */
12762           *list = TREE_CHAIN (*list);
12763         }
12764       else
12765         list = &TREE_CHAIN (*list);
12766     }
12767
12768   /* Check for pending declarations which may have abstract type.  */
12769   complete_type_check_abstract (type);
12770 }
12771
12772 /* If DECL is of a type which needs a cleanup, build and return an
12773    expression to perform that cleanup here.  Return NULL_TREE if no
12774    cleanup need be done.  */
12775
12776 tree
12777 cxx_maybe_build_cleanup (tree decl)
12778 {
12779   tree type;
12780   tree attr;
12781   tree cleanup;
12782
12783   /* Assume no cleanup is required.  */
12784   cleanup = NULL_TREE;
12785
12786   if (error_operand_p (decl))
12787     return cleanup;
12788
12789   /* Handle "__attribute__((cleanup))".  We run the cleanup function
12790      before the destructor since the destructor is what actually
12791      terminates the lifetime of the object.  */
12792   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
12793   if (attr)
12794     {
12795       tree id;
12796       tree fn;
12797       tree arg;
12798
12799       /* Get the name specified by the user for the cleanup function.  */
12800       id = TREE_VALUE (TREE_VALUE (attr));
12801       /* Look up the name to find the cleanup function to call.  It is
12802          important to use lookup_name here because that is what is
12803          used in c-common.c:handle_cleanup_attribute when performing
12804          initial checks on the attribute.  Note that those checks
12805          include ensuring that the function found is not an overloaded
12806          function, or an object with an overloaded call operator,
12807          etc.; we can rely on the fact that the function found is an
12808          ordinary FUNCTION_DECL.  */
12809       fn = lookup_name (id);
12810       arg = build_address (decl);
12811       mark_used (decl);
12812       cleanup = cp_build_function_call (fn, build_tree_list (NULL_TREE,
12813                                                              arg),
12814                                         tf_warning_or_error);
12815     }
12816   /* Handle ordinary C++ destructors.  */
12817   type = TREE_TYPE (decl);
12818   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
12819     {
12820       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
12821       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
12822                          && CLASSTYPE_VBASECLASSES (type));
12823       tree addr;
12824       tree call;
12825
12826       if (TREE_CODE (type) == ARRAY_TYPE)
12827         addr = decl;
12828       else
12829         addr = build_address (decl);
12830
12831       /* Optimize for space over speed here.  */
12832       if (!has_vbases || flag_expensive_optimizations)
12833         flags |= LOOKUP_NONVIRTUAL;
12834
12835       call = build_delete (TREE_TYPE (addr), addr,
12836                            sfk_complete_destructor, flags, 0);
12837       if (cleanup)
12838         cleanup = build_compound_expr (input_location, cleanup, call);
12839       else
12840         cleanup = call;
12841     }
12842
12843   return cleanup;
12844 }
12845 \f
12846 /* When a stmt has been parsed, this function is called.  */
12847
12848 void
12849 finish_stmt (void)
12850 {
12851 }
12852
12853 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
12854    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
12855    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
12856
12857 tree
12858 static_fn_type (tree memfntype)
12859 {
12860   tree fntype;
12861   tree args;
12862   int quals;
12863
12864   if (TYPE_PTRMEMFUNC_P (memfntype))
12865     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
12866   if (POINTER_TYPE_P (memfntype)
12867       || TREE_CODE (memfntype) == FUNCTION_DECL)
12868     memfntype = TREE_TYPE (memfntype);
12869   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
12870     return memfntype;
12871   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
12872   args = TYPE_ARG_TYPES (memfntype);
12873   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
12874   quals = cp_type_quals (TREE_TYPE (TREE_VALUE (args)));
12875   fntype = build_qualified_type (fntype, quals);
12876   fntype = (cp_build_type_attribute_variant
12877             (fntype, TYPE_ATTRIBUTES (memfntype)));
12878   fntype = (build_exception_variant
12879             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
12880   return fntype;
12881 }
12882
12883 /* DECL was originally constructed as a non-static member function,
12884    but turned out to be static.  Update it accordingly.  */
12885
12886 void
12887 revert_static_member_fn (tree decl)
12888 {
12889   TREE_TYPE (decl) = static_fn_type (decl);
12890
12891   if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
12892     error ("static member function %q#D declared with type qualifiers", decl);
12893
12894   if (DECL_ARGUMENTS (decl))
12895     DECL_ARGUMENTS (decl) = TREE_CHAIN (DECL_ARGUMENTS (decl));
12896   DECL_STATIC_FUNCTION_P (decl) = 1;
12897 }
12898
12899 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
12900    one of the language-independent trees.  */
12901
12902 enum cp_tree_node_structure_enum
12903 cp_tree_node_structure (union lang_tree_node * t)
12904 {
12905   switch (TREE_CODE (&t->generic))
12906     {
12907     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
12908     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
12909     case OVERLOAD:              return TS_CP_OVERLOAD;
12910     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
12911     case PTRMEM_CST:            return TS_CP_PTRMEM;
12912     case BASELINK:              return TS_CP_BASELINK;
12913     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
12914     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
12915     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
12916     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
12917     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
12918     default:                    return TS_CP_GENERIC;
12919     }
12920 }
12921
12922 /* Build the void_list_node (void_type_node having been created).  */
12923 tree
12924 build_void_list_node (void)
12925 {
12926   tree t = build_tree_list (NULL_TREE, void_type_node);
12927   return t;
12928 }
12929
12930 bool
12931 cp_missing_noreturn_ok_p (tree decl)
12932 {
12933   /* A missing noreturn is ok for the `main' function.  */
12934   return DECL_MAIN_P (decl);
12935 }
12936
12937 /* Return the COMDAT group into which DECL should be placed.  */
12938
12939 tree
12940 cxx_comdat_group (tree decl)
12941 {
12942   tree name;
12943
12944   /* Virtual tables, construction virtual tables, and virtual table
12945      tables all go in a single COMDAT group, named after the primary
12946      virtual table.  */
12947   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
12948     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
12949   /* For all other DECLs, the COMDAT group is the mangled name of the
12950      declaration itself.  */
12951   else
12952     {
12953       while (DECL_THUNK_P (decl))
12954         {
12955           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
12956              into the same section as the target function.  In that case
12957              we must return target's name.  */
12958           tree target = THUNK_TARGET (decl);
12959           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
12960               && DECL_SECTION_NAME (target) != NULL
12961               && DECL_ONE_ONLY (target))
12962             decl = target;
12963           else
12964             break;
12965         }
12966       name = DECL_ASSEMBLER_NAME (decl);
12967     }
12968
12969   return name;
12970 }
12971
12972 #include "gt-cp-decl.h"