OSDN Git Service

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