OSDN Git Service

* pt.c (tsubst_decl): Handle DECL_VALUE_EXPR on reference.
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
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 "flags.h"
37 #include "cp-tree.h"
38 #include "tree-iterator.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "intl.h"
42 #include "output.h"
43 #include "toplev.h"
44 #include "hashtab.h"
45 #include "tm_p.h"
46 #include "target.h"
47 #include "c-family/c-common.h"
48 #include "c-family/c-objc.h"
49 #include "c-family/c-pragma.h"
50 #include "diagnostic.h"
51 #include "intl.h"
52 #include "debug.h"
53 #include "timevar.h"
54 #include "pointer-set.h"
55 #include "splay-tree.h"
56 #include "plugin.h"
57
58 /* Possible cases of bad specifiers type used by bad_specifiers. */
59 enum bad_spec_place {
60   BSP_VAR,    /* variable */
61   BSP_PARM,   /* parameter */
62   BSP_TYPE,   /* type */
63   BSP_FIELD   /* field */
64 };
65
66 static tree grokparms (tree parmlist, tree *);
67 static const char *redeclaration_error_message (tree, tree);
68
69 static int decl_jump_unsafe (tree);
70 static void require_complete_types_for_parms (tree);
71 static int ambi_op_p (enum tree_code);
72 static int unary_op_p (enum tree_code);
73 static void push_local_name (tree);
74 static tree grok_reference_init (tree, tree, tree, tree *);
75 static tree grokvardecl (tree, tree, const cp_decl_specifier_seq *,
76                          int, int, tree);
77 static int check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static tree builtin_function_1 (tree, tree, bool);
80 static tree build_library_fn_1 (tree, enum tree_code, tree);
81 static int member_function_or_else (tree, tree, enum overload_flags);
82 static void bad_specifiers (tree, enum bad_spec_place, int, int, int, int,
83                             int);
84 static void check_for_uninitialized_const_var (tree);
85 static hashval_t typename_hash (const void *);
86 static int typename_compare (const void *, const void *);
87 static tree local_variable_p_walkfn (tree *, int *, void *);
88 static tree record_builtin_java_type (const char *, int);
89 static const char *tag_name (enum tag_types);
90 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
91 static int walk_namespaces_r (tree, walk_namespaces_fn, void *);
92 static void maybe_deduce_size_from_array_init (tree, tree);
93 static void layout_var_decl (tree);
94 static tree check_initializer (tree, tree, int, tree *);
95 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
96 static void save_function_data (tree);
97 static void copy_type_enum (tree , tree);
98 static void check_function_type (tree, tree);
99 static void finish_constructor_body (void);
100 static void begin_destructor_body (void);
101 static void finish_destructor_body (void);
102 static void record_key_method_defined (tree);
103 static tree create_array_type_for_decl (tree, tree, tree);
104 static tree get_atexit_node (void);
105 static tree get_dso_handle_node (void);
106 static tree start_cleanup_fn (void);
107 static void end_cleanup_fn (void);
108 static tree cp_make_fname_decl (location_t, tree, int);
109 static void initialize_predefined_identifiers (void);
110 static tree check_special_function_return_type
111         (special_function_kind, tree, tree);
112 static tree push_cp_library_fn (enum tree_code, tree);
113 static tree build_cp_library_fn (tree, enum tree_code, tree);
114 static void store_parm_decls (tree);
115 static void initialize_local_var (tree, tree);
116 static void expand_static_init (tree, tree);
117
118 /* The following symbols are subsumed in the cp_global_trees array, and
119    listed here individually for documentation purposes.
120
121    C++ extensions
122         tree wchar_decl_node;
123
124         tree vtable_entry_type;
125         tree delta_type_node;
126         tree __t_desc_type_node;
127
128         tree class_type_node;
129         tree unknown_type_node;
130
131    Array type `vtable_entry_type[]'
132
133         tree vtbl_type_node;
134         tree vtbl_ptr_type_node;
135
136    Namespaces,
137
138         tree std_node;
139         tree abi_node;
140
141    A FUNCTION_DECL which can call `abort'.  Not necessarily the
142    one that the user will declare, but sufficient to be called
143    by routines that want to abort the program.
144
145         tree abort_fndecl;
146
147    The FUNCTION_DECL for the default `::operator delete'.
148
149         tree global_delete_fndecl;
150
151    Used by RTTI
152         tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
153         tree tinfo_var_id;  */
154
155 tree cp_global_trees[CPTI_MAX];
156
157 /* Indicates that there is a type value in some namespace, although
158    that is not necessarily in scope at the moment.  */
159
160 tree global_type_node;
161
162 /* The node that holds the "name" of the global scope.  */
163 tree global_scope_name;
164
165 #define local_names cp_function_chain->x_local_names
166
167 /* A list of objects which have constructors or destructors
168    which reside in the global scope.  The decl is stored in
169    the TREE_VALUE slot and the initializer is stored
170    in the TREE_PURPOSE slot.  */
171 tree static_aggregates;
172
173 /* -- end of C++ */
174
175 /* A node for the integer constant 2.  */
176
177 tree integer_two_node;
178
179 /* Used only for jumps to as-yet undefined labels, since jumps to
180    defined labels can have their validity checked immediately.  */
181
182 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
183   struct named_label_use_entry *next;
184   /* The binding level to which this entry is *currently* attached.
185      This is initially the binding level in which the goto appeared,
186      but is modified as scopes are closed.  */
187   struct cp_binding_level *binding_level;
188   /* The head of the names list that was current when the goto appeared,
189      or the inner scope popped.  These are the decls that will *not* be
190      skipped when jumping to the label.  */
191   tree names_in_scope;
192   /* The location of the goto, for error reporting.  */
193   location_t o_goto_locus;
194   /* True if an OpenMP structured block scope has been closed since
195      the goto appeared.  This means that the branch from the label will
196      illegally exit an OpenMP scope.  */
197   bool in_omp_scope;
198 };
199
200 /* A list of all LABEL_DECLs in the function that have names.  Here so
201    we can clear out their names' definitions at the end of the
202    function, and so we can check the validity of jumps to these labels.  */
203
204 struct GTY(()) named_label_entry {
205   /* The decl itself.  */
206   tree label_decl;
207
208   /* The binding level to which the label is *currently* attached.
209      This is initially set to the binding level in which the label
210      is defined, but is modified as scopes are closed.  */
211   struct cp_binding_level *binding_level;
212   /* The head of the names list that was current when the label was
213      defined, or the inner scope popped.  These are the decls that will
214      be skipped when jumping to the label.  */
215   tree names_in_scope;
216   /* A vector of all decls from all binding levels that would be
217      crossed by a backward branch to the label.  */
218   VEC(tree,gc) *bad_decls;
219
220   /* A list of uses of the label, before the label is defined.  */
221   struct named_label_use_entry *uses;
222
223   /* The following bits are set after the label is defined, and are
224      updated as scopes are popped.  They indicate that a backward jump
225      to the label will illegally enter a scope of the given flavor.  */
226   bool in_try_scope;
227   bool in_catch_scope;
228   bool in_omp_scope;
229 };
230
231 #define named_labels cp_function_chain->x_named_labels
232 \f
233 /* The number of function bodies which we are currently processing.
234    (Zero if we are at namespace scope, one inside the body of a
235    function, two inside the body of a function in a local class, etc.)  */
236 int function_depth;
237
238 /* To avoid unwanted recursion, finish_function defers all mark_used calls
239    encountered during its execution until it finishes.  */
240 bool defer_mark_used_calls;
241 VEC(tree, gc) *deferred_mark_used_calls;
242
243 /* States indicating how grokdeclarator() should handle declspecs marked
244    with __attribute__((deprecated)).  An object declared as
245    __attribute__((deprecated)) suppresses warnings of uses of other
246    deprecated items.  */
247 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
248
249 \f
250 /* A list of VAR_DECLs whose type was incomplete at the time the
251    variable was declared.  */
252
253 typedef struct GTY(()) incomplete_var_d {
254   tree decl;
255   tree incomplete_type;
256 } incomplete_var;
257
258 DEF_VEC_O(incomplete_var);
259 DEF_VEC_ALLOC_O(incomplete_var,gc);
260
261 static GTY(()) VEC(incomplete_var,gc) *incomplete_vars;
262 \f
263 /* Returns the kind of template specialization we are currently
264    processing, given that it's declaration contained N_CLASS_SCOPES
265    explicit scope qualifications.  */
266
267 tmpl_spec_kind
268 current_tmpl_spec_kind (int n_class_scopes)
269 {
270   int n_template_parm_scopes = 0;
271   int seen_specialization_p = 0;
272   int innermost_specialization_p = 0;
273   struct cp_binding_level *b;
274
275   /* Scan through the template parameter scopes.  */
276   for (b = current_binding_level;
277        b->kind == sk_template_parms;
278        b = b->level_chain)
279     {
280       /* If we see a specialization scope inside a parameter scope,
281          then something is wrong.  That corresponds to a declaration
282          like:
283
284             template <class T> template <> ...
285
286          which is always invalid since [temp.expl.spec] forbids the
287          specialization of a class member template if the enclosing
288          class templates are not explicitly specialized as well.  */
289       if (b->explicit_spec_p)
290         {
291           if (n_template_parm_scopes == 0)
292             innermost_specialization_p = 1;
293           else
294             seen_specialization_p = 1;
295         }
296       else if (seen_specialization_p == 1)
297         return tsk_invalid_member_spec;
298
299       ++n_template_parm_scopes;
300     }
301
302   /* Handle explicit instantiations.  */
303   if (processing_explicit_instantiation)
304     {
305       if (n_template_parm_scopes != 0)
306         /* We've seen a template parameter list during an explicit
307            instantiation.  For example:
308
309              template <class T> template void f(int);
310
311            This is erroneous.  */
312         return tsk_invalid_expl_inst;
313       else
314         return tsk_expl_inst;
315     }
316
317   if (n_template_parm_scopes < n_class_scopes)
318     /* We've not seen enough template headers to match all the
319        specialized classes present.  For example:
320
321          template <class T> void R<T>::S<T>::f(int);
322
323        This is invalid; there needs to be one set of template
324        parameters for each class.  */
325     return tsk_insufficient_parms;
326   else if (n_template_parm_scopes == n_class_scopes)
327     /* We're processing a non-template declaration (even though it may
328        be a member of a template class.)  For example:
329
330          template <class T> void S<T>::f(int);
331
332        The `class T' matches the `S<T>', leaving no template headers
333        corresponding to the `f'.  */
334     return tsk_none;
335   else if (n_template_parm_scopes > n_class_scopes + 1)
336     /* We've got too many template headers.  For example:
337
338          template <> template <class T> void f (T);
339
340        There need to be more enclosing classes.  */
341     return tsk_excessive_parms;
342   else
343     /* This must be a template.  It's of the form:
344
345          template <class T> template <class U> void S<T>::f(U);
346
347        This is a specialization if the innermost level was a
348        specialization; otherwise it's just a definition of the
349        template.  */
350     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
351 }
352
353 /* Exit the current scope.  */
354
355 void
356 finish_scope (void)
357 {
358   poplevel (0, 0, 0);
359 }
360
361 /* When a label goes out of scope, check to see if that label was used
362    in a valid manner, and issue any appropriate warnings or errors.  */
363
364 static void
365 pop_label (tree label, tree old_value)
366 {
367   if (!processing_template_decl)
368     {
369       if (DECL_INITIAL (label) == NULL_TREE)
370         {
371           location_t location;
372
373           error ("label %q+D used but not defined", label);
374           location = input_location; /* FIXME want (input_filename, (line)0) */
375           /* Avoid crashing later.  */
376           define_label (location, DECL_NAME (label));
377         }
378       else 
379         warn_for_unused_label (label);
380     }
381
382   SET_IDENTIFIER_LABEL_VALUE (DECL_NAME (label), old_value);
383 }
384
385 /* At the end of a function, all labels declared within the function
386    go out of scope.  BLOCK is the top-level block for the
387    function.  */
388
389 static int
390 pop_labels_1 (void **slot, void *data)
391 {
392   struct named_label_entry *ent = (struct named_label_entry *) *slot;
393   tree block = (tree) data;
394
395   pop_label (ent->label_decl, NULL_TREE);
396
397   /* Put the labels into the "variables" of the top-level block,
398      so debugger can see them.  */
399   DECL_CHAIN (ent->label_decl) = BLOCK_VARS (block);
400   BLOCK_VARS (block) = ent->label_decl;
401
402   htab_clear_slot (named_labels, slot);
403
404   return 1;
405 }
406
407 static void
408 pop_labels (tree block)
409 {
410   if (named_labels)
411     {
412       htab_traverse (named_labels, pop_labels_1, block);
413       named_labels = NULL;
414     }
415 }
416
417 /* At the end of a block with local labels, restore the outer definition.  */
418
419 static void
420 pop_local_label (tree label, tree old_value)
421 {
422   struct named_label_entry dummy;
423   void **slot;
424
425   pop_label (label, old_value);
426
427   dummy.label_decl = label;
428   slot = htab_find_slot (named_labels, &dummy, NO_INSERT);
429   htab_clear_slot (named_labels, slot);
430 }
431
432 /* The following two routines are used to interface to Objective-C++.
433    The binding level is purposely treated as an opaque type.  */
434
435 void *
436 objc_get_current_scope (void)
437 {
438   return current_binding_level;
439 }
440
441 /* The following routine is used by the NeXT-style SJLJ exceptions;
442    variables get marked 'volatile' so as to not be clobbered by
443    _setjmp()/_longjmp() calls.  All variables in the current scope,
444    as well as parent scopes up to (but not including) ENCLOSING_BLK
445    shall be thusly marked.  */
446
447 void
448 objc_mark_locals_volatile (void *enclosing_blk)
449 {
450   struct cp_binding_level *scope;
451
452   for (scope = current_binding_level;
453        scope && scope != enclosing_blk;
454        scope = scope->level_chain)
455     {
456       tree decl;
457
458       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
459         objc_volatilize_decl (decl);
460
461       /* Do not climb up past the current function.  */
462       if (scope->kind == sk_function_parms)
463         break;
464     }
465 }
466
467 /* Update data for defined and undefined labels when leaving a scope.  */
468
469 static int
470 poplevel_named_label_1 (void **slot, void *data)
471 {
472   struct named_label_entry *ent = (struct named_label_entry *) *slot;
473   struct cp_binding_level *bl = (struct cp_binding_level *) data;
474   struct cp_binding_level *obl = bl->level_chain;
475
476   if (ent->binding_level == bl)
477     {
478       tree decl;
479
480       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
481          TREE_LISTs representing OVERLOADs, so be careful.  */
482       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
483                                                      ? DECL_CHAIN (decl)
484                                                      : TREE_CHAIN (decl)))
485         if (decl_jump_unsafe (decl))
486           VEC_safe_push (tree, gc, ent->bad_decls, decl);
487
488       ent->binding_level = obl;
489       ent->names_in_scope = obl->names;
490       switch (bl->kind)
491         {
492         case sk_try:
493           ent->in_try_scope = true;
494           break;
495         case sk_catch:
496           ent->in_catch_scope = true;
497           break;
498         case sk_omp:
499           ent->in_omp_scope = true;
500           break;
501         default:
502           break;
503         }
504     }
505   else if (ent->uses)
506     {
507       struct named_label_use_entry *use;
508
509       for (use = ent->uses; use ; use = use->next)
510         if (use->binding_level == bl)
511           {
512             use->binding_level = obl;
513             use->names_in_scope = obl->names;
514             if (bl->kind == sk_omp)
515               use->in_omp_scope = true;
516           }
517     }
518
519   return 1;
520 }
521
522 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
523    when errors were reported, except for -Werror-unused-but-set-*.  */
524 static int unused_but_set_errorcount;
525
526 /* Exit a binding level.
527    Pop the level off, and restore the state of the identifier-decl mappings
528    that were in effect when this level was entered.
529
530    If KEEP == 1, this level had explicit declarations, so
531    and create a "block" (a BLOCK node) for the level
532    to record its declarations and subblocks for symbol table output.
533
534    If FUNCTIONBODY is nonzero, this level is the body of a function,
535    so create a block as if KEEP were set and also clear out all
536    label names.
537
538    If REVERSE is nonzero, reverse the order of decls before putting
539    them into the BLOCK.  */
540
541 tree
542 poplevel (int keep, int reverse, int functionbody)
543 {
544   tree link;
545   /* The chain of decls was accumulated in reverse order.
546      Put it into forward order, just for cleanliness.  */
547   tree decls;
548   tree subblocks;
549   tree block;
550   tree decl;
551   int leaving_for_scope;
552   scope_kind kind;
553   unsigned ix;
554   cp_label_binding *label_bind;
555
556   timevar_start (TV_NAME_LOOKUP);
557  restart:
558
559   block = NULL_TREE;
560
561   gcc_assert (current_binding_level->kind != sk_class);
562
563   if (current_binding_level->kind == sk_cleanup)
564     functionbody = 0;
565   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
566
567   gcc_assert (!VEC_length(cp_class_binding,
568                           current_binding_level->class_shadowed));
569
570   /* We used to use KEEP == 2 to indicate that the new block should go
571      at the beginning of the list of blocks at this binding level,
572      rather than the end.  This hack is no longer used.  */
573   gcc_assert (keep == 0 || keep == 1);
574
575   if (current_binding_level->keep)
576     keep = 1;
577
578   /* Any uses of undefined labels, and any defined labels, now operate
579      under constraints of next binding contour.  */
580   if (cfun && !functionbody && named_labels)
581     htab_traverse (named_labels, poplevel_named_label_1,
582                    current_binding_level);
583
584   /* Get the decls in the order they were written.
585      Usually current_binding_level->names is in reverse order.
586      But parameter decls were previously put in forward order.  */
587
588   if (reverse)
589     current_binding_level->names
590       = decls = nreverse (current_binding_level->names);
591   else
592     decls = current_binding_level->names;
593
594   /* If there were any declarations or structure tags in that level,
595      or if this level is a function body,
596      create a BLOCK to record them for the life of this function.  */
597   block = NULL_TREE;
598   if (keep == 1 || functionbody)
599     block = make_node (BLOCK);
600   if (block != NULL_TREE)
601     {
602       BLOCK_VARS (block) = decls;
603       BLOCK_SUBBLOCKS (block) = subblocks;
604     }
605
606   /* In each subblock, record that this is its superior.  */
607   if (keep >= 0)
608     for (link = subblocks; link; link = BLOCK_CHAIN (link))
609       BLOCK_SUPERCONTEXT (link) = block;
610
611   /* We still support the old for-scope rules, whereby the variables
612      in a for-init statement were in scope after the for-statement
613      ended.  We only use the new rules if flag_new_for_scope is
614      nonzero.  */
615   leaving_for_scope
616     = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
617
618   /* Before we remove the declarations first check for unused variables.  */
619   if ((warn_unused_variable || warn_unused_but_set_variable)
620       && !processing_template_decl)
621     for (decl = getdecls (); decl; decl = TREE_CHAIN (decl))
622       if (TREE_CODE (decl) == VAR_DECL
623           && (! TREE_USED (decl) || !DECL_READ_P (decl))
624           && ! DECL_IN_SYSTEM_HEADER (decl)
625           && DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
626         {
627           if (! TREE_USED (decl))
628             warning (OPT_Wunused_variable, "unused variable %q+D", decl);
629           else if (DECL_CONTEXT (decl) == current_function_decl
630                    && TREE_TYPE (decl) != error_mark_node
631                    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
632                    && errorcount == unused_but_set_errorcount
633                    && (!CLASS_TYPE_P (TREE_TYPE (decl))
634                        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
635             {
636               warning (OPT_Wunused_but_set_variable,
637                        "variable %q+D set but not used", decl); 
638               unused_but_set_errorcount = errorcount;
639             }
640         }
641
642   /* Remove declarations for all the DECLs in this level.  */
643   for (link = decls; link; link = TREE_CHAIN (link))
644     {
645       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
646           && DECL_NAME (link))
647         {
648           tree name = DECL_NAME (link);
649           cxx_binding *ob;
650           tree ns_binding;
651
652           ob = outer_binding (name,
653                               IDENTIFIER_BINDING (name),
654                               /*class_p=*/true);
655           if (!ob)
656             ns_binding = IDENTIFIER_NAMESPACE_VALUE (name);
657           else
658             ns_binding = NULL_TREE;
659
660           if (ob && ob->scope == current_binding_level->level_chain)
661             /* We have something like:
662
663                  int i;
664                  for (int i; ;);
665
666                and we are leaving the `for' scope.  There's no reason to
667                keep the binding of the inner `i' in this case.  */
668             pop_binding (name, link);
669           else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
670                    || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
671             /* Here, we have something like:
672
673                  typedef int I;
674
675                  void f () {
676                    for (int I; ;);
677                  }
678
679                We must pop the for-scope binding so we know what's a
680                type and what isn't.  */
681             pop_binding (name, link);
682           else
683             {
684               /* Mark this VAR_DECL as dead so that we can tell we left it
685                  there only for backward compatibility.  */
686               DECL_DEAD_FOR_LOCAL (link) = 1;
687
688               /* Keep track of what should have happened when we
689                  popped the binding.  */
690               if (ob && ob->value)
691                 {
692                   SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
693                   DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
694                 }
695
696               /* Add it to the list of dead variables in the next
697                  outermost binding to that we can remove these when we
698                  leave that binding.  */
699               VEC_safe_push (tree, gc,
700                              current_binding_level->level_chain->dead_vars_from_for,
701                              link);
702
703               /* Although we don't pop the cxx_binding, we do clear
704                  its SCOPE since the scope is going away now.  */
705               IDENTIFIER_BINDING (name)->scope
706                 = current_binding_level->level_chain;
707             }
708         }
709       else
710         {
711           tree name;
712
713           /* Remove the binding.  */
714           decl = link;
715
716           if (TREE_CODE (decl) == TREE_LIST)
717             decl = TREE_VALUE (decl);
718           name = decl;
719
720           if (TREE_CODE (name) == OVERLOAD)
721             name = OVL_FUNCTION (name);
722
723           gcc_assert (DECL_P (name));
724           pop_binding (DECL_NAME (name), decl);
725         }
726     }
727
728   /* Remove declarations for any `for' variables from inner scopes
729      that we kept around.  */
730   FOR_EACH_VEC_ELT_REVERSE (tree, current_binding_level->dead_vars_from_for,
731                             ix, decl)
732     pop_binding (DECL_NAME (decl), decl);
733
734   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
735   for (link = current_binding_level->type_shadowed;
736        link; link = TREE_CHAIN (link))
737     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
738
739   /* Restore the IDENTIFIER_LABEL_VALUEs for local labels.  */
740   FOR_EACH_VEC_ELT_REVERSE (cp_label_binding,
741                             current_binding_level->shadowed_labels,
742                             ix, label_bind)
743     pop_local_label (label_bind->label, label_bind->prev_value);
744
745   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
746      list if a `using' declaration put them there.  The debugging
747      back ends won't understand OVERLOAD, so we remove them here.
748      Because the BLOCK_VARS are (temporarily) shared with
749      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
750      popped all the bindings.  */
751   if (block)
752     {
753       tree* d;
754
755       for (d = &BLOCK_VARS (block); *d; )
756         {
757           if (TREE_CODE (*d) == TREE_LIST)
758             *d = TREE_CHAIN (*d);
759           else
760             d = &DECL_CHAIN (*d);
761         }
762     }
763
764   /* If the level being exited is the top level of a function,
765      check over all the labels.  */
766   if (functionbody)
767     {
768       /* Since this is the top level block of a function, the vars are
769          the function's parameters.  Don't leave them in the BLOCK
770          because they are found in the FUNCTION_DECL instead.  */
771       BLOCK_VARS (block) = 0;
772       pop_labels (block);
773     }
774
775   kind = current_binding_level->kind;
776   if (kind == sk_cleanup)
777     {
778       tree stmt;
779
780       /* If this is a temporary binding created for a cleanup, then we'll
781          have pushed a statement list level.  Pop that, create a new
782          BIND_EXPR for the block, and insert it into the stream.  */
783       stmt = pop_stmt_list (current_binding_level->statement_list);
784       stmt = c_build_bind_expr (input_location, block, stmt);
785       add_stmt (stmt);
786     }
787
788   leave_scope ();
789   if (functionbody)
790     {
791       /* The current function is being defined, so its DECL_INITIAL
792          should be error_mark_node.  */
793       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
794       DECL_INITIAL (current_function_decl) = block;
795     }
796   else if (block)
797     current_binding_level->blocks
798       = block_chainon (current_binding_level->blocks, block);
799
800   /* If we did not make a block for the level just exited,
801      any blocks made for inner levels
802      (since they cannot be recorded as subblocks in that level)
803      must be carried forward so they will later become subblocks
804      of something else.  */
805   else if (subblocks)
806     current_binding_level->blocks
807       = block_chainon (current_binding_level->blocks, subblocks);
808
809   /* Each and every BLOCK node created here in `poplevel' is important
810      (e.g. for proper debugging information) so if we created one
811      earlier, mark it as "used".  */
812   if (block)
813     TREE_USED (block) = 1;
814
815   /* All temporary bindings created for cleanups are popped silently.  */
816   if (kind == sk_cleanup)
817     goto restart;
818
819   timevar_stop (TV_NAME_LOOKUP);
820   return block;
821 }
822
823 /* Walk all the namespaces contained NAMESPACE, including NAMESPACE
824    itself, calling F for each.  The DATA is passed to F as well.  */
825
826 static int
827 walk_namespaces_r (tree name_space, walk_namespaces_fn f, void* data)
828 {
829   int result = 0;
830   tree current = NAMESPACE_LEVEL (name_space)->namespaces;
831
832   result |= (*f) (name_space, data);
833
834   for (; current; current = DECL_CHAIN (current))
835     result |= walk_namespaces_r (current, f, data);
836
837   return result;
838 }
839
840 /* Walk all the namespaces, calling F for each.  The DATA is passed to
841    F as well.  */
842
843 int
844 walk_namespaces (walk_namespaces_fn f, void* data)
845 {
846   return walk_namespaces_r (global_namespace, f, data);
847 }
848
849 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  If
850    DATA is non-NULL, this is the last time we will call
851    wrapup_global_declarations for this NAMESPACE.  */
852
853 int
854 wrapup_globals_for_namespace (tree name_space, void* data)
855 {
856   struct cp_binding_level *level = NAMESPACE_LEVEL (name_space);
857   VEC(tree,gc) *statics = level->static_decls;
858   tree *vec = VEC_address (tree, statics);
859   int len = VEC_length (tree, statics);
860   int last_time = (data != 0);
861
862   if (last_time)
863     {
864       check_global_declarations (vec, len);
865       emit_debug_global_declarations (vec, len);
866       return 0;
867     }
868
869   /* Write out any globals that need to be output.  */
870   return wrapup_global_declarations (vec, len);
871 }
872
873 \f
874 /* In C++, you don't have to write `struct S' to refer to `S'; you
875    can just use `S'.  We accomplish this by creating a TYPE_DECL as
876    if the user had written `typedef struct S S'.  Create and return
877    the TYPE_DECL for TYPE.  */
878
879 tree
880 create_implicit_typedef (tree name, tree type)
881 {
882   tree decl;
883
884   decl = build_decl (input_location, TYPE_DECL, name, type);
885   DECL_ARTIFICIAL (decl) = 1;
886   /* There are other implicit type declarations, like the one *within*
887      a class that allows you to write `S::S'.  We must distinguish
888      amongst these.  */
889   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
890   TYPE_NAME (type) = decl;
891   TYPE_STUB_DECL (type) = decl;
892
893   return decl;
894 }
895
896 /* Remember a local name for name-mangling purposes.  */
897
898 static void
899 push_local_name (tree decl)
900 {
901   size_t i, nelts;
902   tree t, name;
903
904   timevar_start (TV_NAME_LOOKUP);
905
906   name = DECL_NAME (decl);
907
908   nelts = VEC_length (tree, local_names);
909   for (i = 0; i < nelts; i++)
910     {
911       t = VEC_index (tree, local_names, i);
912       if (DECL_NAME (t) == name)
913         {
914           if (!DECL_LANG_SPECIFIC (decl))
915             retrofit_lang_decl (decl);
916           DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
917           if (DECL_LANG_SPECIFIC (t))
918             DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
919           else
920             DECL_DISCRIMINATOR (decl) = 1;
921
922           VEC_replace (tree, local_names, i, decl);
923           timevar_stop (TV_NAME_LOOKUP);
924           return;
925         }
926     }
927
928   VEC_safe_push (tree, gc, local_names, decl);
929   timevar_stop (TV_NAME_LOOKUP);
930 }
931 \f
932 /* Subroutine of duplicate_decls: return truthvalue of whether
933    or not types of these decls match.
934
935    For C++, we must compare the parameter list so that `int' can match
936    `int&' in a parameter position, but `int&' is not confused with
937    `const int&'.  */
938
939 int
940 decls_match (tree newdecl, tree olddecl)
941 {
942   int types_match;
943
944   if (newdecl == olddecl)
945     return 1;
946
947   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
948     /* If the two DECLs are not even the same kind of thing, we're not
949        interested in their types.  */
950     return 0;
951
952   if (TREE_CODE (newdecl) == FUNCTION_DECL)
953     {
954       tree f1 = TREE_TYPE (newdecl);
955       tree f2 = TREE_TYPE (olddecl);
956       tree p1 = TYPE_ARG_TYPES (f1);
957       tree p2 = TYPE_ARG_TYPES (f2);
958
959       /* Specializations of different templates are different functions
960          even if they have the same type.  */
961       tree t1 = (DECL_USE_TEMPLATE (newdecl)
962                  ? DECL_TI_TEMPLATE (newdecl)
963                  : NULL_TREE);
964       tree t2 = (DECL_USE_TEMPLATE (olddecl)
965                  ? DECL_TI_TEMPLATE (olddecl)
966                  : NULL_TREE);
967       if (t1 != t2)
968         return 0;
969
970       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
971           && ! (DECL_EXTERN_C_P (newdecl)
972                 && DECL_EXTERN_C_P (olddecl)))
973         return 0;
974
975 #ifdef NO_IMPLICIT_EXTERN_C
976       /* A new declaration doesn't match a built-in one unless it
977          is also extern "C".  */
978       if (DECL_IS_BUILTIN (olddecl)
979           && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
980         return 0;
981 #endif
982
983       if (TREE_CODE (f1) != TREE_CODE (f2))
984         return 0;
985
986       if (same_type_p (TREE_TYPE (f1), TREE_TYPE (f2)))
987         {
988           if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
989               && (DECL_BUILT_IN (olddecl)
990 #ifndef NO_IMPLICIT_EXTERN_C
991                   || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
992                   || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
993 #endif
994               ))
995             {
996               types_match = self_promoting_args_p (p1);
997               if (p1 == void_list_node)
998                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
999             }
1000 #ifndef NO_IMPLICIT_EXTERN_C
1001           else if (!prototype_p (f1)
1002                    && (DECL_EXTERN_C_P (olddecl)
1003                        && DECL_IN_SYSTEM_HEADER (olddecl)
1004                        && !DECL_CLASS_SCOPE_P (olddecl))
1005                    && (DECL_EXTERN_C_P (newdecl)
1006                        && DECL_IN_SYSTEM_HEADER (newdecl)
1007                        && !DECL_CLASS_SCOPE_P (newdecl)))
1008             {
1009               types_match = self_promoting_args_p (p2);
1010               TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1011             }
1012 #endif
1013           else
1014             types_match =
1015               compparms (p1, p2)
1016               && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1017                   || comp_type_attributes (TREE_TYPE (newdecl),
1018                                            TREE_TYPE (olddecl)) != 0);
1019         }
1020       else
1021         types_match = 0;
1022     }
1023   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1024     {
1025       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl))
1026           != TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)))
1027         return 0;
1028
1029       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1030                                 DECL_TEMPLATE_PARMS (olddecl)))
1031         return 0;
1032
1033       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1034         types_match = same_type_p (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl)),
1035                                    TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)));
1036       else
1037         types_match = decls_match (DECL_TEMPLATE_RESULT (olddecl),
1038                                    DECL_TEMPLATE_RESULT (newdecl));
1039     }
1040   else
1041     {
1042       /* Need to check scope for variable declaration (VAR_DECL).
1043          For typedef (TYPE_DECL), scope is ignored.  */
1044       if (TREE_CODE (newdecl) == VAR_DECL
1045           && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1046           /* [dcl.link]
1047              Two declarations for an object with C language linkage
1048              with the same name (ignoring the namespace that qualify
1049              it) that appear in different namespace scopes refer to
1050              the same object.  */
1051           && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1052         return 0;
1053
1054       if (TREE_TYPE (newdecl) == error_mark_node)
1055         types_match = TREE_TYPE (olddecl) == error_mark_node;
1056       else if (TREE_TYPE (olddecl) == NULL_TREE)
1057         types_match = TREE_TYPE (newdecl) == NULL_TREE;
1058       else if (TREE_TYPE (newdecl) == NULL_TREE)
1059         types_match = 0;
1060       else
1061         types_match = comptypes (TREE_TYPE (newdecl),
1062                                  TREE_TYPE (olddecl),
1063                                  COMPARE_REDECLARATION);
1064     }
1065
1066   return types_match;
1067 }
1068
1069 /* If NEWDECL is `static' and an `extern' was seen previously,
1070    warn about it.  OLDDECL is the previous declaration.
1071
1072    Note that this does not apply to the C++ case of declaring
1073    a variable `extern const' and then later `const'.
1074
1075    Don't complain about built-in functions, since they are beyond
1076    the user's control.  */
1077
1078 void
1079 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1080 {
1081   if (TREE_CODE (newdecl) == TYPE_DECL
1082       || TREE_CODE (newdecl) == TEMPLATE_DECL
1083       || TREE_CODE (newdecl) == CONST_DECL
1084       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1085     return;
1086
1087   /* Don't get confused by static member functions; that's a different
1088      use of `static'.  */
1089   if (TREE_CODE (newdecl) == FUNCTION_DECL
1090       && DECL_STATIC_FUNCTION_P (newdecl))
1091     return;
1092
1093   /* If the old declaration was `static', or the new one isn't, then
1094      everything is OK.  */
1095   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1096     return;
1097
1098   /* It's OK to declare a builtin function as `static'.  */
1099   if (TREE_CODE (olddecl) == FUNCTION_DECL
1100       && DECL_ARTIFICIAL (olddecl))
1101     return;
1102
1103   permerror (input_location, "%qD was declared %<extern%> and later %<static%>", newdecl);
1104   permerror (input_location, "previous declaration of %q+D", olddecl);
1105 }
1106
1107 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1108    function templates.  If their exception specifications do not
1109    match, issue a diagnostic.  */
1110
1111 static void
1112 check_redeclaration_exception_specification (tree new_decl,
1113                                              tree old_decl)
1114 {
1115   tree new_type;
1116   tree old_type;
1117   tree new_exceptions;
1118   tree old_exceptions;
1119
1120   new_type = TREE_TYPE (new_decl);
1121   new_exceptions = TYPE_RAISES_EXCEPTIONS (new_type);
1122   old_type = TREE_TYPE (old_decl);
1123   old_exceptions = TYPE_RAISES_EXCEPTIONS (old_type);
1124
1125   /* [except.spec]
1126
1127      If any declaration of a function has an exception-specification,
1128      all declarations, including the definition and an explicit
1129      specialization, of that function shall have an
1130      exception-specification with the same set of type-ids.  */
1131   if ((pedantic || ! DECL_IN_SYSTEM_HEADER (old_decl))
1132       && ! DECL_IS_BUILTIN (old_decl)
1133       && flag_exceptions
1134       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1135     {
1136       error ("declaration of %qF has a different exception specifier",
1137              new_decl);
1138       error ("from previous declaration %q+F", old_decl);
1139     }
1140 }
1141
1142 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1143    Otherwise issue diagnostics.  */
1144
1145 static bool
1146 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1147 {
1148   old_decl = STRIP_TEMPLATE (old_decl);
1149   new_decl = STRIP_TEMPLATE (new_decl);
1150   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1151       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1152     return true;
1153   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1154       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1155     return true;
1156   if (TREE_CODE (old_decl) == FUNCTION_DECL && DECL_BUILT_IN (old_decl))
1157     {
1158       /* Hide a built-in declaration.  */
1159       DECL_DECLARED_CONSTEXPR_P (old_decl)
1160         = DECL_DECLARED_CONSTEXPR_P (new_decl);
1161       return true;
1162     }
1163   error ("redeclaration %qD differs in %<constexpr%>", new_decl);
1164   error ("from previous declaration %q+D", old_decl);
1165   return false;
1166 }
1167
1168 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                   \
1169                           && lookup_attribute ("gnu_inline",            \
1170                                                DECL_ATTRIBUTES (fn)))
1171
1172 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1173    If the redeclaration is invalid, a diagnostic is issued, and the
1174    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1175
1176    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1177    returned.
1178
1179    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1180
1181 tree
1182 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1183 {
1184   unsigned olddecl_uid = DECL_UID (olddecl);
1185   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1186   int new_defines_function = 0;
1187   tree new_template_info;
1188
1189   if (newdecl == olddecl)
1190     return olddecl;
1191
1192   types_match = decls_match (newdecl, olddecl);
1193
1194   /* If either the type of the new decl or the type of the old decl is an
1195      error_mark_node, then that implies that we have already issued an
1196      error (earlier) for some bogus type specification, and in that case,
1197      it is rather pointless to harass the user with yet more error message
1198      about the same declaration, so just pretend the types match here.  */
1199   if (TREE_TYPE (newdecl) == error_mark_node
1200       || TREE_TYPE (olddecl) == error_mark_node)
1201     return error_mark_node;
1202
1203   if (DECL_P (olddecl)
1204       && TREE_CODE (newdecl) == FUNCTION_DECL
1205       && TREE_CODE (olddecl) == FUNCTION_DECL
1206       && (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)))
1207     {
1208       if (DECL_DECLARED_INLINE_P (newdecl)
1209           && DECL_UNINLINABLE (newdecl)
1210           && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1211         /* Already warned elsewhere.  */;
1212       else if (DECL_DECLARED_INLINE_P (olddecl)
1213                && DECL_UNINLINABLE (olddecl)
1214                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1215         /* Already warned.  */;
1216       else if (DECL_DECLARED_INLINE_P (newdecl)
1217                && DECL_UNINLINABLE (olddecl)
1218                && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl)))
1219         {
1220           warning (OPT_Wattributes, "function %q+D redeclared as inline",
1221                    newdecl);
1222           warning (OPT_Wattributes, "previous declaration of %q+D "
1223                    "with attribute noinline", olddecl);
1224         }
1225       else if (DECL_DECLARED_INLINE_P (olddecl)
1226                && DECL_UNINLINABLE (newdecl)
1227                && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl)))
1228         {
1229           warning (OPT_Wattributes, "function %q+D redeclared with "
1230                    "attribute noinline", newdecl);
1231           warning (OPT_Wattributes, "previous declaration of %q+D was inline",
1232                    olddecl);
1233         }
1234     }
1235
1236   /* Check for redeclaration and other discrepancies.  */
1237   if (TREE_CODE (olddecl) == FUNCTION_DECL
1238       && DECL_ARTIFICIAL (olddecl))
1239     {
1240       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1241       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1242         {
1243           /* Avoid warnings redeclaring built-ins which have not been
1244              explicitly declared.  */
1245           if (DECL_ANTICIPATED (olddecl))
1246             return NULL_TREE;
1247
1248           /* If you declare a built-in or predefined function name as static,
1249              the old definition is overridden, but optionally warn this was a
1250              bad choice of name.  */
1251           if (! TREE_PUBLIC (newdecl))
1252             {
1253               warning (OPT_Wshadow, 
1254                        DECL_BUILT_IN (olddecl)
1255                        ? G_("shadowing built-in function %q#D")
1256                        : G_("shadowing library function %q#D"), olddecl);
1257               /* Discard the old built-in function.  */
1258               return NULL_TREE;
1259             }
1260           /* If the built-in is not ansi, then programs can override
1261              it even globally without an error.  */
1262           else if (! DECL_BUILT_IN (olddecl))
1263             warning (0, "library function %q#D redeclared as non-function %q#D",
1264                      olddecl, newdecl);
1265           else
1266             {
1267               error ("declaration of %q#D", newdecl);
1268               error ("conflicts with built-in declaration %q#D",
1269                      olddecl);
1270             }
1271           return NULL_TREE;
1272         }
1273       else if (!types_match)
1274         {
1275           /* Avoid warnings redeclaring built-ins which have not been
1276              explicitly declared.  */
1277           if (DECL_ANTICIPATED (olddecl))
1278             {
1279               /* Deal with fileptr_type_node.  FILE type is not known
1280                  at the time we create the builtins.  */
1281               tree t1, t2;
1282
1283               for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1284                    t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1285                    t1 || t2;
1286                    t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1287                 if (!t1 || !t2)
1288                   break;
1289                 else if (TREE_VALUE (t2) == fileptr_type_node)
1290                   {
1291                     tree t = TREE_VALUE (t1);
1292
1293                     if (TREE_CODE (t) == POINTER_TYPE
1294                         && TYPE_NAME (TREE_TYPE (t))
1295                         && DECL_NAME (TYPE_NAME (TREE_TYPE (t)))
1296                            == get_identifier ("FILE")
1297                         && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1298                       {
1299                         tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1300
1301                         TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1302                           = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1303                         types_match = decls_match (newdecl, olddecl);
1304                         if (types_match)
1305                           return duplicate_decls (newdecl, olddecl,
1306                                                   newdecl_is_friend);
1307                         TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1308                       }
1309                   }
1310                 else if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1311                   break;
1312             }
1313           else if ((DECL_EXTERN_C_P (newdecl)
1314                     && DECL_EXTERN_C_P (olddecl))
1315                    || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1316                                  TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1317             {
1318               /* A near match; override the builtin.  */
1319
1320               if (TREE_PUBLIC (newdecl))
1321                 {
1322                   warning (0, "new declaration %q#D", newdecl);
1323                   warning (0, "ambiguates built-in declaration %q#D",
1324                            olddecl);
1325                 }
1326               else
1327                 warning (OPT_Wshadow, 
1328                          DECL_BUILT_IN (olddecl)
1329                          ? G_("shadowing built-in function %q#D")
1330                          : G_("shadowing library function %q#D"), olddecl);
1331             }
1332           else
1333             /* Discard the old built-in function.  */
1334             return NULL_TREE;
1335
1336           /* Replace the old RTL to avoid problems with inlining.  */
1337           COPY_DECL_RTL (newdecl, olddecl);
1338         }
1339       /* Even if the types match, prefer the new declarations type for
1340          built-ins which have not been explicitly declared, for
1341          exception lists, etc...  */
1342       else if (DECL_IS_BUILTIN (olddecl))
1343         {
1344           tree type = TREE_TYPE (newdecl);
1345           tree attribs = (*targetm.merge_type_attributes)
1346             (TREE_TYPE (olddecl), type);
1347
1348           type = cp_build_type_attribute_variant (type, attribs);
1349           TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1350         }
1351
1352       /* If a function is explicitly declared "throw ()", propagate that to
1353          the corresponding builtin.  */
1354       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1355           && DECL_ANTICIPATED (olddecl)
1356           && TREE_NOTHROW (newdecl)
1357           && !TREE_NOTHROW (olddecl)
1358           && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != NULL_TREE
1359           && built_in_decls [DECL_FUNCTION_CODE (olddecl)] != olddecl
1360           && types_match)
1361         TREE_NOTHROW (built_in_decls [DECL_FUNCTION_CODE (olddecl)]) = 1;
1362
1363       /* Whether or not the builtin can throw exceptions has no
1364          bearing on this declarator.  */
1365       TREE_NOTHROW (olddecl) = 0;
1366
1367       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1368         {
1369           /* If a builtin function is redeclared as `static', merge
1370              the declarations, but make the original one static.  */
1371           DECL_THIS_STATIC (olddecl) = 1;
1372           TREE_PUBLIC (olddecl) = 0;
1373
1374           /* Make the old declaration consistent with the new one so
1375              that all remnants of the builtin-ness of this function
1376              will be banished.  */
1377           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1378           COPY_DECL_RTL (newdecl, olddecl);
1379         }
1380     }
1381   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1382     {
1383       /* C++ Standard, 3.3, clause 4:
1384          "[Note: a namespace name or a class template name must be unique
1385          in its declarative region (7.3.2, clause 14). ]"  */
1386       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1387           && TREE_CODE (newdecl) != NAMESPACE_DECL
1388           && (TREE_CODE (olddecl) != TEMPLATE_DECL
1389               || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1390           && (TREE_CODE (newdecl) != TEMPLATE_DECL
1391               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1392         {
1393           if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1394                && TREE_CODE (newdecl) != TYPE_DECL)
1395               || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1396                   && TREE_CODE (olddecl) != TYPE_DECL))
1397             {
1398               /* We do nothing special here, because C++ does such nasty
1399                  things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1400                  get shadowed, and know that if we need to find a TYPE_DECL
1401                  for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1402                  slot of the identifier.  */
1403               return NULL_TREE;
1404             }
1405             
1406             if ((TREE_CODE (newdecl) == FUNCTION_DECL
1407                  && DECL_FUNCTION_TEMPLATE_P (olddecl))
1408                 || (TREE_CODE (olddecl) == FUNCTION_DECL
1409                     && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1410               return NULL_TREE;
1411         }
1412
1413       error ("%q#D redeclared as different kind of symbol", newdecl);
1414       if (TREE_CODE (olddecl) == TREE_LIST)
1415         olddecl = TREE_VALUE (olddecl);
1416       error ("previous declaration of %q+#D", olddecl);
1417
1418       return error_mark_node;
1419     }
1420   else if (!types_match)
1421     {
1422       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1423         /* These are certainly not duplicate declarations; they're
1424            from different scopes.  */
1425         return NULL_TREE;
1426
1427       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1428         {
1429           /* The name of a class template may not be declared to refer to
1430              any other template, class, function, object, namespace, value,
1431              or type in the same scope.  */
1432           if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1433               || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1434             {
1435               error ("declaration of template %q#D", newdecl);
1436               error ("conflicts with previous declaration %q+#D", olddecl);
1437             }
1438           else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1439                    && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1440                    && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1441                                  TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1442                    && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1443                                            DECL_TEMPLATE_PARMS (olddecl))
1444                    /* Template functions can be disambiguated by
1445                       return type.  */
1446                    && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1447                                    TREE_TYPE (TREE_TYPE (olddecl))))
1448             {
1449               error ("new declaration %q#D", newdecl);
1450               error ("ambiguates old declaration %q+#D", olddecl);
1451             }
1452           return NULL_TREE;
1453         }
1454       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1455         {
1456           if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1457             {
1458               error ("declaration of C function %q#D conflicts with",
1459                      newdecl);
1460               error ("previous declaration %q+#D here", olddecl);
1461               return NULL_TREE;
1462             }
1463           else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1464                               TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1465             {
1466               error ("new declaration %q#D", newdecl);
1467               error ("ambiguates old declaration %q+#D", olddecl);
1468               return error_mark_node;
1469             }
1470           else
1471             return NULL_TREE;
1472         }
1473       else
1474         {
1475           error ("conflicting declaration %q#D", newdecl);
1476           error ("%q+D has a previous declaration as %q#D", olddecl, olddecl);
1477           return error_mark_node;
1478         }
1479     }
1480   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1481             && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1482                  && (!DECL_TEMPLATE_INFO (newdecl)
1483                      || (DECL_TI_TEMPLATE (newdecl)
1484                          != DECL_TI_TEMPLATE (olddecl))))
1485                 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1486                     && (!DECL_TEMPLATE_INFO (olddecl)
1487                         || (DECL_TI_TEMPLATE (olddecl)
1488                             != DECL_TI_TEMPLATE (newdecl))))))
1489     /* It's OK to have a template specialization and a non-template
1490        with the same type, or to have specializations of two
1491        different templates with the same type.  Note that if one is a
1492        specialization, and the other is an instantiation of the same
1493        template, that we do not exit at this point.  That situation
1494        can occur if we instantiate a template class, and then
1495        specialize one of its methods.  This situation is valid, but
1496        the declarations must be merged in the usual way.  */
1497     return NULL_TREE;
1498   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1499            && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1500                 && !DECL_USE_TEMPLATE (newdecl))
1501                || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1502                    && !DECL_USE_TEMPLATE (olddecl))))
1503     /* One of the declarations is a template instantiation, and the
1504        other is not a template at all.  That's OK.  */
1505     return NULL_TREE;
1506   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1507     {
1508       /* In [namespace.alias] we have:
1509
1510            In a declarative region, a namespace-alias-definition can be
1511            used to redefine a namespace-alias declared in that declarative
1512            region to refer only to the namespace to which it already
1513            refers.
1514
1515          Therefore, if we encounter a second alias directive for the same
1516          alias, we can just ignore the second directive.  */
1517       if (DECL_NAMESPACE_ALIAS (newdecl)
1518           && (DECL_NAMESPACE_ALIAS (newdecl)
1519               == DECL_NAMESPACE_ALIAS (olddecl)))
1520         return olddecl;
1521       /* [namespace.alias]
1522
1523          A namespace-name or namespace-alias shall not be declared as
1524          the name of any other entity in the same declarative region.
1525          A namespace-name defined at global scope shall not be
1526          declared as the name of any other entity in any global scope
1527          of the program.  */
1528       error ("declaration of namespace %qD conflicts with", newdecl);
1529       error ("previous declaration of namespace %q+D here", olddecl);
1530       return error_mark_node;
1531     }
1532   else
1533     {
1534       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1535       if (errmsg)
1536         {
1537           error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1538           if (DECL_NAME (olddecl) != NULL_TREE)
1539             error ((DECL_INITIAL (olddecl) && namespace_bindings_p ())
1540                          ? "%q+#D previously defined here"
1541                          : "%q+#D previously declared here", olddecl);
1542           return error_mark_node;
1543         }
1544       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1545                && DECL_INITIAL (olddecl) != NULL_TREE
1546                && !prototype_p (TREE_TYPE (olddecl))
1547                && prototype_p (TREE_TYPE (newdecl)))
1548         {
1549           /* Prototype decl follows defn w/o prototype.  */
1550           warning_at (input_location, 0, "prototype for %q+#D", newdecl);
1551           warning_at (DECL_SOURCE_LOCATION (olddecl), 0,
1552                       "follows non-prototype definition here");
1553         }
1554       else if ((TREE_CODE (olddecl) == FUNCTION_DECL
1555                 || TREE_CODE (olddecl) == VAR_DECL)
1556                && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1557         {
1558           /* [dcl.link]
1559              If two declarations of the same function or object
1560              specify different linkage-specifications ..., the program
1561              is ill-formed.... Except for functions with C++ linkage,
1562              a function declaration without a linkage specification
1563              shall not precede the first linkage specification for
1564              that function.  A function can be declared without a
1565              linkage specification after an explicit linkage
1566              specification has been seen; the linkage explicitly
1567              specified in the earlier declaration is not affected by
1568              such a function declaration.
1569
1570              DR 563 raises the question why the restrictions on
1571              functions should not also apply to objects.  Older
1572              versions of G++ silently ignore the linkage-specification
1573              for this example:
1574
1575                namespace N { 
1576                  extern int i;
1577                  extern "C" int i;
1578                }
1579
1580              which is clearly wrong.  Therefore, we now treat objects
1581              like functions.  */
1582           if (current_lang_depth () == 0)
1583             {
1584               /* There is no explicit linkage-specification, so we use
1585                  the linkage from the previous declaration.  */
1586               if (!DECL_LANG_SPECIFIC (newdecl))
1587                 retrofit_lang_decl (newdecl);
1588               SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1589             }
1590           else
1591             {
1592               error ("previous declaration of %q+#D with %qL linkage",
1593                      olddecl, DECL_LANGUAGE (olddecl));
1594               error ("conflicts with new declaration with %qL linkage",
1595                      DECL_LANGUAGE (newdecl));
1596             }
1597         }
1598
1599       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1600         ;
1601       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1602         {
1603           tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1604           tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1605           int i = 1;
1606
1607           if (TREE_CODE (TREE_TYPE (newdecl)) == METHOD_TYPE)
1608             t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2);
1609
1610           for (; t1 && t1 != void_list_node;
1611                t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1612             if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1613               {
1614                 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1615                                            TREE_PURPOSE (t2)))
1616                   {
1617                     permerror (input_location, "default argument given for parameter %d of %q#D",
1618                                i, newdecl);
1619                     permerror (input_location, "after previous specification in %q+#D", olddecl);
1620                   }
1621                 else
1622                   {
1623                     error ("default argument given for parameter %d of %q#D",
1624                            i, newdecl);
1625                     error ("after previous specification in %q+#D",
1626                                  olddecl);
1627                   }
1628               }
1629         }
1630     }
1631
1632   /* Do not merge an implicit typedef with an explicit one.  In:
1633
1634        class A;
1635        ...
1636        typedef class A A __attribute__ ((foo));
1637
1638      the attribute should apply only to the typedef.  */
1639   if (TREE_CODE (olddecl) == TYPE_DECL
1640       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1641           || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1642     return NULL_TREE;
1643
1644   /* If new decl is `static' and an `extern' was seen previously,
1645      warn about it.  */
1646   warn_extern_redeclared_static (newdecl, olddecl);
1647
1648   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1649     return error_mark_node;
1650
1651   /* We have committed to returning 1 at this point.  */
1652   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1653     {
1654       /* Now that functions must hold information normally held
1655          by field decls, there is extra work to do so that
1656          declaration information does not get destroyed during
1657          definition.  */
1658       if (DECL_VINDEX (olddecl))
1659         DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1660       if (DECL_CONTEXT (olddecl))
1661         DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1662       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1663       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1664       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1665       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1666       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1667       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1668       if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
1669         SET_OVERLOADED_OPERATOR_CODE
1670           (newdecl, DECL_OVERLOADED_OPERATOR_P (olddecl));
1671       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1672
1673       /* Optionally warn about more than one declaration for the same
1674          name, but don't warn about a function declaration followed by a
1675          definition.  */
1676       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1677           && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1678           /* Don't warn about extern decl followed by definition.  */
1679           && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1680           /* Don't warn about friends, let add_friend take care of it.  */
1681           && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)))
1682         {
1683           warning (OPT_Wredundant_decls, "redundant redeclaration of %qD in same scope", newdecl);
1684           warning (OPT_Wredundant_decls, "previous declaration of %q+D", olddecl);
1685         }
1686
1687       if (DECL_DELETED_FN (newdecl))
1688         {
1689           error ("deleted definition of %qD", newdecl);
1690           error ("after previous declaration %q+D", olddecl);
1691         }
1692       DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1693     }
1694
1695   /* Deal with C++: must preserve virtual function table size.  */
1696   if (TREE_CODE (olddecl) == TYPE_DECL)
1697     {
1698       tree newtype = TREE_TYPE (newdecl);
1699       tree oldtype = TREE_TYPE (olddecl);
1700
1701       if (newtype != error_mark_node && oldtype != error_mark_node
1702           && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1703         CLASSTYPE_FRIEND_CLASSES (newtype)
1704           = CLASSTYPE_FRIEND_CLASSES (oldtype);
1705
1706       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1707     }
1708
1709   /* Copy all the DECL_... slots specified in the new decl
1710      except for any that we copy here from the old type.  */
1711   DECL_ATTRIBUTES (newdecl)
1712     = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1713
1714   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1715     {
1716       tree old_result;
1717       tree new_result;
1718       old_result = DECL_TEMPLATE_RESULT (olddecl);
1719       new_result = DECL_TEMPLATE_RESULT (newdecl);
1720       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
1721       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
1722         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
1723                    DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
1724
1725       DECL_ATTRIBUTES (old_result)
1726         = (*targetm.merge_decl_attributes) (old_result, new_result);
1727
1728       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1729         {
1730           if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
1731               && DECL_INITIAL (new_result))
1732             {
1733               if (DECL_INITIAL (old_result))
1734                 DECL_UNINLINABLE (old_result) = 1;
1735               else
1736                 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
1737               DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
1738               DECL_NOT_REALLY_EXTERN (old_result)
1739                 = DECL_NOT_REALLY_EXTERN (new_result);
1740               DECL_INTERFACE_KNOWN (old_result)
1741                 = DECL_INTERFACE_KNOWN (new_result);
1742               DECL_DECLARED_INLINE_P (old_result)
1743                 = DECL_DECLARED_INLINE_P (new_result);
1744               DECL_DISREGARD_INLINE_LIMITS (old_result)
1745                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1746
1747             }
1748           else
1749             {
1750               DECL_DECLARED_INLINE_P (old_result)
1751                 |= DECL_DECLARED_INLINE_P (new_result);
1752               DECL_DISREGARD_INLINE_LIMITS (old_result)
1753                 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
1754               check_redeclaration_exception_specification (newdecl, olddecl);
1755             }
1756         }
1757
1758       /* If the new declaration is a definition, update the file and
1759          line information on the declaration, and also make
1760          the old declaration the same definition.  */
1761       if (DECL_INITIAL (new_result) != NULL_TREE)
1762         {
1763           DECL_SOURCE_LOCATION (olddecl)
1764             = DECL_SOURCE_LOCATION (old_result)
1765             = DECL_SOURCE_LOCATION (newdecl);
1766           DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
1767           if (DECL_FUNCTION_TEMPLATE_P (newdecl))
1768             {
1769               tree parm;
1770               DECL_ARGUMENTS (old_result)
1771                 = DECL_ARGUMENTS (new_result);
1772               for (parm = DECL_ARGUMENTS (old_result); parm;
1773                    parm = DECL_CHAIN (parm))
1774                 DECL_CONTEXT (parm) = old_result;
1775             }
1776         }
1777
1778       return olddecl;
1779     }
1780
1781   if (types_match)
1782     {
1783       /* Automatically handles default parameters.  */
1784       tree oldtype = TREE_TYPE (olddecl);
1785       tree newtype;
1786
1787       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1788         maybe_instantiate_noexcept (olddecl);
1789
1790       /* Merge the data types specified in the two decls.  */
1791       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
1792
1793       /* If merge_types produces a non-typedef type, just use the old type.  */
1794       if (TREE_CODE (newdecl) == TYPE_DECL
1795           && newtype == DECL_ORIGINAL_TYPE (newdecl))
1796         newtype = oldtype;
1797
1798       if (TREE_CODE (newdecl) == VAR_DECL)
1799         {
1800           DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
1801           DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
1802           DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
1803             |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
1804           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
1805             |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
1806
1807           /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
1808           if (DECL_LANG_SPECIFIC (olddecl)
1809               && CP_DECL_THREADPRIVATE_P (olddecl))
1810             {
1811               /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
1812               if (!DECL_LANG_SPECIFIC (newdecl))
1813                 retrofit_lang_decl (newdecl);
1814
1815               DECL_TLS_MODEL (newdecl) = DECL_TLS_MODEL (olddecl);
1816               CP_DECL_THREADPRIVATE_P (newdecl) = 1;
1817             }
1818         }
1819
1820       /* Do this after calling `merge_types' so that default
1821          parameters don't confuse us.  */
1822       else if (TREE_CODE (newdecl) == FUNCTION_DECL)
1823         check_redeclaration_exception_specification (newdecl, olddecl);
1824       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
1825
1826       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1827         check_default_args (newdecl);
1828
1829       /* Lay the type out, unless already done.  */
1830       if (! same_type_p (newtype, oldtype)
1831           && TREE_TYPE (newdecl) != error_mark_node
1832           && !(processing_template_decl && uses_template_parms (newdecl)))
1833         layout_type (TREE_TYPE (newdecl));
1834
1835       if ((TREE_CODE (newdecl) == VAR_DECL
1836            || TREE_CODE (newdecl) == PARM_DECL
1837            || TREE_CODE (newdecl) == RESULT_DECL
1838            || TREE_CODE (newdecl) == FIELD_DECL
1839            || TREE_CODE (newdecl) == TYPE_DECL)
1840           && !(processing_template_decl && uses_template_parms (newdecl)))
1841         layout_decl (newdecl, 0);
1842
1843       /* Merge the type qualifiers.  */
1844       if (TREE_READONLY (newdecl))
1845         TREE_READONLY (olddecl) = 1;
1846       if (TREE_THIS_VOLATILE (newdecl))
1847         TREE_THIS_VOLATILE (olddecl) = 1;
1848       if (TREE_NOTHROW (newdecl))
1849         TREE_NOTHROW (olddecl) = 1;
1850
1851       /* Merge deprecatedness.  */
1852       if (TREE_DEPRECATED (newdecl))
1853         TREE_DEPRECATED (olddecl) = 1;
1854
1855       /* Preserve function specific target and optimization options */
1856       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1857         {
1858           if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
1859               && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
1860             DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
1861               = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
1862
1863           if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
1864               && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
1865             DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
1866               = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
1867         }
1868
1869       /* Merge the initialization information.  */
1870       if (DECL_INITIAL (newdecl) == NULL_TREE
1871           && DECL_INITIAL (olddecl) != NULL_TREE)
1872         {
1873           DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
1874           DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
1875           if (TREE_CODE (newdecl) == FUNCTION_DECL)
1876             {
1877               DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
1878               DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
1879             }
1880         }
1881
1882       /* Merge the section attribute.
1883          We want to issue an error if the sections conflict but that must be
1884          done later in decl_attributes since we are called before attributes
1885          are assigned.  */
1886       if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
1887         DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
1888
1889       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1890         {
1891           DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
1892             |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
1893           DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
1894           TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1895           TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1896           DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1897           DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
1898           DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1899           TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1900           DECL_LOOPING_CONST_OR_PURE_P (newdecl) 
1901             |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
1902           /* Keep the old RTL.  */
1903           COPY_DECL_RTL (olddecl, newdecl);
1904         }
1905       else if (TREE_CODE (newdecl) == VAR_DECL
1906                && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
1907         {
1908           /* Keep the old RTL.  We cannot keep the old RTL if the old
1909              declaration was for an incomplete object and the new
1910              declaration is not since many attributes of the RTL will
1911              change.  */
1912           COPY_DECL_RTL (olddecl, newdecl);
1913         }
1914     }
1915   /* If cannot merge, then use the new type and qualifiers,
1916      and don't preserve the old rtl.  */
1917   else
1918     {
1919       /* Clean out any memory we had of the old declaration.  */
1920       tree oldstatic = value_member (olddecl, static_aggregates);
1921       if (oldstatic)
1922         TREE_VALUE (oldstatic) = error_mark_node;
1923
1924       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
1925       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
1926       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
1927       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
1928     }
1929
1930   /* Merge the storage class information.  */
1931   merge_weak (newdecl, olddecl);
1932
1933   if (DECL_ONE_ONLY (olddecl))
1934     DECL_COMDAT_GROUP (newdecl) = DECL_COMDAT_GROUP (olddecl);
1935
1936   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
1937   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
1938   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
1939   if (! DECL_EXTERNAL (olddecl))
1940     DECL_EXTERNAL (newdecl) = 0;
1941
1942   new_template_info = NULL_TREE;
1943   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
1944     {
1945       bool new_redefines_gnu_inline = false;
1946
1947       if (new_defines_function
1948           && ((DECL_INTERFACE_KNOWN (olddecl)
1949                && TREE_CODE (olddecl) == FUNCTION_DECL)
1950               || (TREE_CODE (olddecl) == TEMPLATE_DECL
1951                   && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
1952                       == FUNCTION_DECL))))
1953         {
1954           tree fn = olddecl;
1955
1956           if (TREE_CODE (fn) == TEMPLATE_DECL)
1957             fn = DECL_TEMPLATE_RESULT (olddecl);
1958
1959           new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
1960         }
1961
1962       if (!new_redefines_gnu_inline)
1963         {
1964           DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
1965           DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
1966           DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
1967         }
1968       DECL_TEMPLATE_INSTANTIATED (newdecl)
1969         |= DECL_TEMPLATE_INSTANTIATED (olddecl);
1970       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
1971
1972       /* If the OLDDECL is an instantiation and/or specialization,
1973          then the NEWDECL must be too.  But, it may not yet be marked
1974          as such if the caller has created NEWDECL, but has not yet
1975          figured out that it is a redeclaration.  */
1976       if (!DECL_USE_TEMPLATE (newdecl))
1977         DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
1978
1979       /* Don't really know how much of the language-specific
1980          values we should copy from old to new.  */
1981       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
1982       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
1983       DECL_INITIALIZED_IN_CLASS_P (newdecl)
1984         |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
1985
1986       if (LANG_DECL_HAS_MIN (newdecl))
1987         {
1988           DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
1989             DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
1990           if (DECL_TEMPLATE_INFO (newdecl))
1991             new_template_info = DECL_TEMPLATE_INFO (newdecl);
1992           DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
1993         }
1994       /* Only functions have these fields.  */
1995       if (TREE_CODE (newdecl) == FUNCTION_DECL
1996           || DECL_FUNCTION_TEMPLATE_P (newdecl))
1997         {
1998           DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
1999           olddecl_friend = DECL_FRIEND_P (olddecl);
2000           hidden_friend = (DECL_ANTICIPATED (olddecl)
2001                            && DECL_HIDDEN_FRIEND_P (olddecl)
2002                            && newdecl_is_friend);
2003           DECL_BEFRIENDING_CLASSES (newdecl)
2004             = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2005                        DECL_BEFRIENDING_CLASSES (olddecl));
2006           /* DECL_THUNKS is only valid for virtual functions,
2007              otherwise it is a DECL_FRIEND_CONTEXT.  */
2008           if (DECL_VIRTUAL_P (newdecl))
2009             DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
2010         }
2011       /* Only variables have this field.  */
2012       else if (TREE_CODE (newdecl) == VAR_DECL
2013                && VAR_HAD_UNKNOWN_BOUND (olddecl))
2014         SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2015     }
2016
2017   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2018     {
2019       tree parm;
2020
2021       /* Merge parameter attributes. */
2022       tree oldarg, newarg;
2023       for (oldarg = DECL_ARGUMENTS(olddecl), 
2024                newarg = DECL_ARGUMENTS(newdecl);
2025            oldarg && newarg;
2026            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2027           DECL_ATTRIBUTES (newarg)
2028               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2029           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2030       }
2031       
2032       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2033           && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2034         {
2035           /* If newdecl is not a specialization, then it is not a
2036              template-related function at all.  And that means that we
2037              should have exited above, returning 0.  */
2038           gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2039
2040           if (DECL_ODR_USED (olddecl))
2041             /* From [temp.expl.spec]:
2042
2043                If a template, a member template or the member of a class
2044                template is explicitly specialized then that
2045                specialization shall be declared before the first use of
2046                that specialization that would cause an implicit
2047                instantiation to take place, in every translation unit in
2048                which such a use occurs.  */
2049             error ("explicit specialization of %qD after first use",
2050                       olddecl);
2051
2052           SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2053
2054           /* Don't propagate visibility from the template to the
2055              specialization here.  We'll do that in determine_visibility if
2056              appropriate.  */
2057           DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2058
2059           /* [temp.expl.spec/14] We don't inline explicit specialization
2060              just because the primary template says so.  */
2061
2062           /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2063              the always_inline attribute.  */
2064           if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2065               && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2066             {
2067               if (DECL_DECLARED_INLINE_P (newdecl))
2068                 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2069               else
2070                 DECL_ATTRIBUTES (newdecl)
2071                   = remove_attribute ("always_inline",
2072                                       DECL_ATTRIBUTES (newdecl));
2073             }
2074         }
2075       else if (new_defines_function && DECL_INITIAL (olddecl))
2076         {
2077           /* Never inline re-defined extern inline functions.
2078              FIXME: this could be better handled by keeping both
2079              function as separate declarations.  */
2080           DECL_UNINLINABLE (newdecl) = 1;
2081         }
2082       else
2083         {
2084           if (DECL_PENDING_INLINE_INFO (newdecl) == 0)
2085             DECL_PENDING_INLINE_INFO (newdecl) = DECL_PENDING_INLINE_INFO (olddecl);
2086
2087           DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2088
2089           DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2090             = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2091
2092           DECL_DISREGARD_INLINE_LIMITS (newdecl)
2093             = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2094             = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2095                || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2096         }
2097
2098       /* Preserve abstractness on cloned [cd]tors.  */
2099       DECL_ABSTRACT (newdecl) = DECL_ABSTRACT (olddecl);
2100
2101       /* Update newdecl's parms to point at olddecl.  */
2102       for (parm = DECL_ARGUMENTS (newdecl); parm;
2103            parm = DECL_CHAIN (parm))
2104         DECL_CONTEXT (parm) = olddecl;
2105
2106       if (! types_match)
2107         {
2108           SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2109           COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2110           COPY_DECL_RTL (newdecl, olddecl);
2111         }
2112       if (! types_match || new_defines_function)
2113         {
2114           /* These need to be copied so that the names are available.
2115              Note that if the types do match, we'll preserve inline
2116              info and other bits, but if not, we won't.  */
2117           DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2118           DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2119         }
2120       if (new_defines_function)
2121         /* If defining a function declared with other language
2122            linkage, use the previously declared language linkage.  */
2123         SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2124       else if (types_match)
2125         {
2126           /* If redeclaring a builtin function, and not a definition,
2127              it stays built in.  */
2128           if (DECL_BUILT_IN (olddecl))
2129             {
2130               DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2131               DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2132               /* If we're keeping the built-in definition, keep the rtl,
2133                  regardless of declaration matches.  */
2134               COPY_DECL_RTL (olddecl, newdecl);
2135             }
2136
2137           DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2138           /* Don't clear out the arguments if we're just redeclaring a
2139              function.  */
2140           if (DECL_ARGUMENTS (olddecl))
2141             DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2142         }
2143     }
2144   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2145     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2146
2147   /* Now preserve various other info from the definition.  */
2148   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2149   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2150   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2151   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2152
2153   /* Warn about conflicting visibility specifications.  */
2154   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2155       && DECL_VISIBILITY_SPECIFIED (newdecl)
2156       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2157     {
2158       warning_at (input_location, OPT_Wattributes,
2159                   "%q+D: visibility attribute ignored because it", newdecl);
2160       warning_at (DECL_SOURCE_LOCATION (olddecl), OPT_Wattributes,
2161                   "conflicts with previous declaration here");
2162     }
2163   /* Choose the declaration which specified visibility.  */
2164   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2165     {
2166       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2167       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2168     }
2169   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2170      so keep this behavior.  */
2171   if (TREE_CODE (newdecl) == VAR_DECL && DECL_HAS_INIT_PRIORITY_P (newdecl))
2172     {
2173       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2174       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2175     }
2176   /* Likewise for DECL_USER_ALIGN and DECL_PACKED.  */
2177   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2178   if (TREE_CODE (newdecl) == FIELD_DECL)
2179     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2180
2181   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2182      with that from NEWDECL below.  */
2183   if (DECL_LANG_SPECIFIC (olddecl))
2184     {
2185       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2186                   != DECL_LANG_SPECIFIC (newdecl));
2187       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2188     }
2189
2190   /* Merge the USED information.  */
2191   if (TREE_USED (olddecl))
2192     TREE_USED (newdecl) = 1;
2193   else if (TREE_USED (newdecl))
2194     TREE_USED (olddecl) = 1;
2195   if (TREE_CODE (newdecl) == VAR_DECL)
2196     {
2197       if (DECL_READ_P (olddecl))
2198         DECL_READ_P (newdecl) = 1;
2199       else if (DECL_READ_P (newdecl))
2200         DECL_READ_P (olddecl) = 1;
2201     }
2202   if (DECL_PRESERVE_P (olddecl))
2203     DECL_PRESERVE_P (newdecl) = 1;
2204   else if (DECL_PRESERVE_P (newdecl))
2205     DECL_PRESERVE_P (olddecl) = 1;
2206
2207   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2208     {
2209       int function_size;
2210
2211       function_size = sizeof (struct tree_decl_common);
2212
2213       memcpy ((char *) olddecl + sizeof (struct tree_common),
2214               (char *) newdecl + sizeof (struct tree_common),
2215               function_size - sizeof (struct tree_common));
2216
2217       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2218               (char *) newdecl + sizeof (struct tree_decl_common),
2219               sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2220       if (new_template_info)
2221         /* If newdecl is a template instantiation, it is possible that
2222            the following sequence of events has occurred:
2223
2224            o A friend function was declared in a class template.  The
2225            class template was instantiated.
2226
2227            o The instantiation of the friend declaration was
2228            recorded on the instantiation list, and is newdecl.
2229
2230            o Later, however, instantiate_class_template called pushdecl
2231            on the newdecl to perform name injection.  But, pushdecl in
2232            turn called duplicate_decls when it discovered that another
2233            declaration of a global function with the same name already
2234            existed.
2235
2236            o Here, in duplicate_decls, we decided to clobber newdecl.
2237
2238            If we're going to do that, we'd better make sure that
2239            olddecl, and not newdecl, is on the list of
2240            instantiations so that if we try to do the instantiation
2241            again we won't get the clobbered declaration.  */
2242         reregister_specialization (newdecl,
2243                                    new_template_info,
2244                                    olddecl);
2245     }
2246   else
2247     {
2248       size_t size = tree_code_size (TREE_CODE (olddecl));
2249       memcpy ((char *) olddecl + sizeof (struct tree_common),
2250               (char *) newdecl + sizeof (struct tree_common),
2251               sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2252       switch (TREE_CODE (olddecl))
2253         {
2254         case LABEL_DECL:
2255         case VAR_DECL:
2256         case RESULT_DECL:
2257         case PARM_DECL:
2258         case FIELD_DECL:
2259         case TYPE_DECL:
2260         case CONST_DECL:
2261           {
2262             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2263                     (char *) newdecl + sizeof (struct tree_decl_common),
2264                     size - sizeof (struct tree_decl_common)
2265                     + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2266           }
2267           break;
2268         default:
2269           memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2270                   (char *) newdecl + sizeof (struct tree_decl_common),
2271                   sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2272                   + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2273           break;
2274         }
2275     }
2276   DECL_UID (olddecl) = olddecl_uid;
2277   if (olddecl_friend)
2278     DECL_FRIEND_P (olddecl) = 1;
2279   if (hidden_friend)
2280     {
2281       DECL_ANTICIPATED (olddecl) = 1;
2282       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2283     }
2284
2285   /* NEWDECL contains the merged attribute lists.
2286      Update OLDDECL to be the same.  */
2287   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2288
2289   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2290     so that encode_section_info has a chance to look at the new decl
2291     flags and attributes.  */
2292   if (DECL_RTL_SET_P (olddecl)
2293       && (TREE_CODE (olddecl) == FUNCTION_DECL
2294           || (TREE_CODE (olddecl) == VAR_DECL
2295               && TREE_STATIC (olddecl))))
2296     make_decl_rtl (olddecl);
2297
2298   /* The NEWDECL will no longer be needed.  Because every out-of-class
2299      declaration of a member results in a call to duplicate_decls,
2300      freeing these nodes represents in a significant savings.  */
2301   ggc_free (newdecl);
2302
2303   return olddecl;
2304 }
2305 \f
2306 /* Return zero if the declaration NEWDECL is valid
2307    when the declaration OLDDECL (assumed to be for the same name)
2308    has already been seen.
2309    Otherwise return an error message format string with a %s
2310    where the identifier should go.  */
2311
2312 static const char *
2313 redeclaration_error_message (tree newdecl, tree olddecl)
2314 {
2315   if (TREE_CODE (newdecl) == TYPE_DECL)
2316     {
2317       /* Because C++ can put things into name space for free,
2318          constructs like "typedef struct foo { ... } foo"
2319          would look like an erroneous redeclaration.  */
2320       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2321         return NULL;
2322       else
2323         return G_("redefinition of %q#D");
2324     }
2325   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2326     {
2327       /* If this is a pure function, its olddecl will actually be
2328          the original initialization to `0' (which we force to call
2329          abort()).  Don't complain about redefinition in this case.  */
2330       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2331           && DECL_INITIAL (olddecl) == NULL_TREE)
2332         return NULL;
2333
2334       /* If both functions come from different namespaces, this is not
2335          a redeclaration - this is a conflict with a used function.  */
2336       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2337           && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2338           && ! decls_match (olddecl, newdecl))
2339         return G_("%qD conflicts with used function");
2340
2341       /* We'll complain about linkage mismatches in
2342          warn_extern_redeclared_static.  */
2343
2344       /* Defining the same name twice is no good.  */
2345       if (DECL_INITIAL (olddecl) != NULL_TREE
2346           && DECL_INITIAL (newdecl) != NULL_TREE)
2347         {
2348           if (DECL_NAME (olddecl) == NULL_TREE)
2349             return G_("%q#D not declared in class");
2350           else if (!GNU_INLINE_P (olddecl)
2351                    || GNU_INLINE_P (newdecl))
2352             return G_("redefinition of %q#D");
2353         }
2354
2355       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2356         {
2357           bool olda = GNU_INLINE_P (olddecl);
2358           bool newa = GNU_INLINE_P (newdecl);
2359
2360           if (olda != newa)
2361             {
2362               if (newa)
2363                 return G_("%q+D redeclared inline with "
2364                           "%<gnu_inline%> attribute");
2365               else
2366                 return G_("%q+D redeclared inline without "
2367                           "%<gnu_inline%> attribute");
2368             }
2369         }
2370
2371       return NULL;
2372     }
2373   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2374     {
2375       tree nt, ot;
2376
2377       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2378         {
2379           if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2380               && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2381             return G_("redefinition of %q#D");
2382           return NULL;
2383         }
2384
2385       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2386           || (DECL_TEMPLATE_RESULT (newdecl)
2387               == DECL_TEMPLATE_RESULT (olddecl)))
2388         return NULL;
2389
2390       nt = DECL_TEMPLATE_RESULT (newdecl);
2391       if (DECL_TEMPLATE_INFO (nt))
2392         nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2393       ot = DECL_TEMPLATE_RESULT (olddecl);
2394       if (DECL_TEMPLATE_INFO (ot))
2395         ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2396       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2397           && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2398         return G_("redefinition of %q#D");
2399
2400       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2401         {
2402           bool olda = GNU_INLINE_P (ot);
2403           bool newa = GNU_INLINE_P (nt);
2404
2405           if (olda != newa)
2406             {
2407               if (newa)
2408                 return G_("%q+D redeclared inline with "
2409                           "%<gnu_inline%> attribute");
2410               else
2411                 return G_("%q+D redeclared inline without "
2412                           "%<gnu_inline%> attribute");
2413             }
2414         }
2415
2416       /* Core issue #226 (C++0x): 
2417            
2418            If a friend function template declaration specifies a
2419            default template-argument, that declaration shall be a
2420            definition and shall be the only declaration of the
2421            function template in the translation unit.  */
2422       if ((cxx_dialect != cxx98) 
2423           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2424           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 
2425                                        /*is_primary=*/1, /*is_partial=*/0,
2426                                        /*is_friend_decl=*/2))
2427         return G_("redeclaration of friend %q#D "
2428                   "may not have default template arguments");
2429
2430       return NULL;
2431     }
2432   else if (TREE_CODE (newdecl) == VAR_DECL
2433            && DECL_THREAD_LOCAL_P (newdecl) != DECL_THREAD_LOCAL_P (olddecl)
2434            && (! DECL_LANG_SPECIFIC (olddecl)
2435                || ! CP_DECL_THREADPRIVATE_P (olddecl)
2436                || DECL_THREAD_LOCAL_P (newdecl)))
2437     {
2438       /* Only variables can be thread-local, and all declarations must
2439          agree on this property.  */
2440       if (DECL_THREAD_LOCAL_P (newdecl))
2441         return G_("thread-local declaration of %q#D follows "
2442                   "non-thread-local declaration");
2443       else
2444         return G_("non-thread-local declaration of %q#D follows "
2445                   "thread-local declaration");
2446     }
2447   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2448     {
2449       /* The objects have been declared at namespace scope.  If either
2450          is a member of an anonymous union, then this is an invalid
2451          redeclaration.  For example:
2452
2453            int i;
2454            union { int i; };
2455
2456            is invalid.  */
2457       if ((TREE_CODE (newdecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (newdecl))
2458           || (TREE_CODE (olddecl) == VAR_DECL && DECL_ANON_UNION_VAR_P (olddecl)))
2459         return G_("redeclaration of %q#D");
2460       /* If at least one declaration is a reference, there is no
2461          conflict.  For example:
2462
2463            int i = 3;
2464            extern int i;
2465
2466          is valid.  */
2467       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2468         return NULL;
2469       /* Reject two definitions.  */
2470       return G_("redefinition of %q#D");
2471     }
2472   else
2473     {
2474       /* Objects declared with block scope:  */
2475       /* Reject two definitions, and reject a definition
2476          together with an external reference.  */
2477       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2478         return G_("redeclaration of %q#D");
2479       return NULL;
2480     }
2481 }
2482 \f
2483 /* Hash and equality functions for the named_label table.  */
2484
2485 static hashval_t
2486 named_label_entry_hash (const void *data)
2487 {
2488   const struct named_label_entry *ent = (const struct named_label_entry *) data;
2489   return DECL_UID (ent->label_decl);
2490 }
2491
2492 static int
2493 named_label_entry_eq (const void *a, const void *b)
2494 {
2495   const struct named_label_entry *ent_a = (const struct named_label_entry *) a;
2496   const struct named_label_entry *ent_b = (const struct named_label_entry *) b;
2497   return ent_a->label_decl == ent_b->label_decl;
2498 }
2499
2500 /* Create a new label, named ID.  */
2501
2502 static tree
2503 make_label_decl (tree id, int local_p)
2504 {
2505   struct named_label_entry *ent;
2506   void **slot;
2507   tree decl;
2508
2509   decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
2510
2511   DECL_CONTEXT (decl) = current_function_decl;
2512   DECL_MODE (decl) = VOIDmode;
2513   C_DECLARED_LABEL_FLAG (decl) = local_p;
2514
2515   /* Say where one reference is to the label, for the sake of the
2516      error if it is not defined.  */
2517   DECL_SOURCE_LOCATION (decl) = input_location;
2518
2519   /* Record the fact that this identifier is bound to this label.  */
2520   SET_IDENTIFIER_LABEL_VALUE (id, decl);
2521
2522   /* Create the label htab for the function on demand.  */
2523   if (!named_labels)
2524     named_labels = htab_create_ggc (13, named_label_entry_hash,
2525                                     named_label_entry_eq, NULL);
2526
2527   /* Record this label on the list of labels used in this function.
2528      We do this before calling make_label_decl so that we get the
2529      IDENTIFIER_LABEL_VALUE before the new label is declared.  */
2530   ent = ggc_alloc_cleared_named_label_entry ();
2531   ent->label_decl = decl;
2532
2533   slot = htab_find_slot (named_labels, ent, INSERT);
2534   gcc_assert (*slot == NULL);
2535   *slot = ent;
2536
2537   return decl;
2538 }
2539
2540 /* Look for a label named ID in the current function.  If one cannot
2541    be found, create one.  (We keep track of used, but undefined,
2542    labels, and complain about them at the end of a function.)  */
2543
2544 static tree
2545 lookup_label_1 (tree id)
2546 {
2547   tree decl;
2548
2549   /* You can't use labels at global scope.  */
2550   if (current_function_decl == NULL_TREE)
2551     {
2552       error ("label %qE referenced outside of any function", id);
2553       return NULL_TREE;
2554     }
2555
2556   /* See if we've already got this label.  */
2557   decl = IDENTIFIER_LABEL_VALUE (id);
2558   if (decl != NULL_TREE && DECL_CONTEXT (decl) == current_function_decl)
2559     return decl;
2560
2561   decl = make_label_decl (id, /*local_p=*/0);
2562   return decl;
2563 }
2564
2565 /* Wrapper for lookup_label_1.  */
2566
2567 tree
2568 lookup_label (tree id)
2569 {
2570   tree ret;
2571   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
2572   ret = lookup_label_1 (id);
2573   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
2574   return ret;
2575 }
2576
2577 /* Declare a local label named ID.  */
2578
2579 tree
2580 declare_local_label (tree id)
2581 {
2582   tree decl;
2583   cp_label_binding *bind;
2584
2585   /* Add a new entry to the SHADOWED_LABELS list so that when we leave
2586      this scope we can restore the old value of IDENTIFIER_TYPE_VALUE.  */
2587   bind = VEC_safe_push (cp_label_binding, gc,
2588                         current_binding_level->shadowed_labels, NULL);
2589   bind->prev_value = IDENTIFIER_LABEL_VALUE (id);
2590
2591   decl = make_label_decl (id, /*local_p=*/1);
2592   bind->label = decl;
2593
2594   return decl;
2595 }
2596
2597 /* Returns nonzero if it is ill-formed to jump past the declaration of
2598    DECL.  Returns 2 if it's also a real problem.  */
2599
2600 static int
2601 decl_jump_unsafe (tree decl)
2602 {
2603   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
2604      with automatic storage duration is not in scope to a point where it is
2605      in scope is ill-formed unless the variable has scalar type, class type
2606      with a trivial default constructor and a trivial destructor, a
2607      cv-qualified version of one of these types, or an array of one of the
2608      preceding types and is declared without an initializer (8.5).  */
2609   tree type = TREE_TYPE (decl);
2610
2611   if (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl)
2612       || type == error_mark_node)
2613     return 0;
2614
2615   type = strip_array_types (type);
2616
2617   if (type_has_nontrivial_default_init (TREE_TYPE (decl))
2618       || DECL_NONTRIVIALLY_INITIALIZED_P (decl))
2619     return 2;
2620
2621   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2622     return 1;
2623
2624   return 0;
2625 }
2626
2627 /* A subroutine of check_previous_goto_1 to identify a branch to the user.  */
2628
2629 static void
2630 identify_goto (tree decl, const location_t *locus)
2631 {
2632   if (decl)
2633     permerror (input_location, "jump to label %qD", decl);
2634   else
2635     permerror (input_location, "jump to case label");
2636   if (locus)
2637     permerror (*locus, "  from here");
2638 }
2639
2640 /* Check that a single previously seen jump to a newly defined label
2641    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
2642    the jump context; NAMES are the names in scope in LEVEL at the jump
2643    context; LOCUS is the source position of the jump or 0.  Returns
2644    true if all is well.  */
2645
2646 static bool
2647 check_previous_goto_1 (tree decl, struct cp_binding_level* level, tree names,
2648                        bool exited_omp, const location_t *locus)
2649 {
2650   struct cp_binding_level *b;
2651   bool identified = false, saw_eh = false, saw_omp = false;
2652
2653   if (exited_omp)
2654     {
2655       identify_goto (decl, locus);
2656       error ("  exits OpenMP structured block");
2657       identified = saw_omp = true;
2658     }
2659
2660   for (b = current_binding_level; b ; b = b->level_chain)
2661     {
2662       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
2663
2664       for (new_decls = b->names; new_decls != old_decls;
2665            new_decls = DECL_CHAIN (new_decls))
2666         {
2667           int problem = decl_jump_unsafe (new_decls);
2668           if (! problem)
2669             continue;
2670
2671           if (!identified)
2672             {
2673               identify_goto (decl, locus);
2674               identified = true;
2675             }
2676           if (problem > 1)
2677             error ("  crosses initialization of %q+#D", new_decls);
2678           else
2679             permerror (input_location, "  enters scope of %q+#D which has "
2680                        "non-trivial destructor", new_decls);
2681         }
2682
2683       if (b == level)
2684         break;
2685       if ((b->kind == sk_try || b->kind == sk_catch) && !saw_eh)
2686         {
2687           if (!identified)
2688             {
2689               identify_goto (decl, locus);
2690               identified = true;
2691             }
2692           if (b->kind == sk_try)
2693             error ("  enters try block");
2694           else
2695             error ("  enters catch block");
2696           saw_eh = true;
2697         }
2698       if (b->kind == sk_omp && !saw_omp)
2699         {
2700           if (!identified)
2701             {
2702               identify_goto (decl, locus);
2703               identified = true;
2704             }
2705           error ("  enters OpenMP structured block");
2706           saw_omp = true;
2707         }
2708     }
2709
2710   return !identified;
2711 }
2712
2713 static void
2714 check_previous_goto (tree decl, struct named_label_use_entry *use)
2715 {
2716   check_previous_goto_1 (decl, use->binding_level,
2717                          use->names_in_scope, use->in_omp_scope,
2718                          &use->o_goto_locus);
2719 }
2720
2721 static bool
2722 check_switch_goto (struct cp_binding_level* level)
2723 {
2724   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
2725 }
2726
2727 /* Check that a new jump to a label DECL is OK.  Called by
2728    finish_goto_stmt.  */
2729
2730 void
2731 check_goto (tree decl)
2732 {
2733   struct named_label_entry *ent, dummy;
2734   bool saw_catch = false, identified = false;
2735   tree bad;
2736   unsigned ix;
2737
2738   /* We can't know where a computed goto is jumping.
2739      So we assume that it's OK.  */
2740   if (TREE_CODE (decl) != LABEL_DECL)
2741     return;
2742
2743   /* We didn't record any information about this label when we created it,
2744      and there's not much point since it's trivial to analyze as a return.  */
2745   if (decl == cdtor_label)
2746     return;
2747
2748   dummy.label_decl = decl;
2749   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2750   gcc_assert (ent != NULL);
2751
2752   /* If the label hasn't been defined yet, defer checking.  */
2753   if (! DECL_INITIAL (decl))
2754     {
2755       struct named_label_use_entry *new_use;
2756
2757       /* Don't bother creating another use if the last goto had the
2758          same data, and will therefore create the same set of errors.  */
2759       if (ent->uses
2760           && ent->uses->names_in_scope == current_binding_level->names)
2761         return;
2762
2763       new_use = ggc_alloc_named_label_use_entry ();
2764       new_use->binding_level = current_binding_level;
2765       new_use->names_in_scope = current_binding_level->names;
2766       new_use->o_goto_locus = input_location;
2767       new_use->in_omp_scope = false;
2768
2769       new_use->next = ent->uses;
2770       ent->uses = new_use;
2771       return;
2772     }
2773
2774   if (ent->in_try_scope || ent->in_catch_scope
2775       || ent->in_omp_scope || !VEC_empty (tree, ent->bad_decls))
2776     {
2777       permerror (input_location, "jump to label %q+D", decl);
2778       permerror (input_location, "  from here");
2779       identified = true;
2780     }
2781
2782   FOR_EACH_VEC_ELT (tree, ent->bad_decls, ix, bad)
2783     {
2784       int u = decl_jump_unsafe (bad);
2785
2786       if (u > 1 && DECL_ARTIFICIAL (bad))
2787         {
2788           /* Can't skip init of __exception_info.  */
2789           error_at (DECL_SOURCE_LOCATION (bad), "  enters catch block");
2790           saw_catch = true;
2791         }
2792       else if (u > 1)
2793         error ("  skips initialization of %q+#D", bad);
2794       else
2795         permerror (input_location, "  enters scope of %q+#D which has "
2796                    "non-trivial destructor", bad);
2797     }
2798
2799   if (ent->in_try_scope)
2800     error ("  enters try block");
2801   else if (ent->in_catch_scope && !saw_catch)
2802     error ("  enters catch block");
2803
2804   if (ent->in_omp_scope)
2805     error ("  enters OpenMP structured block");
2806   else if (flag_openmp)
2807     {
2808       struct cp_binding_level *b;
2809       for (b = current_binding_level; b ; b = b->level_chain)
2810         {
2811           if (b == ent->binding_level)
2812             break;
2813           if (b->kind == sk_omp)
2814             {
2815               if (!identified)
2816                 {
2817                   permerror (input_location, "jump to label %q+D", decl);
2818                   permerror (input_location, "  from here");
2819                   identified = true;
2820                 }
2821               error ("  exits OpenMP structured block");
2822               break;
2823             }
2824         }
2825     }
2826 }
2827
2828 /* Check that a return is ok wrt OpenMP structured blocks.
2829    Called by finish_return_stmt.  Returns true if all is well.  */
2830
2831 bool
2832 check_omp_return (void)
2833 {
2834   struct cp_binding_level *b;
2835   for (b = current_binding_level; b ; b = b->level_chain)
2836     if (b->kind == sk_omp)
2837       {
2838         error ("invalid exit from OpenMP structured block");
2839         return false;
2840       }
2841     else if (b->kind == sk_function_parms)
2842       break;
2843   return true;
2844 }
2845
2846 /* Define a label, specifying the location in the source file.
2847    Return the LABEL_DECL node for the label.  */
2848
2849 static tree
2850 define_label_1 (location_t location, tree name)
2851 {
2852   struct named_label_entry *ent, dummy;
2853   struct cp_binding_level *p;
2854   tree decl;
2855
2856   decl = lookup_label (name);
2857
2858   dummy.label_decl = decl;
2859   ent = (struct named_label_entry *) htab_find (named_labels, &dummy);
2860   gcc_assert (ent != NULL);
2861
2862   /* After labels, make any new cleanups in the function go into their
2863      own new (temporary) binding contour.  */
2864   for (p = current_binding_level;
2865        p->kind != sk_function_parms;
2866        p = p->level_chain)
2867     p->more_cleanups_ok = 0;
2868
2869   if (name == get_identifier ("wchar_t"))
2870     permerror (input_location, "label named wchar_t");
2871
2872   if (DECL_INITIAL (decl) != NULL_TREE)
2873     {
2874       error ("duplicate label %qD", decl);
2875       return error_mark_node;
2876     }
2877   else
2878     {
2879       struct named_label_use_entry *use;
2880
2881       /* Mark label as having been defined.  */
2882       DECL_INITIAL (decl) = error_mark_node;
2883       /* Say where in the source.  */
2884       DECL_SOURCE_LOCATION (decl) = location;
2885
2886       ent->binding_level = current_binding_level;
2887       ent->names_in_scope = current_binding_level->names;
2888
2889       for (use = ent->uses; use ; use = use->next)
2890         check_previous_goto (decl, use);
2891       ent->uses = NULL;
2892     }
2893
2894   return decl;
2895 }
2896
2897 /* Wrapper for define_label_1.  */
2898
2899 tree
2900 define_label (location_t location, tree name)
2901 {
2902   tree ret;
2903   timevar_start (TV_NAME_LOOKUP);
2904   ret = define_label_1 (location, name);
2905   timevar_stop (TV_NAME_LOOKUP);
2906   return ret;
2907 }
2908
2909
2910 struct cp_switch
2911 {
2912   struct cp_binding_level *level;
2913   struct cp_switch *next;
2914   /* The SWITCH_STMT being built.  */
2915   tree switch_stmt;
2916   /* A splay-tree mapping the low element of a case range to the high
2917      element, or NULL_TREE if there is no high element.  Used to
2918      determine whether or not a new case label duplicates an old case
2919      label.  We need a tree, rather than simply a hash table, because
2920      of the GNU case range extension.  */
2921   splay_tree cases;
2922 };
2923
2924 /* A stack of the currently active switch statements.  The innermost
2925    switch statement is on the top of the stack.  There is no need to
2926    mark the stack for garbage collection because it is only active
2927    during the processing of the body of a function, and we never
2928    collect at that point.  */
2929
2930 static struct cp_switch *switch_stack;
2931
2932 /* Called right after a switch-statement condition is parsed.
2933    SWITCH_STMT is the switch statement being parsed.  */
2934
2935 void
2936 push_switch (tree switch_stmt)
2937 {
2938   struct cp_switch *p = XNEW (struct cp_switch);
2939   p->level = current_binding_level;
2940   p->next = switch_stack;
2941   p->switch_stmt = switch_stmt;
2942   p->cases = splay_tree_new (case_compare, NULL, NULL);
2943   switch_stack = p;
2944 }
2945
2946 void
2947 pop_switch (void)
2948 {
2949   struct cp_switch *cs = switch_stack;
2950   location_t switch_location;
2951
2952   /* Emit warnings as needed.  */
2953   switch_location = EXPR_LOC_OR_HERE (cs->switch_stmt);
2954   if (!processing_template_decl)
2955     c_do_switch_warnings (cs->cases, switch_location,
2956                           SWITCH_STMT_TYPE (cs->switch_stmt),
2957                           SWITCH_STMT_COND (cs->switch_stmt));
2958
2959   splay_tree_delete (cs->cases);
2960   switch_stack = switch_stack->next;
2961   free (cs);
2962 }
2963
2964 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
2965    condition.  Note that if TYPE and VALUE are already integral we don't
2966    really do the conversion because the language-independent
2967    warning/optimization code will work better that way.  */
2968
2969 static tree
2970 case_conversion (tree type, tree value)
2971 {
2972   if (value == NULL_TREE)
2973     return value;
2974
2975   if (cxx_dialect >= cxx0x
2976       && (SCOPED_ENUM_P (type)
2977           || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
2978     {
2979       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
2980         type = type_promotes_to (type);
2981       value = perform_implicit_conversion (type, value, tf_warning_or_error);
2982     }
2983   return cxx_constant_value (value);
2984 }
2985
2986 /* Note that we've seen a definition of a case label, and complain if this
2987    is a bad place for one.  */
2988
2989 tree
2990 finish_case_label (location_t loc, tree low_value, tree high_value)
2991 {
2992   tree cond, r;
2993   struct cp_binding_level *p;
2994   tree type;
2995
2996   if (processing_template_decl)
2997     {
2998       tree label;
2999
3000       /* For templates, just add the case label; we'll do semantic
3001          analysis at instantiation-time.  */
3002       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3003       return add_stmt (build_case_label (low_value, high_value, label));
3004     }
3005
3006   /* Find the condition on which this switch statement depends.  */
3007   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3008   if (cond && TREE_CODE (cond) == TREE_LIST)
3009     cond = TREE_VALUE (cond);
3010
3011   if (!check_switch_goto (switch_stack->level))
3012     return error_mark_node;
3013
3014   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3015
3016   low_value = case_conversion (type, low_value);
3017   high_value = case_conversion (type, high_value);
3018
3019   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3020                         low_value, high_value);
3021
3022   /* After labels, make any new cleanups in the function go into their
3023      own new (temporary) binding contour.  */
3024   for (p = current_binding_level;
3025        p->kind != sk_function_parms;
3026        p = p->level_chain)
3027     p->more_cleanups_ok = 0;
3028
3029   return r;
3030 }
3031 \f
3032 /* Hash a TYPENAME_TYPE.  K is really of type `tree'.  */
3033
3034 static hashval_t
3035 typename_hash (const void* k)
3036 {
3037   hashval_t hash;
3038   const_tree const t = (const_tree) k;
3039
3040   hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3041           ^ htab_hash_pointer (DECL_NAME (TYPE_NAME (t))));
3042
3043   return hash;
3044 }
3045
3046 typedef struct typename_info {
3047   tree scope;
3048   tree name;
3049   tree template_id;
3050   bool enum_p;
3051   bool class_p;
3052 } typename_info;
3053
3054 /* Compare two TYPENAME_TYPEs.  K1 is really of type `tree', K2 is
3055    really of type `typename_info*'  */
3056
3057 static int
3058 typename_compare (const void * k1, const void * k2)
3059 {
3060   const_tree const t1 = (const_tree) k1;
3061   const typename_info *const t2 = (const typename_info *) k2;
3062
3063   return (DECL_NAME (TYPE_NAME (t1)) == t2->name
3064           && TYPE_CONTEXT (t1) == t2->scope
3065           && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3066           && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3067           && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3068 }
3069
3070 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3071    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3072
3073    Returns the new TYPENAME_TYPE.  */
3074
3075 static GTY ((param_is (union tree_node))) htab_t typename_htab;
3076
3077 static tree
3078 build_typename_type (tree context, tree name, tree fullname,
3079                      enum tag_types tag_type)
3080 {
3081   tree t;
3082   tree d;
3083   typename_info ti;
3084   void **e;
3085   hashval_t hash;
3086
3087   if (typename_htab == NULL)
3088     typename_htab = htab_create_ggc (61, &typename_hash,
3089                                      &typename_compare, NULL);
3090
3091   ti.scope = FROB_CONTEXT (context);
3092   ti.name = name;
3093   ti.template_id = fullname;
3094   ti.enum_p = tag_type == enum_type;
3095   ti.class_p = (tag_type == class_type
3096                 || tag_type == record_type
3097                 || tag_type == union_type);
3098   hash =  (htab_hash_pointer (ti.scope)
3099            ^ htab_hash_pointer (ti.name));
3100
3101   /* See if we already have this type.  */
3102   e = htab_find_slot_with_hash (typename_htab, &ti, hash, INSERT);
3103   if (*e)
3104     t = (tree) *e;
3105   else
3106     {
3107       /* Build the TYPENAME_TYPE.  */
3108       t = cxx_make_type (TYPENAME_TYPE);
3109       TYPE_CONTEXT (t) = ti.scope;
3110       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3111       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3112       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3113
3114       /* Build the corresponding TYPE_DECL.  */
3115       d = build_decl (input_location, TYPE_DECL, name, t);
3116       TYPE_NAME (TREE_TYPE (d)) = d;
3117       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3118       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3119       DECL_ARTIFICIAL (d) = 1;
3120
3121       /* Store it in the hash table.  */
3122       *e = t;
3123
3124       /* TYPENAME_TYPEs must always be compared structurally, because
3125          they may or may not resolve down to another type depending on
3126          the currently open classes. */
3127       SET_TYPE_STRUCTURAL_EQUALITY (t);
3128     }
3129
3130   return t;
3131 }
3132
3133 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3134    provided to name the type.  Returns an appropriate type, unless an
3135    error occurs, in which case error_mark_node is returned.  If we
3136    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3137    return that, rather than the _TYPE it corresponds to, in other
3138    cases we look through the type decl.  If TF_ERROR is set, complain
3139    about errors, otherwise be quiet.  */
3140
3141 tree
3142 make_typename_type (tree context, tree name, enum tag_types tag_type,
3143                     tsubst_flags_t complain)
3144 {
3145   tree fullname;
3146   tree t;
3147   bool want_template;
3148
3149   if (name == error_mark_node
3150       || context == NULL_TREE
3151       || context == error_mark_node)
3152     return error_mark_node;
3153
3154   if (TYPE_P (name))
3155     {
3156       if (!(TYPE_LANG_SPECIFIC (name)
3157             && (CLASSTYPE_IS_TEMPLATE (name)
3158                 || CLASSTYPE_USE_TEMPLATE (name))))
3159         name = TYPE_IDENTIFIER (name);
3160       else
3161         /* Create a TEMPLATE_ID_EXPR for the type.  */
3162         name = build_nt (TEMPLATE_ID_EXPR,
3163                          CLASSTYPE_TI_TEMPLATE (name),
3164                          CLASSTYPE_TI_ARGS (name));
3165     }
3166   else if (TREE_CODE (name) == TYPE_DECL)
3167     name = DECL_NAME (name);
3168
3169   fullname = name;
3170
3171   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3172     {
3173       name = TREE_OPERAND (name, 0);
3174       if (TREE_CODE (name) == TEMPLATE_DECL)
3175         name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3176       else if (TREE_CODE (name) == OVERLOAD)
3177         {
3178           error ("%qD is not a type", name);
3179           return error_mark_node;
3180         }
3181     }
3182   if (TREE_CODE (name) == TEMPLATE_DECL)
3183     {
3184       error ("%qD used without template parameters", name);
3185       return error_mark_node;
3186     }
3187   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3188   gcc_assert (TYPE_P (context));
3189
3190   if (!MAYBE_CLASS_TYPE_P (context))
3191     {
3192       if (complain & tf_error)
3193         error ("%q#T is not a class", context);
3194       return error_mark_node;
3195     }
3196   
3197   /* When the CONTEXT is a dependent type,  NAME could refer to a
3198      dependent base class of CONTEXT.  But look inside it anyway
3199      if CONTEXT is a currently open scope, in case it refers to a
3200      member of the current instantiation or a non-dependent base;
3201      lookup will stop when we hit a dependent base.  */
3202   if (!dependent_scope_p (context))
3203     /* We should only set WANT_TYPE when we're a nested typename type.
3204        Then we can give better diagnostics if we find a non-type.  */
3205     t = lookup_field (context, name, 2, /*want_type=*/true);
3206   else
3207     t = NULL_TREE;
3208
3209   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3210     return build_typename_type (context, name, fullname, tag_type);
3211
3212   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3213   
3214   if (!t)
3215     {
3216       if (complain & tf_error)
3217         error (want_template ? "no class template named %q#T in %q#T"
3218                : "no type named %q#T in %q#T", name, context);
3219       return error_mark_node;
3220     }
3221   
3222   /* Pull out the template from an injected-class-name (or multiple).  */
3223   if (want_template)
3224     t = maybe_get_template_decl_from_type_decl (t);
3225
3226   if (TREE_CODE (t) == TREE_LIST)
3227     {
3228       if (complain & tf_error)
3229         {
3230           error ("lookup of %qT in %qT is ambiguous", name, context);
3231           print_candidates (t);
3232         }
3233       return error_mark_node;
3234     }
3235
3236   if (want_template && !DECL_CLASS_TEMPLATE_P (t))
3237     {
3238       if (complain & tf_error)
3239         error ("%<typename %T::%D%> names %q#T, which is not a class template",
3240                context, name, t);
3241       return error_mark_node;
3242     }
3243   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3244     {
3245       if (complain & tf_error)
3246         error ("%<typename %T::%D%> names %q#T, which is not a type",
3247                context, name, t);
3248       return error_mark_node;
3249     }
3250   
3251   if (complain & tf_error)
3252     perform_or_defer_access_check (TYPE_BINFO (context), t, t);
3253
3254   /* If we are currently parsing a template and if T is a typedef accessed
3255      through CONTEXT then we need to remember and check access of T at
3256      template instantiation time.  */
3257   add_typedef_to_current_template_for_access_check (t, context, input_location);
3258
3259   if (want_template)
3260     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3261                                   NULL_TREE, context,
3262                                   /*entering_scope=*/0,
3263                                   tf_warning_or_error | tf_user);
3264   
3265   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3266     t = TREE_TYPE (t);
3267   
3268   return t;
3269 }
3270
3271 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3272    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3273    in which case error_mark_node is returned.
3274
3275    If PARM_LIST is non-NULL, also make sure that the template parameter
3276    list of TEMPLATE_DECL matches.
3277
3278    If COMPLAIN zero, don't complain about any errors that occur.  */
3279
3280 tree
3281 make_unbound_class_template (tree context, tree name, tree parm_list,
3282                              tsubst_flags_t complain)
3283 {
3284   tree t;
3285   tree d;
3286
3287   if (TYPE_P (name))
3288     name = TYPE_IDENTIFIER (name);
3289   else if (DECL_P (name))
3290     name = DECL_NAME (name);
3291   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
3292
3293   if (!dependent_type_p (context)
3294       || currently_open_class (context))
3295     {
3296       tree tmpl = NULL_TREE;
3297
3298       if (MAYBE_CLASS_TYPE_P (context))
3299         tmpl = lookup_field (context, name, 0, false);
3300
3301       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3302         tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3303
3304       if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
3305         {
3306           if (complain & tf_error)
3307             error ("no class template named %q#T in %q#T", name, context);
3308           return error_mark_node;
3309         }
3310
3311       if (parm_list
3312           && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3313         {
3314           if (complain & tf_error)
3315             {
3316               error ("template parameters do not match template");
3317               error ("%q+D declared here", tmpl);
3318             }
3319           return error_mark_node;
3320         }
3321
3322       if (complain & tf_error)
3323         perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl);
3324
3325       return tmpl;
3326     }
3327
3328   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3329   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3330   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3331   TREE_TYPE (t) = NULL_TREE;
3332   SET_TYPE_STRUCTURAL_EQUALITY (t);
3333
3334   /* Build the corresponding TEMPLATE_DECL.  */
3335   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3336   TYPE_NAME (TREE_TYPE (d)) = d;
3337   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3338   DECL_CONTEXT (d) = FROB_CONTEXT (context);
3339   DECL_ARTIFICIAL (d) = 1;
3340   DECL_TEMPLATE_PARMS (d) = parm_list;
3341
3342   return t;
3343 }
3344
3345 \f
3346
3347 /* Push the declarations of builtin types into the namespace.
3348    RID_INDEX is the index of the builtin type in the array
3349    RID_POINTERS.  NAME is the name used when looking up the builtin
3350    type.  TYPE is the _TYPE node for the builtin type.  */
3351
3352 void
3353 record_builtin_type (enum rid rid_index,
3354                      const char* name,
3355                      tree type)
3356 {
3357   tree rname = NULL_TREE, tname = NULL_TREE;
3358   tree tdecl = NULL_TREE;
3359
3360   if ((int) rid_index < (int) RID_MAX)
3361     rname = ridpointers[(int) rid_index];
3362   if (name)
3363     tname = get_identifier (name);
3364
3365   /* The calls to SET_IDENTIFIER_GLOBAL_VALUE below should be
3366      eliminated.  Built-in types should not be looked up name; their
3367      names are keywords that the parser can recognize.  However, there
3368      is code in c-common.c that uses identifier_global_value to look
3369      up built-in types by name.  */
3370   if (tname)
3371     {
3372       tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3373       DECL_ARTIFICIAL (tdecl) = 1;
3374       SET_IDENTIFIER_GLOBAL_VALUE (tname, tdecl);
3375     }
3376   if (rname)
3377     {
3378       if (!tdecl)
3379         {
3380           tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3381           DECL_ARTIFICIAL (tdecl) = 1;
3382         }
3383       SET_IDENTIFIER_GLOBAL_VALUE (rname, tdecl);
3384     }
3385
3386   if (!TYPE_NAME (type))
3387     TYPE_NAME (type) = tdecl;
3388
3389   if (tdecl)
3390     debug_hooks->type_decl (tdecl, 0);
3391 }
3392
3393 /* Record one of the standard Java types.
3394  * Declare it as having the given NAME.
3395  * If SIZE > 0, it is the size of one of the integral types;
3396  * otherwise it is the negative of the size of one of the other types.  */
3397
3398 static tree
3399 record_builtin_java_type (const char* name, int size)
3400 {
3401   tree type, decl;
3402   if (size > 0)
3403     {
3404       type = build_nonstandard_integer_type (size, 0);
3405       type = build_distinct_type_copy (type);
3406     }
3407   else if (size > -32)
3408     {
3409       tree stype;
3410       /* "__java_char" or ""__java_boolean".  */
3411       type = build_nonstandard_integer_type (-size, 1);
3412       type = build_distinct_type_copy (type);
3413       /* Get the signed type cached and attached to the unsigned type,
3414          so it doesn't get garbage-collected at "random" times,
3415          causing potential codegen differences out of different UIDs
3416          and different alias set numbers.  */
3417       stype = build_nonstandard_integer_type (-size, 0);
3418       stype = build_distinct_type_copy (stype);
3419       TREE_CHAIN (type) = stype;
3420       /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
3421     }
3422   else
3423     { /* "__java_float" or ""__java_double".  */
3424       type = make_node (REAL_TYPE);
3425       TYPE_PRECISION (type) = - size;
3426       layout_type (type);
3427     }
3428   record_builtin_type (RID_MAX, name, type);
3429   decl = TYPE_NAME (type);
3430
3431   /* Suppress generate debug symbol entries for these types,
3432      since for normal C++ they are just clutter.
3433      However, push_lang_context undoes this if extern "Java" is seen.  */
3434   DECL_IGNORED_P (decl) = 1;
3435
3436   TYPE_FOR_JAVA (type) = 1;
3437   return type;
3438 }
3439
3440 /* Push a type into the namespace so that the back ends ignore it.  */
3441
3442 static void
3443 record_unknown_type (tree type, const char* name)
3444 {
3445   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3446                                     TYPE_DECL, get_identifier (name), type));
3447   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
3448   DECL_IGNORED_P (decl) = 1;
3449   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3450   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3451   TYPE_ALIGN (type) = 1;
3452   TYPE_USER_ALIGN (type) = 0;
3453   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3454 }
3455
3456 /* A string for which we should create an IDENTIFIER_NODE at
3457    startup.  */
3458
3459 typedef struct predefined_identifier
3460 {
3461   /* The name of the identifier.  */
3462   const char *const name;
3463   /* The place where the IDENTIFIER_NODE should be stored.  */
3464   tree *const node;
3465   /* Nonzero if this is the name of a constructor or destructor.  */
3466   const int ctor_or_dtor_p;
3467 } predefined_identifier;
3468
3469 /* Create all the predefined identifiers.  */
3470
3471 static void
3472 initialize_predefined_identifiers (void)
3473 {
3474   const predefined_identifier *pid;
3475
3476   /* A table of identifiers to create at startup.  */
3477   static const predefined_identifier predefined_identifiers[] = {
3478     { "C++", &lang_name_cplusplus, 0 },
3479     { "C", &lang_name_c, 0 },
3480     { "Java", &lang_name_java, 0 },
3481     /* Some of these names have a trailing space so that it is
3482        impossible for them to conflict with names written by users.  */
3483     { "__ct ", &ctor_identifier, 1 },
3484     { "__base_ctor ", &base_ctor_identifier, 1 },
3485     { "__comp_ctor ", &complete_ctor_identifier, 1 },
3486     { "__dt ", &dtor_identifier, 1 },
3487     { "__comp_dtor ", &complete_dtor_identifier, 1 },
3488     { "__base_dtor ", &base_dtor_identifier, 1 },
3489     { "__deleting_dtor ", &deleting_dtor_identifier, 1 },
3490     { IN_CHARGE_NAME, &in_charge_identifier, 0 },
3491     { "nelts", &nelts_identifier, 0 },
3492     { THIS_NAME, &this_identifier, 0 },
3493     { VTABLE_DELTA_NAME, &delta_identifier, 0 },
3494     { VTABLE_PFN_NAME, &pfn_identifier, 0 },
3495     { "_vptr", &vptr_identifier, 0 },
3496     { "__vtt_parm", &vtt_parm_identifier, 0 },
3497     { "::", &global_scope_name, 0 },
3498     { "std", &std_identifier, 0 },
3499     { NULL, NULL, 0 }
3500   };
3501
3502   for (pid = predefined_identifiers; pid->name; ++pid)
3503     {
3504       *pid->node = get_identifier (pid->name);
3505       if (pid->ctor_or_dtor_p)
3506         IDENTIFIER_CTOR_OR_DTOR_P (*pid->node) = 1;
3507     }
3508 }
3509
3510 /* Create the predefined scalar types of C,
3511    and some nodes representing standard constants (0, 1, (void *)0).
3512    Initialize the global binding level.
3513    Make definitions for built-in primitive functions.  */
3514
3515 void
3516 cxx_init_decl_processing (void)
3517 {
3518   tree void_ftype;
3519   tree void_ftype_ptr;
3520
3521   build_common_tree_nodes (flag_signed_char);
3522
3523   /* Create all the identifiers we need.  */
3524   initialize_predefined_identifiers ();
3525
3526   /* Create the global variables.  */
3527   push_to_top_level ();
3528
3529   current_function_decl = NULL_TREE;
3530   current_binding_level = NULL;
3531   /* Enter the global namespace.  */
3532   gcc_assert (global_namespace == NULL_TREE);
3533   global_namespace = build_lang_decl (NAMESPACE_DECL, global_scope_name,
3534                                       void_type_node);
3535   DECL_CONTEXT (global_namespace) = build_translation_unit_decl (NULL_TREE);
3536   TREE_PUBLIC (global_namespace) = 1;
3537   begin_scope (sk_namespace, global_namespace);
3538
3539   current_lang_name = NULL_TREE;
3540
3541   if (flag_visibility_ms_compat)
3542     default_visibility = VISIBILITY_HIDDEN;
3543
3544   /* Initially, C.  */
3545   current_lang_name = lang_name_c;
3546
3547   /* Create the `std' namespace.  */
3548   push_namespace (std_identifier);
3549   std_node = current_namespace;
3550   pop_namespace ();
3551
3552   c_common_nodes_and_builtins ();
3553
3554   java_byte_type_node = record_builtin_java_type ("__java_byte", 8);
3555   java_short_type_node = record_builtin_java_type ("__java_short", 16);
3556   java_int_type_node = record_builtin_java_type ("__java_int", 32);
3557   java_long_type_node = record_builtin_java_type ("__java_long", 64);
3558   java_float_type_node = record_builtin_java_type ("__java_float", -32);
3559   java_double_type_node = record_builtin_java_type ("__java_double", -64);
3560   java_char_type_node = record_builtin_java_type ("__java_char", -16);
3561   java_boolean_type_node = record_builtin_java_type ("__java_boolean", -1);
3562
3563   integer_two_node = build_int_cst (NULL_TREE, 2);
3564
3565   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
3566   truthvalue_type_node = boolean_type_node;
3567   truthvalue_false_node = boolean_false_node;
3568   truthvalue_true_node = boolean_true_node;
3569
3570   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
3571   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
3572   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
3573
3574 #if 0
3575   record_builtin_type (RID_MAX, NULL, string_type_node);
3576 #endif
3577
3578   delta_type_node = ptrdiff_type_node;
3579   vtable_index_type = ptrdiff_type_node;
3580
3581   vtt_parm_type = build_pointer_type (const_ptr_type_node);
3582   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
3583   void_ftype_ptr = build_function_type_list (void_type_node,
3584                                              ptr_type_node, NULL_TREE);
3585   void_ftype_ptr
3586     = build_exception_variant (void_ftype_ptr, empty_except_spec);
3587
3588   /* C++ extensions */
3589
3590   unknown_type_node = make_node (LANG_TYPE);
3591   record_unknown_type (unknown_type_node, "unknown type");
3592
3593   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
3594   TREE_TYPE (unknown_type_node) = unknown_type_node;
3595
3596   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
3597      result.  */
3598   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
3599   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
3600
3601   init_list_type_node = make_node (LANG_TYPE);
3602   record_unknown_type (init_list_type_node, "init list");
3603
3604   {
3605     /* Make sure we get a unique function type, so we can give
3606        its pointer type a name.  (This wins for gdb.) */
3607     tree vfunc_type = make_node (FUNCTION_TYPE);
3608     TREE_TYPE (vfunc_type) = integer_type_node;
3609     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
3610     layout_type (vfunc_type);
3611
3612     vtable_entry_type = build_pointer_type (vfunc_type);
3613   }
3614   record_builtin_type (RID_MAX, VTBL_PTR_TYPE, vtable_entry_type);
3615
3616   vtbl_type_node
3617     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
3618   layout_type (vtbl_type_node);
3619   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
3620   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
3621   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
3622   layout_type (vtbl_ptr_type_node);
3623   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
3624
3625   push_namespace (get_identifier ("__cxxabiv1"));
3626   abi_node = current_namespace;
3627   pop_namespace ();
3628
3629   global_type_node = make_node (LANG_TYPE);
3630   record_unknown_type (global_type_node, "global type");
3631
3632   /* Now, C++.  */
3633   current_lang_name = lang_name_cplusplus;
3634
3635   {
3636     tree newtype, deltype;
3637     tree ptr_ftype_sizetype;
3638     tree new_eh_spec;
3639
3640     ptr_ftype_sizetype
3641       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
3642     if (cxx_dialect == cxx98)
3643       {
3644         tree bad_alloc_id;
3645         tree bad_alloc_type_node;
3646         tree bad_alloc_decl;
3647
3648         push_namespace (std_identifier);
3649         bad_alloc_id = get_identifier ("bad_alloc");
3650         bad_alloc_type_node = make_class_type (RECORD_TYPE);
3651         TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
3652         bad_alloc_decl
3653           = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
3654         DECL_CONTEXT (bad_alloc_decl) = current_namespace;
3655         pop_namespace ();
3656
3657         new_eh_spec
3658           = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
3659       }
3660     else
3661       new_eh_spec = noexcept_false_spec;
3662
3663     newtype = build_exception_variant (ptr_ftype_sizetype, new_eh_spec);
3664     deltype = build_exception_variant (void_ftype_ptr, empty_except_spec);
3665     push_cp_library_fn (NEW_EXPR, newtype);
3666     push_cp_library_fn (VEC_NEW_EXPR, newtype);
3667     global_delete_fndecl = push_cp_library_fn (DELETE_EXPR, deltype);
3668     push_cp_library_fn (VEC_DELETE_EXPR, deltype);
3669
3670     nullptr_type_node = make_node (NULLPTR_TYPE);
3671     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
3672     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
3673     TYPE_UNSIGNED (nullptr_type_node) = 1;
3674     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
3675     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
3676     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
3677     nullptr_node = build_int_cst (nullptr_type_node, 0);
3678   }
3679
3680   abort_fndecl
3681     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype);
3682
3683   /* Perform other language dependent initializations.  */
3684   init_class_processing ();
3685   init_rtti_processing ();
3686   init_template_processing ();
3687
3688   if (flag_exceptions)
3689     init_exception_processing ();
3690
3691   if (! supports_one_only ())
3692     flag_weak = 0;
3693
3694   make_fname_decl = cp_make_fname_decl;
3695   start_fname_decls ();
3696
3697   /* Show we use EH for cleanups.  */
3698   if (flag_exceptions)
3699     using_eh_for_cleanups ();
3700 }
3701
3702 /* Generate an initializer for a function naming variable from
3703    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
3704    filled in with the type of the init.  */
3705
3706 tree
3707 cp_fname_init (const char* name, tree *type_p)
3708 {
3709   tree domain = NULL_TREE;
3710   tree type;
3711   tree init = NULL_TREE;
3712   size_t length = 0;
3713
3714   if (name)
3715     {
3716       length = strlen (name);
3717       domain = build_index_type (size_int (length));
3718       init = build_string (length + 1, name);
3719     }
3720
3721   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
3722   type = build_cplus_array_type (type, domain);
3723
3724   *type_p = type;
3725
3726   if (init)
3727     TREE_TYPE (init) = type;
3728   else
3729     init = error_mark_node;
3730
3731   return init;
3732 }
3733
3734 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
3735    the decl, LOC is the location to give the decl, NAME is the
3736    initialization string and TYPE_DEP indicates whether NAME depended
3737    on the type of the function. We make use of that to detect
3738    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
3739    at the point of first use, so we mustn't push the decl now.  */
3740
3741 static tree
3742 cp_make_fname_decl (location_t loc, tree id, int type_dep)
3743 {
3744   const char *const name = (type_dep && processing_template_decl
3745                             ? NULL : fname_as_string (type_dep));
3746   tree type;
3747   tree init = cp_fname_init (name, &type);
3748   tree decl = build_decl (loc, VAR_DECL, id, type);
3749
3750   if (name)
3751     free (CONST_CAST (char *, name));
3752
3753   /* As we're using pushdecl_with_scope, we must set the context.  */
3754   DECL_CONTEXT (decl) = current_function_decl;
3755   DECL_PRETTY_FUNCTION_P (decl) = type_dep;
3756
3757   TREE_STATIC (decl) = 1;
3758   TREE_READONLY (decl) = 1;
3759   DECL_ARTIFICIAL (decl) = 1;
3760
3761   TREE_USED (decl) = 1;
3762
3763   if (current_function_decl)
3764     {
3765       struct cp_binding_level *b = current_binding_level;
3766       if (b->kind == sk_function_parms)
3767         return error_mark_node;
3768       while (b->level_chain->kind != sk_function_parms)
3769         b = b->level_chain;
3770       pushdecl_with_scope (decl, b, /*is_friend=*/false);
3771       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
3772                       LOOKUP_ONLYCONVERTING);
3773     }
3774   else
3775     {
3776       DECL_THIS_STATIC (decl) = true;
3777       pushdecl_top_level_and_finish (decl, init);
3778     }
3779
3780   return decl;
3781 }
3782
3783 static tree
3784 builtin_function_1 (tree decl, tree context, bool is_global)
3785 {
3786   tree          id = DECL_NAME (decl);
3787   const char *name = IDENTIFIER_POINTER (id);
3788
3789   retrofit_lang_decl (decl);
3790
3791   DECL_ARTIFICIAL (decl) = 1;
3792   SET_OVERLOADED_OPERATOR_CODE (decl, ERROR_MARK);
3793   SET_DECL_LANGUAGE (decl, lang_c);
3794   /* Runtime library routines are, by definition, available in an
3795      external shared object.  */
3796   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
3797   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3798
3799   DECL_CONTEXT (decl) = context;
3800
3801   if (is_global)
3802     pushdecl_top_level (decl);
3803   else
3804     pushdecl (decl);
3805
3806   /* A function in the user's namespace should have an explicit
3807      declaration before it is used.  Mark the built-in function as
3808      anticipated but not actually declared.  */
3809   if (name[0] != '_' || name[1] != '_')
3810     DECL_ANTICIPATED (decl) = 1;
3811   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
3812     {
3813       size_t len = strlen (name);
3814
3815       /* Treat __*_chk fortification functions as anticipated as well,
3816          unless they are __builtin_*.  */
3817       if (len > strlen ("___chk")
3818           && memcmp (name + len - strlen ("_chk"),
3819                      "_chk", strlen ("_chk") + 1) == 0)
3820         DECL_ANTICIPATED (decl) = 1;
3821     }
3822
3823   return decl;
3824 }
3825
3826 tree
3827 cxx_builtin_function (tree decl)
3828 {
3829   tree          id = DECL_NAME (decl);
3830   const char *name = IDENTIFIER_POINTER (id);
3831   /* All builtins that don't begin with an '_' should additionally
3832      go in the 'std' namespace.  */
3833   if (name[0] != '_')
3834     {
3835       tree decl2 = copy_node(decl);
3836       push_namespace (std_identifier);
3837       builtin_function_1 (decl2, std_node, false);
3838       pop_namespace ();
3839     }
3840
3841   return builtin_function_1 (decl, NULL_TREE, false);
3842 }
3843
3844 /* Like cxx_builtin_function, but guarantee the function is added to the global
3845    scope.  This is to allow function specific options to add new machine
3846    dependent builtins when the target ISA changes via attribute((target(...)))
3847    which saves space on program startup if the program does not use non-generic
3848    ISAs.  */
3849
3850 tree
3851 cxx_builtin_function_ext_scope (tree decl)
3852 {
3853
3854   tree          id = DECL_NAME (decl);
3855   const char *name = IDENTIFIER_POINTER (id);
3856   /* All builtins that don't begin with an '_' should additionally
3857      go in the 'std' namespace.  */
3858   if (name[0] != '_')
3859     {
3860       tree decl2 = copy_node(decl);
3861       push_namespace (std_identifier);
3862       builtin_function_1 (decl2, std_node, true);
3863       pop_namespace ();
3864     }
3865
3866   return builtin_function_1 (decl, NULL_TREE, true);
3867 }
3868
3869 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
3870    function.  Not called directly.  */
3871
3872 static tree
3873 build_library_fn_1 (tree name, enum tree_code operator_code, tree type)
3874 {
3875   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
3876   DECL_EXTERNAL (fn) = 1;
3877   TREE_PUBLIC (fn) = 1;
3878   DECL_ARTIFICIAL (fn) = 1;
3879   SET_OVERLOADED_OPERATOR_CODE (fn, operator_code);
3880   SET_DECL_LANGUAGE (fn, lang_c);
3881   /* Runtime library routines are, by definition, available in an
3882      external shared object.  */
3883   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
3884   DECL_VISIBILITY_SPECIFIED (fn) = 1;
3885   return fn;
3886 }
3887
3888 /* Returns the _DECL for a library function with C linkage.
3889    We assume that such functions never throw; if this is incorrect,
3890    callers should unset TREE_NOTHROW.  */
3891
3892 static tree
3893 build_library_fn (tree name, tree type)
3894 {
3895   tree fn = build_library_fn_1 (name, ERROR_MARK, type);
3896   TREE_NOTHROW (fn) = 1;
3897   return fn;
3898 }
3899
3900 /* Returns the _DECL for a library function with C++ linkage.  */
3901
3902 static tree
3903 build_cp_library_fn (tree name, enum tree_code operator_code, tree type)
3904 {
3905   tree fn = build_library_fn_1 (name, operator_code, type);
3906   TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
3907   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
3908   SET_DECL_LANGUAGE (fn, lang_cplusplus);
3909   return fn;
3910 }
3911
3912 /* Like build_library_fn, but takes a C string instead of an
3913    IDENTIFIER_NODE.  */
3914
3915 tree
3916 build_library_fn_ptr (const char* name, tree type)
3917 {
3918   return build_library_fn (get_identifier (name), type);
3919 }
3920
3921 /* Like build_cp_library_fn, but takes a C string instead of an
3922    IDENTIFIER_NODE.  */
3923
3924 tree
3925 build_cp_library_fn_ptr (const char* name, tree type)
3926 {
3927   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type);
3928 }
3929
3930 /* Like build_library_fn, but also pushes the function so that we will
3931    be able to find it via IDENTIFIER_GLOBAL_VALUE.  Also, the function
3932    may throw exceptions listed in RAISES.  */
3933
3934 tree
3935 push_library_fn (tree name, tree type, tree raises)
3936 {
3937   tree fn;
3938
3939   if (raises)
3940     type = build_exception_variant (type, raises);
3941
3942   fn = build_library_fn (name, type);
3943   pushdecl_top_level (fn);
3944   return fn;
3945 }
3946
3947 /* Like build_cp_library_fn, but also pushes the function so that it
3948    will be found by normal lookup.  */
3949
3950 static tree
3951 push_cp_library_fn (enum tree_code operator_code, tree type)
3952 {
3953   tree fn = build_cp_library_fn (ansi_opname (operator_code),
3954                                  operator_code,
3955                                  type);
3956   pushdecl (fn);
3957   return fn;
3958 }
3959
3960 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
3961    a FUNCTION_TYPE.  */
3962
3963 tree
3964 push_void_library_fn (tree name, tree parmtypes)
3965 {
3966   tree type = build_function_type (void_type_node, parmtypes);
3967   return push_library_fn (name, type, NULL_TREE);
3968 }
3969
3970 /* Like push_library_fn, but also note that this function throws
3971    and does not return.  Used for __throw_foo and the like.  */
3972
3973 tree
3974 push_throw_library_fn (tree name, tree type)
3975 {
3976   tree fn = push_library_fn (name, type, NULL_TREE);
3977   TREE_THIS_VOLATILE (fn) = 1;
3978   TREE_NOTHROW (fn) = 0;
3979   return fn;
3980 }
3981 \f
3982 /* When we call finish_struct for an anonymous union, we create
3983    default copy constructors and such.  But, an anonymous union
3984    shouldn't have such things; this function undoes the damage to the
3985    anonymous union type T.
3986
3987    (The reason that we create the synthesized methods is that we don't
3988    distinguish `union { int i; }' from `typedef union { int i; } U'.
3989    The first is an anonymous union; the second is just an ordinary
3990    union type.)  */
3991
3992 void
3993 fixup_anonymous_aggr (tree t)
3994 {
3995   tree *q;
3996
3997   /* Wipe out memory of synthesized methods.  */
3998   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
3999   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4000   TYPE_HAS_COPY_CTOR (t) = 0;
4001   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4002   TYPE_HAS_COPY_ASSIGN (t) = 0;
4003   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4004
4005   /* Splice the implicitly generated functions out of the TYPE_METHODS
4006      list.  */
4007   q = &TYPE_METHODS (t);
4008   while (*q)
4009     {
4010       if (DECL_ARTIFICIAL (*q))
4011         *q = TREE_CHAIN (*q);
4012       else
4013         q = &DECL_CHAIN (*q);
4014     }
4015
4016   /* ISO C++ 9.5.3.  Anonymous unions may not have function members.  */
4017   if (TYPE_METHODS (t))
4018     {
4019       tree decl = TYPE_MAIN_DECL (t);
4020
4021       if (TREE_CODE (t) != UNION_TYPE)
4022         error_at (DECL_SOURCE_LOCATION (decl), 
4023                   "an anonymous struct cannot have function members");
4024       else
4025         error_at (DECL_SOURCE_LOCATION (decl),
4026                   "an anonymous union cannot have function members");
4027     }
4028
4029   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4030      assignment operators (because they cannot have these methods themselves).
4031      For anonymous unions this is already checked because they are not allowed
4032      in any union, otherwise we have to check it.  */
4033   if (TREE_CODE (t) != UNION_TYPE)
4034     {
4035       tree field, type;
4036
4037       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4038         if (TREE_CODE (field) == FIELD_DECL)
4039           {
4040             type = TREE_TYPE (field);
4041             if (CLASS_TYPE_P (type))
4042               {
4043                 if (TYPE_NEEDS_CONSTRUCTING (type))
4044                   error ("member %q+#D with constructor not allowed "
4045                          "in anonymous aggregate", field);
4046                 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4047                   error ("member %q+#D with destructor not allowed "
4048                          "in anonymous aggregate", field);
4049                 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4050                   error ("member %q+#D with copy assignment operator "
4051                          "not allowed in anonymous aggregate", field);
4052               }
4053           }
4054     }
4055 }
4056
4057 /* Make sure that a declaration with no declarator is well-formed, i.e.
4058    just declares a tagged type or anonymous union.
4059
4060    Returns the type declared; or NULL_TREE if none.  */
4061
4062 tree
4063 check_tag_decl (cp_decl_specifier_seq *declspecs)
4064 {
4065   int saw_friend = declspecs->specs[(int)ds_friend] != 0;
4066   int saw_typedef = declspecs->specs[(int)ds_typedef] != 0;
4067   /* If a class, struct, or enum type is declared by the DECLSPECS
4068      (i.e, if a class-specifier, enum-specifier, or non-typename
4069      elaborated-type-specifier appears in the DECLSPECS),
4070      DECLARED_TYPE is set to the corresponding type.  */
4071   tree declared_type = NULL_TREE;
4072   bool error_p = false;
4073
4074   if (declspecs->multiple_types_p)
4075     error ("multiple types in one declaration");
4076   else if (declspecs->redefined_builtin_type)
4077     {
4078       if (!in_system_header)
4079         permerror (input_location, "redeclaration of C++ built-in type %qT",
4080                    declspecs->redefined_builtin_type);
4081       return NULL_TREE;
4082     }
4083
4084   if (declspecs->type
4085       && TYPE_P (declspecs->type)
4086       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4087            && MAYBE_CLASS_TYPE_P (declspecs->type))
4088           || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4089     declared_type = declspecs->type;
4090   else if (declspecs->type == error_mark_node)
4091     error_p = true;
4092   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4093     permerror (input_location, "declaration does not declare anything");
4094   /* Check for an anonymous union.  */
4095   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4096            && TYPE_ANONYMOUS_P (declared_type))
4097     {
4098       /* 7/3 In a simple-declaration, the optional init-declarator-list
4099          can be omitted only when declaring a class (clause 9) or
4100          enumeration (7.2), that is, when the decl-specifier-seq contains
4101          either a class-specifier, an elaborated-type-specifier with
4102          a class-key (9.1), or an enum-specifier.  In these cases and
4103          whenever a class-specifier or enum-specifier is present in the
4104          decl-specifier-seq, the identifiers in these specifiers are among
4105          the names being declared by the declaration (as class-name,
4106          enum-names, or enumerators, depending on the syntax).  In such
4107          cases, and except for the declaration of an unnamed bit-field (9.6),
4108          the decl-specifier-seq shall introduce one or more names into the
4109          program, or shall redeclare a name introduced by a previous
4110          declaration.  [Example:
4111              enum { };                  // ill-formed
4112              typedef class { };         // ill-formed
4113          --end example]  */
4114       if (saw_typedef)
4115         {
4116           error ("missing type-name in typedef-declaration");
4117           return NULL_TREE;
4118         }
4119       /* Anonymous unions are objects, so they can have specifiers.  */;
4120       SET_ANON_AGGR_TYPE_P (declared_type);
4121
4122       if (TREE_CODE (declared_type) != UNION_TYPE && !in_system_header)
4123         pedwarn (input_location, OPT_pedantic, "ISO C++ prohibits anonymous structs");
4124     }
4125
4126   else
4127     {
4128       if (declspecs->specs[(int)ds_inline]
4129           || declspecs->specs[(int)ds_virtual])
4130         error ("%qs can only be specified for functions",
4131                declspecs->specs[(int)ds_inline]
4132                ? "inline" : "virtual");
4133       else if (saw_friend
4134                && (!current_class_type
4135                    || current_scope () != current_class_type))
4136         error ("%<friend%> can only be specified inside a class");
4137       else if (declspecs->specs[(int)ds_explicit])
4138         error ("%<explicit%> can only be specified for constructors");
4139       else if (declspecs->storage_class)
4140         error ("a storage class can only be specified for objects "
4141                "and functions");
4142       else if (declspecs->specs[(int)ds_const]
4143                || declspecs->specs[(int)ds_volatile]
4144                || declspecs->specs[(int)ds_restrict]
4145                || declspecs->specs[(int)ds_thread])
4146         error ("qualifiers can only be specified for objects "
4147                "and functions");
4148       else if (saw_typedef)
4149         warning (0, "%<typedef%> was ignored in this declaration");
4150       else if (declspecs->specs[(int) ds_constexpr])
4151         error ("%<constexpr%> cannot be used for type declarations");
4152     }
4153
4154   return declared_type;
4155 }
4156
4157 /* Called when a declaration is seen that contains no names to declare.
4158    If its type is a reference to a structure, union or enum inherited
4159    from a containing scope, shadow that tag name for the current scope
4160    with a forward reference.
4161    If its type defines a new named structure or union
4162    or defines an enum, it is valid but we need not do anything here.
4163    Otherwise, it is an error.
4164
4165    C++: may have to grok the declspecs to learn about static,
4166    complain for anonymous unions.
4167
4168    Returns the TYPE declared -- or NULL_TREE if none.  */
4169
4170 tree
4171 shadow_tag (cp_decl_specifier_seq *declspecs)
4172 {
4173   tree t = check_tag_decl (declspecs);
4174
4175   if (!t)
4176     return NULL_TREE;
4177
4178   if (declspecs->attributes)
4179     {
4180       warning (0, "attribute ignored in declaration of %q+#T", t);
4181       warning (0, "attribute for %q+#T must follow the %qs keyword",
4182                t, class_key_or_enum_as_string (t));
4183
4184     }
4185
4186   if (maybe_process_partial_specialization (t) == error_mark_node)
4187     return NULL_TREE;
4188
4189   /* This is where the variables in an anonymous union are
4190      declared.  An anonymous union declaration looks like:
4191      union { ... } ;
4192      because there is no declarator after the union, the parser
4193      sends that declaration here.  */
4194   if (ANON_AGGR_TYPE_P (t))
4195     {
4196       fixup_anonymous_aggr (t);
4197
4198       if (TYPE_FIELDS (t))
4199         {
4200           tree decl = grokdeclarator (/*declarator=*/NULL,
4201                                       declspecs, NORMAL, 0, NULL);
4202           finish_anon_union (decl);
4203         }
4204     }
4205
4206   return t;
4207 }
4208 \f
4209 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4210
4211 tree
4212 groktypename (cp_decl_specifier_seq *type_specifiers,
4213               const cp_declarator *declarator,
4214               bool is_template_arg)
4215 {
4216   tree attrs;
4217   tree type;
4218   enum decl_context context
4219     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4220   attrs = type_specifiers->attributes;
4221   type_specifiers->attributes = NULL_TREE;
4222   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4223   if (attrs && type != error_mark_node)
4224     {
4225       if (CLASS_TYPE_P (type))
4226         warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4227                  "outside of definition", type);
4228       else if (MAYBE_CLASS_TYPE_P (type))
4229         /* A template type parameter or other dependent type.  */
4230         warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4231                  "type %qT without an associated declaration", type);
4232       else
4233         cplus_decl_attributes (&type, attrs, 0);
4234     }
4235   return type;
4236 }
4237
4238 /* Process a DECLARATOR for a function-scope variable declaration,
4239    namespace-scope variable declaration, or function declaration.
4240    (Function definitions go through start_function; class member
4241    declarations appearing in the body of the class go through
4242    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4243    If an error occurs, the error_mark_node is returned instead.
4244    
4245    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
4246    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4247    for an explicitly defaulted function, or SD_DELETED for an explicitly
4248    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4249    implicitly initialized via a default constructor.  ATTRIBUTES and
4250    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4251    *PUSHED_SCOPE_P is set to the scope entered in this function, if any; if
4252    set, the caller is responsible for calling pop_scope.  */
4253
4254 tree
4255 start_decl (const cp_declarator *declarator,
4256             cp_decl_specifier_seq *declspecs,
4257             int initialized,
4258             tree attributes,
4259             tree prefix_attributes,
4260             tree *pushed_scope_p)
4261 {
4262   tree decl;
4263   tree context;
4264   bool was_public;
4265   int flags;
4266   bool alias;
4267
4268   *pushed_scope_p = NULL_TREE;
4269
4270   /* An object declared as __attribute__((deprecated)) suppresses
4271      warnings of uses of other deprecated items.  */
4272   if (lookup_attribute ("deprecated", attributes))
4273     deprecated_state = DEPRECATED_SUPPRESS;
4274
4275   attributes = chainon (attributes, prefix_attributes);
4276
4277   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4278                          &attributes);
4279
4280   deprecated_state = DEPRECATED_NORMAL;
4281
4282   if (decl == NULL_TREE || TREE_CODE (decl) == VOID_TYPE
4283       || decl == error_mark_node)
4284     return error_mark_node;
4285
4286   context = CP_DECL_CONTEXT (decl);
4287   if (context != global_namespace)
4288     *pushed_scope_p = push_scope (context);
4289
4290   if (initialized)
4291     /* Is it valid for this decl to have an initializer at all?
4292        If not, set INITIALIZED to zero, which will indirectly
4293        tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
4294     switch (TREE_CODE (decl))
4295       {
4296       case TYPE_DECL:
4297         error ("typedef %qD is initialized (use decltype instead)", decl);
4298         return error_mark_node;
4299
4300       case FUNCTION_DECL:
4301         if (initialized == SD_DELETED)
4302           /* We'll handle the rest of the semantics later, but we need to
4303              set this now so it's visible to duplicate_decls.  */
4304           DECL_DELETED_FN (decl) = 1;
4305         break;
4306
4307       default:
4308         break;
4309       }
4310
4311   if (initialized)
4312     {
4313       if (! toplevel_bindings_p ()
4314           && DECL_EXTERNAL (decl))
4315         warning (0, "declaration of %q#D has %<extern%> and is initialized",
4316                  decl);
4317       DECL_EXTERNAL (decl) = 0;
4318       if (toplevel_bindings_p ())
4319         TREE_STATIC (decl) = 1;
4320     }
4321   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4322   
4323   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4324     record_key_method_defined (decl);
4325
4326   /* If this is a typedef that names the class for linkage purposes
4327      (7.1.3p8), apply any attributes directly to the type.  */
4328   if (TREE_CODE (decl) == TYPE_DECL
4329       && TAGGED_TYPE_P (TREE_TYPE (decl))
4330       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4331     flags = ATTR_FLAG_TYPE_IN_PLACE;
4332   else
4333     flags = 0;
4334
4335   /* Set attributes here so if duplicate decl, will have proper attributes.  */
4336   cplus_decl_attributes (&decl, attributes, flags);
4337
4338   /* Dllimported symbols cannot be defined.  Static data members (which
4339      can be initialized in-class and dllimported) go through grokfield,
4340      not here, so we don't need to exclude those decls when checking for
4341      a definition.  */
4342   if (initialized && DECL_DLLIMPORT_P (decl))
4343     {
4344       error ("definition of %q#D is marked %<dllimport%>", decl);
4345       DECL_DLLIMPORT_P (decl) = 0;
4346     }
4347
4348   /* If #pragma weak was used, mark the decl weak now.  */
4349   maybe_apply_pragma_weak (decl);
4350
4351   if (TREE_CODE (decl) == FUNCTION_DECL
4352       && DECL_DECLARED_INLINE_P (decl)
4353       && DECL_UNINLINABLE (decl)
4354       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4355     warning (0, "inline function %q+D given attribute noinline", decl);
4356
4357   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4358     {
4359       if (TREE_CODE (decl) == VAR_DECL)
4360         {
4361           tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4362           if (field == NULL_TREE || TREE_CODE (field) != VAR_DECL)
4363             error ("%q#D is not a static member of %q#T", decl, context);
4364           else
4365             {
4366               if (DECL_CONTEXT (field) != context)
4367                 {
4368                   if (!same_type_p (DECL_CONTEXT (field), context))
4369                     permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4370                                "to be defined as %<%T::%D%>",
4371                                DECL_CONTEXT (field), DECL_NAME (decl),
4372                                context, DECL_NAME (decl));
4373                   DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4374                 }
4375               if (processing_specialization
4376                   && template_class_depth (context) == 0
4377                   && CLASSTYPE_TEMPLATE_SPECIALIZATION (context))
4378                 error ("template header not allowed in member definition "
4379                        "of explicitly specialized class");
4380               /* Static data member are tricky; an in-class initialization
4381                  still doesn't provide a definition, so the in-class
4382                  declaration will have DECL_EXTERNAL set, but will have an
4383                  initialization.  Thus, duplicate_decls won't warn
4384                  about this situation, and so we check here.  */
4385               if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
4386                 error ("duplicate initialization of %qD", decl);
4387               if (duplicate_decls (decl, field, /*newdecl_is_friend=*/false))
4388                 decl = field;
4389               if (declspecs->specs[(int) ds_constexpr]
4390                   && !DECL_DECLARED_CONSTEXPR_P (field))
4391                 error ("%qD declared %<constexpr%> outside its class", field);
4392             }
4393         }
4394       else
4395         {
4396           tree field = check_classfn (context, decl,
4397                                       (processing_template_decl
4398                                        > template_class_depth (context))
4399                                       ? current_template_parms
4400                                       : NULL_TREE);
4401           if (field && field != error_mark_node
4402               && duplicate_decls (decl, field,
4403                                  /*newdecl_is_friend=*/false))
4404             decl = field;
4405         }
4406
4407       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
4408       DECL_IN_AGGR_P (decl) = 0;
4409       /* Do not mark DECL as an explicit specialization if it was not
4410          already marked as an instantiation; a declaration should
4411          never be marked as a specialization unless we know what
4412          template is being specialized.  */
4413       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
4414         {
4415           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
4416
4417           /* [temp.expl.spec] An explicit specialization of a static data
4418              member of a template is a definition if the declaration
4419              includes an initializer; otherwise, it is a declaration.
4420
4421              We check for processing_specialization so this only applies
4422              to the new specialization syntax.  */
4423           if (!initialized && processing_specialization)
4424             DECL_EXTERNAL (decl) = 1;
4425         }
4426
4427       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
4428           /* Aliases are definitions. */
4429           && !alias)
4430         permerror (input_location, "declaration of %q#D outside of class is not definition",
4431                    decl);
4432     }
4433
4434   was_public = TREE_PUBLIC (decl);
4435
4436   /* Enter this declaration into the symbol table.  */
4437   decl = maybe_push_decl (decl);
4438
4439   if (processing_template_decl)
4440     decl = push_template_decl (decl);
4441   if (decl == error_mark_node)
4442     return error_mark_node;
4443
4444   /* Tell the back end to use or not use .common as appropriate.  If we say
4445      -fconserve-space, we want this to save .data space, at the expense of
4446      wrong semantics.  If we say -fno-conserve-space, we want this to
4447      produce errors about redefs; to do this we force variables into the
4448      data segment.  */
4449   if (flag_conserve_space
4450       && TREE_CODE (decl) == VAR_DECL
4451       && TREE_PUBLIC (decl)
4452       && !DECL_THREAD_LOCAL_P (decl)
4453       && !have_global_bss_p ())
4454     DECL_COMMON (decl) = 1;
4455
4456   if (TREE_CODE (decl) == VAR_DECL
4457       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
4458       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
4459     {
4460       /* This is a const variable with implicit 'static'.  Set
4461          DECL_THIS_STATIC so we can tell it from variables that are
4462          !TREE_PUBLIC because of the anonymous namespace.  */
4463       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
4464       DECL_THIS_STATIC (decl) = 1;
4465     }
4466
4467   if (!processing_template_decl && TREE_CODE (decl) == VAR_DECL)
4468     start_decl_1 (decl, initialized);
4469
4470   return decl;
4471 }
4472
4473 /* Process the declaration of a variable DECL.  INITIALIZED is true
4474    iff DECL is explicitly initialized.  (INITIALIZED is false if the
4475    variable is initialized via an implicitly-called constructor.)
4476    This function must be called for ordinary variables (including, for
4477    example, implicit instantiations of templates), but must not be
4478    called for template declarations.  */
4479
4480 void
4481 start_decl_1 (tree decl, bool initialized)
4482 {
4483   tree type;
4484   bool complete_p;
4485   bool aggregate_definition_p;
4486
4487   gcc_assert (!processing_template_decl);
4488
4489   if (error_operand_p (decl))
4490     return;
4491
4492   gcc_assert (TREE_CODE (decl) == VAR_DECL);
4493
4494   type = TREE_TYPE (decl);
4495   complete_p = COMPLETE_TYPE_P (type);
4496   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
4497
4498   /* If an explicit initializer is present, or if this is a definition
4499      of an aggregate, then we need a complete type at this point.
4500      (Scalars are always complete types, so there is nothing to
4501      check.)  This code just sets COMPLETE_P; errors (if necessary)
4502      are issued below.  */
4503   if ((initialized || aggregate_definition_p) 
4504       && !complete_p
4505       && COMPLETE_TYPE_P (complete_type (type)))
4506     {
4507       complete_p = true;
4508       /* We will not yet have set TREE_READONLY on DECL if the type
4509          was "const", but incomplete, before this point.  But, now, we
4510          have a complete type, so we can try again.  */
4511       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
4512     }
4513
4514   if (initialized)
4515     /* Is it valid for this decl to have an initializer at all?  */
4516     {
4517       /* Don't allow initializations for incomplete types except for
4518          arrays which might be completed by the initialization.  */
4519       if (complete_p)
4520         ;                       /* A complete type is ok.  */
4521       else if (type_uses_auto (type))
4522         ;                       /* An auto type is ok.  */
4523       else if (TREE_CODE (type) != ARRAY_TYPE)
4524         {
4525           error ("variable %q#D has initializer but incomplete type", decl);
4526           type = TREE_TYPE (decl) = error_mark_node;
4527         }
4528       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
4529         {
4530           if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
4531             error ("elements of array %q#D have incomplete type", decl);
4532           /* else we already gave an error in start_decl.  */
4533         }
4534     }
4535   else if (aggregate_definition_p && !complete_p)
4536     {
4537       if (type_uses_auto (type))
4538         error ("declaration of %q#D has no initializer", decl);
4539       else
4540         error ("aggregate %q#D has incomplete type and cannot be defined",
4541                decl);
4542       /* Change the type so that assemble_variable will give
4543          DECL an rtl we can live with: (mem (const_int 0)).  */
4544       type = TREE_TYPE (decl) = error_mark_node;
4545     }
4546
4547   /* Create a new scope to hold this declaration if necessary.
4548      Whether or not a new scope is necessary cannot be determined
4549      until after the type has been completed; if the type is a
4550      specialization of a class template it is not until after
4551      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
4552      will be set correctly.  */
4553   maybe_push_cleanup_level (type);
4554 }
4555
4556 /* Handle initialization of references.  DECL, TYPE, and INIT have the
4557    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
4558    but will be set to a new CLEANUP_STMT if a temporary is created
4559    that must be destroyed subsequently.
4560
4561    Returns an initializer expression to use to initialize DECL, or
4562    NULL if the initialization can be performed statically.
4563
4564    Quotes on semantics can be found in ARM 8.4.3.  */
4565
4566 static tree
4567 grok_reference_init (tree decl, tree type, tree init, tree *cleanup)
4568 {
4569   tree tmp;
4570
4571   if (init == NULL_TREE)
4572     {
4573       if ((DECL_LANG_SPECIFIC (decl) == 0
4574            || DECL_IN_AGGR_P (decl) == 0)
4575           && ! DECL_THIS_EXTERN (decl))
4576         error ("%qD declared as reference but not initialized", decl);
4577       return NULL_TREE;
4578     }
4579
4580   if (TREE_CODE (init) == TREE_LIST)
4581     init = build_x_compound_expr_from_list (init, ELK_INIT,
4582                                             tf_warning_or_error);
4583
4584   if (TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE
4585       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
4586     /* Note: default conversion is only called in very special cases.  */
4587     init = decay_conversion (init);
4588
4589   /* Convert INIT to the reference type TYPE.  This may involve the
4590      creation of a temporary, whose lifetime must be the same as that
4591      of the reference.  If so, a DECL_EXPR for the temporary will be
4592      added just after the DECL_EXPR for DECL.  That's why we don't set
4593      DECL_INITIAL for local references (instead assigning to them
4594      explicitly); we need to allow the temporary to be initialized
4595      first.  */
4596   tmp = initialize_reference (type, init, decl, cleanup, tf_warning_or_error);
4597
4598   if (tmp == error_mark_node)
4599     return NULL_TREE;
4600   else if (tmp == NULL_TREE)
4601     {
4602       error ("cannot initialize %qT from %qT", type, TREE_TYPE (init));
4603       return NULL_TREE;
4604     }
4605
4606   if (TREE_STATIC (decl) && !TREE_CONSTANT (tmp))
4607     return tmp;
4608
4609   DECL_INITIAL (decl) = tmp;
4610
4611   return NULL_TREE;
4612 }
4613
4614 /* Subroutine of check_initializer.  We're initializing a DECL of
4615    std::initializer_list<T> TYPE from a braced-init-list INIT, and need to
4616    extend the lifetime of the underlying array to match that of the decl,
4617    just like for reference initialization.  CLEANUP is as for
4618    grok_reference_init.  */
4619
4620 static tree
4621 build_init_list_var_init (tree decl, tree type, tree init, tree *array_init,
4622                           tree *cleanup)
4623 {
4624   tree aggr_init, array, arrtype;
4625   init = perform_implicit_conversion (type, init, tf_warning_or_error);
4626   if (error_operand_p (init))
4627     return error_mark_node;
4628
4629   aggr_init = TARGET_EXPR_INITIAL (init);
4630   array = CONSTRUCTOR_ELT (aggr_init, 0)->value;
4631   arrtype = TREE_TYPE (array);
4632   STRIP_NOPS (array);
4633   gcc_assert (TREE_CODE (array) == ADDR_EXPR);
4634   array = TREE_OPERAND (array, 0);
4635   /* If the array is constant, finish_compound_literal already made it a
4636      static variable and we don't need to do anything here.  */
4637   if (decl && TREE_CODE (array) == TARGET_EXPR)
4638     {
4639       tree var = set_up_extended_ref_temp (decl, array, cleanup, array_init);
4640       var = build_address (var);
4641       var = convert (arrtype, var);
4642       CONSTRUCTOR_ELT (aggr_init, 0)->value = var;
4643     }
4644   return init;
4645 }
4646
4647 /* Designated initializers in arrays are not supported in GNU C++.
4648    The parser cannot detect this error since it does not know whether
4649    a given brace-enclosed initializer is for a class type or for an
4650    array.  This function checks that CE does not use a designated
4651    initializer.  If it does, an error is issued.  Returns true if CE
4652    is valid, i.e., does not have a designated initializer.  */
4653
4654 static bool
4655 check_array_designated_initializer (const constructor_elt *ce)
4656 {
4657   /* Designated initializers for array elements are not supported.  */
4658   if (ce->index)
4659     {
4660       /* The parser only allows identifiers as designated
4661          initializers.  */
4662       if (ce->index == error_mark_node)
4663         error ("name used in a GNU-style designated "
4664                "initializer for an array");
4665       else if (TREE_CODE (ce->index) == INTEGER_CST)
4666         /* An index added by reshape_init.  */
4667         return true;
4668       else
4669         {
4670           gcc_assert (TREE_CODE (ce->index) == IDENTIFIER_NODE);
4671           error ("name %qD used in a GNU-style designated "
4672                  "initializer for an array", ce->index);
4673         }
4674       return false;
4675     }
4676
4677   return true;
4678 }
4679
4680 /* When parsing `int a[] = {1, 2};' we don't know the size of the
4681    array until we finish parsing the initializer.  If that's the
4682    situation we're in, update DECL accordingly.  */
4683
4684 static void
4685 maybe_deduce_size_from_array_init (tree decl, tree init)
4686 {
4687   tree type = TREE_TYPE (decl);
4688
4689   if (TREE_CODE (type) == ARRAY_TYPE
4690       && TYPE_DOMAIN (type) == NULL_TREE
4691       && TREE_CODE (decl) != TYPE_DECL)
4692     {
4693       /* do_default is really a C-ism to deal with tentative definitions.
4694          But let's leave it here to ease the eventual merge.  */
4695       int do_default = !DECL_EXTERNAL (decl);
4696       tree initializer = init ? init : DECL_INITIAL (decl);
4697       int failure = 0;
4698
4699       /* Check that there are no designated initializers in INIT, as
4700          those are not supported in GNU C++, and as the middle-end
4701          will crash if presented with a non-numeric designated
4702          initializer.  */
4703       if (initializer && TREE_CODE (initializer) == CONSTRUCTOR)
4704         {
4705           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initializer);
4706           constructor_elt *ce;
4707           HOST_WIDE_INT i;
4708           FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
4709             if (!check_array_designated_initializer (ce))
4710               failure = 1;
4711         }
4712
4713       if (!failure)
4714         {
4715           failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
4716                                             do_default);
4717           if (failure == 1)
4718             {
4719               error ("initializer fails to determine size of %qD", decl);
4720               TREE_TYPE (decl) = error_mark_node;
4721             }
4722           else if (failure == 2)
4723             {
4724               if (do_default)
4725                 {
4726                   error ("array size missing in %qD", decl);
4727                   TREE_TYPE (decl) = error_mark_node;
4728                 }
4729               /* If a `static' var's size isn't known, make it extern as
4730                  well as static, so it does not get allocated.  If it's not
4731                  `static', then don't mark it extern; finish_incomplete_decl
4732                  will give it a default size and it will get allocated.  */
4733               else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
4734                 DECL_EXTERNAL (decl) = 1;
4735             }
4736           else if (failure == 3)
4737             {
4738               error ("zero-size array %qD", decl);
4739               TREE_TYPE (decl) = error_mark_node;
4740             }
4741         }
4742
4743       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
4744
4745       relayout_decl (decl);
4746     }
4747 }
4748
4749 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
4750    any appropriate error messages regarding the layout.  */
4751
4752 static void
4753 layout_var_decl (tree decl)
4754 {
4755   tree type;
4756
4757   type = TREE_TYPE (decl);
4758   if (type == error_mark_node)
4759     return;
4760
4761   /* If we haven't already layed out this declaration, do so now.
4762      Note that we must not call complete type for an external object
4763      because it's type might involve templates that we are not
4764      supposed to instantiate yet.  (And it's perfectly valid to say
4765      `extern X x' for some incomplete type `X'.)  */
4766   if (!DECL_EXTERNAL (decl))
4767     complete_type (type);
4768   if (!DECL_SIZE (decl)
4769       && TREE_TYPE (decl) != error_mark_node
4770       && (COMPLETE_TYPE_P (type)
4771           || (TREE_CODE (type) == ARRAY_TYPE
4772               && !TYPE_DOMAIN (type)
4773               && COMPLETE_TYPE_P (TREE_TYPE (type)))))
4774     layout_decl (decl, 0);
4775
4776   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
4777     {
4778       /* An automatic variable with an incomplete type: that is an error.
4779          Don't talk about array types here, since we took care of that
4780          message in grokdeclarator.  */
4781       error ("storage size of %qD isn%'t known", decl);
4782       TREE_TYPE (decl) = error_mark_node;
4783     }
4784 #if 0
4785   /* Keep this code around in case we later want to control debug info
4786      based on whether a type is "used".  (jason 1999-11-11) */
4787
4788   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
4789     /* Let debugger know it should output info for this type.  */
4790     note_debug_info_needed (ttype);
4791
4792   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
4793     note_debug_info_needed (DECL_CONTEXT (decl));
4794 #endif
4795
4796   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
4797       && DECL_SIZE (decl) != NULL_TREE
4798       && ! TREE_CONSTANT (DECL_SIZE (decl)))
4799     {
4800       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
4801         constant_expression_warning (DECL_SIZE (decl));
4802       else
4803         {
4804           error ("storage size of %qD isn%'t constant", decl);
4805           TREE_TYPE (decl) = error_mark_node;
4806         }
4807     }
4808 }
4809
4810 /* If a local static variable is declared in an inline function, or if
4811    we have a weak definition, we must endeavor to create only one
4812    instance of the variable at link-time.  */
4813
4814 void
4815 maybe_commonize_var (tree decl)
4816 {
4817   /* Static data in a function with comdat linkage also has comdat
4818      linkage.  */
4819   if (TREE_STATIC (decl)
4820       /* Don't mess with __FUNCTION__.  */
4821       && ! DECL_ARTIFICIAL (decl)
4822       && DECL_FUNCTION_SCOPE_P (decl)
4823       && vague_linkage_p (DECL_CONTEXT (decl)))
4824     {
4825       if (flag_weak)
4826         {
4827           /* With weak symbols, we simply make the variable COMDAT;
4828              that will cause copies in multiple translations units to
4829              be merged.  */
4830           comdat_linkage (decl);
4831         }
4832       else
4833         {
4834           if (DECL_INITIAL (decl) == NULL_TREE
4835               || DECL_INITIAL (decl) == error_mark_node)
4836             {
4837               /* Without weak symbols, we can use COMMON to merge
4838                  uninitialized variables.  */
4839               TREE_PUBLIC (decl) = 1;
4840               DECL_COMMON (decl) = 1;
4841             }
4842           else
4843             {
4844               /* While for initialized variables, we must use internal
4845                  linkage -- which means that multiple copies will not
4846                  be merged.  */
4847               TREE_PUBLIC (decl) = 0;
4848               DECL_COMMON (decl) = 0;
4849               warning_at (input_location, 0,
4850                           "sorry: semantics of inline function static "
4851                           "data %q+#D are wrong (you%'ll wind up "
4852                           "with multiple copies)", decl);
4853               warning_at (DECL_SOURCE_LOCATION (decl), 0, 
4854                           "  you can work around this by removing "
4855                           "the initializer");
4856             }
4857         }
4858     }
4859   else if (DECL_LANG_SPECIFIC (decl) && DECL_COMDAT (decl))
4860     /* Set it up again; we might have set DECL_INITIAL since the last
4861        time.  */
4862     comdat_linkage (decl);
4863 }
4864
4865 /* Issue an error message if DECL is an uninitialized const variable.  */
4866
4867 static void
4868 check_for_uninitialized_const_var (tree decl)
4869 {
4870   tree type = strip_array_types (TREE_TYPE (decl));
4871
4872   /* ``Unless explicitly declared extern, a const object does not have
4873      external linkage and must be initialized. ($8.4; $12.1)'' ARM
4874      7.1.6 */
4875   if (TREE_CODE (decl) == VAR_DECL
4876       && TREE_CODE (type) != REFERENCE_TYPE
4877       && CP_TYPE_CONST_P (type)
4878       && (!TYPE_NEEDS_CONSTRUCTING (type)
4879           || !type_has_user_provided_default_constructor (type))
4880       && !DECL_INITIAL (decl))
4881     {
4882       permerror (DECL_SOURCE_LOCATION (decl),
4883                  "uninitialized const %qD", decl);
4884
4885       if (CLASS_TYPE_P (type)
4886           && !type_has_user_provided_default_constructor (type))
4887         {
4888           tree defaulted_ctor;
4889
4890           inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
4891                   "%q#T has no user-provided default constructor", type);
4892           defaulted_ctor = in_class_defaulted_default_constructor (type);
4893           if (defaulted_ctor)
4894             inform (DECL_SOURCE_LOCATION (defaulted_ctor),
4895                     "constructor is not user-provided because it is "
4896                     "explicitly defaulted in the class body");
4897         }
4898     }
4899 }
4900 \f
4901 /* Structure holding the current initializer being processed by reshape_init.
4902    CUR is a pointer to the current element being processed, END is a pointer
4903    after the last element present in the initializer.  */
4904 typedef struct reshape_iterator_t
4905 {
4906   constructor_elt *cur;
4907   constructor_elt *end;
4908 } reshape_iter;
4909
4910 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
4911
4912 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
4913    returned is the next FIELD_DECL (possibly FIELD itself) that can be
4914    initialized.  If there are no more such fields, the return value
4915    will be NULL.  */
4916
4917 tree
4918 next_initializable_field (tree field)
4919 {
4920   while (field
4921          && (TREE_CODE (field) != FIELD_DECL
4922              || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
4923              || DECL_ARTIFICIAL (field)))
4924     field = DECL_CHAIN (field);
4925
4926   return field;
4927 }
4928
4929 /* Subroutine of reshape_init_array and reshape_init_vector, which does
4930    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
4931    INTEGER_CST representing the size of the array minus one (the maximum index),
4932    or NULL_TREE if the array was declared without specifying the size. D is
4933    the iterator within the constructor.  */
4934
4935 static tree
4936 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
4937                       tsubst_flags_t complain)
4938 {
4939   tree new_init;
4940   bool sized_array_p = (max_index != NULL_TREE);
4941   unsigned HOST_WIDE_INT max_index_cst = 0;
4942   unsigned HOST_WIDE_INT index;
4943
4944   /* The initializer for an array is always a CONSTRUCTOR.  */
4945   new_init = build_constructor (init_list_type_node, NULL);
4946
4947   if (sized_array_p)
4948     {
4949       /* Minus 1 is used for zero sized arrays.  */
4950       if (integer_all_onesp (max_index))
4951         return new_init;
4952
4953       if (host_integerp (max_index, 1))
4954         max_index_cst = tree_low_cst (max_index, 1);
4955       /* sizetype is sign extended, not zero extended.  */
4956       else
4957         max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index),
4958                                       1);
4959     }
4960
4961   /* Loop until there are no more initializers.  */
4962   for (index = 0;
4963        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
4964        ++index)
4965     {
4966       tree elt_init;
4967
4968       check_array_designated_initializer (d->cur);
4969       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
4970                                  complain);
4971       if (elt_init == error_mark_node)
4972         return error_mark_node;
4973       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
4974                               size_int (index), elt_init);
4975       if (!TREE_CONSTANT (elt_init))
4976         TREE_CONSTANT (new_init) = false;
4977     }
4978
4979   return new_init;
4980 }
4981
4982 /* Subroutine of reshape_init_r, processes the initializers for arrays.
4983    Parameters are the same of reshape_init_r.  */
4984
4985 static tree
4986 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
4987 {
4988   tree max_index = NULL_TREE;
4989
4990   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
4991
4992   if (TYPE_DOMAIN (type))
4993     max_index = array_type_nelts (type);
4994
4995   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
4996 }
4997
4998 /* Subroutine of reshape_init_r, processes the initializers for vectors.
4999    Parameters are the same of reshape_init_r.  */
5000
5001 static tree
5002 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5003 {
5004   tree max_index = NULL_TREE;
5005
5006   gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
5007
5008   if (COMPOUND_LITERAL_P (d->cur->value))
5009     {
5010       tree value = d->cur->value;
5011       if (!same_type_p (TREE_TYPE (value), type))
5012         {
5013           if (complain & tf_error)
5014             error ("invalid type %qT as initializer for a vector of type %qT",
5015                    TREE_TYPE (d->cur->value), type);
5016           value = error_mark_node;
5017         }
5018       ++d->cur;
5019       return value;
5020     }
5021
5022   /* For a vector, we initialize it as an array of the appropriate size.  */
5023   if (TREE_CODE (type) == VECTOR_TYPE)
5024     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5025
5026   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5027 }
5028
5029 /* Subroutine of reshape_init_r, processes the initializers for classes
5030    or union. Parameters are the same of reshape_init_r.  */
5031
5032 static tree
5033 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5034                     tsubst_flags_t complain)
5035 {
5036   tree field;
5037   tree new_init;
5038
5039   gcc_assert (CLASS_TYPE_P (type));
5040
5041   /* The initializer for a class is always a CONSTRUCTOR.  */
5042   new_init = build_constructor (init_list_type_node, NULL);
5043   field = next_initializable_field (TYPE_FIELDS (type));
5044
5045   if (!field)
5046     {
5047       /* [dcl.init.aggr]
5048
5049         An initializer for an aggregate member that is an
5050         empty class shall have the form of an empty
5051         initializer-list {}.  */
5052       if (!first_initializer_p)
5053         {
5054           if (complain & tf_error)
5055             error ("initializer for %qT must be brace-enclosed", type);
5056           return error_mark_node;
5057         }
5058       return new_init;
5059     }
5060
5061   /* Loop through the initializable fields, gathering initializers.  */
5062   while (d->cur != d->end)
5063     {
5064       tree field_init;
5065
5066       /* Handle designated initializers, as an extension.  */
5067       if (d->cur->index)
5068         {
5069           field = lookup_field_1 (type, d->cur->index, /*want_type=*/false);
5070
5071           if (!field || TREE_CODE (field) != FIELD_DECL)
5072             {
5073               if (complain & tf_error)
5074                 error ("%qT has no non-static data member named %qD", type,
5075                        d->cur->index);
5076               return error_mark_node;
5077             }
5078         }
5079
5080       /* If we processed all the member of the class, we are done.  */
5081       if (!field)
5082         break;
5083
5084       field_init = reshape_init_r (TREE_TYPE (field), d,
5085                                    /*first_initializer_p=*/false, complain);
5086       if (field_init == error_mark_node)
5087         return error_mark_node;
5088
5089       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5090
5091       /* [dcl.init.aggr]
5092
5093         When a union  is  initialized with a brace-enclosed
5094         initializer, the braces shall only contain an
5095         initializer for the first member of the union.  */
5096       if (TREE_CODE (type) == UNION_TYPE)
5097         break;
5098
5099       field = next_initializable_field (DECL_CHAIN (field));
5100     }
5101
5102   return new_init;
5103 }
5104
5105 /* Subroutine of reshape_init, which processes a single initializer (part of
5106    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5107    iterator within the CONSTRUCTOR which points to the initializer to process.
5108    FIRST_INITIALIZER_P is true if this is the first initializer of the
5109    outermost CONSTRUCTOR node.  */
5110
5111 static tree
5112 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5113                 tsubst_flags_t complain)
5114 {
5115   tree init = d->cur->value;
5116
5117   if (error_operand_p (init))
5118     return error_mark_node;
5119
5120   if (TREE_CODE (type) == COMPLEX_TYPE)
5121     {
5122       /* A complex type can be initialized from one or two initializers,
5123          but braces are not elided.  */
5124       d->cur++;
5125       if (BRACE_ENCLOSED_INITIALIZER_P (init))
5126         {
5127           if (CONSTRUCTOR_NELTS (init) > 2)
5128             {
5129               if (complain & tf_error)
5130                 error ("too many initializers for %qT", type);
5131               else
5132                 return error_mark_node;
5133             }
5134         }
5135       else if (first_initializer_p && d->cur != d->end)
5136         {
5137           VEC(constructor_elt, gc) *v = 0;
5138           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5139           CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5140           d->cur++;
5141           init = build_constructor (init_list_type_node, v);
5142         }
5143       return init;
5144     }
5145
5146   /* A non-aggregate type is always initialized with a single
5147      initializer.  */
5148   if (!CP_AGGREGATE_TYPE_P (type))
5149     {
5150       /* It is invalid to initialize a non-aggregate type with a
5151          brace-enclosed initializer before C++0x.
5152          We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5153          of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5154          a CONSTRUCTOR (with a record type).  */
5155       if (TREE_CODE (init) == CONSTRUCTOR
5156           && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
5157         {
5158           if (SCALAR_TYPE_P (type))
5159             {
5160               if (complain & tf_error)
5161                 error ("braces around scalar initializer for type %qT", type);
5162               init = error_mark_node;
5163             }
5164           else
5165             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5166         }
5167
5168       d->cur++;
5169       return init;
5170     }
5171
5172   /* [dcl.init.aggr]
5173
5174      All implicit type conversions (clause _conv_) are considered when
5175      initializing the aggregate member with an initializer from an
5176      initializer-list.  If the initializer can initialize a member,
5177      the member is initialized.  Otherwise, if the member is itself a
5178      non-empty subaggregate, brace elision is assumed and the
5179      initializer is considered for the initialization of the first
5180      member of the subaggregate.  */
5181   if (TREE_CODE (init) != CONSTRUCTOR
5182       /* But don't try this for the first initializer, since that would be
5183          looking through the outermost braces; A a2 = { a1 }; is not a
5184          valid aggregate initialization.  */
5185       && !first_initializer_p
5186       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5187           || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL)))
5188     {
5189       d->cur++;
5190       return init;
5191     }
5192
5193   /* [dcl.init.string]
5194
5195       A char array (whether plain char, signed char, or unsigned char)
5196       can be initialized by a string-literal (optionally enclosed in
5197       braces); a wchar_t array can be initialized by a wide
5198       string-literal (optionally enclosed in braces).  */
5199   if (TREE_CODE (type) == ARRAY_TYPE
5200       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5201     {
5202       tree str_init = init;
5203
5204       /* Strip one level of braces if and only if they enclose a single
5205          element (as allowed by [dcl.init.string]).  */
5206       if (!first_initializer_p
5207           && TREE_CODE (str_init) == CONSTRUCTOR
5208           && VEC_length (constructor_elt, CONSTRUCTOR_ELTS (str_init)) == 1)
5209         {
5210           str_init = VEC_index (constructor_elt,
5211                                 CONSTRUCTOR_ELTS (str_init), 0)->value;
5212         }
5213
5214       /* If it's a string literal, then it's the initializer for the array
5215          as a whole. Otherwise, continue with normal initialization for
5216          array types (one value per array element).  */
5217       if (TREE_CODE (str_init) == STRING_CST)
5218         {
5219           d->cur++;
5220           return str_init;
5221         }
5222     }
5223
5224   /* The following cases are about aggregates. If we are not within a full
5225      initializer already, and there is not a CONSTRUCTOR, it means that there
5226      is a missing set of braces (that is, we are processing the case for
5227      which reshape_init exists).  */
5228   if (!first_initializer_p)
5229     {
5230       if (TREE_CODE (init) == CONSTRUCTOR)
5231         {
5232           if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5233             /* There is no need to reshape pointer-to-member function
5234                initializers, as they are always constructed correctly
5235                by the front end.  */
5236            ;
5237           else if (COMPOUND_LITERAL_P (init))
5238           /* For a nested compound literal, there is no need to reshape since
5239              brace elision is not allowed. Even if we decided to allow it,
5240              we should add a call to reshape_init in finish_compound_literal,
5241              before calling digest_init, so changing this code would still
5242              not be necessary.  */
5243             gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5244           else
5245             {
5246               ++d->cur;
5247               gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5248               return reshape_init (type, init, complain);
5249             }
5250         }
5251
5252       warning (OPT_Wmissing_braces, "missing braces around initializer for %qT",
5253                type);
5254     }
5255
5256   /* Dispatch to specialized routines.  */
5257   if (CLASS_TYPE_P (type))
5258     return reshape_init_class (type, d, first_initializer_p, complain);
5259   else if (TREE_CODE (type) == ARRAY_TYPE)
5260     return reshape_init_array (type, d, complain);
5261   else if (TREE_CODE (type) == VECTOR_TYPE)
5262     return reshape_init_vector (type, d, complain);
5263   else
5264     gcc_unreachable();
5265 }
5266
5267 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5268    brace-enclosed aggregate initializer.
5269
5270    INIT is the CONSTRUCTOR containing the list of initializers describing
5271    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5272    It may not presently match the shape of the TYPE; for example:
5273
5274      struct S { int a; int b; };
5275      struct S a[] = { 1, 2, 3, 4 };
5276
5277    Here INIT will hold a VEC of four elements, rather than a
5278    VEC of two elements, each itself a VEC of two elements.  This
5279    routine transforms INIT from the former form into the latter.  The
5280    revised CONSTRUCTOR node is returned.  */
5281
5282 tree
5283 reshape_init (tree type, tree init, tsubst_flags_t complain)
5284 {
5285   VEC(constructor_elt, gc) *v;
5286   reshape_iter d;
5287   tree new_init;
5288
5289   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5290
5291   v = CONSTRUCTOR_ELTS (init);
5292
5293   /* An empty constructor does not need reshaping, and it is always a valid
5294      initializer.  */
5295   if (VEC_empty (constructor_elt, v))
5296     return init;
5297
5298   /* Recurse on this CONSTRUCTOR.  */
5299   d.cur = VEC_index (constructor_elt, v, 0);
5300   d.end = d.cur + VEC_length (constructor_elt, v);
5301
5302   new_init = reshape_init_r (type, &d, true, complain);
5303   if (new_init == error_mark_node)
5304     return error_mark_node;
5305
5306   /* Make sure all the element of the constructor were used. Otherwise,
5307      issue an error about exceeding initializers.  */
5308   if (d.cur != d.end)
5309     {
5310       if (complain & tf_error)
5311         error ("too many initializers for %qT", type);
5312       else
5313         return error_mark_node;
5314     }
5315
5316   return new_init;
5317 }
5318
5319 /* Verify array initializer.  Returns true if errors have been reported.  */
5320
5321 bool
5322 check_array_initializer (tree decl, tree type, tree init)
5323 {
5324   tree element_type = TREE_TYPE (type);
5325
5326   /* The array type itself need not be complete, because the
5327      initializer may tell us how many elements are in the array.
5328      But, the elements of the array must be complete.  */
5329   if (!COMPLETE_TYPE_P (complete_type (element_type)))
5330     {
5331       if (decl)
5332         error ("elements of array %q#D have incomplete type", decl);
5333       else
5334         error ("elements of array %q#T have incomplete type", type);
5335       return true;
5336     }
5337   /* It is not valid to initialize a VLA.  */
5338   if (init
5339       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
5340           || !TREE_CONSTANT (TYPE_SIZE (element_type))))
5341     {
5342       if (decl)
5343         error ("variable-sized object %qD may not be initialized", decl);
5344       else
5345         error ("variable-sized compound literal");
5346       return true;
5347     }
5348   return false;
5349 }
5350
5351 /* Subroutine of check_initializer; args are passed down from that function.
5352    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
5353
5354 static tree
5355 build_aggr_init_full_exprs (tree decl, tree init, int flags)
5356      
5357 {
5358   int saved_stmts_are_full_exprs_p = 0;
5359   if (building_stmt_list_p ())
5360     {
5361       saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5362       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5363     }
5364   init = build_aggr_init (decl, init, flags, tf_warning_or_error);
5365   if (building_stmt_list_p ())
5366     current_stmt_tree ()->stmts_are_full_exprs_p =
5367       saved_stmts_are_full_exprs_p;
5368   return init;
5369 }
5370
5371 /* Verify INIT (the initializer for DECL), and record the
5372    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
5373    grok_reference_init.
5374
5375    If the return value is non-NULL, it is an expression that must be
5376    evaluated dynamically to initialize DECL.  */
5377
5378 static tree
5379 check_initializer (tree decl, tree init, int flags, tree *cleanup)
5380 {
5381   tree type = TREE_TYPE (decl);
5382   tree init_code = NULL;
5383   tree extra_init = NULL_TREE;
5384   tree core_type;
5385
5386   /* Things that are going to be initialized need to have complete
5387      type.  */
5388   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
5389
5390   if (DECL_HAS_VALUE_EXPR_P (decl))
5391     {
5392       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
5393          it doesn't have storage to be initialized.  */
5394       gcc_assert (init == NULL_TREE);
5395       return NULL_TREE;
5396     }
5397
5398   if (type == error_mark_node)
5399     /* We will have already complained.  */
5400     return NULL_TREE;
5401
5402   if (TREE_CODE (type) == ARRAY_TYPE)
5403     {
5404       if (check_array_initializer (decl, type, init))
5405         return NULL_TREE;
5406     }
5407   else if (!COMPLETE_TYPE_P (type))
5408     {
5409       error ("%qD has incomplete type", decl);
5410       TREE_TYPE (decl) = error_mark_node;
5411       return NULL_TREE;
5412     }
5413   else
5414     /* There is no way to make a variable-sized class type in GNU C++.  */
5415     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
5416
5417   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5418     {
5419       int init_len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
5420       if (SCALAR_TYPE_P (type))
5421         {
5422           if (init_len == 0)
5423             {
5424               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5425               init = build_zero_init (type, NULL_TREE, false);
5426             }
5427           else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
5428             {
5429               error ("scalar object %qD requires one element in initializer",
5430                      decl);
5431               TREE_TYPE (decl) = error_mark_node;
5432               return NULL_TREE;
5433             }
5434         }
5435     }
5436
5437   if (TREE_CODE (decl) == CONST_DECL)
5438     {
5439       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
5440
5441       DECL_INITIAL (decl) = init;
5442
5443       gcc_assert (init != NULL_TREE);
5444       init = NULL_TREE;
5445     }
5446   else if (!init && DECL_REALLY_EXTERN (decl))
5447     ;
5448   else if (TREE_CODE (type) == REFERENCE_TYPE)
5449     init = grok_reference_init (decl, type, init, cleanup);
5450   else if (init || type_build_ctor_call (type))
5451     {
5452       if (!init)
5453         check_for_uninitialized_const_var (decl);
5454       /* Do not reshape constructors of vectors (they don't need to be
5455          reshaped.  */
5456       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
5457         {
5458           if (is_std_init_list (type))
5459             init = build_init_list_var_init (decl, type, init,
5460                                              &extra_init, cleanup);
5461           else if (TYPE_NON_AGGREGATE_CLASS (type))
5462             {
5463               /* Don't reshape if the class has constructors.  */
5464               if (cxx_dialect == cxx98)
5465                 error ("in C++98 %qD must be initialized by constructor, "
5466                        "not by %<{...}%>",
5467                        decl);
5468             }
5469           else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
5470             {
5471               error ("opaque vector types cannot be initialized");
5472               init = error_mark_node;
5473             }
5474           else
5475             {
5476               init = reshape_init (type, init, tf_warning_or_error);
5477               if (cxx_dialect >= cxx0x && SCALAR_TYPE_P (type))
5478                 check_narrowing (type, init);
5479             }
5480         }
5481
5482       /* If DECL has an array type without a specific bound, deduce the
5483          array size from the initializer.  */
5484       maybe_deduce_size_from_array_init (decl, init);
5485       type = TREE_TYPE (decl);
5486       if (type == error_mark_node)
5487         return NULL_TREE;
5488
5489       if (type_build_ctor_call (type)
5490           || (CLASS_TYPE_P (type)
5491               && !(init && BRACE_ENCLOSED_INITIALIZER_P (init))))
5492         {
5493           init_code = build_aggr_init_full_exprs (decl, init, flags);
5494
5495           /* If this is a constexpr initializer, expand_default_init will
5496              have returned an INIT_EXPR rather than a CALL_EXPR.  In that
5497              case, pull the initializer back out and pass it down into
5498              store_init_value.  */
5499           while (TREE_CODE (init_code) == EXPR_STMT
5500                  || TREE_CODE (init_code) == CONVERT_EXPR)
5501             init_code = TREE_OPERAND (init_code, 0);
5502           if (TREE_CODE (init_code) == INIT_EXPR)
5503             {
5504               init = TREE_OPERAND (init_code, 1);
5505               init_code = NULL_TREE;
5506               /* Don't call digest_init; it's unnecessary and will complain
5507                  about aggregate initialization of non-aggregate classes.  */
5508               flags |= LOOKUP_ALREADY_DIGESTED;
5509             }
5510           else if (DECL_DECLARED_CONSTEXPR_P (decl))
5511             {
5512               /* Declared constexpr, but no suitable initializer; massage
5513                  init appropriately so we can pass it into store_init_value
5514                  for the error.  */
5515               if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
5516                 init = finish_compound_literal (type, init,
5517                                                 tf_warning_or_error);
5518               else if (CLASS_TYPE_P (type)
5519                        && (!init || TREE_CODE (init) == TREE_LIST))
5520                 {
5521                   init = build_functional_cast (type, init, tf_none);
5522                   if (init != error_mark_node)
5523                     TARGET_EXPR_DIRECT_INIT_P (init) = true;
5524                 }
5525               init_code = NULL_TREE;
5526             }
5527           else
5528             init = NULL_TREE;
5529         }
5530
5531       if (init && TREE_CODE (init) != TREE_VEC)
5532         {
5533           init_code = store_init_value (decl, init, flags);
5534           if (pedantic && TREE_CODE (type) == ARRAY_TYPE
5535               && DECL_INITIAL (decl)
5536               && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
5537               && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
5538             warning (0, "array %qD initialized by parenthesized string literal %qE",
5539                      decl, DECL_INITIAL (decl));
5540           init = NULL;
5541         }
5542     }
5543   else
5544     {
5545       if (CLASS_TYPE_P (core_type = strip_array_types (type))
5546           && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
5547               || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
5548         diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
5549                                                   /*complain=*/true);
5550
5551       check_for_uninitialized_const_var (decl);
5552     }
5553
5554   if (init && init != error_mark_node)
5555     init_code = build2 (INIT_EXPR, type, decl, init);
5556
5557   if (extra_init)
5558     init_code = add_stmt_to_compound (extra_init, init_code);
5559
5560   if (init_code && DECL_IN_AGGR_P (decl))
5561     {
5562       static int explained = 0;
5563
5564       if (cxx_dialect < cxx0x)
5565         error ("initializer invalid for static member with constructor");
5566       else
5567         error ("non-constant in-class initialization invalid for static "
5568                "member %qD", decl);
5569       if (!explained)
5570         {
5571           error ("(an out of class initialization is required)");
5572           explained = 1;
5573         }
5574     }
5575
5576   return init_code;
5577 }
5578
5579 /* If DECL is not a local variable, give it RTL.  */
5580
5581 static void
5582 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
5583 {
5584   int toplev = toplevel_bindings_p ();
5585   int defer_p;
5586   const char *filename;
5587
5588   /* Set the DECL_ASSEMBLER_NAME for the object.  */
5589   if (asmspec)
5590     {
5591       /* The `register' keyword, when used together with an
5592          asm-specification, indicates that the variable should be
5593          placed in a particular register.  */
5594       if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
5595         {
5596           set_user_assembler_name (decl, asmspec);
5597           DECL_HARD_REGISTER (decl) = 1;
5598         }
5599       else
5600         {
5601           if (TREE_CODE (decl) == FUNCTION_DECL
5602               && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
5603             set_builtin_user_assembler_name (decl, asmspec);
5604           set_user_assembler_name (decl, asmspec);
5605         }
5606     }
5607
5608   /* Handle non-variables up front.  */
5609   if (TREE_CODE (decl) != VAR_DECL)
5610     {
5611       rest_of_decl_compilation (decl, toplev, at_eof);
5612       return;
5613     }
5614
5615   /* If we see a class member here, it should be a static data
5616      member.  */
5617   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
5618     {
5619       gcc_assert (TREE_STATIC (decl));
5620       /* An in-class declaration of a static data member should be
5621          external; it is only a declaration, and not a definition.  */
5622       if (init == NULL_TREE)
5623         gcc_assert (DECL_EXTERNAL (decl) || !TREE_PUBLIC (decl));
5624     }
5625
5626   /* We don't create any RTL for local variables.  */
5627   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
5628     return;
5629
5630   /* We defer emission of local statics until the corresponding
5631      DECL_EXPR is expanded.  */
5632   defer_p = DECL_FUNCTION_SCOPE_P (decl) || DECL_VIRTUAL_P (decl);
5633
5634   /* We try to defer namespace-scope static constants so that they are
5635      not emitted into the object file unnecessarily.  */
5636   filename = input_filename;
5637   if (!DECL_VIRTUAL_P (decl)
5638       && TREE_READONLY (decl)
5639       && DECL_INITIAL (decl) != NULL_TREE
5640       && DECL_INITIAL (decl) != error_mark_node
5641       && filename != NULL
5642       && ! EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))
5643       && toplev
5644       && !TREE_PUBLIC (decl))
5645     {
5646       /* Fool with the linkage of static consts according to #pragma
5647          interface.  */
5648       struct c_fileinfo *finfo = get_fileinfo (filename);
5649       if (!finfo->interface_unknown && !TREE_PUBLIC (decl))
5650         {
5651           TREE_PUBLIC (decl) = 1;
5652           DECL_EXTERNAL (decl) = finfo->interface_only;
5653         }
5654
5655       defer_p = 1;
5656     }
5657   /* Likewise for template instantiations.  */
5658   else if (DECL_LANG_SPECIFIC (decl)
5659            && DECL_IMPLICIT_INSTANTIATION (decl))
5660     defer_p = 1;
5661
5662   /* If we're not deferring, go ahead and assemble the variable.  */
5663   if (!defer_p)
5664     rest_of_decl_compilation (decl, toplev, at_eof);
5665 }
5666
5667 /* walk_tree helper for wrap_temporary_cleanups, below.  */
5668
5669 static tree
5670 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
5671 {
5672   if (TYPE_P (*stmt_p))
5673     {
5674       *walk_subtrees = 0;
5675       return NULL_TREE;
5676     }
5677
5678   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
5679     {
5680       tree guard = (tree)data;
5681       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
5682
5683       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
5684       /* Tell honor_protect_cleanup_actions to handle this as a separate
5685          cleanup.  */
5686       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
5687  
5688       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
5689     }
5690
5691   return NULL_TREE;
5692 }
5693
5694 /* We're initializing a local variable which has a cleanup GUARD.  If there
5695    are any temporaries used in the initializer INIT of this variable, we
5696    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
5697    variable will be cleaned up properly if one of them throws.
5698
5699    Unfortunately, there's no way to express this properly in terms of
5700    nesting, as the regions for the temporaries overlap the region for the
5701    variable itself; if there are two temporaries, the variable needs to be
5702    the first thing destroyed if either of them throws.  However, we only
5703    want to run the variable's cleanup if it actually got constructed.  So
5704    we need to guard the temporary cleanups with the variable's cleanup if
5705    they are run on the normal path, but not if they are run on the
5706    exceptional path.  We implement this by telling
5707    honor_protect_cleanup_actions to strip the variable cleanup from the
5708    exceptional path.  */
5709
5710 static void
5711 wrap_temporary_cleanups (tree init, tree guard)
5712 {
5713   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
5714 }
5715
5716 /* Generate code to initialize DECL (a local variable).  */
5717
5718 static void
5719 initialize_local_var (tree decl, tree init)
5720 {
5721   tree type = TREE_TYPE (decl);
5722   tree cleanup;
5723   int already_used;
5724
5725   gcc_assert (TREE_CODE (decl) == VAR_DECL
5726               || TREE_CODE (decl) == RESULT_DECL);
5727   gcc_assert (!TREE_STATIC (decl));
5728
5729   if (DECL_SIZE (decl) == NULL_TREE)
5730     {
5731       /* If we used it already as memory, it must stay in memory.  */
5732       DECL_INITIAL (decl) = NULL_TREE;
5733       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
5734       return;
5735     }
5736
5737   if (type == error_mark_node)
5738     return;
5739
5740   /* Compute and store the initial value.  */
5741   already_used = TREE_USED (decl) || TREE_USED (type);
5742   if (TREE_USED (type))
5743     DECL_READ_P (decl) = 1;
5744
5745   /* Generate a cleanup, if necessary.  */
5746   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
5747
5748   /* Perform the initialization.  */
5749   if (init)
5750     {
5751       if (TREE_CODE (init) == INIT_EXPR
5752           && !TREE_SIDE_EFFECTS (TREE_OPERAND (init, 1)))
5753         {
5754           /* Stick simple initializers in DECL_INITIAL so that
5755              -Wno-init-self works (c++/34772).  */
5756           gcc_assert (TREE_OPERAND (init, 0) == decl);
5757           DECL_INITIAL (decl) = TREE_OPERAND (init, 1);
5758         }
5759       else
5760         {
5761           int saved_stmts_are_full_exprs_p;
5762
5763           /* If we're only initializing a single object, guard the
5764              destructors of any temporaries used in its initializer with
5765              its destructor.  This isn't right for arrays because each
5766              element initialization is a full-expression.  */
5767           if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
5768             wrap_temporary_cleanups (init, cleanup);
5769
5770           gcc_assert (building_stmt_list_p ());
5771           saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
5772           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
5773           finish_expr_stmt (init);
5774           current_stmt_tree ()->stmts_are_full_exprs_p =
5775             saved_stmts_are_full_exprs_p;
5776         }
5777     }
5778
5779   /* Set this to 0 so we can tell whether an aggregate which was
5780      initialized was ever used.  Don't do this if it has a
5781      destructor, so we don't complain about the 'resource
5782      allocation is initialization' idiom.  Now set
5783      attribute((unused)) on types so decls of that type will be
5784      marked used. (see TREE_USED, above.)  */
5785   if (TYPE_NEEDS_CONSTRUCTING (type)
5786       && ! already_used
5787       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
5788       && DECL_NAME (decl))
5789     TREE_USED (decl) = 0;
5790   else if (already_used)
5791     TREE_USED (decl) = 1;
5792
5793   if (cleanup)
5794     finish_decl_cleanup (decl, cleanup);
5795 }
5796
5797 /* DECL is a VAR_DECL for a compiler-generated variable with static
5798    storage duration (like a virtual table) whose initializer is a
5799    compile-time constant.  Initialize the variable and provide it to the
5800    back end.  */
5801
5802 void
5803 initialize_artificial_var (tree decl, VEC(constructor_elt,gc) *v)
5804 {
5805   tree init;
5806   gcc_assert (DECL_ARTIFICIAL (decl));
5807   init = build_constructor (TREE_TYPE (decl), v);
5808   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
5809   DECL_INITIAL (decl) = init;
5810   DECL_INITIALIZED_P (decl) = 1;
5811   determine_visibility (decl);
5812   layout_var_decl (decl);
5813   maybe_commonize_var (decl);
5814   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
5815 }
5816
5817 /* INIT is the initializer for a variable, as represented by the
5818    parser.  Returns true iff INIT is type-dependent.  */
5819
5820 static bool
5821 type_dependent_init_p (tree init)
5822 {
5823   if (TREE_CODE (init) == TREE_LIST)
5824     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5825     return any_type_dependent_elements_p (init);
5826   else if (TREE_CODE (init) == CONSTRUCTOR)
5827   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5828     {
5829       VEC(constructor_elt, gc) *elts;
5830       size_t nelts;
5831       size_t i;
5832
5833       elts = CONSTRUCTOR_ELTS (init);
5834       nelts = VEC_length (constructor_elt, elts);
5835       for (i = 0; i < nelts; ++i)
5836         if (type_dependent_init_p (VEC_index (constructor_elt,
5837                                               elts, i)->value))
5838           return true;
5839     }
5840   else
5841     /* It must be a simple expression, e.g., int i = 3;  */
5842     return type_dependent_expression_p (init);
5843
5844   return false;
5845 }
5846
5847 /* INIT is the initializer for a variable, as represented by the
5848    parser.  Returns true iff INIT is value-dependent.  */
5849
5850 static bool
5851 value_dependent_init_p (tree init)
5852 {
5853   if (TREE_CODE (init) == TREE_LIST)
5854     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
5855     return any_value_dependent_elements_p (init);
5856   else if (TREE_CODE (init) == CONSTRUCTOR)
5857   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
5858     {
5859       VEC(constructor_elt, gc) *elts;
5860       size_t nelts;
5861       size_t i;
5862
5863       elts = CONSTRUCTOR_ELTS (init);
5864       nelts = VEC_length (constructor_elt, elts);
5865       for (i = 0; i < nelts; ++i)
5866         if (value_dependent_init_p (VEC_index (constructor_elt,
5867                                                elts, i)->value))
5868           return true;
5869     }
5870   else
5871     /* It must be a simple expression, e.g., int i = 3;  */
5872     return value_dependent_expression_p (init);
5873   
5874   return false;
5875 }
5876
5877 /* Finish processing of a declaration;
5878    install its line number and initial value.
5879    If the length of an array type is not known before,
5880    it must be determined now, from the initial value, or it is an error.
5881
5882    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
5883    true, then INIT is an integral constant expression.
5884
5885    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
5886    if the (init) syntax was used.  */
5887
5888 void
5889 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
5890                 tree asmspec_tree, int flags)
5891 {
5892   tree type;
5893   tree cleanup;
5894   const char *asmspec = NULL;
5895   int was_readonly = 0;
5896   bool var_definition_p = false;
5897   tree auto_node;
5898
5899   if (decl == error_mark_node)
5900     return;
5901   else if (! decl)
5902     {
5903       if (init)
5904         error ("assignment (not initialization) in declaration");
5905       return;
5906     }
5907
5908   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
5909   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
5910   gcc_assert (TREE_CODE (decl) != PARM_DECL);
5911
5912   type = TREE_TYPE (decl);
5913   if (type == error_mark_node)
5914     return;
5915
5916   /* Assume no cleanup is required.  */
5917   cleanup = NULL_TREE;
5918
5919   /* If a name was specified, get the string.  */
5920   if (global_scope_p (current_binding_level))
5921     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
5922   if (asmspec_tree && asmspec_tree != error_mark_node)
5923     asmspec = TREE_STRING_POINTER (asmspec_tree);
5924
5925   if (current_class_type
5926       && CP_DECL_CONTEXT (decl) == current_class_type
5927       && TYPE_BEING_DEFINED (current_class_type)
5928       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
5929       && (DECL_INITIAL (decl) || init))
5930     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
5931
5932   auto_node = type_uses_auto (type);
5933   if (auto_node)
5934     {
5935       tree d_init;
5936       if (init == NULL_TREE)
5937         {
5938           error ("declaration of %q#D has no initializer", decl);
5939           TREE_TYPE (decl) = error_mark_node;
5940           return;
5941         }
5942       d_init = init;
5943       if (TREE_CODE (d_init) == TREE_LIST)
5944         d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
5945                                                   tf_warning_or_error);
5946       d_init = resolve_nondeduced_context (d_init);
5947       if (describable_type (d_init))
5948         {
5949           type = TREE_TYPE (decl) = do_auto_deduction (type, d_init,
5950                                                        auto_node);
5951           if (type == error_mark_node)
5952             return;
5953         }
5954     }
5955
5956   if (!ensure_literal_type_for_constexpr_object (decl))
5957     DECL_DECLARED_CONSTEXPR_P (decl) = 0;
5958
5959   if (TREE_CODE (decl) == VAR_DECL
5960       && DECL_CLASS_SCOPE_P (decl)
5961       && DECL_INITIALIZED_IN_CLASS_P (decl))
5962     check_static_variable_definition (decl, type);
5963
5964   if (init && TREE_CODE (decl) == FUNCTION_DECL)
5965     {
5966       tree clone;
5967       if (init == ridpointers[(int)RID_DELETE])
5968         {
5969           /* FIXME check this is 1st decl.  */
5970           DECL_DELETED_FN (decl) = 1;
5971           DECL_DECLARED_INLINE_P (decl) = 1;
5972           DECL_INITIAL (decl) = error_mark_node;
5973           FOR_EACH_CLONE (clone, decl)
5974             {
5975               DECL_DELETED_FN (clone) = 1;
5976               DECL_DECLARED_INLINE_P (clone) = 1;
5977               DECL_INITIAL (clone) = error_mark_node;
5978             }
5979           init = NULL_TREE;
5980         }
5981       else if (init == ridpointers[(int)RID_DEFAULT])
5982         {
5983           if (defaultable_fn_check (decl))
5984             DECL_DEFAULTED_FN (decl) = 1;
5985           else
5986             DECL_INITIAL (decl) = NULL_TREE;
5987         }
5988     }
5989
5990   if (init && TREE_CODE (decl) == VAR_DECL)
5991     {
5992       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
5993       if (init_const_expr_p)
5994         {
5995           /* Set these flags now for templates.  We'll update the flags in
5996              store_init_value for instantiations.  */
5997           DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
5998           if (decl_maybe_constant_var_p (decl))
5999             TREE_CONSTANT (decl) = 1;
6000         }
6001     }
6002
6003   if (processing_template_decl)
6004     {
6005       bool type_dependent_p;
6006
6007       /* Add this declaration to the statement-tree.  */
6008       if (at_function_scope_p ())
6009         add_decl_expr (decl);
6010
6011       type_dependent_p = dependent_type_p (type);
6012
6013       if (check_for_bare_parameter_packs (init))
6014         {
6015           init = NULL_TREE;
6016           DECL_INITIAL (decl) = NULL_TREE;
6017         }
6018
6019       /* Generally, initializers in templates are expanded when the
6020          template is instantiated.  But, if DECL is a variable constant
6021          then it can be used in future constant expressions, so its value
6022          must be available. */
6023
6024       if (TREE_CODE (decl) != VAR_DECL || dependent_type_p (type))
6025         /* We can't do anything if the decl has dependent type.  */;
6026       else if (init
6027                && init_const_expr_p
6028                && !type_dependent_p
6029                && decl_maybe_constant_var_p (decl)
6030                && !type_dependent_init_p (init)
6031                && !value_dependent_init_p (init))
6032         {
6033           /* This variable seems to be a non-dependent constant, so process
6034              its initializer.  If check_initializer returns non-null the
6035              initialization wasn't constant after all.  */
6036           tree init_code = check_initializer (decl, init, flags, &cleanup);
6037           if (init_code == NULL_TREE)
6038             init = NULL_TREE;
6039         }
6040       else if (!DECL_PRETTY_FUNCTION_P (decl))
6041         /* Deduce array size even if the initializer is dependent.  */
6042         maybe_deduce_size_from_array_init (decl, init);
6043
6044       if (init)
6045         DECL_INITIAL (decl) = init;
6046       return;
6047     }
6048
6049   /* Take care of TYPE_DECLs up front.  */
6050   if (TREE_CODE (decl) == TYPE_DECL)
6051     {
6052       if (type != error_mark_node
6053           && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6054         {
6055           if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6056             warning (0, "shadowing previous type declaration of %q#D", decl);
6057           set_identifier_type_value (DECL_NAME (decl), decl);
6058         }
6059
6060       /* If we have installed this as the canonical typedef for this
6061          type, and that type has not been defined yet, delay emitting
6062          the debug information for it, as we will emit it later.  */
6063       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6064           && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6065         TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6066
6067       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6068                                 at_eof);
6069       return;
6070     }
6071
6072   /* A reference will be modified here, as it is initialized.  */
6073   if (! DECL_EXTERNAL (decl)
6074       && TREE_READONLY (decl)
6075       && TREE_CODE (type) == REFERENCE_TYPE)
6076     {
6077       was_readonly = 1;
6078       TREE_READONLY (decl) = 0;
6079     }
6080
6081   if (TREE_CODE (decl) == VAR_DECL)
6082     {
6083       /* Only variables with trivial initialization and destruction can
6084          have thread-local storage.  */
6085       if (DECL_THREAD_LOCAL_P (decl)
6086           && (type_has_nontrivial_default_init (TREE_TYPE (decl))
6087               || TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
6088         error ("%qD cannot be thread-local because it has non-trivial "
6089                "type %qT", decl, TREE_TYPE (decl));
6090       /* If this is a local variable that will need a mangled name,
6091          register it now.  We must do this before processing the
6092          initializer for the variable, since the initialization might
6093          require a guard variable, and since the mangled name of the
6094          guard variable will depend on the mangled name of this
6095          variable.  */
6096       if (DECL_FUNCTION_SCOPE_P (decl)
6097           && TREE_STATIC (decl)
6098           && !DECL_ARTIFICIAL (decl))
6099         {
6100           push_local_name (decl);
6101           if (DECL_CONSTRUCTOR_P (current_function_decl)
6102               || DECL_DESTRUCTOR_P (current_function_decl))
6103             /* Normally local_decls is populated during GIMPLE lowering,
6104                but [cd]tors are never actually compiled directly.  We need
6105                to put statics on the list so we can deal with the label
6106                address extension.  */
6107             add_local_decl (cfun, decl);
6108         }
6109
6110       /* Convert the initializer to the type of DECL, if we have not
6111          already initialized DECL.  */
6112       if (!DECL_INITIALIZED_P (decl)
6113           /* If !DECL_EXTERNAL then DECL is being defined.  In the
6114              case of a static data member initialized inside the
6115              class-specifier, there can be an initializer even if DECL
6116              is *not* defined.  */
6117           && (!DECL_EXTERNAL (decl) || init))
6118         {
6119           if (TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6120             {
6121               tree jclass
6122                 = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
6123               /* Allow libjava/prims.cc define primitive classes.  */
6124               if (init != NULL_TREE
6125                   || jclass == NULL_TREE
6126                   || TREE_CODE (jclass) != TYPE_DECL
6127                   || !POINTER_TYPE_P (TREE_TYPE (jclass))
6128                   || !same_type_ignoring_top_level_qualifiers_p
6129                                         (type, TREE_TYPE (TREE_TYPE (jclass))))
6130                 error ("Java object %qD not allocated with %<new%>", decl);
6131               init = NULL_TREE;
6132             }
6133           init = check_initializer (decl, init, flags, &cleanup);
6134           /* Thread-local storage cannot be dynamically initialized.  */
6135           if (DECL_THREAD_LOCAL_P (decl) && init)
6136             {
6137               error ("%qD is thread-local and so cannot be dynamically "
6138                      "initialized", decl);
6139               init = NULL_TREE;
6140             }
6141
6142           /* Check that the initializer for a static data member was a
6143              constant.  Although we check in the parser that the
6144              initializer is an integral constant expression, we do not
6145              simplify division-by-zero at the point at which it
6146              occurs.  Therefore, in:
6147
6148                struct S { static const int i = 7 / 0; };
6149
6150              we issue an error at this point.  It would
6151              probably be better to forbid division by zero in
6152              integral constant expressions.  */
6153           if (DECL_EXTERNAL (decl) && init)
6154             {
6155               error ("%qD cannot be initialized by a non-constant expression"
6156                      " when being declared", decl);
6157               DECL_INITIALIZED_IN_CLASS_P (decl) = 0;
6158               init = NULL_TREE;
6159             }
6160
6161           /* Handle:
6162
6163              [dcl.init]
6164
6165              The memory occupied by any object of static storage
6166              duration is zero-initialized at program startup before
6167              any other initialization takes place.
6168
6169              We cannot create an appropriate initializer until after
6170              the type of DECL is finalized.  If DECL_INITIAL is set,
6171              then the DECL is statically initialized, and any
6172              necessary zero-initialization has already been performed.  */
6173           if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6174             DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6175                                                    /*nelts=*/NULL_TREE,
6176                                                    /*static_storage_p=*/true);
6177           /* Remember that the initialization for this variable has
6178              taken place.  */
6179           DECL_INITIALIZED_P (decl) = 1;
6180           /* This declaration is the definition of this variable,
6181              unless we are initializing a static data member within
6182              the class specifier.  */
6183           if (!DECL_EXTERNAL (decl))
6184             var_definition_p = true;
6185         }
6186       /* If the variable has an array type, lay out the type, even if
6187          there is no initializer.  It is valid to index through the
6188          array, and we must get TYPE_ALIGN set correctly on the array
6189          type.  */
6190       else if (TREE_CODE (type) == ARRAY_TYPE)
6191         layout_type (type);
6192
6193       if (TREE_STATIC (decl)
6194           && !at_function_scope_p ()
6195           && current_function_decl == NULL)
6196         /* So decl is a global variable or a static member of a
6197            non local class. Record the types it uses
6198            so that we can decide later to emit debug info for them.  */
6199         record_types_used_by_current_var_decl (decl);
6200     }
6201   else if (TREE_CODE (decl) == FIELD_DECL
6202            && TYPE_FOR_JAVA (type) && MAYBE_CLASS_TYPE_P (type))
6203     error ("non-static data member %qD has Java class type", decl);
6204
6205   /* Add this declaration to the statement-tree.  This needs to happen
6206      after the call to check_initializer so that the DECL_EXPR for a
6207      reference temp is added before the DECL_EXPR for the reference itself.  */
6208   if (DECL_FUNCTION_SCOPE_P (decl))
6209     add_decl_expr (decl);
6210
6211   /* Let the middle end know about variables and functions -- but not
6212      static data members in uninstantiated class templates.  */
6213   if (TREE_CODE (decl) == VAR_DECL
6214       || TREE_CODE (decl) == FUNCTION_DECL)
6215     {
6216       if (TREE_CODE (decl) == VAR_DECL)
6217         {
6218           layout_var_decl (decl);
6219           maybe_commonize_var (decl);
6220         }
6221
6222       /* This needs to happen after the linkage is set. */
6223       determine_visibility (decl);
6224
6225       if (var_definition_p && TREE_STATIC (decl))
6226         {
6227           /* If a TREE_READONLY variable needs initialization
6228              at runtime, it is no longer readonly and we need to
6229              avoid MEM_READONLY_P being set on RTL created for it.  */
6230           if (init)
6231             {
6232               if (TREE_READONLY (decl))
6233                 TREE_READONLY (decl) = 0;
6234               was_readonly = 0;
6235             }
6236           else if (was_readonly)
6237             TREE_READONLY (decl) = 1;
6238         }
6239
6240       make_rtl_for_nonlocal_decl (decl, init, asmspec);
6241
6242       /* Check for abstractness of the type. Notice that there is no
6243          need to strip array types here since the check for those types
6244          is already done within create_array_type_for_decl.  */
6245       if (TREE_CODE (type) == FUNCTION_TYPE
6246           || TREE_CODE (type) == METHOD_TYPE)
6247         abstract_virtuals_error (decl, TREE_TYPE (type));
6248       else
6249         abstract_virtuals_error (decl, type);
6250
6251       if (TREE_TYPE (decl) == error_mark_node)
6252         /* No initialization required.  */
6253         ;
6254       else if (TREE_CODE (decl) == FUNCTION_DECL)
6255         {
6256           if (init)
6257             {
6258               if (init == ridpointers[(int)RID_DEFAULT])
6259                 {
6260                   /* An out-of-class default definition is defined at
6261                      the point where it is explicitly defaulted.  */
6262                   if (DECL_DELETED_FN (decl))
6263                     maybe_explain_implicit_delete (decl);
6264                   else if (DECL_INITIAL (decl) == error_mark_node)
6265                     synthesize_method (decl);
6266                 }
6267               else
6268                 error ("function %q#D is initialized like a variable", decl);
6269             }
6270           /* else no initialization required.  */
6271         }
6272       else if (DECL_EXTERNAL (decl)
6273                && ! (DECL_LANG_SPECIFIC (decl)
6274                      && DECL_NOT_REALLY_EXTERN (decl)))
6275         {
6276           if (init)
6277             DECL_INITIAL (decl) = init;
6278         }
6279       /* A variable definition.  */
6280       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6281         /* Initialize the local variable.  */
6282         initialize_local_var (decl, init);
6283
6284       /* If a variable is defined, and then a subsequent
6285          definition with external linkage is encountered, we will
6286          get here twice for the same variable.  We want to avoid
6287          calling expand_static_init more than once.  For variables
6288          that are not static data members, we can call
6289          expand_static_init only when we actually process the
6290          initializer.  It is not legal to redeclare a static data
6291          member, so this issue does not arise in that case.  */
6292       else if (var_definition_p && TREE_STATIC (decl))
6293         expand_static_init (decl, init);
6294     }
6295
6296   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
6297      reference, insert it in the statement-tree now.  */
6298   if (cleanup)
6299     push_cleanup (decl, cleanup, false);
6300
6301   if (was_readonly)
6302     TREE_READONLY (decl) = 1;
6303 }
6304
6305 /* Returns a declaration for a VAR_DECL as if:
6306
6307      extern "C" TYPE NAME;
6308
6309    had been seen.  Used to create compiler-generated global
6310    variables.  */
6311
6312 static tree
6313 declare_global_var (tree name, tree type)
6314 {
6315   tree decl;
6316
6317   push_to_top_level ();
6318   decl = build_decl (input_location, VAR_DECL, name, type);
6319   TREE_PUBLIC (decl) = 1;
6320   DECL_EXTERNAL (decl) = 1;
6321   DECL_ARTIFICIAL (decl) = 1;
6322   /* If the user has explicitly declared this variable (perhaps
6323      because the code we are compiling is part of a low-level runtime
6324      library), then it is possible that our declaration will be merged
6325      with theirs by pushdecl.  */
6326   decl = pushdecl (decl);
6327   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
6328   pop_from_top_level ();
6329
6330   return decl;
6331 }
6332
6333 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
6334    if "__cxa_atexit" is not being used) corresponding to the function
6335    to be called when the program exits.  */
6336
6337 static tree
6338 get_atexit_fn_ptr_type (void)
6339 {
6340   tree fn_type;
6341
6342   if (!atexit_fn_ptr_type_node)
6343     {
6344       tree arg_type;
6345       if (flag_use_cxa_atexit 
6346           && !targetm.cxx.use_atexit_for_cxa_atexit ())
6347         /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
6348         arg_type = ptr_type_node;
6349       else
6350         /* The parameter to "atexit" is "void (*)(void)".  */
6351         arg_type = NULL_TREE;
6352       
6353       fn_type = build_function_type_list (void_type_node,
6354                                           arg_type, NULL_TREE);
6355       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
6356     }
6357
6358   return atexit_fn_ptr_type_node;
6359 }
6360
6361 /* Returns a pointer to the `atexit' function.  Note that if
6362    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
6363    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
6364
6365 static tree
6366 get_atexit_node (void)
6367 {
6368   tree atexit_fndecl;
6369   tree fn_type;
6370   tree fn_ptr_type;
6371   const char *name;
6372   bool use_aeabi_atexit;
6373
6374   if (atexit_node)
6375     return atexit_node;
6376
6377   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6378     {
6379       /* The declaration for `__cxa_atexit' is:
6380
6381            int __cxa_atexit (void (*)(void *), void *, void *)
6382
6383          We build up the argument types and then the function type
6384          itself.  */
6385       tree argtype0, argtype1, argtype2;
6386
6387       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
6388       /* First, build the pointer-to-function type for the first
6389          argument.  */
6390       fn_ptr_type = get_atexit_fn_ptr_type ();
6391       /* Then, build the rest of the argument types.  */
6392       argtype2 = ptr_type_node;
6393       if (use_aeabi_atexit)
6394         {
6395           argtype1 = fn_ptr_type;
6396           argtype0 = ptr_type_node;
6397         }
6398       else
6399         {
6400           argtype1 = ptr_type_node;
6401           argtype0 = fn_ptr_type;
6402         }
6403       /* And the final __cxa_atexit type.  */
6404       fn_type = build_function_type_list (integer_type_node,
6405                                           argtype0, argtype1, argtype2,
6406                                           NULL_TREE);
6407       fn_ptr_type = build_pointer_type (fn_type);
6408       if (use_aeabi_atexit)
6409         name = "__aeabi_atexit";
6410       else
6411         name = "__cxa_atexit";
6412     }
6413   else
6414     {
6415       /* The declaration for `atexit' is:
6416
6417            int atexit (void (*)());
6418
6419          We build up the argument types and then the function type
6420          itself.  */
6421       fn_ptr_type = get_atexit_fn_ptr_type ();
6422       /* Build the final atexit type.  */
6423       fn_type = build_function_type_list (integer_type_node,
6424                                           fn_ptr_type, NULL_TREE);
6425       name = "atexit";
6426     }
6427
6428   /* Now, build the function declaration.  */
6429   push_lang_context (lang_name_c);
6430   atexit_fndecl = build_library_fn_ptr (name, fn_type);
6431   mark_used (atexit_fndecl);
6432   pop_lang_context ();
6433   atexit_node = decay_conversion (atexit_fndecl);
6434
6435   return atexit_node;
6436 }
6437
6438 /* Returns the __dso_handle VAR_DECL.  */
6439
6440 static tree
6441 get_dso_handle_node (void)
6442 {
6443   if (dso_handle_node)
6444     return dso_handle_node;
6445
6446   /* Declare the variable.  */
6447   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
6448                                         ptr_type_node);
6449
6450 #ifdef HAVE_GAS_HIDDEN
6451   DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
6452   DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
6453 #endif
6454
6455   return dso_handle_node;
6456 }
6457
6458 /* Begin a new function with internal linkage whose job will be simply
6459    to destroy some particular variable.  */
6460
6461 static GTY(()) int start_cleanup_cnt;
6462
6463 static tree
6464 start_cleanup_fn (void)
6465 {
6466   char name[32];
6467   tree fntype;
6468   tree fndecl;
6469   bool use_cxa_atexit = flag_use_cxa_atexit
6470                         && !targetm.cxx.use_atexit_for_cxa_atexit ();
6471
6472   push_to_top_level ();
6473
6474   /* No need to mangle this.  */
6475   push_lang_context (lang_name_c);
6476
6477   /* Build the name of the function.  */
6478   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
6479   /* Build the function declaration.  */
6480   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
6481   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
6482   /* It's a function with internal linkage, generated by the
6483      compiler.  */
6484   TREE_PUBLIC (fndecl) = 0;
6485   DECL_ARTIFICIAL (fndecl) = 1;
6486   /* Make the function `inline' so that it is only emitted if it is
6487      actually needed.  It is unlikely that it will be inlined, since
6488      it is only called via a function pointer, but we avoid unnecessary
6489      emissions this way.  */
6490   DECL_DECLARED_INLINE_P (fndecl) = 1;
6491   DECL_INTERFACE_KNOWN (fndecl) = 1;
6492   /* Build the parameter.  */
6493   if (use_cxa_atexit)
6494     {
6495       tree parmdecl;
6496
6497       parmdecl = cp_build_parm_decl (NULL_TREE, ptr_type_node);
6498       DECL_CONTEXT (parmdecl) = fndecl;
6499       TREE_USED (parmdecl) = 1;
6500       DECL_READ_P (parmdecl) = 1;
6501       DECL_ARGUMENTS (fndecl) = parmdecl;
6502     }
6503
6504   pushdecl (fndecl);
6505   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
6506
6507   pop_lang_context ();
6508
6509   return current_function_decl;
6510 }
6511
6512 /* Finish the cleanup function begun by start_cleanup_fn.  */
6513
6514 static void
6515 end_cleanup_fn (void)
6516 {
6517   expand_or_defer_fn (finish_function (0));
6518
6519   pop_from_top_level ();
6520 }
6521
6522 /* Generate code to handle the destruction of DECL, an object with
6523    static storage duration.  */
6524
6525 tree
6526 register_dtor_fn (tree decl)
6527 {
6528   tree cleanup;
6529   tree compound_stmt;
6530   tree fcall;
6531   tree type;
6532   bool use_dtor;
6533   tree arg0, arg1 = NULL_TREE, arg2 = NULL_TREE;
6534
6535   type = TREE_TYPE (decl);
6536   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
6537     return void_zero_node;
6538
6539   /* If we're using "__cxa_atexit" (or "__aeabi_atexit"), and DECL is
6540      a class object, we can just pass the destructor to
6541      "__cxa_atexit"; we don't have to build a temporary function to do
6542      the cleanup.  */
6543   use_dtor = (flag_use_cxa_atexit 
6544               && !targetm.cxx.use_atexit_for_cxa_atexit ()
6545               && CLASS_TYPE_P (type));
6546   if (use_dtor)
6547     {
6548       int idx;
6549
6550       /* Find the destructor.  */
6551       idx = lookup_fnfields_1 (type, complete_dtor_identifier);
6552       gcc_assert (idx >= 0);
6553       cleanup = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), idx);
6554       /* Make sure it is accessible.  */
6555       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup);
6556     }
6557   else
6558     {
6559       /* Call build_cleanup before we enter the anonymous function so
6560          that any access checks will be done relative to the current
6561          scope, rather than the scope of the anonymous function.  */
6562       build_cleanup (decl);
6563   
6564       /* Now start the function.  */
6565       cleanup = start_cleanup_fn ();
6566       
6567       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
6568          to the original function, rather than the anonymous one.  That
6569          will make the back end think that nested functions are in use,
6570          which causes confusion.  */
6571       push_deferring_access_checks (dk_no_check);
6572       fcall = build_cleanup (decl);
6573       pop_deferring_access_checks ();
6574       
6575       /* Create the body of the anonymous function.  */
6576       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
6577       finish_expr_stmt (fcall);
6578       finish_compound_stmt (compound_stmt);
6579       end_cleanup_fn ();
6580     }
6581
6582   /* Call atexit with the cleanup function.  */
6583   mark_used (cleanup);
6584   cleanup = build_address (cleanup);
6585   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
6586     {
6587       tree addr;
6588
6589       if (use_dtor)
6590         {
6591           /* We must convert CLEANUP to the type that "__cxa_atexit"
6592              expects.  */
6593           cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
6594           /* "__cxa_atexit" will pass the address of DECL to the
6595              cleanup function.  */
6596           mark_used (decl);
6597           addr = build_address (decl);
6598           /* The declared type of the parameter to "__cxa_atexit" is
6599              "void *".  For plain "T*", we could just let the
6600              machinery in cp_build_function_call convert it -- but if the
6601              type is "cv-qualified T *", then we need to convert it
6602              before passing it in, to avoid spurious errors.  */
6603           addr = build_nop (ptr_type_node, addr);
6604         }
6605       else
6606         /* Since the cleanup functions we build ignore the address
6607            they're given, there's no reason to pass the actual address
6608            in, and, in general, it's cheaper to pass NULL than any
6609            other value.  */
6610         addr = null_pointer_node;
6611       arg2 = cp_build_addr_expr (get_dso_handle_node (),
6612                                  tf_warning_or_error);
6613       if (targetm.cxx.use_aeabi_atexit ())
6614         {
6615           arg1 = cleanup;
6616           arg0 = addr;
6617         }
6618       else
6619         {
6620           arg1 = addr;
6621           arg0 = cleanup;
6622         }
6623     }
6624   else
6625     arg0 = cleanup;
6626   return cp_build_function_call_nary (get_atexit_node (), tf_warning_or_error,
6627                                       arg0, arg1, arg2, NULL_TREE);
6628 }
6629
6630 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
6631    is its initializer.  Generate code to handle the construction
6632    and destruction of DECL.  */
6633
6634 static void
6635 expand_static_init (tree decl, tree init)
6636 {
6637   gcc_assert (TREE_CODE (decl) == VAR_DECL);
6638   gcc_assert (TREE_STATIC (decl));
6639
6640   /* Some variables require no dynamic initialization.  */
6641   if (!init
6642       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
6643     return;
6644
6645   if (DECL_FUNCTION_SCOPE_P (decl))
6646     {
6647       /* Emit code to perform this initialization but once.  */
6648       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
6649       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
6650       tree guard, guard_addr;
6651       tree acquire_fn, release_fn, abort_fn;
6652       tree flag, begin;
6653
6654       /* Emit code to perform this initialization but once.  This code
6655          looks like:
6656
6657            static <type> guard;
6658            if (!guard.first_byte) {
6659              if (__cxa_guard_acquire (&guard)) {
6660                bool flag = false;
6661                try {
6662                  // Do initialization.
6663                  flag = true; __cxa_guard_release (&guard);
6664                  // Register variable for destruction at end of program.
6665                } catch {
6666                  if (!flag) __cxa_guard_abort (&guard);
6667                }
6668            }
6669
6670          Note that the `flag' variable is only set to 1 *after* the
6671          initialization is complete.  This ensures that an exception,
6672          thrown during the construction, will cause the variable to
6673          reinitialized when we pass through this code again, as per:
6674
6675            [stmt.dcl]
6676
6677            If the initialization exits by throwing an exception, the
6678            initialization is not complete, so it will be tried again
6679            the next time control enters the declaration.
6680
6681          This process should be thread-safe, too; multiple threads
6682          should not be able to initialize the variable more than
6683          once.  */
6684
6685       /* Create the guard variable.  */
6686       guard = get_guard (decl);
6687
6688       /* This optimization isn't safe on targets with relaxed memory
6689          consistency.  On such targets we force synchronization in
6690          __cxa_guard_acquire.  */
6691       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6692         {
6693           /* Begin the conditional initialization.  */
6694           if_stmt = begin_if_stmt ();
6695           finish_if_stmt_cond (get_guard_cond (guard), if_stmt);
6696           then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6697         }
6698
6699       if (flag_threadsafe_statics)
6700         {
6701           guard_addr = build_address (guard);
6702
6703           acquire_fn = get_identifier ("__cxa_guard_acquire");
6704           release_fn = get_identifier ("__cxa_guard_release");
6705           abort_fn = get_identifier ("__cxa_guard_abort");
6706           if (!get_global_value_if_present (acquire_fn, &acquire_fn))
6707             {
6708               tree vfntype = build_function_type_list (void_type_node,
6709                                                        TREE_TYPE (guard_addr),
6710                                                        NULL_TREE);
6711               acquire_fn = push_library_fn
6712                 (acquire_fn, build_function_type_list (integer_type_node,
6713                                                        TREE_TYPE (guard_addr),
6714                                                        NULL_TREE),
6715                  NULL_TREE);
6716               release_fn = push_library_fn (release_fn, vfntype, NULL_TREE);
6717               abort_fn = push_library_fn (abort_fn, vfntype, NULL_TREE);
6718             }
6719           else
6720             {
6721               release_fn = identifier_global_value (release_fn);
6722               abort_fn = identifier_global_value (abort_fn);
6723             }
6724
6725           inner_if_stmt = begin_if_stmt ();
6726           finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
6727                                inner_if_stmt);
6728
6729           inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
6730           begin = get_target_expr (boolean_false_node);
6731           flag = TARGET_EXPR_SLOT (begin);
6732
6733           TARGET_EXPR_CLEANUP (begin)
6734             = build3 (COND_EXPR, void_type_node, flag,
6735                       void_zero_node,
6736                       build_call_n (abort_fn, 1, guard_addr));
6737           CLEANUP_EH_ONLY (begin) = 1;
6738
6739           /* Do the initialization itself.  */
6740           init = add_stmt_to_compound (begin, init);
6741           init = add_stmt_to_compound
6742             (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
6743           init = add_stmt_to_compound
6744             (init, build_call_n (release_fn, 1, guard_addr));
6745         }
6746       else
6747         init = add_stmt_to_compound (init, set_guard (guard));
6748
6749       /* Use atexit to register a function for destroying this static
6750          variable.  */
6751       init = add_stmt_to_compound (init, register_dtor_fn (decl));
6752
6753       finish_expr_stmt (init);
6754
6755       if (flag_threadsafe_statics)
6756         {
6757           finish_compound_stmt (inner_then_clause);
6758           finish_then_clause (inner_if_stmt);
6759           finish_if_stmt (inner_if_stmt);
6760         }
6761
6762       if (!targetm.relaxed_ordering || !flag_threadsafe_statics)
6763         {
6764           finish_compound_stmt (then_clause);
6765           finish_then_clause (if_stmt);
6766           finish_if_stmt (if_stmt);
6767         }
6768     }
6769   else
6770     static_aggregates = tree_cons (init, decl, static_aggregates);
6771 }
6772
6773 \f
6774 /* Make TYPE a complete type based on INITIAL_VALUE.
6775    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
6776    2 if there was no information (in which case assume 0 if DO_DEFAULT),
6777    3 if the initializer list is empty (in pedantic mode). */
6778
6779 int
6780 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
6781 {
6782   int failure;
6783   tree type, elt_type;
6784
6785   if (initial_value)
6786     {
6787       unsigned HOST_WIDE_INT i;
6788       tree value;
6789
6790       /* An array of character type can be initialized from a
6791          brace-enclosed string constant.
6792
6793          FIXME: this code is duplicated from reshape_init. Probably
6794          we should just call reshape_init here?  */
6795       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
6796           && TREE_CODE (initial_value) == CONSTRUCTOR
6797           && !VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (initial_value)))
6798         {
6799           VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (initial_value);
6800           tree value = VEC_index (constructor_elt, v, 0)->value;
6801
6802           if (TREE_CODE (value) == STRING_CST
6803               && VEC_length (constructor_elt, v) == 1)
6804             initial_value = value;
6805         }
6806
6807       /* If any of the elements are parameter packs, we can't actually
6808          complete this type now because the array size is dependent.  */
6809       if (TREE_CODE (initial_value) == CONSTRUCTOR)
6810         {
6811           FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 
6812                                       i, value)
6813             {
6814               if (PACK_EXPANSION_P (value))
6815                 return 0;
6816             }
6817         }
6818     }
6819
6820   failure = complete_array_type (ptype, initial_value, do_default);
6821
6822   /* We can create the array before the element type is complete, which
6823      means that we didn't have these two bits set in the original type
6824      either.  In completing the type, we are expected to propagate these
6825      bits.  See also complete_type which does the same thing for arrays
6826      of fixed size.  */
6827   type = *ptype;
6828   if (TYPE_DOMAIN (type))
6829     {
6830       elt_type = TREE_TYPE (type);
6831       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
6832       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
6833         = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
6834     }
6835
6836   return failure;
6837 }
6838
6839 /* As above, but either give an error or reject zero-size arrays, depending
6840    on COMPLAIN.  */
6841
6842 int
6843 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
6844                                  bool do_default, tsubst_flags_t complain)
6845 {
6846   int failure;
6847   bool sfinae = !(complain & tf_error);
6848   /* In SFINAE context we can't be lenient about zero-size arrays.  */
6849   if (sfinae)
6850     ++pedantic;
6851   failure = cp_complete_array_type (ptype, initial_value, do_default);
6852   if (sfinae)
6853     --pedantic;
6854   if (failure)
6855     {
6856       if (sfinae)
6857         /* Not an error.  */;
6858       else if (failure == 1)
6859         error ("initializer fails to determine size of %qT", *ptype);
6860       else if (failure == 2)
6861         {
6862           if (do_default)
6863             error ("array size missing in %qT", *ptype);
6864         }
6865       else if (failure == 3)
6866         error ("zero-size array %qT", *ptype);
6867       *ptype = error_mark_node;
6868     }
6869   return failure;
6870 }
6871 \f
6872 /* Return zero if something is declared to be a member of type
6873    CTYPE when in the context of CUR_TYPE.  STRING is the error
6874    message to print in that case.  Otherwise, quietly return 1.  */
6875
6876 static int
6877 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
6878 {
6879   if (ctype && ctype != cur_type)
6880     {
6881       if (flags == DTOR_FLAG)
6882         error ("destructor for alien class %qT cannot be a member", ctype);
6883       else
6884         error ("constructor for alien class %qT cannot be a member", ctype);
6885       return 0;
6886     }
6887   return 1;
6888 }
6889 \f
6890 /* Subroutine of `grokdeclarator'.  */
6891
6892 /* Generate errors possibly applicable for a given set of specifiers.
6893    This is for ARM $7.1.2.  */
6894
6895 static void
6896 bad_specifiers (tree object,
6897                 enum bad_spec_place type,
6898                 int virtualp,
6899                 int quals,
6900                 int inlinep,
6901                 int friendp,
6902                 int raises)
6903 {
6904   switch (type)
6905     {
6906       case BSP_VAR:
6907         if (virtualp)
6908           error ("%qD declared as a %<virtual%> variable", object);
6909         if (inlinep)
6910           error ("%qD declared as an %<inline%> variable", object);
6911         if (quals)
6912           error ("%<const%> and %<volatile%> function specifiers on "
6913                  "%qD invalid in variable declaration", object);
6914         break;
6915       case BSP_PARM:
6916         if (virtualp)
6917           error ("%qD declared as a %<virtual%> parameter", object);
6918         if (inlinep)
6919           error ("%qD declared as an %<inline%> parameter", object);
6920         if (quals)
6921           error ("%<const%> and %<volatile%> function specifiers on "
6922                  "%qD invalid in parameter declaration", object);
6923         break;
6924       case BSP_TYPE:
6925         if (virtualp)
6926           error ("%qD declared as a %<virtual%> type", object);
6927         if (inlinep)
6928           error ("%qD declared as an %<inline%> type", object);
6929         if (quals)
6930           error ("%<const%> and %<volatile%> function specifiers on "
6931                  "%qD invalid in type declaration", object);
6932         break;
6933       case BSP_FIELD:
6934         if (virtualp)
6935           error ("%qD declared as a %<virtual%> field", object);
6936         if (inlinep)
6937           error ("%qD declared as an %<inline%> field", object);
6938         if (quals)
6939           error ("%<const%> and %<volatile%> function specifiers on "
6940                  "%qD invalid in field declaration", object);
6941         break;
6942       default:
6943         gcc_unreachable();
6944     }
6945   if (friendp)
6946     error ("%q+D declared as a friend", object);
6947   if (raises
6948       && (TREE_CODE (object) == TYPE_DECL
6949           || (!TYPE_PTRFN_P (TREE_TYPE (object))
6950               && !TYPE_REFFN_P (TREE_TYPE (object))
6951               && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
6952     error ("%q+D declared with an exception specification", object);
6953 }
6954
6955 /* DECL is a member function or static data member and is presently
6956    being defined.  Check that the definition is taking place in a
6957    valid namespace.  */
6958
6959 static void
6960 check_class_member_definition_namespace (tree decl)
6961 {
6962   /* These checks only apply to member functions and static data
6963      members.  */
6964   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
6965               || TREE_CODE (decl) == VAR_DECL);
6966   /* We check for problems with specializations in pt.c in
6967      check_specialization_namespace, where we can issue better
6968      diagnostics.  */
6969   if (processing_specialization)
6970     return;
6971   /* There are no restrictions on the placement of
6972      explicit instantiations.  */
6973   if (processing_explicit_instantiation)
6974     return;
6975   /* [class.mfct]
6976
6977      A member function definition that appears outside of the
6978      class definition shall appear in a namespace scope enclosing
6979      the class definition.
6980
6981      [class.static.data]
6982
6983      The definition for a static data member shall appear in a
6984      namespace scope enclosing the member's class definition.  */
6985   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
6986     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
6987                decl, DECL_CONTEXT (decl));
6988 }
6989
6990 /* Build a PARM_DECL for the "this" parameter.  TYPE is the
6991    METHOD_TYPE for a non-static member function; QUALS are the
6992    cv-qualifiers that apply to the function.  */
6993
6994 tree
6995 build_this_parm (tree type, cp_cv_quals quals)
6996 {
6997   tree this_type;
6998   tree qual_type;
6999   tree parm;
7000   cp_cv_quals this_quals;
7001
7002   this_type = type_of_this_parm (type);
7003   /* The `this' parameter is implicitly `const'; it cannot be
7004      assigned to.  */
7005   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
7006   qual_type = cp_build_qualified_type (this_type, this_quals);
7007   parm = build_artificial_parm (this_identifier, qual_type);
7008   cp_apply_type_quals_to_decl (this_quals, parm);
7009   return parm;
7010 }
7011
7012 /* DECL is a static member function.  Complain if it was declared
7013    with function-cv-quals.  */
7014
7015 static void
7016 check_static_quals (tree decl, cp_cv_quals quals)
7017 {
7018   if (quals != TYPE_UNQUALIFIED)
7019     error ("static member function %q#D declared with type qualifiers",
7020            decl);
7021 }
7022
7023 /* CTYPE is class type, or null if non-class.
7024    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
7025    or METHOD_TYPE.
7026    DECLARATOR is the function's name.
7027    PARMS is a chain of PARM_DECLs for the function.
7028    VIRTUALP is truthvalue of whether the function is virtual or not.
7029    FLAGS are to be passed through to `grokclassfn'.
7030    QUALS are qualifiers indicating whether the function is `const'
7031    or `volatile'.
7032    RAISES is a list of exceptions that this function can raise.
7033    CHECK is 1 if we must find this method in CTYPE, 0 if we should
7034    not look, and -1 if we should not call `grokclassfn' at all.
7035
7036    SFK is the kind of special function (if any) for the new function.
7037
7038    Returns `NULL_TREE' if something goes wrong, after issuing
7039    applicable error messages.  */
7040
7041 static tree
7042 grokfndecl (tree ctype,
7043             tree type,
7044             tree declarator,
7045             tree parms,
7046             tree orig_declarator,
7047             int virtualp,
7048             enum overload_flags flags,
7049             cp_cv_quals quals,
7050             tree raises,
7051             int check,
7052             int friendp,
7053             int publicp,
7054             int inlinep,
7055             special_function_kind sfk,
7056             bool funcdef_flag,
7057             int template_count,
7058             tree in_namespace,
7059             tree* attrlist,
7060             location_t location)
7061 {
7062   tree decl;
7063   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
7064   tree t;
7065
7066   if (raises)
7067     type = build_exception_variant (type, raises);
7068
7069   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
7070
7071   /* If we have an explicit location, use it, otherwise use whatever
7072      build_lang_decl used (probably input_location).  */
7073   if (location != UNKNOWN_LOCATION)
7074     DECL_SOURCE_LOCATION (decl) = location;
7075
7076   if (TREE_CODE (type) == METHOD_TYPE)
7077     {
7078       tree parm;
7079       parm = build_this_parm (type, quals);
7080       DECL_CHAIN (parm) = parms;
7081       parms = parm;
7082     }
7083   DECL_ARGUMENTS (decl) = parms;
7084   for (t = parms; t; t = DECL_CHAIN (t))
7085     DECL_CONTEXT (t) = decl;
7086   /* Propagate volatile out from type to decl.  */
7087   if (TYPE_VOLATILE (type))
7088     TREE_THIS_VOLATILE (decl) = 1;
7089
7090   /* Setup decl according to sfk.  */
7091   switch (sfk)
7092     {
7093     case sfk_constructor:
7094     case sfk_copy_constructor:
7095     case sfk_move_constructor:
7096       DECL_CONSTRUCTOR_P (decl) = 1;
7097       break;
7098     case sfk_destructor:
7099       DECL_DESTRUCTOR_P (decl) = 1;
7100       break;
7101     default:
7102       break;
7103     }
7104
7105   /* If pointers to member functions use the least significant bit to
7106      indicate whether a function is virtual, ensure a pointer
7107      to this function will have that bit clear.  */
7108   if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
7109       && TREE_CODE (type) == METHOD_TYPE
7110       && DECL_ALIGN (decl) < 2 * BITS_PER_UNIT)
7111     DECL_ALIGN (decl) = 2 * BITS_PER_UNIT;
7112
7113   if (friendp
7114       && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
7115     {
7116       if (funcdef_flag)
7117         error
7118           ("defining explicit specialization %qD in friend declaration",
7119            orig_declarator);
7120       else
7121         {
7122           tree fns = TREE_OPERAND (orig_declarator, 0);
7123           tree args = TREE_OPERAND (orig_declarator, 1);
7124
7125           if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7126             {
7127               /* Something like `template <class T> friend void f<T>()'.  */
7128               error ("invalid use of template-id %qD in declaration "
7129                      "of primary template",
7130                      orig_declarator);
7131               return NULL_TREE;
7132             }
7133
7134
7135           /* A friend declaration of the form friend void f<>().  Record
7136              the information in the TEMPLATE_ID_EXPR.  */
7137           SET_DECL_IMPLICIT_INSTANTIATION (decl);
7138
7139           if (TREE_CODE (fns) == COMPONENT_REF)
7140             {
7141               /* Due to bison parser ickiness, we will have already looked
7142                  up an operator_name or PFUNCNAME within the current class
7143                  (see template_id in parse.y). If the current class contains
7144                  such a name, we'll get a COMPONENT_REF here. Undo that.  */
7145
7146               gcc_assert (TREE_TYPE (TREE_OPERAND (fns, 0))
7147                           == current_class_type);
7148               fns = TREE_OPERAND (fns, 1);
7149             }
7150           gcc_assert (TREE_CODE (fns) == IDENTIFIER_NODE
7151                       || TREE_CODE (fns) == OVERLOAD);
7152           DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
7153
7154           for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
7155             if (TREE_PURPOSE (t)
7156                 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
7157             {
7158               error ("default arguments are not allowed in declaration "
7159                      "of friend template specialization %qD",
7160                      decl);
7161               return NULL_TREE;
7162             }
7163
7164           if (inlinep)
7165             {
7166               error ("%<inline%> is not allowed in declaration of friend "
7167                      "template specialization %qD",
7168                      decl);
7169               return NULL_TREE;
7170             }
7171         }
7172     }
7173
7174   /* If this decl has namespace scope, set that up.  */
7175   if (in_namespace)
7176     set_decl_namespace (decl, in_namespace, friendp);
7177   else if (!ctype)
7178     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
7179
7180   /* `main' and builtins have implicit 'C' linkage.  */
7181   if ((MAIN_NAME_P (declarator)
7182        || (IDENTIFIER_LENGTH (declarator) > 10
7183            && IDENTIFIER_POINTER (declarator)[0] == '_'
7184            && IDENTIFIER_POINTER (declarator)[1] == '_'
7185            && strncmp (IDENTIFIER_POINTER (declarator)+2, "builtin_", 8) == 0))
7186       && current_lang_name == lang_name_cplusplus
7187       && ctype == NULL_TREE
7188       && DECL_FILE_SCOPE_P (decl))
7189     SET_DECL_LANGUAGE (decl, lang_c);
7190
7191   /* Should probably propagate const out from type to decl I bet (mrs).  */
7192   if (staticp)
7193     {
7194       DECL_STATIC_FUNCTION_P (decl) = 1;
7195       DECL_CONTEXT (decl) = ctype;
7196     }
7197
7198   if (ctype)
7199     {
7200       DECL_CONTEXT (decl) = ctype;
7201       if (funcdef_flag)
7202         check_class_member_definition_namespace (decl);
7203     }
7204
7205   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7206     {
7207       if (processing_template_decl)
7208         error ("cannot declare %<::main%> to be a template");
7209       if (inlinep)
7210         error ("cannot declare %<::main%> to be inline");
7211       if (!publicp)
7212         error ("cannot declare %<::main%> to be static");
7213       inlinep = 0;
7214       publicp = 1;
7215     }
7216
7217   /* Members of anonymous types and local classes have no linkage; make
7218      them internal.  If a typedef is made later, this will be changed.  */
7219   if (ctype && (TYPE_ANONYMOUS_P (ctype)
7220                 || decl_function_context (TYPE_MAIN_DECL (ctype))))
7221     publicp = 0;
7222
7223   if (publicp && cxx_dialect == cxx98)
7224     {
7225       /* [basic.link]: A name with no linkage (notably, the name of a class
7226          or enumeration declared in a local scope) shall not be used to
7227          declare an entity with linkage.
7228
7229          DR 757 relaxes this restriction for C++0x.  */
7230       t = no_linkage_check (TREE_TYPE (decl),
7231                             /*relaxed_p=*/false);
7232       if (t)
7233         {
7234           if (TYPE_ANONYMOUS_P (t))
7235             {
7236               if (DECL_EXTERN_C_P (decl))
7237                 /* Allow this; it's pretty common in C.  */;
7238               else
7239                 {
7240                   permerror (input_location, "anonymous type with no linkage "
7241                              "used to declare function %q#D with linkage",
7242                              decl);
7243                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7244                     permerror (input_location, "%q+#D does not refer to the unqualified "
7245                                "type, so it is not used for linkage",
7246                                TYPE_NAME (t));
7247                 }
7248             }
7249           else
7250             permerror (input_location, "type %qT with no linkage used to "
7251                        "declare function %q#D with linkage", t, decl);
7252         }
7253     }
7254
7255   TREE_PUBLIC (decl) = publicp;
7256   if (! publicp)
7257     {
7258       DECL_INTERFACE_KNOWN (decl) = 1;
7259       DECL_NOT_REALLY_EXTERN (decl) = 1;
7260     }
7261
7262   /* If the declaration was declared inline, mark it as such.  */
7263   if (inlinep)
7264     DECL_DECLARED_INLINE_P (decl) = 1;
7265   if (inlinep & 2)
7266     DECL_DECLARED_CONSTEXPR_P (decl) = true;
7267
7268   DECL_EXTERNAL (decl) = 1;
7269   if (quals && TREE_CODE (type) == FUNCTION_TYPE)
7270     {
7271       error (ctype
7272              ? G_("static member function %qD cannot have cv-qualifier")
7273              : G_("non-member function %qD cannot have cv-qualifier"),
7274              decl);
7275       quals = TYPE_UNQUALIFIED;
7276     }
7277
7278   if (IDENTIFIER_OPNAME_P (DECL_NAME (decl))
7279       && !grok_op_properties (decl, /*complain=*/true))
7280     return NULL_TREE;
7281
7282   if (funcdef_flag)
7283     /* Make the init_value nonzero so pushdecl knows this is not
7284        tentative.  error_mark_node is replaced later with the BLOCK.  */
7285     DECL_INITIAL (decl) = error_mark_node;
7286
7287   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
7288     TREE_NOTHROW (decl) = 1;
7289
7290   /* Caller will do the rest of this.  */
7291   if (check < 0)
7292     return decl;
7293
7294   if (ctype != NULL_TREE)
7295     grokclassfn (ctype, decl, flags);
7296
7297   decl = check_explicit_specialization (orig_declarator, decl,
7298                                         template_count,
7299                                         2 * funcdef_flag +
7300                                         4 * (friendp != 0));
7301   if (decl == error_mark_node)
7302     return NULL_TREE;
7303
7304   if (DECL_STATIC_FUNCTION_P (decl))
7305     check_static_quals (decl, quals);
7306
7307   if (attrlist)
7308     {
7309       cplus_decl_attributes (&decl, *attrlist, 0);
7310       *attrlist = NULL_TREE;
7311     }
7312
7313   /* Check main's type after attributes have been applied.  */
7314   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
7315     {
7316       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
7317                         integer_type_node))
7318         {
7319           tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
7320           tree newtype;
7321           error ("%<::main%> must return %<int%>");
7322           newtype = build_function_type (integer_type_node, oldtypeargs);
7323           TREE_TYPE (decl) = newtype;
7324         }
7325       if (warn_main)
7326         check_main_parameter_types (decl);
7327     }
7328
7329   if (ctype != NULL_TREE
7330       && (! TYPE_FOR_JAVA (ctype) || check_java_method (decl))
7331       && check)
7332     {
7333       tree old_decl = check_classfn (ctype, decl,
7334                                      (processing_template_decl
7335                                       > template_class_depth (ctype))
7336                                      ? current_template_parms
7337                                      : NULL_TREE);
7338
7339       if (old_decl == error_mark_node)
7340         return NULL_TREE;
7341
7342       if (old_decl)
7343         {
7344           tree ok;
7345           tree pushed_scope;
7346
7347           if (TREE_CODE (old_decl) == TEMPLATE_DECL)
7348             /* Because grokfndecl is always supposed to return a
7349                FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
7350                here.  We depend on our callers to figure out that its
7351                really a template that's being returned.  */
7352             old_decl = DECL_TEMPLATE_RESULT (old_decl);
7353
7354           if (DECL_STATIC_FUNCTION_P (old_decl)
7355               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7356             {
7357               /* Remove the `this' parm added by grokclassfn.  */
7358               revert_static_member_fn (decl);
7359               check_static_quals (decl, quals);
7360             }
7361           if (DECL_ARTIFICIAL (old_decl))
7362             {
7363               error ("definition of implicitly-declared %qD", old_decl);
7364               return NULL_TREE;
7365             }
7366
7367           /* Since we've smashed OLD_DECL to its
7368              DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
7369           if (TREE_CODE (decl) == TEMPLATE_DECL)
7370             decl = DECL_TEMPLATE_RESULT (decl);
7371
7372           /* Attempt to merge the declarations.  This can fail, in
7373              the case of some invalid specialization declarations.  */
7374           pushed_scope = push_scope (ctype);
7375           ok = duplicate_decls (decl, old_decl, friendp);
7376           if (pushed_scope)
7377             pop_scope (pushed_scope);
7378           if (!ok)
7379             {
7380               error ("no %q#D member function declared in class %qT",
7381                      decl, ctype);
7382               return NULL_TREE;
7383             }
7384           return old_decl;
7385         }
7386     }
7387
7388   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
7389     return NULL_TREE;
7390
7391   if (ctype == NULL_TREE || check)
7392     return decl;
7393
7394   if (virtualp)
7395     DECL_VIRTUAL_P (decl) = 1;
7396
7397   return decl;
7398 }
7399
7400 /* decl is a FUNCTION_DECL.
7401    specifiers are the parsed virt-specifiers.
7402
7403    Set flags to reflect the virt-specifiers.
7404
7405    Returns decl.  */
7406
7407 static tree
7408 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
7409 {
7410   if (decl == NULL_TREE)
7411     return decl;
7412   if (specifiers & VIRT_SPEC_OVERRIDE)
7413     DECL_OVERRIDE_P (decl) = 1;
7414   if (specifiers & VIRT_SPEC_FINAL)
7415     DECL_FINAL_P (decl) = 1;
7416   return decl;
7417 }
7418
7419 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
7420    the linkage that DECL will receive in the object file.  */
7421
7422 static void
7423 set_linkage_for_static_data_member (tree decl)
7424 {
7425   /* A static data member always has static storage duration and
7426      external linkage.  Note that static data members are forbidden in
7427      local classes -- the only situation in which a class has
7428      non-external linkage.  */
7429   TREE_PUBLIC (decl) = 1;
7430   TREE_STATIC (decl) = 1;
7431   /* For non-template classes, static data members are always put
7432      out in exactly those files where they are defined, just as
7433      with ordinary namespace-scope variables.  */
7434   if (!processing_template_decl)
7435     DECL_INTERFACE_KNOWN (decl) = 1;
7436 }
7437
7438 /* Create a VAR_DECL named NAME with the indicated TYPE.
7439
7440    If SCOPE is non-NULL, it is the class type or namespace containing
7441    the variable.  If SCOPE is NULL, the variable should is created in
7442    the innermost enclosings scope.  */
7443
7444 static tree
7445 grokvardecl (tree type,
7446              tree name,
7447              const cp_decl_specifier_seq *declspecs,
7448              int initialized,
7449              int constp,
7450              tree scope)
7451 {
7452   tree decl;
7453   tree explicit_scope;
7454
7455   gcc_assert (!name || TREE_CODE (name) == IDENTIFIER_NODE);
7456
7457   /* Compute the scope in which to place the variable, but remember
7458      whether or not that scope was explicitly specified by the user.   */
7459   explicit_scope = scope;
7460   if (!scope)
7461     {
7462       /* An explicit "extern" specifier indicates a namespace-scope
7463          variable.  */
7464       if (declspecs->storage_class == sc_extern)
7465         scope = current_decl_namespace ();
7466       else if (!at_function_scope_p ())
7467         scope = current_scope ();
7468     }
7469
7470   if (scope
7471       && (/* If the variable is a namespace-scope variable declared in a
7472              template, we need DECL_LANG_SPECIFIC.  */
7473           (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
7474           /* Similarly for namespace-scope variables with language linkage
7475              other than C++.  */
7476           || (TREE_CODE (scope) == NAMESPACE_DECL
7477               && current_lang_name != lang_name_cplusplus)
7478           /* Similarly for static data members.  */
7479           || TYPE_P (scope)))
7480     decl = build_lang_decl (VAR_DECL, name, type);
7481   else
7482     decl = build_decl (input_location, VAR_DECL, name, type);
7483
7484   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
7485     set_decl_namespace (decl, explicit_scope, 0);
7486   else
7487     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
7488
7489   if (declspecs->storage_class == sc_extern)
7490     {
7491       DECL_THIS_EXTERN (decl) = 1;
7492       DECL_EXTERNAL (decl) = !initialized;
7493     }
7494
7495   if (DECL_CLASS_SCOPE_P (decl))
7496     {
7497       set_linkage_for_static_data_member (decl);
7498       /* This function is only called with out-of-class definitions.  */
7499       DECL_EXTERNAL (decl) = 0;
7500       check_class_member_definition_namespace (decl);
7501     }
7502   /* At top level, either `static' or no s.c. makes a definition
7503      (perhaps tentative), and absence of `static' makes it public.  */
7504   else if (toplevel_bindings_p ())
7505     {
7506       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
7507                             && (DECL_THIS_EXTERN (decl) || ! constp));
7508       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
7509     }
7510   /* Not at top level, only `static' makes a static definition.  */
7511   else
7512     {
7513       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
7514       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
7515     }
7516
7517   if (declspecs->specs[(int)ds_thread])
7518     DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
7519
7520   /* If the type of the decl has no linkage, make sure that we'll
7521      notice that in mark_used.  */
7522   if (cxx_dialect > cxx98
7523       && decl_linkage (decl) != lk_none
7524       && DECL_LANG_SPECIFIC (decl) == NULL
7525       && !DECL_EXTERN_C_P (decl)
7526       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
7527     retrofit_lang_decl (decl);
7528
7529   if (TREE_PUBLIC (decl))
7530     {
7531       /* [basic.link]: A name with no linkage (notably, the name of a class
7532          or enumeration declared in a local scope) shall not be used to
7533          declare an entity with linkage.
7534
7535          DR 757 relaxes this restriction for C++0x.  */
7536       tree t = (cxx_dialect > cxx98 ? NULL_TREE
7537                 : no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false));
7538       if (t)
7539         {
7540           if (TYPE_ANONYMOUS_P (t))
7541             {
7542               if (DECL_EXTERN_C_P (decl))
7543                 /* Allow this; it's pretty common in C.  */
7544                 ;
7545               else
7546                 {
7547                   /* DRs 132, 319 and 389 seem to indicate types with
7548                      no linkage can only be used to declare extern "C"
7549                      entities.  Since it's not always an error in the
7550                      ISO C++ 90 Standard, we only issue a warning.  */
7551                   warning (0, "anonymous type with no linkage used to declare "
7552                            "variable %q#D with linkage", decl);
7553                   if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
7554                     warning (0, "%q+#D does not refer to the unqualified "
7555                              "type, so it is not used for linkage",
7556                              TYPE_NAME (t));
7557                 }
7558             }
7559           else
7560             warning (0, "type %qT with no linkage used to declare variable "
7561                      "%q#D with linkage", t, decl);
7562         }
7563     }
7564   else
7565     DECL_INTERFACE_KNOWN (decl) = 1;
7566
7567   return decl;
7568 }
7569
7570 /* Create and return a canonical pointer to member function type, for
7571    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
7572
7573 tree
7574 build_ptrmemfunc_type (tree type)
7575 {
7576   tree field, fields;
7577   tree t;
7578   tree unqualified_variant = NULL_TREE;
7579
7580   if (type == error_mark_node)
7581     return type;
7582
7583   /* If a canonical type already exists for this type, use it.  We use
7584      this method instead of type_hash_canon, because it only does a
7585      simple equality check on the list of field members.  */
7586
7587   if ((t = TYPE_GET_PTRMEMFUNC_TYPE (type)))
7588     return t;
7589
7590   /* Make sure that we always have the unqualified pointer-to-member
7591      type first.  */
7592   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7593     unqualified_variant
7594       = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
7595
7596   t = make_class_type (RECORD_TYPE);
7597   xref_basetypes (t, NULL_TREE);
7598
7599   /* Let the front end know this is a pointer to member function...  */
7600   TYPE_PTRMEMFUNC_FLAG (t) = 1;
7601   /* ... and not really a class type.  */
7602   SET_CLASS_TYPE_P (t, 0);
7603
7604   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
7605   fields = field;
7606
7607   field = build_decl (input_location, FIELD_DECL, delta_identifier, 
7608                       delta_type_node);
7609   DECL_CHAIN (field) = fields;
7610   fields = field;
7611
7612   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
7613
7614   /* Zap out the name so that the back end will give us the debugging
7615      information for this anonymous RECORD_TYPE.  */
7616   TYPE_NAME (t) = NULL_TREE;
7617
7618   /* If this is not the unqualified form of this pointer-to-member
7619      type, set the TYPE_MAIN_VARIANT for this type to be the
7620      unqualified type.  Since they are actually RECORD_TYPEs that are
7621      not variants of each other, we must do this manually.
7622      As we just built a new type there is no need to do yet another copy.  */
7623   if (cp_type_quals (type) != TYPE_UNQUALIFIED)
7624     {
7625       int type_quals = cp_type_quals (type);
7626       TYPE_READONLY (t) = (type_quals & TYPE_QUAL_CONST) != 0;
7627       TYPE_VOLATILE (t) = (type_quals & TYPE_QUAL_VOLATILE) != 0;
7628       TYPE_RESTRICT (t) = (type_quals & TYPE_QUAL_RESTRICT) != 0;
7629       TYPE_MAIN_VARIANT (t) = unqualified_variant;
7630       TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (unqualified_variant);
7631       TYPE_NEXT_VARIANT (unqualified_variant) = t;
7632       TREE_TYPE (TYPE_BINFO (t)) = t;
7633     }
7634
7635   /* Cache this pointer-to-member type so that we can find it again
7636      later.  */
7637   TYPE_SET_PTRMEMFUNC_TYPE (type, t);
7638
7639   if (TYPE_STRUCTURAL_EQUALITY_P (type))
7640     SET_TYPE_STRUCTURAL_EQUALITY (t);
7641   else if (TYPE_CANONICAL (type) != type)
7642     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
7643
7644   return t;
7645 }
7646
7647 /* Create and return a pointer to data member type.  */
7648
7649 tree
7650 build_ptrmem_type (tree class_type, tree member_type)
7651 {
7652   if (TREE_CODE (member_type) == METHOD_TYPE)
7653     {
7654       cp_cv_quals quals = type_memfn_quals (member_type);
7655       member_type = build_memfn_type (member_type, class_type, quals);
7656       return build_ptrmemfunc_type (build_pointer_type (member_type));
7657     }
7658   else
7659     {
7660       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
7661       return build_offset_type (class_type, member_type);
7662     }
7663 }
7664
7665 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
7666    Check to see that the definition is valid.  Issue appropriate error
7667    messages.  Return 1 if the definition is particularly bad, or 0
7668    otherwise.  */
7669
7670 static int
7671 check_static_variable_definition (tree decl, tree type)
7672 {
7673   /* Can't check yet if we don't know the type.  */
7674   if (dependent_type_p (type))
7675     return 0;
7676   /* If DECL is declared constexpr, we'll do the appropriate checks
7677      in check_initializer.  */
7678   if (DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
7679     return 0;
7680   else if (cxx_dialect >= cxx0x && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7681     {
7682       if (literal_type_p (type))
7683         error ("%<constexpr%> needed for in-class initialization of static "
7684                "data member %q#D of non-integral type", decl);
7685       else
7686         error ("in-class initialization of static data member %q#D of "
7687                "non-literal type", decl);
7688       return 1;
7689     }
7690
7691   /* Motion 10 at San Diego: If a static const integral data member is
7692      initialized with an integral constant expression, the initializer
7693      may appear either in the declaration (within the class), or in
7694      the definition, but not both.  If it appears in the class, the
7695      member is a member constant.  The file-scope definition is always
7696      required.  */
7697   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
7698     {
7699       error ("invalid in-class initialization of static data member "
7700              "of non-integral type %qT",
7701              type);
7702       return 1;
7703     }
7704   else if (!CP_TYPE_CONST_P (type))
7705     error ("ISO C++ forbids in-class initialization of non-const "
7706            "static member %qD",
7707            decl);
7708   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
7709     pedwarn (input_location, OPT_pedantic, "ISO C++ forbids initialization of member constant "
7710              "%qD of non-integral type %qT", decl, type);
7711
7712   return 0;
7713 }
7714
7715 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
7716    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
7717    expressions out into temporary variables so that walk_tree doesn't
7718    step into them (c++/15764).  */
7719
7720 static tree
7721 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
7722 {
7723   struct pointer_set_t *pset = (struct pointer_set_t *)data;
7724   tree expr = *expr_p;
7725   if (TREE_CODE (expr) == SAVE_EXPR)
7726     {
7727       tree op = TREE_OPERAND (expr, 0);
7728       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
7729       if (TREE_SIDE_EFFECTS (op))
7730         TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
7731       *walk_subtrees = 0;
7732     }
7733   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
7734     *walk_subtrees = 0;
7735   return NULL;
7736 }
7737
7738 /* Entry point for the above.  */
7739
7740 static void
7741 stabilize_vla_size (tree size)
7742 {
7743   struct pointer_set_t *pset = pointer_set_create ();
7744   /* Break out any function calls into temporary variables.  */
7745   cp_walk_tree (&size, stabilize_save_expr_r, pset, pset);
7746 }
7747
7748 /* Given the SIZE (i.e., number of elements) in an array, compute an
7749    appropriate index type for the array.  If non-NULL, NAME is the
7750    name of the thing being declared.  */
7751
7752 tree
7753 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
7754 {
7755   tree type;
7756   tree itype;
7757   tree osize = size;
7758   tree abi_1_itype = NULL_TREE;
7759
7760   if (error_operand_p (size))
7761     return error_mark_node;
7762
7763   type = TREE_TYPE (size);
7764   /* type_dependent_expression_p? */
7765   if (!dependent_type_p (type))
7766     {
7767       mark_rvalue_use (size);
7768
7769       if (cxx_dialect < cxx0x && TREE_CODE (size) == NOP_EXPR
7770           && TREE_SIDE_EFFECTS (size))
7771         /* In C++98, we mark a non-constant array bound with a magic
7772            NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
7773       else
7774         {
7775           size = fold_non_dependent_expr (size);
7776
7777           if (CLASS_TYPE_P (type)
7778               && CLASSTYPE_LITERAL_P (type))
7779             {
7780               size = build_expr_type_conversion (WANT_INT, size, true);
7781               if (!size)
7782                 {
7783                   if (!(complain & tf_error))
7784                     return error_mark_node;
7785                   if (name)
7786                     error ("size of array %qD has non-integral type %qT",
7787                            name, type);
7788                   else
7789                     error ("size of array has non-integral type %qT", type);
7790                   size = integer_one_node;
7791                 }
7792               if (size == error_mark_node)
7793                 return error_mark_node;
7794               type = TREE_TYPE (size);
7795               /* We didn't support this case in GCC 3.2, so don't bother
7796                  trying to model it now in ABI v1.  */
7797               abi_1_itype = error_mark_node;
7798             }
7799
7800           size = maybe_constant_value (size);
7801           if (!TREE_CONSTANT (size))
7802             size = osize;
7803         }
7804
7805       if (error_operand_p (size))
7806         return error_mark_node;
7807
7808       /* The array bound must be an integer type.  */
7809       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
7810         {
7811           if (!(complain & tf_error))
7812             return error_mark_node;
7813           if (name)
7814             error ("size of array %qD has non-integral type %qT", name, type);
7815           else
7816             error ("size of array has non-integral type %qT", type);
7817           size = integer_one_node;
7818           type = TREE_TYPE (size);
7819         }
7820     }
7821
7822   /* A type is dependent if it is...an array type constructed from any
7823      dependent type or whose size is specified by a constant expression
7824      that is value-dependent.  */
7825   /* We can only call value_dependent_expression_p on integral constant
7826      expressions; treat non-constant expressions as dependent, too.  */
7827   if (processing_template_decl
7828       && (dependent_type_p (type)
7829           || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
7830     {
7831       /* We cannot do any checking for a SIZE that isn't known to be
7832          constant. Just build the index type and mark that it requires
7833          structural equality checks.  */
7834       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7835                                            size, integer_one_node));
7836       TYPE_DEPENDENT_P (itype) = 1;
7837       TYPE_DEPENDENT_P_VALID (itype) = 1;
7838       SET_TYPE_STRUCTURAL_EQUALITY (itype);
7839       return itype;
7840     }
7841   
7842   if (!abi_version_at_least (2) && processing_template_decl
7843       && abi_1_itype == NULL_TREE)
7844     /* For abi-1, we handled all instances in templates the same way,
7845        even when they were non-dependent. This affects the manglings
7846        produced.  So, we do the normal checking for non-dependent
7847        sizes, but at the end we'll return the same type that abi-1
7848        would have, but with TYPE_CANONICAL set to the "right"
7849        value that the current ABI would provide. */
7850     abi_1_itype = build_index_type (build_min (MINUS_EXPR, sizetype,
7851                                                osize, integer_one_node));
7852
7853   /* Normally, the array-bound will be a constant.  */
7854   if (TREE_CODE (size) == INTEGER_CST)
7855     {
7856       /* Check to see if the array bound overflowed.  Make that an
7857          error, no matter how generous we're being.  */
7858       constant_expression_error (size);
7859
7860       /* An array must have a positive number of elements.  */
7861       if (INT_CST_LT (size, integer_zero_node))
7862         {
7863           if (!(complain & tf_error))
7864             return error_mark_node;
7865           if (name)
7866             error ("size of array %qD is negative", name);
7867           else
7868             error ("size of array is negative");
7869           size = integer_one_node;
7870         }
7871       /* As an extension we allow zero-sized arrays.  */
7872       else if (integer_zerop (size))
7873         {
7874           if (!(complain & tf_error))
7875             /* We must fail if performing argument deduction (as
7876                indicated by the state of complain), so that
7877                another substitution can be found.  */
7878             return error_mark_node;
7879           else if (in_system_header)
7880             /* Allow them in system headers because glibc uses them.  */;
7881           else if (name)
7882             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array %qD", name);
7883           else
7884             pedwarn (input_location, OPT_pedantic, "ISO C++ forbids zero-size array");
7885         }
7886     }
7887   else if (TREE_CONSTANT (size)
7888            /* We don't allow VLAs at non-function scopes, or during
7889               tentative template substitution.  */
7890            || !at_function_scope_p () || !(complain & tf_error))
7891     {
7892       if (!(complain & tf_error))
7893         return error_mark_node;
7894       /* `(int) &fn' is not a valid array bound.  */
7895       if (name)
7896         error ("size of array %qD is not an integral constant-expression",
7897                name);
7898       else
7899         error ("size of array is not an integral constant-expression");
7900       size = integer_one_node;
7901     }
7902   else if (pedantic && warn_vla != 0)
7903     {
7904       if (name)
7905         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
7906       else
7907         pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
7908     }
7909   else if (warn_vla > 0)
7910     {
7911       if (name)
7912         warning (OPT_Wvla, 
7913                  "variable length array %qD is used", name);
7914       else
7915         warning (OPT_Wvla, 
7916                  "variable length array is used");
7917     }
7918
7919   if (processing_template_decl && !TREE_CONSTANT (size))
7920     /* A variable sized array.  */
7921     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
7922   else
7923     {
7924       HOST_WIDE_INT saved_processing_template_decl;
7925
7926       /* Compute the index of the largest element in the array.  It is
7927          one less than the number of elements in the array.  We save
7928          and restore PROCESSING_TEMPLATE_DECL so that computations in
7929          cp_build_binary_op will be appropriately folded.  */
7930       saved_processing_template_decl = processing_template_decl;
7931       processing_template_decl = 0;
7932       itype = cp_build_binary_op (input_location,
7933                                   MINUS_EXPR,
7934                                   cp_convert (ssizetype, size),
7935                                   cp_convert (ssizetype, integer_one_node),
7936                                   tf_warning_or_error);
7937       itype = fold (itype);
7938       processing_template_decl = saved_processing_template_decl;
7939
7940       if (!TREE_CONSTANT (itype))
7941         /* A variable sized array.  */
7942         itype = variable_size (itype);
7943       /* Make sure that there was no overflow when creating to a signed
7944          index type.  (For example, on a 32-bit machine, an array with
7945          size 2^32 - 1 is too big.)  */
7946       else if (TREE_CODE (itype) == INTEGER_CST
7947                && TREE_OVERFLOW (itype))
7948         {
7949           if (!(complain & tf_error))
7950             return error_mark_node;
7951           error ("overflow in array dimension");
7952           TREE_OVERFLOW (itype) = 0;
7953         }
7954     }
7955
7956   /* Create and return the appropriate index type.  */
7957   if (abi_1_itype && abi_1_itype != error_mark_node)
7958     {
7959       tree t = build_index_type (itype);
7960       TYPE_CANONICAL (abi_1_itype) = TYPE_CANONICAL (t);
7961       itype = abi_1_itype;
7962     }
7963   else
7964     itype = build_index_type (itype);
7965
7966   /* If the index type were dependent, we would have returned early, so
7967      remember that it isn't.  */
7968   TYPE_DEPENDENT_P (itype) = 0;
7969   TYPE_DEPENDENT_P_VALID (itype) = 1;
7970   return itype;
7971 }
7972
7973 /* Returns the scope (if any) in which the entity declared by
7974    DECLARATOR will be located.  If the entity was declared with an
7975    unqualified name, NULL_TREE is returned.  */
7976
7977 tree
7978 get_scope_of_declarator (const cp_declarator *declarator)
7979 {
7980   while (declarator && declarator->kind != cdk_id)
7981     declarator = declarator->declarator;
7982
7983   /* If the declarator-id is a SCOPE_REF, the scope in which the
7984      declaration occurs is the first operand.  */
7985   if (declarator
7986       && declarator->u.id.qualifying_scope)
7987     return declarator->u.id.qualifying_scope;
7988
7989   /* Otherwise, the declarator is not a qualified name; the entity will
7990      be declared in the current scope.  */
7991   return NULL_TREE;
7992 }
7993
7994 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
7995    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
7996    with this type.  */
7997
7998 static tree
7999 create_array_type_for_decl (tree name, tree type, tree size)
8000 {
8001   tree itype = NULL_TREE;
8002
8003   /* If things have already gone awry, bail now.  */
8004   if (type == error_mark_node || size == error_mark_node)
8005     return error_mark_node;
8006
8007   /* 8.3.4/1: If the type of the identifier of D contains the auto
8008      type-specifier, the program is ill-formed.  */
8009   if (pedantic && type_uses_auto (type))
8010     pedwarn (input_location, OPT_pedantic,
8011              "declaration of %qD as array of %<auto%>", name);
8012
8013   /* If there are some types which cannot be array elements,
8014      issue an error-message and return.  */
8015   switch (TREE_CODE (type))
8016     {
8017     case VOID_TYPE:
8018       if (name)
8019         error ("declaration of %qD as array of void", name);
8020       else
8021         error ("creating array of void");
8022       return error_mark_node;
8023
8024     case FUNCTION_TYPE:
8025       if (name)
8026         error ("declaration of %qD as array of functions", name);
8027       else
8028         error ("creating array of functions");
8029       return error_mark_node;
8030
8031     case REFERENCE_TYPE:
8032       if (name)
8033         error ("declaration of %qD as array of references", name);
8034       else
8035         error ("creating array of references");
8036       return error_mark_node;
8037
8038     case METHOD_TYPE:
8039       if (name)
8040         error ("declaration of %qD as array of function members", name);
8041       else
8042         error ("creating array of function members");
8043       return error_mark_node;
8044
8045     default:
8046       break;
8047     }
8048
8049   /* [dcl.array]
8050
8051      The constant expressions that specify the bounds of the arrays
8052      can be omitted only for the first member of the sequence.  */
8053   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
8054     {
8055       if (name)
8056         error ("declaration of %qD as multidimensional array must "
8057                "have bounds for all dimensions except the first",
8058                name);
8059       else
8060         error ("multidimensional array must have bounds for all "
8061                "dimensions except the first");
8062
8063       return error_mark_node;
8064     }
8065
8066   /* Figure out the index type for the array.  */
8067   if (size)
8068     itype = compute_array_index_type (name, size, tf_warning_or_error);
8069
8070   /* [dcl.array]
8071      T is called the array element type; this type shall not be [...] an
8072      abstract class type.  */
8073   abstract_virtuals_error (name, type);
8074
8075   return build_cplus_array_type (type, itype);
8076 }
8077
8078 /* Check that it's OK to declare a function with the indicated TYPE.
8079    SFK indicates the kind of special function (if any) that this
8080    function is.  OPTYPE is the type given in a conversion operator
8081    declaration, or the class type for a constructor/destructor.
8082    Returns the actual return type of the function; that
8083    may be different than TYPE if an error occurs, or for certain
8084    special functions.  */
8085
8086 static tree
8087 check_special_function_return_type (special_function_kind sfk,
8088                                     tree type,
8089                                     tree optype)
8090 {
8091   switch (sfk)
8092     {
8093     case sfk_constructor:
8094       if (type)
8095         error ("return type specification for constructor invalid");
8096
8097       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8098         type = build_pointer_type (optype);
8099       else
8100         type = void_type_node;
8101       break;
8102
8103     case sfk_destructor:
8104       if (type)
8105         error ("return type specification for destructor invalid");
8106       /* We can't use the proper return type here because we run into
8107          problems with ambiguous bases and covariant returns.
8108          Java classes are left unchanged because (void *) isn't a valid
8109          Java type, and we don't want to change the Java ABI.  */
8110       if (targetm.cxx.cdtor_returns_this () && !TYPE_FOR_JAVA (optype))
8111         type = build_pointer_type (void_type_node);
8112       else
8113         type = void_type_node;
8114       break;
8115
8116     case sfk_conversion:
8117       if (type)
8118         error ("return type specified for %<operator %T%>",  optype);
8119       type = optype;
8120       break;
8121
8122     default:
8123       gcc_unreachable ();
8124     }
8125
8126   return type;
8127 }
8128
8129 /* A variable or data member (whose unqualified name is IDENTIFIER)
8130    has been declared with the indicated TYPE.  If the TYPE is not
8131    acceptable, issue an error message and return a type to use for
8132    error-recovery purposes.  */
8133
8134 tree
8135 check_var_type (tree identifier, tree type)
8136 {
8137   if (VOID_TYPE_P (type))
8138     {
8139       if (!identifier)
8140         error ("unnamed variable or field declared void");
8141       else if (TREE_CODE (identifier) == IDENTIFIER_NODE)
8142         {
8143           gcc_assert (!IDENTIFIER_OPNAME_P (identifier));
8144           error ("variable or field %qE declared void", identifier);
8145         }
8146       else
8147         error ("variable or field declared void");
8148       type = error_mark_node;
8149     }
8150
8151   return type;
8152 }
8153
8154 /* Given declspecs and a declarator (abstract or otherwise), determine
8155    the name and type of the object declared and construct a DECL node
8156    for it.
8157
8158    DECLSPECS points to the representation of declaration-specifier
8159    sequence that precedes declarator.
8160
8161    DECL_CONTEXT says which syntactic context this declaration is in:
8162      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
8163      FUNCDEF for a function definition.  Like NORMAL but a few different
8164       error messages in each case.  Return value may be zero meaning
8165       this definition is too screwy to try to parse.
8166      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
8167       handle member functions (which have FIELD context).
8168       Return value may be zero meaning this definition is too screwy to
8169       try to parse.
8170      PARM for a parameter declaration (either within a function prototype
8171       or before a function body).  Make a PARM_DECL, or return void_type_node.
8172      TPARM for a template parameter declaration.
8173      CATCHPARM for a parameter declaration before a catch clause.
8174      TYPENAME if for a typename (in a cast or sizeof).
8175       Don't make a DECL node; just return the ..._TYPE node.
8176      FIELD for a struct or union field; make a FIELD_DECL.
8177      BITFIELD for a field with specified width.
8178
8179    INITIALIZED is as for start_decl.
8180
8181    ATTRLIST is a pointer to the list of attributes, which may be NULL
8182    if there are none; *ATTRLIST may be modified if attributes from inside
8183    the declarator should be applied to the declaration.
8184
8185    When this function is called, scoping variables (such as
8186    CURRENT_CLASS_TYPE) should reflect the scope in which the
8187    declaration occurs, not the scope in which the new declaration will
8188    be placed.  For example, on:
8189
8190      void S::f() { ... }
8191
8192    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
8193    should not be `S'.
8194
8195    Returns a DECL (if a declarator is present), a TYPE (if there is no
8196    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
8197    error occurs. */
8198
8199 tree
8200 grokdeclarator (const cp_declarator *declarator,
8201                 const cp_decl_specifier_seq *declspecs,
8202                 enum decl_context decl_context,
8203                 int initialized,
8204                 tree* attrlist)
8205 {
8206   tree type = NULL_TREE;
8207   int longlong = 0;
8208   int explicit_int128 = 0;
8209   int virtualp, explicitp, friendp, inlinep, staticp;
8210   int explicit_int = 0;
8211   int explicit_char = 0;
8212   int defaulted_int = 0;
8213   tree dependent_name = NULL_TREE;
8214
8215   tree typedef_decl = NULL_TREE;
8216   const char *name = NULL;
8217   tree typedef_type = NULL_TREE;
8218   /* True if this declarator is a function definition.  */
8219   bool funcdef_flag = false;
8220   cp_declarator_kind innermost_code = cdk_error;
8221   int bitfield = 0;
8222 #if 0
8223   /* See the code below that used this.  */
8224   tree decl_attr = NULL_TREE;
8225 #endif
8226
8227   /* Keep track of what sort of function is being processed
8228      so that we can warn about default return values, or explicit
8229      return values which do not match prescribed defaults.  */
8230   special_function_kind sfk = sfk_none;
8231
8232   tree dname = NULL_TREE;
8233   tree ctor_return_type = NULL_TREE;
8234   enum overload_flags flags = NO_SPECIAL;
8235   /* cv-qualifiers that apply to the declarator, for a declaration of
8236      a member function.  */
8237   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
8238   /* virt-specifiers that apply to the declarator, for a declaration of
8239      a member function.  */
8240   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
8241   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
8242   int type_quals;
8243   tree raises = NULL_TREE;
8244   int template_count = 0;
8245   tree returned_attrs = NULL_TREE;
8246   tree parms = NULL_TREE;
8247   const cp_declarator *id_declarator;
8248   /* The unqualified name of the declarator; either an
8249      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
8250   tree unqualified_id;
8251   /* The class type, if any, in which this entity is located,
8252      or NULL_TREE if none.  Note that this value may be different from
8253      the current class type; for example if an attempt is made to declare
8254      "A::f" inside "B", this value will be "A".  */
8255   tree ctype = current_class_type;
8256   /* The NAMESPACE_DECL for the namespace in which this entity is
8257      located.  If an unqualified name is used to declare the entity,
8258      this value will be NULL_TREE, even if the entity is located at
8259      namespace scope.  */
8260   tree in_namespace = NULL_TREE;
8261   cp_storage_class storage_class;
8262   bool unsigned_p, signed_p, short_p, long_p, thread_p;
8263   bool type_was_error_mark_node = false;
8264   bool parameter_pack_p = declarator? declarator->parameter_pack_p : false;
8265   bool template_type_arg = false;
8266   bool template_parm_flag = false;
8267   bool constexpr_p = declspecs->specs[(int) ds_constexpr];
8268   const char *errmsg;
8269
8270   signed_p = declspecs->specs[(int)ds_signed];
8271   unsigned_p = declspecs->specs[(int)ds_unsigned];
8272   short_p = declspecs->specs[(int)ds_short];
8273   long_p = declspecs->specs[(int)ds_long];
8274   longlong = declspecs->specs[(int)ds_long] >= 2;
8275   explicit_int128 = declspecs->explicit_int128_p;
8276   thread_p = declspecs->specs[(int)ds_thread];
8277
8278   if (decl_context == FUNCDEF)
8279     funcdef_flag = true, decl_context = NORMAL;
8280   else if (decl_context == MEMFUNCDEF)
8281     funcdef_flag = true, decl_context = FIELD;
8282   else if (decl_context == BITFIELD)
8283     bitfield = 1, decl_context = FIELD;
8284   else if (decl_context == TEMPLATE_TYPE_ARG)
8285     template_type_arg = true, decl_context = TYPENAME;
8286   else if (decl_context == TPARM)
8287     template_parm_flag = true, decl_context = PARM;
8288
8289   if (initialized > 1)
8290     funcdef_flag = true;
8291
8292   /* Look inside a declarator for the name being declared
8293      and get it as a string, for an error message.  */
8294   for (id_declarator = declarator;
8295        id_declarator;
8296        id_declarator = id_declarator->declarator)
8297     {
8298       if (id_declarator->kind != cdk_id)
8299         innermost_code = id_declarator->kind;
8300
8301       switch (id_declarator->kind)
8302         {
8303         case cdk_function:
8304           if (id_declarator->declarator
8305               && id_declarator->declarator->kind == cdk_id)
8306             {
8307               sfk = id_declarator->declarator->u.id.sfk;
8308               if (sfk == sfk_destructor)
8309                 flags = DTOR_FLAG;
8310             }
8311           break;
8312
8313         case cdk_id:
8314           {
8315             tree qualifying_scope = id_declarator->u.id.qualifying_scope;
8316             tree decl = id_declarator->u.id.unqualified_name;
8317             if (!decl)
8318               break;
8319             if (qualifying_scope)
8320               {
8321                 if (at_function_scope_p ())
8322                   {
8323                     /* [dcl.meaning] 
8324
8325                        A declarator-id shall not be qualified except
8326                        for ... 
8327
8328                        None of the cases are permitted in block
8329                        scope.  */
8330                     if (qualifying_scope == global_namespace)
8331                       error ("invalid use of qualified-name %<::%D%>",
8332                              decl);
8333                     else if (TYPE_P (qualifying_scope))
8334                       error ("invalid use of qualified-name %<%T::%D%>",
8335                              qualifying_scope, decl);
8336                     else 
8337                       error ("invalid use of qualified-name %<%D::%D%>",
8338                              qualifying_scope, decl);
8339                     return error_mark_node;
8340                   }
8341                 else if (TYPE_P (qualifying_scope))
8342                   {
8343                     ctype = qualifying_scope;
8344                     if (innermost_code != cdk_function
8345                         && current_class_type
8346                         && !UNIQUELY_DERIVED_FROM_P (ctype,
8347                                                      current_class_type))
8348                       {
8349                         error ("type %qT is not derived from type %qT",
8350                                ctype, current_class_type);
8351                         return error_mark_node;
8352                       }
8353                   }
8354                 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
8355                   in_namespace = qualifying_scope;
8356               }
8357             switch (TREE_CODE (decl))
8358               {
8359               case BIT_NOT_EXPR:
8360                 {
8361                   tree type;
8362
8363                   if (innermost_code != cdk_function)
8364                     {
8365                       error ("declaration of %qD as non-function", decl);
8366                       return error_mark_node;
8367                     }
8368                   else if (!qualifying_scope
8369                            && !(current_class_type && at_class_scope_p ()))
8370                     {
8371                       error ("declaration of %qD as non-member", decl);
8372                       return error_mark_node;
8373                     }
8374
8375                   type = TREE_OPERAND (decl, 0);
8376                   if (TYPE_P (type))
8377                     type = constructor_name (type);
8378                   name = identifier_to_locale (IDENTIFIER_POINTER (type));
8379                   dname = decl;
8380                 }
8381                 break;
8382
8383               case TEMPLATE_ID_EXPR:
8384                 {
8385                   tree fns = TREE_OPERAND (decl, 0);
8386
8387                   dname = fns;
8388                   if (TREE_CODE (dname) != IDENTIFIER_NODE)
8389                     {
8390                       gcc_assert (is_overloaded_fn (dname));
8391                       dname = DECL_NAME (get_first_fn (dname));
8392                     }
8393                 }
8394                 /* Fall through.  */
8395
8396               case IDENTIFIER_NODE:
8397                 if (TREE_CODE (decl) == IDENTIFIER_NODE)
8398                   dname = decl;
8399
8400                 if (C_IS_RESERVED_WORD (dname))
8401                   {
8402                     error ("declarator-id missing; using reserved word %qD",
8403                            dname);
8404                     name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8405                   }
8406                 else if (!IDENTIFIER_TYPENAME_P (dname))
8407                   name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8408                 else
8409                   {
8410                     gcc_assert (flags == NO_SPECIAL);
8411                     flags = TYPENAME_FLAG;
8412                     ctor_return_type = TREE_TYPE (dname);
8413                     sfk = sfk_conversion;
8414                     if (is_typename_at_global_scope (dname))
8415                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
8416                     else
8417                       name = "<invalid operator>";
8418                   }
8419                 break;
8420
8421               default:
8422                 gcc_unreachable ();
8423               }
8424             break;
8425           }
8426
8427         case cdk_array:
8428         case cdk_pointer:
8429         case cdk_reference:
8430         case cdk_ptrmem:
8431           break;
8432
8433         case cdk_error:
8434           return error_mark_node;
8435
8436         default:
8437           gcc_unreachable ();
8438         }
8439       if (id_declarator->kind == cdk_id)
8440         break;
8441     }
8442
8443   /* [dcl.fct.edf]
8444
8445      The declarator in a function-definition shall have the form
8446      D1 ( parameter-declaration-clause) ...  */
8447   if (funcdef_flag && innermost_code != cdk_function)
8448     {
8449       error ("function definition does not declare parameters");
8450       return error_mark_node;
8451     }
8452
8453   if (((dname && IDENTIFIER_OPNAME_P (dname)) || flags == TYPENAME_FLAG)
8454       && innermost_code != cdk_function
8455       && ! (ctype && !declspecs->any_specifiers_p))
8456     {
8457       error ("declaration of %qD as non-function", dname);
8458       return error_mark_node;
8459     }
8460
8461   if (dname && IDENTIFIER_OPNAME_P (dname))
8462     {
8463       if (declspecs->specs[(int)ds_typedef])
8464         {
8465           error ("declaration of %qD as %<typedef%>", dname);
8466           return error_mark_node;
8467         }
8468       else if (decl_context == PARM || decl_context == CATCHPARM)
8469         {
8470           error ("declaration of %qD as parameter", dname);
8471           return error_mark_node;
8472         }
8473     }
8474
8475   /* Anything declared one level down from the top level
8476      must be one of the parameters of a function
8477      (because the body is at least two levels down).  */
8478
8479   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
8480      by not allowing C++ class definitions to specify their parameters
8481      with xdecls (must be spec.d in the parmlist).
8482
8483      Since we now wait to push a class scope until we are sure that
8484      we are in a legitimate method context, we must set oldcname
8485      explicitly (since current_class_name is not yet alive).
8486
8487      We also want to avoid calling this a PARM if it is in a namespace.  */
8488
8489   if (decl_context == NORMAL && !toplevel_bindings_p ())
8490     {
8491       struct cp_binding_level *b = current_binding_level;
8492       current_binding_level = b->level_chain;
8493       if (current_binding_level != 0 && toplevel_bindings_p ())
8494         decl_context = PARM;
8495       current_binding_level = b;
8496     }
8497
8498   if (name == NULL)
8499     name = decl_context == PARM ? "parameter" : "type name";
8500
8501   if (constexpr_p && declspecs->specs[(int)ds_typedef])
8502     {
8503       error ("%<constexpr%> cannot appear in a typedef declaration");
8504       return error_mark_node;
8505     }
8506
8507   /* If there were multiple types specified in the decl-specifier-seq,
8508      issue an error message.  */
8509   if (declspecs->multiple_types_p)
8510     {
8511       error ("two or more data types in declaration of %qs", name);
8512       return error_mark_node;
8513     }
8514
8515   if (declspecs->conflicting_specifiers_p)
8516     {
8517       error ("conflicting specifiers in declaration of %qs", name);
8518       return error_mark_node;
8519     }
8520
8521   /* Extract the basic type from the decl-specifier-seq.  */
8522   type = declspecs->type;
8523   if (type == error_mark_node)
8524     {
8525       type = NULL_TREE;
8526       type_was_error_mark_node = true;
8527     }
8528   /* If the entire declaration is itself tagged as deprecated then
8529      suppress reports of deprecated items.  */
8530   if (type && TREE_DEPRECATED (type)
8531       && deprecated_state != DEPRECATED_SUPPRESS)
8532     warn_deprecated_use (type, NULL_TREE);
8533   if (type && TREE_CODE (type) == TYPE_DECL)
8534     {
8535       typedef_decl = type;
8536       type = TREE_TYPE (typedef_decl);
8537       if (TREE_DEPRECATED (type)
8538           && DECL_ARTIFICIAL (typedef_decl)
8539           && deprecated_state != DEPRECATED_SUPPRESS)
8540         warn_deprecated_use (type, NULL_TREE);
8541     }
8542   /* No type at all: default to `int', and set DEFAULTED_INT
8543      because it was not a user-defined typedef.  */
8544   if (type == NULL_TREE && (signed_p || unsigned_p || long_p || short_p))
8545     {
8546       /* These imply 'int'.  */
8547       type = integer_type_node;
8548       defaulted_int = 1;
8549     }
8550   /* Gather flags.  */
8551   explicit_int = declspecs->explicit_int_p;
8552   explicit_char = declspecs->explicit_char_p;
8553
8554 #if 0
8555   /* See the code below that used this.  */
8556   if (typedef_decl)
8557     decl_attr = DECL_ATTRIBUTES (typedef_decl);
8558 #endif
8559   typedef_type = type;
8560
8561
8562   if (sfk != sfk_conversion)
8563     ctor_return_type = ctype;
8564
8565   if (sfk != sfk_none)
8566     type = check_special_function_return_type (sfk, type,
8567                                                ctor_return_type);
8568   else if (type == NULL_TREE)
8569     {
8570       int is_main;
8571
8572       explicit_int = -1;
8573
8574       /* We handle `main' specially here, because 'main () { }' is so
8575          common.  With no options, it is allowed.  With -Wreturn-type,
8576          it is a warning.  It is only an error with -pedantic-errors.  */
8577       is_main = (funcdef_flag
8578                  && dname && TREE_CODE (dname) == IDENTIFIER_NODE
8579                  && MAIN_NAME_P (dname)
8580                  && ctype == NULL_TREE
8581                  && in_namespace == NULL_TREE
8582                  && current_namespace == global_namespace);
8583
8584       if (type_was_error_mark_node)
8585         /* We've already issued an error, don't complain more.  */;
8586       else if (in_system_header || flag_ms_extensions)
8587         /* Allow it, sigh.  */;
8588       else if (! is_main)
8589         permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
8590       else if (pedantic)
8591         pedwarn (input_location, OPT_pedantic,
8592                  "ISO C++ forbids declaration of %qs with no type", name);
8593       else
8594         warning (OPT_Wreturn_type,
8595                  "ISO C++ forbids declaration of %qs with no type", name);
8596
8597       type = integer_type_node;
8598     }
8599
8600   ctype = NULL_TREE;
8601
8602   /* Now process the modifiers that were specified
8603      and check for invalid combinations.  */
8604
8605   /* Long double is a special combination.  */
8606   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
8607     {
8608       long_p = false;
8609       type = cp_build_qualified_type (long_double_type_node,
8610                                       cp_type_quals (type));
8611     }
8612
8613   /* Check all other uses of type modifiers.  */
8614
8615   if (unsigned_p || signed_p || long_p || short_p)
8616     {
8617       int ok = 0;
8618
8619       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
8620         error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8621       else if (signed_p && unsigned_p)
8622         error ("%<signed%> and %<unsigned%> specified together for %qs", name);
8623       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
8624         error ("%<long long%> invalid for %qs", name);
8625       else if (explicit_int128 && TREE_CODE (type) != INTEGER_TYPE)
8626         error ("%<__int128%> invalid for %qs", name);
8627       else if (long_p && TREE_CODE (type) == REAL_TYPE)
8628         error ("%<long%> invalid for %qs", name);
8629       else if (short_p && TREE_CODE (type) == REAL_TYPE)
8630         error ("%<short%> invalid for %qs", name);
8631       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
8632         error ("%<long%> or %<short%> invalid for %qs", name);
8633       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_int128)
8634         error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
8635       else if ((long_p || short_p) && explicit_char)
8636         error ("%<long%> or %<short%> specified with char for %qs", name);
8637       else if (long_p && short_p)
8638         error ("%<long%> and %<short%> specified together for %qs", name);
8639       else if (type == char16_type_node || type == char32_type_node)
8640         {
8641           if (signed_p || unsigned_p)
8642             error ("%<signed%> or %<unsigned%> invalid for %qs", name);
8643           else if (short_p || long_p)
8644             error ("%<short%> or %<long%> invalid for %qs", name);
8645         }
8646       else
8647         {
8648           ok = 1;
8649           if (!explicit_int && !defaulted_int && !explicit_char && !explicit_int128 && pedantic)
8650             {
8651               pedwarn (input_location, OPT_pedantic, 
8652                        "long, short, signed or unsigned used invalidly for %qs",
8653                        name);
8654               if (flag_pedantic_errors)
8655                 ok = 0;
8656             }
8657           if (explicit_int128)
8658             {
8659               if (int128_integer_type_node == NULL_TREE)
8660                 {
8661                   error ("%<__int128%> is not supported by this target");
8662                   ok = 0;
8663                 }
8664               else if (pedantic)
8665                 {
8666                   pedwarn (input_location, OPT_pedantic,
8667                            "ISO C++ does not support %<__int128%> for %qs",
8668                            name);
8669                   if (flag_pedantic_errors)
8670                     ok = 0;
8671                 }
8672             }
8673         }
8674
8675       /* Discard the type modifiers if they are invalid.  */
8676       if (! ok)
8677         {
8678           unsigned_p = false;
8679           signed_p = false;
8680           long_p = false;
8681           short_p = false;
8682           longlong = 0;
8683           explicit_int128 = false;
8684         }
8685     }
8686
8687   /* Decide whether an integer type is signed or not.
8688      Optionally treat bitfields as signed by default.  */
8689   if (unsigned_p
8690       /* [class.bit]
8691
8692          It is implementation-defined whether a plain (neither
8693          explicitly signed or unsigned) char, short, int, or long
8694          bit-field is signed or unsigned.
8695
8696          Naturally, we extend this to long long as well.  Note that
8697          this does not include wchar_t.  */
8698       || (bitfield && !flag_signed_bitfields
8699           && !signed_p
8700           /* A typedef for plain `int' without `signed' can be
8701              controlled just like plain `int', but a typedef for
8702              `signed int' cannot be so controlled.  */
8703           && !(typedef_decl
8704                && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
8705           && TREE_CODE (type) == INTEGER_TYPE
8706           && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
8707     {
8708       if (explicit_int128)
8709         type = int128_unsigned_type_node;
8710       else if (longlong)
8711         type = long_long_unsigned_type_node;
8712       else if (long_p)
8713         type = long_unsigned_type_node;
8714       else if (short_p)
8715         type = short_unsigned_type_node;
8716       else if (type == char_type_node)
8717         type = unsigned_char_type_node;
8718       else if (typedef_decl)
8719         type = unsigned_type_for (type);
8720       else
8721         type = unsigned_type_node;
8722     }
8723   else if (signed_p && type == char_type_node)
8724     type = signed_char_type_node;
8725   else if (explicit_int128)
8726     type = int128_integer_type_node;
8727   else if (longlong)
8728     type = long_long_integer_type_node;
8729   else if (long_p)
8730     type = long_integer_type_node;
8731   else if (short_p)
8732     type = short_integer_type_node;
8733
8734   if (declspecs->specs[(int)ds_complex])
8735     {
8736       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
8737         error ("complex invalid for %qs", name);
8738       /* If we just have "complex", it is equivalent to
8739          "complex double", but if any modifiers at all are specified it is
8740          the complex form of TYPE.  E.g, "complex short" is
8741          "complex short int".  */
8742       else if (defaulted_int && ! longlong && ! explicit_int128
8743                && ! (long_p || short_p || signed_p || unsigned_p))
8744         type = complex_double_type_node;
8745       else if (type == integer_type_node)
8746         type = complex_integer_type_node;
8747       else if (type == float_type_node)
8748         type = complex_float_type_node;
8749       else if (type == double_type_node)
8750         type = complex_double_type_node;
8751       else if (type == long_double_type_node)
8752         type = complex_long_double_type_node;
8753       else
8754         type = build_complex_type (type);
8755     }
8756
8757   type_quals = TYPE_UNQUALIFIED;
8758   if (declspecs->specs[(int)ds_const])
8759     type_quals |= TYPE_QUAL_CONST;
8760   if (declspecs->specs[(int)ds_volatile])
8761     type_quals |= TYPE_QUAL_VOLATILE;
8762   if (declspecs->specs[(int)ds_restrict])
8763     type_quals |= TYPE_QUAL_RESTRICT;
8764   if (sfk == sfk_conversion && type_quals != TYPE_UNQUALIFIED)
8765     error ("qualifiers are not allowed on declaration of %<operator %T%>",
8766            ctor_return_type);
8767
8768   type_quals |= cp_type_quals (type);
8769   type = cp_build_qualified_type_real
8770     (type, type_quals, ((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)
8771                          ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
8772   /* We might have ignored or rejected some of the qualifiers.  */
8773   type_quals = cp_type_quals (type);
8774
8775   staticp = 0;
8776   inlinep = !! declspecs->specs[(int)ds_inline];
8777   virtualp = !! declspecs->specs[(int)ds_virtual];
8778   explicitp = !! declspecs->specs[(int)ds_explicit];
8779
8780   storage_class = declspecs->storage_class;
8781   if (storage_class == sc_static)
8782     staticp = 1 + (decl_context == FIELD);
8783
8784   if (virtualp && staticp == 2)
8785     {
8786       error ("member %qD cannot be declared both virtual and static", dname);
8787       storage_class = sc_none;
8788       staticp = 0;
8789     }
8790   friendp = !! declspecs->specs[(int)ds_friend];
8791
8792   if (dependent_name && !friendp)
8793     {
8794       error ("%<%T::%D%> is not a valid declarator", ctype, dependent_name);
8795       return error_mark_node;
8796     }
8797
8798   /* Issue errors about use of storage classes for parameters.  */
8799   if (decl_context == PARM)
8800     {
8801       if (declspecs->specs[(int)ds_typedef])
8802         {
8803           error ("typedef declaration invalid in parameter declaration");
8804           return error_mark_node;
8805         }
8806       else if (template_parm_flag && storage_class != sc_none)
8807         {
8808           error ("storage class specified for template parameter %qs", name);
8809           return error_mark_node;
8810         }
8811       else if (storage_class == sc_static
8812                || storage_class == sc_extern
8813                || thread_p)
8814         error ("storage class specifiers invalid in parameter declarations");
8815
8816       /* Function parameters cannot be constexpr.  If we saw one, moan
8817          and pretend it wasn't there.  */
8818       if (constexpr_p)
8819         {
8820           error ("a parameter cannot be declared %<constexpr%>");
8821           constexpr_p = 0;
8822         }
8823     }
8824
8825   /* Give error if `virtual' is used outside of class declaration.  */
8826   if (virtualp
8827       && (current_class_name == NULL_TREE || decl_context != FIELD))
8828     {
8829       error ("%<virtual%> outside class declaration");
8830       virtualp = 0;
8831     }
8832
8833   /* Static anonymous unions are dealt with here.  */
8834   if (staticp && decl_context == TYPENAME
8835       && declspecs->type
8836       && ANON_AGGR_TYPE_P (declspecs->type))
8837     decl_context = FIELD;
8838
8839   /* Warn about storage classes that are invalid for certain
8840      kinds of declarations (parameters, typenames, etc.).  */
8841   if (thread_p
8842       && ((storage_class
8843            && storage_class != sc_extern
8844            && storage_class != sc_static)
8845           || declspecs->specs[(int)ds_typedef]))
8846     {
8847       error ("multiple storage classes in declaration of %qs", name);
8848       thread_p = false;
8849     }
8850   if (decl_context != NORMAL
8851       && ((storage_class != sc_none
8852            && storage_class != sc_mutable)
8853           || thread_p))
8854     {
8855       if ((decl_context == PARM || decl_context == CATCHPARM)
8856           && (storage_class == sc_register
8857               || storage_class == sc_auto))
8858         ;
8859       else if (declspecs->specs[(int)ds_typedef])
8860         ;
8861       else if (decl_context == FIELD
8862                /* C++ allows static class elements.  */
8863                && storage_class == sc_static)
8864         /* C++ also allows inlines and signed and unsigned elements,
8865            but in those cases we don't come in here.  */
8866         ;
8867       else
8868         {
8869           if (decl_context == FIELD)
8870             error ("storage class specified for %qs", name);
8871           else
8872             {
8873               if (decl_context == PARM || decl_context == CATCHPARM)
8874                 error ("storage class specified for parameter %qs", name);
8875               else
8876                 error ("storage class specified for typename");
8877             }
8878           if (storage_class == sc_register
8879               || storage_class == sc_auto
8880               || storage_class == sc_extern
8881               || thread_p)
8882             storage_class = sc_none;
8883         }
8884     }
8885   else if (storage_class == sc_extern && funcdef_flag
8886            && ! toplevel_bindings_p ())
8887     error ("nested function %qs declared %<extern%>", name);
8888   else if (toplevel_bindings_p ())
8889     {
8890       if (storage_class == sc_auto)
8891         error ("top-level declaration of %qs specifies %<auto%>", name);
8892     }
8893   else if (thread_p
8894            && storage_class != sc_extern
8895            && storage_class != sc_static)
8896     {
8897       error ("function-scope %qs implicitly auto and declared %<__thread%>",
8898              name);
8899       thread_p = false;
8900     }
8901
8902   if (storage_class && friendp)
8903     {
8904       error ("storage class specifiers invalid in friend function declarations");
8905       storage_class = sc_none;
8906       staticp = 0;
8907     }
8908
8909   if (!id_declarator)
8910     unqualified_id = NULL_TREE;
8911   else
8912     {
8913       unqualified_id = id_declarator->u.id.unqualified_name;
8914       switch (TREE_CODE (unqualified_id))
8915         {
8916         case BIT_NOT_EXPR:
8917           unqualified_id = TREE_OPERAND (unqualified_id, 0);
8918           if (TYPE_P (unqualified_id))
8919             unqualified_id = constructor_name (unqualified_id);
8920           break;
8921
8922         case IDENTIFIER_NODE:
8923         case TEMPLATE_ID_EXPR:
8924           break;
8925
8926         default:
8927           gcc_unreachable ();
8928         }
8929     }
8930
8931   /* Determine the type of the entity declared by recurring on the
8932      declarator.  */
8933   for (; declarator; declarator = declarator->declarator)
8934     {
8935       const cp_declarator *inner_declarator;
8936       tree attrs;
8937
8938       if (type == error_mark_node)
8939         return error_mark_node;
8940
8941       attrs = declarator->attributes;
8942       if (attrs)
8943         {
8944           int attr_flags;
8945
8946           attr_flags = 0;
8947           if (declarator == NULL || declarator->kind == cdk_id)
8948             attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
8949           if (declarator->kind == cdk_function)
8950             attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
8951           if (declarator->kind == cdk_array)
8952             attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
8953           returned_attrs = decl_attributes (&type,
8954                                             chainon (returned_attrs, attrs),
8955                                             attr_flags);
8956         }
8957
8958       if (declarator->kind == cdk_id)
8959         break;
8960
8961       inner_declarator = declarator->declarator;
8962
8963       switch (declarator->kind)
8964         {
8965         case cdk_array:
8966           type = create_array_type_for_decl (dname, type,
8967                                              declarator->u.array.bounds);
8968           break;
8969
8970         case cdk_function:
8971           {
8972             tree arg_types;
8973             int funcdecl_p;
8974
8975             /* Declaring a function type.
8976                Make sure we have a valid type for the function to return.  */
8977
8978             if (type_quals != TYPE_UNQUALIFIED)
8979               {
8980                 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
8981                   warning (OPT_Wignored_qualifiers,
8982                            "type qualifiers ignored on function return type");
8983                 /* We now know that the TYPE_QUALS don't apply to the
8984                    decl, but to its return type.  */
8985                 type_quals = TYPE_UNQUALIFIED;
8986               }
8987             errmsg = targetm.invalid_return_type (type);
8988             if (errmsg)
8989               {
8990                 error (errmsg);
8991                 type = integer_type_node;
8992               }
8993
8994             /* Error about some types functions can't return.  */
8995
8996             if (TREE_CODE (type) == FUNCTION_TYPE)
8997               {
8998                 error ("%qs declared as function returning a function", name);
8999                 return error_mark_node;
9000               }
9001             if (TREE_CODE (type) == ARRAY_TYPE)
9002               {
9003                 error ("%qs declared as function returning an array", name);
9004                 return error_mark_node;
9005               }
9006
9007             /* Pick up type qualifiers which should be applied to `this'.  */
9008             memfn_quals = declarator->u.function.qualifiers;
9009             /* Pick up virt-specifiers.  */
9010             virt_specifiers = declarator->u.function.virt_specifiers;
9011             /* Pick up the exception specifications.  */
9012             raises = declarator->u.function.exception_specification;
9013
9014             /* Say it's a definition only for the CALL_EXPR
9015                closest to the identifier.  */
9016             funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
9017
9018             /* Handle a late-specified return type.  */
9019             if (funcdecl_p)
9020               {
9021                 if (type_uses_auto (type))
9022                   {
9023                     if (!declarator->u.function.late_return_type)
9024                       {
9025                         error ("%qs function uses %<auto%> type specifier without"
9026                                " late return type", name);
9027                         return error_mark_node;
9028                       }
9029                     else if (!is_auto (type))
9030                       {
9031                         error ("%qs function with late return type has"
9032                                " %qT as its type rather than plain %<auto%>",
9033                                name, type);
9034                         return error_mark_node;
9035                       }
9036                   }
9037                 else if (declarator->u.function.late_return_type)
9038                   {
9039                     error ("%qs function with late return type not declared"
9040                            " with %<auto%> type specifier", name);
9041                     return error_mark_node;
9042                   }
9043               }
9044             type = splice_late_return_type
9045               (type, declarator->u.function.late_return_type);
9046             if (type == error_mark_node)
9047               return error_mark_node;
9048
9049             if (ctype == NULL_TREE
9050                 && decl_context == FIELD
9051                 && funcdecl_p
9052                 && (friendp == 0 || dname == current_class_name))
9053               ctype = current_class_type;
9054
9055             if (ctype && (sfk == sfk_constructor
9056                           || sfk == sfk_destructor))
9057               {
9058                 /* We are within a class's scope. If our declarator name
9059                    is the same as the class name, and we are defining
9060                    a function, then it is a constructor/destructor, and
9061                    therefore returns a void type.  */
9062
9063                 /* ISO C++ 12.4/2.  A destructor may not be declared
9064                    const or volatile.  A destructor may not be
9065                    static.
9066
9067                    ISO C++ 12.1.  A constructor may not be declared
9068                    const or volatile.  A constructor may not be
9069                    virtual.  A constructor may not be static.  */
9070                 if (staticp == 2)
9071                   error ((flags == DTOR_FLAG)
9072                          ? "destructor cannot be static member function"
9073                          : "constructor cannot be static member function");
9074                 if (memfn_quals)
9075                   {
9076                     error ((flags == DTOR_FLAG)
9077                            ? "destructors may not be cv-qualified"
9078                            : "constructors may not be cv-qualified");
9079                     memfn_quals = TYPE_UNQUALIFIED;
9080                   }
9081
9082                 if (decl_context == FIELD
9083                     && !member_function_or_else (ctype,
9084                                                  current_class_type,
9085                                                  flags))
9086                   return error_mark_node;
9087
9088                 if (flags != DTOR_FLAG)
9089                   {
9090                     /* It's a constructor.  */
9091                     if (explicitp == 1)
9092                       explicitp = 2;
9093                     if (virtualp)
9094                       {
9095                         permerror (input_location, "constructors cannot be declared virtual");
9096                         virtualp = 0;
9097                       }
9098                     if (decl_context == FIELD
9099                         && sfk != sfk_constructor)
9100                       return error_mark_node;
9101                   }
9102                 if (decl_context == FIELD)
9103                   staticp = 0;
9104               }
9105             else if (friendp)
9106               {
9107                 if (initialized)
9108                   error ("can%'t initialize friend function %qs", name);
9109                 if (virtualp)
9110                   {
9111                     /* Cannot be both friend and virtual.  */
9112                     error ("virtual functions cannot be friends");
9113                     friendp = 0;
9114                   }
9115                 if (decl_context == NORMAL)
9116                   error ("friend declaration not in class definition");
9117                 if (current_function_decl && funcdef_flag)
9118                   error ("can%'t define friend function %qs in a local "
9119                          "class definition",
9120                          name);
9121               }
9122             else if (ctype && sfk == sfk_conversion)
9123               {
9124                 if (explicitp == 1)
9125                   {
9126                     maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
9127                     explicitp = 2;
9128                   }
9129               }
9130
9131             arg_types = grokparms (declarator->u.function.parameters,
9132                                    &parms);
9133
9134             if (inner_declarator
9135                 && inner_declarator->kind == cdk_id
9136                 && inner_declarator->u.id.sfk == sfk_destructor
9137                 && arg_types != void_list_node)
9138               {
9139                 error ("destructors may not have parameters");
9140                 arg_types = void_list_node;
9141                 parms = NULL_TREE;
9142               }
9143
9144             type = build_function_type (type, arg_types);
9145           }
9146           break;
9147
9148         case cdk_pointer:
9149         case cdk_reference:
9150         case cdk_ptrmem:
9151           /* Filter out pointers-to-references and references-to-references.
9152              We can get these if a TYPE_DECL is used.  */
9153
9154           if (TREE_CODE (type) == REFERENCE_TYPE)
9155             {
9156               if (declarator->kind != cdk_reference)
9157                 {
9158                   error ("cannot declare pointer to %q#T", type);
9159                   type = TREE_TYPE (type);
9160                 }
9161
9162               /* In C++0x, we allow reference to reference declarations
9163                  that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
9164                  and template type arguments [14.3.1/4 temp.arg.type]. The
9165                  check for direct reference to reference declarations, which
9166                  are still forbidden, occurs below. Reasoning behind the change
9167                  can be found in DR106, DR540, and the rvalue reference
9168                  proposals. */
9169               else if (cxx_dialect == cxx98)
9170                 {
9171                   error ("cannot declare reference to %q#T", type);
9172                   type = TREE_TYPE (type);
9173                 }
9174             }
9175           else if (VOID_TYPE_P (type))
9176             {
9177               if (declarator->kind == cdk_reference)
9178                 error ("cannot declare reference to %q#T", type);
9179               else if (declarator->kind == cdk_ptrmem)
9180                 error ("cannot declare pointer to %q#T member", type);
9181             }
9182
9183           /* We now know that the TYPE_QUALS don't apply to the decl,
9184              but to the target of the pointer.  */
9185           type_quals = TYPE_UNQUALIFIED;
9186
9187           if (declarator->kind == cdk_ptrmem
9188               && (TREE_CODE (type) == FUNCTION_TYPE
9189                   || (memfn_quals && TREE_CODE (type) == METHOD_TYPE)))
9190             {
9191               memfn_quals |= type_memfn_quals (type);
9192               type = build_memfn_type (type,
9193                                        declarator->u.pointer.class_type,
9194                                        memfn_quals);
9195               if (type == error_mark_node)
9196                 return error_mark_node;
9197               memfn_quals = TYPE_UNQUALIFIED;
9198             }
9199
9200           if (TREE_CODE (type) == FUNCTION_TYPE
9201               && type_memfn_quals (type) != TYPE_UNQUALIFIED)
9202             error (declarator->kind == cdk_reference
9203                    ? G_("cannot declare reference to qualified function type %qT")
9204                    : G_("cannot declare pointer to qualified function type %qT"),
9205                    type);
9206
9207           /* When the pointed-to type involves components of variable size,
9208              care must be taken to ensure that the size evaluation code is
9209              emitted early enough to dominate all the possible later uses
9210              and late enough for the variables on which it depends to have
9211              been assigned.
9212
9213              This is expected to happen automatically when the pointed-to
9214              type has a name/declaration of it's own, but special attention
9215              is required if the type is anonymous.
9216
9217              We handle the NORMAL and FIELD contexts here by inserting a
9218              dummy statement that just evaluates the size at a safe point
9219              and ensures it is not deferred until e.g. within a deeper
9220              conditional context (c++/43555).
9221
9222              We expect nothing to be needed here for PARM or TYPENAME.
9223              Evaluating the size at this point for TYPENAME would
9224              actually be incorrect, as we might be in the middle of an
9225              expression with side effects on the pointed-to type size
9226              "arguments" prior to the pointer declaration point and the
9227              size evaluation could end up prior to the side effects.  */
9228
9229           if (!TYPE_NAME (type)
9230               && (decl_context == NORMAL || decl_context == FIELD)
9231               && at_function_scope_p ()
9232               && variably_modified_type_p (type, NULL_TREE))
9233             {
9234               /* First break out any side-effects.  */
9235               stabilize_vla_size (TYPE_SIZE (type));
9236               /* And then force evaluation of the SAVE_EXPR.  */
9237               finish_expr_stmt (TYPE_SIZE (type));
9238             }
9239
9240           if (declarator->kind == cdk_reference)
9241             {
9242               /* In C++0x, the type we are creating a reference to might be
9243                  a typedef which is itself a reference type. In that case,
9244                  we follow the reference collapsing rules in
9245                  [7.1.3/8 dcl.typedef] to create the final reference type:
9246
9247                  "If a typedef TD names a type that is a reference to a type
9248                  T, an attempt to create the type 'lvalue reference to cv TD'
9249                  creates the type 'lvalue reference to T,' while an attempt
9250                  to create the type "rvalue reference to cv TD' creates the
9251                  type TD."
9252               */
9253               if (VOID_TYPE_P (type))
9254                 /* We already gave an error.  */;
9255               else if (TREE_CODE (type) == REFERENCE_TYPE)
9256                 {
9257                   if (declarator->u.reference.rvalue_ref)
9258                     /* Leave type alone.  */;
9259                   else
9260                     type = cp_build_reference_type (TREE_TYPE (type), false);
9261                 }
9262               else
9263                 type = cp_build_reference_type
9264                   (type, declarator->u.reference.rvalue_ref);
9265
9266               /* In C++0x, we need this check for direct reference to
9267                  reference declarations, which are forbidden by
9268                  [8.3.2/5 dcl.ref]. Reference to reference declarations
9269                  are only allowed indirectly through typedefs and template
9270                  type arguments. Example:
9271
9272                    void foo(int & &);      // invalid ref-to-ref decl
9273
9274                    typedef int & int_ref;
9275                    void foo(int_ref &);    // valid ref-to-ref decl
9276               */
9277               if (inner_declarator && inner_declarator->kind == cdk_reference)
9278                 error ("cannot declare reference to %q#T, which is not "
9279                        "a typedef or a template type argument", type);
9280             }
9281           else if (TREE_CODE (type) == METHOD_TYPE)
9282             type = build_ptrmemfunc_type (build_pointer_type (type));
9283           else if (declarator->kind == cdk_ptrmem)
9284             {
9285               gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
9286                           != NAMESPACE_DECL);
9287               if (declarator->u.pointer.class_type == error_mark_node)
9288                 /* We will already have complained.  */
9289                 type = error_mark_node;
9290               else
9291                 type = build_ptrmem_type (declarator->u.pointer.class_type,
9292                                           type);
9293             }
9294           else
9295             type = build_pointer_type (type);
9296
9297           /* Process a list of type modifier keywords (such as
9298              const or volatile) that were given inside the `*' or `&'.  */
9299
9300           if (declarator->u.pointer.qualifiers)
9301             {
9302               type
9303                 = cp_build_qualified_type (type,
9304                                            declarator->u.pointer.qualifiers);
9305               type_quals = cp_type_quals (type);
9306             }
9307           ctype = NULL_TREE;
9308           break;
9309
9310         case cdk_error:
9311           break;
9312
9313         default:
9314           gcc_unreachable ();
9315         }
9316     }
9317
9318   /* We need to stabilize side-effects in VLA sizes for regular array
9319      declarations too, not just pointers to arrays.  */
9320   if (type != error_mark_node && !TYPE_NAME (type)
9321       && (decl_context == NORMAL || decl_context == FIELD)
9322       && at_function_scope_p ()
9323       && variably_modified_type_p (type, NULL_TREE))
9324     stabilize_vla_size (TYPE_SIZE (type));
9325
9326   /* A `constexpr' specifier used in an object declaration declares
9327      the object as `const'.  */
9328   if (constexpr_p && innermost_code != cdk_function)
9329     {
9330       if (type_quals & TYPE_QUAL_CONST)
9331         error ("both %<const%> and %<constexpr%> cannot be used here");
9332       if (type_quals & TYPE_QUAL_VOLATILE)
9333         error ("both %<volatile%> and %<constexpr%> cannot be used here");
9334       type_quals |= TYPE_QUAL_CONST;
9335       type = cp_build_qualified_type (type, type_quals);
9336     }
9337
9338   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
9339       && TREE_CODE (type) != FUNCTION_TYPE
9340       && TREE_CODE (type) != METHOD_TYPE)
9341     {
9342       error ("template-id %qD used as a declarator",
9343              unqualified_id);
9344       unqualified_id = dname;
9345     }
9346
9347   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
9348      qualified with a class-name, turn it into a METHOD_TYPE, unless
9349      we know that the function is static.  We take advantage of this
9350      opportunity to do other processing that pertains to entities
9351      explicitly declared to be class members.  Note that if DECLARATOR
9352      is non-NULL, we know it is a cdk_id declarator; otherwise, we
9353      would not have exited the loop above.  */
9354   if (declarator
9355       && declarator->u.id.qualifying_scope
9356       && TYPE_P (declarator->u.id.qualifying_scope))
9357     {
9358       tree t;
9359
9360       ctype = declarator->u.id.qualifying_scope;
9361       ctype = TYPE_MAIN_VARIANT (ctype);
9362       t = ctype;
9363       while (t != NULL_TREE && CLASS_TYPE_P (t))
9364         {
9365           /* You're supposed to have one `template <...>' for every
9366              template class, but you don't need one for a full
9367              specialization.  For example:
9368
9369                template <class T> struct S{};
9370                template <> struct S<int> { void f(); };
9371                void S<int>::f () {}
9372
9373              is correct; there shouldn't be a `template <>' for the
9374              definition of `S<int>::f'.  */
9375           if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t)
9376               && !any_dependent_template_arguments_p (CLASSTYPE_TI_ARGS (t)))
9377             /* T is an explicit (not partial) specialization.  All
9378                containing classes must therefore also be explicitly
9379                specialized.  */
9380             break;
9381           if ((CLASSTYPE_USE_TEMPLATE (t) || CLASSTYPE_IS_TEMPLATE (t))
9382               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
9383             template_count += 1;
9384
9385           t = TYPE_MAIN_DECL (t);
9386           t = DECL_CONTEXT (t);
9387         }
9388
9389       if (ctype == current_class_type)
9390         {
9391           if (friendp)
9392             {
9393               permerror (input_location, "member functions are implicitly friends of their class");
9394               friendp = 0;
9395             }
9396           else
9397             permerror (declarator->id_loc, 
9398                           "extra qualification %<%T::%> on member %qs",
9399                           ctype, name);
9400         }
9401       else if (/* If the qualifying type is already complete, then we
9402                   can skip the following checks.  */
9403                !COMPLETE_TYPE_P (ctype)
9404                && (/* If the function is being defined, then
9405                       qualifying type must certainly be complete.  */
9406                    funcdef_flag
9407                    /* A friend declaration of "T::f" is OK, even if
9408                       "T" is a template parameter.  But, if this
9409                       function is not a friend, the qualifying type
9410                       must be a class.  */
9411                    || (!friendp && !CLASS_TYPE_P (ctype))
9412                    /* For a declaration, the type need not be
9413                       complete, if either it is dependent (since there
9414                       is no meaningful definition of complete in that
9415                       case) or the qualifying class is currently being
9416                       defined.  */
9417                    || !(dependent_type_p (ctype)
9418                         || currently_open_class (ctype)))
9419                /* Check that the qualifying type is complete.  */
9420                && !complete_type_or_else (ctype, NULL_TREE))
9421         return error_mark_node;
9422       else if (TREE_CODE (type) == FUNCTION_TYPE)
9423         {
9424           if (current_class_type
9425               && (!friendp || funcdef_flag))
9426             {
9427               error (funcdef_flag
9428                      ? "cannot define member function %<%T::%s%> within %<%T%>"
9429                      : "cannot declare member function %<%T::%s%> within %<%T%>",
9430                      ctype, name, current_class_type);
9431               return error_mark_node;
9432             }
9433         }
9434       else if (declspecs->specs[(int)ds_typedef]
9435                && current_class_type)
9436         {
9437           error ("cannot declare member %<%T::%s%> within %qT",
9438                  ctype, name, current_class_type);
9439           return error_mark_node;
9440         }
9441     }
9442
9443   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
9444     ctype = current_class_type;
9445
9446   /* Now TYPE has the actual type.  */
9447
9448   if (returned_attrs)
9449     {
9450       if (attrlist)
9451         *attrlist = chainon (returned_attrs, *attrlist);
9452       else
9453         attrlist = &returned_attrs;
9454     }
9455
9456   /* Handle parameter packs. */
9457   if (parameter_pack_p)
9458     {
9459       if (decl_context == PARM)
9460         /* Turn the type into a pack expansion.*/
9461         type = make_pack_expansion (type);
9462       else
9463         error ("non-parameter %qs cannot be a parameter pack", name);
9464     }
9465
9466   /* Did array size calculations overflow?  */
9467
9468   if (TREE_CODE (type) == ARRAY_TYPE
9469       && COMPLETE_TYPE_P (type)
9470       && TREE_CODE (TYPE_SIZE_UNIT (type)) == INTEGER_CST
9471       && TREE_OVERFLOW (TYPE_SIZE_UNIT (type)))
9472     {
9473       error ("size of array %qs is too large", name);
9474       /* If we proceed with the array type as it is, we'll eventually
9475          crash in tree_low_cst().  */
9476       type = error_mark_node;
9477     }
9478
9479   if ((decl_context == FIELD || decl_context == PARM)
9480       && !processing_template_decl
9481       && variably_modified_type_p (type, NULL_TREE))
9482     {
9483       if (decl_context == FIELD)
9484         error ("data member may not have variably modified type %qT", type);
9485       else
9486         error ("parameter may not have variably modified type %qT", type);
9487       type = error_mark_node;
9488     }
9489
9490   if (explicitp == 1 || (explicitp && friendp))
9491     {
9492       /* [dcl.fct.spec] The explicit specifier shall only be used in
9493          declarations of constructors within a class definition.  */
9494       error ("only declarations of constructors can be %<explicit%>");
9495       explicitp = 0;
9496     }
9497
9498   if (storage_class == sc_mutable)
9499     {
9500       if (decl_context != FIELD || friendp)
9501         {
9502           error ("non-member %qs cannot be declared %<mutable%>", name);
9503           storage_class = sc_none;
9504         }
9505       else if (decl_context == TYPENAME || declspecs->specs[(int)ds_typedef])
9506         {
9507           error ("non-object member %qs cannot be declared %<mutable%>", name);
9508           storage_class = sc_none;
9509         }
9510       else if (TREE_CODE (type) == FUNCTION_TYPE
9511                || TREE_CODE (type) == METHOD_TYPE)
9512         {
9513           error ("function %qs cannot be declared %<mutable%>", name);
9514           storage_class = sc_none;
9515         }
9516       else if (staticp)
9517         {
9518           error ("static %qs cannot be declared %<mutable%>", name);
9519           storage_class = sc_none;
9520         }
9521       else if (type_quals & TYPE_QUAL_CONST)
9522         {
9523           error ("const %qs cannot be declared %<mutable%>", name);
9524           storage_class = sc_none;
9525         }
9526       else if (TREE_CODE (type) == REFERENCE_TYPE)
9527         {
9528           permerror (input_location, "reference %qs cannot be declared "
9529                      "%<mutable%>", name);
9530           storage_class = sc_none;
9531         }
9532     }
9533
9534   /* If this is declaring a typedef name, return a TYPE_DECL.  */
9535   if (declspecs->specs[(int)ds_typedef] && decl_context != TYPENAME)
9536     {
9537       tree decl;
9538
9539       /* Note that the grammar rejects storage classes
9540          in typenames, fields or parameters.  */
9541       if (current_lang_name == lang_name_java)
9542         TYPE_FOR_JAVA (type) = 1;
9543
9544       /* This declaration:
9545
9546            typedef void f(int) const;
9547
9548          declares a function type which is not a member of any
9549          particular class, but which is cv-qualified; for
9550          example "f S::*" declares a pointer to a const-qualified
9551          member function of S.  We record the cv-qualification in the
9552          function type.  */
9553       if (memfn_quals && TREE_CODE (type) == FUNCTION_TYPE)
9554         {
9555           type = apply_memfn_quals (type, memfn_quals);
9556           
9557           /* We have now dealt with these qualifiers.  */
9558           memfn_quals = TYPE_UNQUALIFIED;
9559         }
9560
9561       if (type_uses_auto (type))
9562         {
9563           error ("typedef declared %<auto%>");
9564           type = error_mark_node;
9565         }
9566
9567       if (decl_context == FIELD)
9568         decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
9569       else
9570         decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
9571       if (id_declarator && declarator->u.id.qualifying_scope) {
9572         error_at (DECL_SOURCE_LOCATION (decl), 
9573                   "typedef name may not be a nested-name-specifier");
9574         TREE_TYPE (decl) = error_mark_node;
9575       }
9576
9577       if (decl_context != FIELD)
9578         {
9579           if (!current_function_decl)
9580             DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9581           else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
9582                    || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
9583                        (current_function_decl)))
9584             /* The TYPE_DECL is "abstract" because there will be
9585                clones of this constructor/destructor, and there will
9586                be copies of this TYPE_DECL generated in those
9587                clones.  */
9588             DECL_ABSTRACT (decl) = 1;
9589         }
9590       else if (constructor_name_p (unqualified_id, current_class_type))
9591         permerror (input_location, "ISO C++ forbids nested type %qD with same name "
9592                    "as enclosing class",
9593                    unqualified_id);
9594
9595       /* If the user declares "typedef struct {...} foo" then the
9596          struct will have an anonymous name.  Fill that name in now.
9597          Nothing can refer to it, so nothing needs know about the name
9598          change.  */
9599       if (type != error_mark_node
9600           && unqualified_id
9601           && TYPE_NAME (type)
9602           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9603           && TYPE_ANONYMOUS_P (type)
9604           && cp_type_quals (type) == TYPE_UNQUALIFIED)
9605         {
9606           tree t;
9607
9608           /* Replace the anonymous name with the real name everywhere.  */
9609           for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9610             {
9611               if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
9612                 /* We do not rename the debug info representing the
9613                    anonymous tagged type because the standard says in
9614                    [dcl.typedef] that the naming applies only for
9615                    linkage purposes.  */
9616                 /*debug_hooks->set_name (t, decl);*/
9617                 TYPE_NAME (t) = decl;
9618             }
9619
9620           if (TYPE_LANG_SPECIFIC (type))
9621             TYPE_WAS_ANONYMOUS (type) = 1;
9622
9623           /* If this is a typedef within a template class, the nested
9624              type is a (non-primary) template.  The name for the
9625              template needs updating as well.  */
9626           if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9627             DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9628               = TYPE_IDENTIFIER (type);
9629
9630           /* Adjust linkage now that we aren't anonymous anymore.  */
9631           set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
9632           determine_visibility (TYPE_MAIN_DECL (type));
9633
9634           /* FIXME remangle member functions; member functions of a
9635              type with external linkage have external linkage.  */
9636         }
9637
9638       if (signed_p
9639           || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
9640         C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
9641
9642       bad_specifiers (decl, BSP_TYPE, virtualp,
9643                       memfn_quals != TYPE_UNQUALIFIED,
9644                       inlinep, friendp, raises != NULL_TREE);
9645
9646       return decl;
9647     }
9648
9649   /* Detect the case of an array type of unspecified size
9650      which came, as such, direct from a typedef name.
9651      We must copy the type, so that the array's domain can be
9652      individually set by the object's initializer.  */
9653
9654   if (type && typedef_type
9655       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
9656       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
9657     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
9658
9659   /* Detect where we're using a typedef of function type to declare a
9660      function. PARMS will not be set, so we must create it now.  */
9661
9662   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
9663     {
9664       tree decls = NULL_TREE;
9665       tree args;
9666
9667       for (args = TYPE_ARG_TYPES (type);
9668            args && args != void_list_node;
9669            args = TREE_CHAIN (args))
9670         {
9671           tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args));
9672
9673           DECL_CHAIN (decl) = decls;
9674           decls = decl;
9675         }
9676
9677       parms = nreverse (decls);
9678
9679       if (decl_context != TYPENAME)
9680         {
9681           /* A cv-qualifier-seq shall only be part of the function type
9682              for a non-static member function. [8.3.5/4 dcl.fct] */
9683           if (type_memfn_quals (type) != TYPE_UNQUALIFIED
9684               && (current_class_type == NULL_TREE || staticp) )
9685             {
9686               error (staticp
9687                      ? G_("qualified function types cannot be used to "
9688                           "declare static member functions")
9689                      : G_("qualified function types cannot be used to "
9690                           "declare free functions"));
9691               type = TYPE_MAIN_VARIANT (type);
9692             }
9693
9694           /* The qualifiers on the function type become the qualifiers on
9695              the non-static member function. */
9696           memfn_quals |= type_memfn_quals (type);
9697           type_quals = TYPE_UNQUALIFIED;
9698         }
9699     }
9700
9701   /* If this is a type name (such as, in a cast or sizeof),
9702      compute the type and return it now.  */
9703
9704   if (decl_context == TYPENAME)
9705     {
9706       /* Note that the grammar rejects storage classes
9707          in typenames, fields or parameters.  */
9708       if (type_quals != TYPE_UNQUALIFIED)
9709         type_quals = TYPE_UNQUALIFIED;
9710
9711       /* Special case: "friend class foo" looks like a TYPENAME context.  */
9712       if (friendp)
9713         {
9714           if (type_quals != TYPE_UNQUALIFIED)
9715             {
9716               error ("type qualifiers specified for friend class declaration");
9717               type_quals = TYPE_UNQUALIFIED;
9718             }
9719           if (inlinep)
9720             {
9721               error ("%<inline%> specified for friend class declaration");
9722               inlinep = 0;
9723             }
9724
9725           if (!current_aggr)
9726             {
9727               /* Don't allow friend declaration without a class-key.  */
9728               if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
9729                 permerror (input_location, "template parameters cannot be friends");
9730               else if (TREE_CODE (type) == TYPENAME_TYPE)
9731                 permerror (input_location, "friend declaration requires class-key, "
9732                            "i.e. %<friend class %T::%D%>",
9733                            TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
9734               else
9735                 permerror (input_location, "friend declaration requires class-key, "
9736                            "i.e. %<friend %#T%>",
9737                            type);
9738             }
9739
9740           /* Only try to do this stuff if we didn't already give up.  */
9741           if (type != integer_type_node)
9742             {
9743               /* A friendly class?  */
9744               if (current_class_type)
9745                 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
9746                                    /*complain=*/true);
9747               else
9748                 error ("trying to make class %qT a friend of global scope",
9749                        type);
9750
9751               type = void_type_node;
9752             }
9753         }
9754       else if (memfn_quals)
9755         {
9756           if (ctype == NULL_TREE
9757               && TREE_CODE (type) == METHOD_TYPE)
9758             ctype = TYPE_METHOD_BASETYPE (type);
9759
9760           if (ctype)
9761             type = build_memfn_type (type, ctype, memfn_quals);
9762           /* Core issue #547: need to allow this in template type args.  */
9763           else if (template_type_arg && TREE_CODE (type) == FUNCTION_TYPE)
9764             type = apply_memfn_quals (type, memfn_quals);
9765           else
9766             error ("invalid qualifiers on non-member function type");
9767         }
9768
9769       return type;
9770     }
9771   else if (unqualified_id == NULL_TREE && decl_context != PARM
9772            && decl_context != CATCHPARM
9773            && TREE_CODE (type) != UNION_TYPE
9774            && ! bitfield)
9775     {
9776       error ("abstract declarator %qT used as declaration", type);
9777       return error_mark_node;
9778     }
9779
9780   /* Only functions may be declared using an operator-function-id.  */
9781   if (unqualified_id
9782       && IDENTIFIER_OPNAME_P (unqualified_id)
9783       && TREE_CODE (type) != FUNCTION_TYPE
9784       && TREE_CODE (type) != METHOD_TYPE)
9785     {
9786       error ("declaration of %qD as non-function", unqualified_id);
9787       return error_mark_node;
9788     }
9789
9790   /* We don't check parameter types here because we can emit a better
9791      error message later.  */
9792   if (decl_context != PARM)
9793     {
9794       type = check_var_type (unqualified_id, type);
9795       if (type == error_mark_node)
9796         return error_mark_node;
9797     }
9798
9799   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
9800      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
9801
9802   if (decl_context == PARM || decl_context == CATCHPARM)
9803     {
9804       if (ctype || in_namespace)
9805         error ("cannot use %<::%> in parameter declaration");
9806
9807       if (type_uses_auto (type))
9808         {
9809           error ("parameter declared %<auto%>");
9810           type = error_mark_node;
9811         }
9812
9813       /* A parameter declared as an array of T is really a pointer to T.
9814          One declared as a function is really a pointer to a function.
9815          One declared as a member is really a pointer to member.  */
9816
9817       if (TREE_CODE (type) == ARRAY_TYPE)
9818         {
9819           /* Transfer const-ness of array into that of type pointed to.  */
9820           type = build_pointer_type (TREE_TYPE (type));
9821           type_quals = TYPE_UNQUALIFIED;
9822         }
9823       else if (TREE_CODE (type) == FUNCTION_TYPE)
9824         type = build_pointer_type (type);
9825     }
9826
9827   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
9828       && !NEW_DELETE_OPNAME_P (unqualified_id))
9829     {
9830       cp_cv_quals real_quals = memfn_quals;
9831       if (constexpr_p && sfk != sfk_constructor && sfk != sfk_destructor)
9832         real_quals |= TYPE_QUAL_CONST;
9833       type = build_memfn_type (type, ctype, real_quals);
9834     }
9835
9836   {
9837     tree decl;
9838
9839     if (decl_context == PARM)
9840       {
9841         decl = cp_build_parm_decl (unqualified_id, type);
9842
9843         bad_specifiers (decl, BSP_PARM, virtualp,
9844                         memfn_quals != TYPE_UNQUALIFIED,
9845                         inlinep, friendp, raises != NULL_TREE);
9846       }
9847     else if (decl_context == FIELD)
9848       {
9849         /* The C99 flexible array extension.  */
9850         if (!staticp && TREE_CODE (type) == ARRAY_TYPE
9851             && TYPE_DOMAIN (type) == NULL_TREE)
9852           {
9853             tree itype = compute_array_index_type (dname, integer_zero_node,
9854                                                    tf_warning_or_error);
9855             type = build_cplus_array_type (TREE_TYPE (type), itype);
9856           }
9857
9858         if (type == error_mark_node)
9859           {
9860             /* Happens when declaring arrays of sizes which
9861                are error_mark_node, for example.  */
9862             decl = NULL_TREE;
9863           }
9864         else if (in_namespace && !friendp)
9865           {
9866             /* Something like struct S { int N::j; };  */
9867             error ("invalid use of %<::%>");
9868             return error_mark_node;
9869           }
9870         else if (TREE_CODE (type) == FUNCTION_TYPE
9871                  || TREE_CODE (type) == METHOD_TYPE)
9872           {
9873             int publicp = 0;
9874             tree function_context;
9875
9876             if (friendp == 0)
9877               {
9878                 /* This should never happen in pure C++ (the check
9879                    could be an assert).  It could happen in
9880                    Objective-C++ if someone writes invalid code that
9881                    uses a function declaration for an instance
9882                    variable or property (instance variables and
9883                    properties are parsed as FIELD_DECLs, but they are
9884                    part of an Objective-C class, not a C++ class).
9885                    That code is invalid and is caught by this
9886                    check.  */
9887                 if (!ctype)
9888                   {
9889                     error ("declaration of function %qD in invalid context",
9890                            unqualified_id);
9891                     return error_mark_node;
9892                   }
9893
9894                 /* ``A union may [ ... ] not [ have ] virtual functions.''
9895                    ARM 9.5 */
9896                 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
9897                   {
9898                     error ("function %qD declared virtual inside a union",
9899                            unqualified_id);
9900                     return error_mark_node;
9901                   }
9902
9903                 if (NEW_DELETE_OPNAME_P (unqualified_id))
9904                   {
9905                     if (virtualp)
9906                       {
9907                         error ("%qD cannot be declared virtual, since it "
9908                                "is always static",
9909                                unqualified_id);
9910                         virtualp = 0;
9911                       }
9912                   }
9913               }
9914
9915             /* Check that the name used for a destructor makes sense.  */
9916             if (sfk == sfk_destructor)
9917               {
9918                 tree uqname = id_declarator->u.id.unqualified_name;
9919
9920                 if (!ctype)
9921                   {
9922                     gcc_assert (friendp);
9923                     error ("expected qualified name in friend declaration "
9924                            "for destructor %qD", uqname);
9925                     return error_mark_node;
9926                   }
9927
9928                 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
9929                   {
9930                     error ("declaration of %qD as member of %qT",
9931                            uqname, ctype);
9932                     return error_mark_node;
9933                   }
9934                 if (constexpr_p)
9935                   {
9936                     error ("a destructor cannot be %<constexpr%>");
9937                     return error_mark_node;
9938                   }
9939               }
9940             else if (sfk == sfk_constructor && friendp && !ctype)
9941               {
9942                 error ("expected qualified name in friend declaration "
9943                        "for constructor %qD",
9944                        id_declarator->u.id.unqualified_name);
9945                 return error_mark_node;
9946               }
9947
9948             /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
9949             function_context = (ctype != NULL_TREE) ?
9950               decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
9951             publicp = (! friendp || ! staticp)
9952               && function_context == NULL_TREE;
9953             decl = grokfndecl (ctype, type,
9954                                TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
9955                                ? unqualified_id : dname,
9956                                parms,
9957                                unqualified_id,
9958                                virtualp, flags, memfn_quals, raises,
9959                                friendp ? -1 : 0, friendp, publicp,
9960                                inlinep | (2 * constexpr_p),
9961                                sfk,
9962                                funcdef_flag, template_count, in_namespace,
9963                                attrlist, declarator->id_loc);
9964             decl = set_virt_specifiers (decl, virt_specifiers);
9965             if (decl == NULL_TREE)
9966               return error_mark_node;
9967 #if 0
9968             /* This clobbers the attrs stored in `decl' from `attrlist'.  */
9969             /* The decl and setting of decl_attr is also turned off.  */
9970             decl = build_decl_attribute_variant (decl, decl_attr);
9971 #endif
9972
9973             /* [class.conv.ctor]
9974
9975                A constructor declared without the function-specifier
9976                explicit that can be called with a single parameter
9977                specifies a conversion from the type of its first
9978                parameter to the type of its class.  Such a constructor
9979                is called a converting constructor.  */
9980             if (explicitp == 2)
9981               DECL_NONCONVERTING_P (decl) = 1;
9982           }
9983         else if (!staticp && !dependent_type_p (type)
9984                  && !COMPLETE_TYPE_P (complete_type (type))
9985                  && (TREE_CODE (type) != ARRAY_TYPE || initialized == 0))
9986           {
9987             if (unqualified_id)
9988               error ("field %qD has incomplete type", unqualified_id);
9989             else
9990               error ("name %qT has incomplete type", type);
9991
9992             /* If we're instantiating a template, tell them which
9993                instantiation made the field's type be incomplete.  */
9994             if (current_class_type
9995                 && TYPE_NAME (current_class_type)
9996                 && IDENTIFIER_TEMPLATE (current_class_name)
9997                 && declspecs->type
9998                 && declspecs->type == type)
9999               error ("  in instantiation of template %qT",
10000                      current_class_type);
10001
10002             return error_mark_node;
10003           }
10004         else
10005           {
10006             if (friendp)
10007               {
10008                 error ("%qE is neither function nor member function; "
10009                        "cannot be declared friend", unqualified_id);
10010                 friendp = 0;
10011               }
10012             decl = NULL_TREE;
10013           }
10014
10015         if (friendp)
10016           {
10017             /* Friends are treated specially.  */
10018             if (ctype == current_class_type)
10019               ;  /* We already issued a permerror.  */
10020             else if (decl && DECL_NAME (decl))
10021               {
10022                 if (template_class_depth (current_class_type) == 0)
10023                   {
10024                     decl = check_explicit_specialization
10025                       (unqualified_id, decl, template_count,
10026                        2 * funcdef_flag + 4);
10027                     if (decl == error_mark_node)
10028                       return error_mark_node;
10029                   }
10030
10031                 decl = do_friend (ctype, unqualified_id, decl,
10032                                   *attrlist, flags,
10033                                   funcdef_flag);
10034                 return decl;
10035               }
10036             else
10037               return error_mark_node;
10038           }
10039
10040         /* Structure field.  It may not be a function, except for C++.  */
10041
10042         if (decl == NULL_TREE)
10043           {
10044             if (initialized)
10045               {
10046                 if (!staticp)
10047                   {
10048                     /* An attempt is being made to initialize a non-static
10049                        member.  But, from [class.mem]:
10050
10051                        4 A member-declarator can contain a
10052                        constant-initializer only if it declares a static
10053                        member (_class.static_) of integral or enumeration
10054                        type, see _class.static.data_.
10055
10056                        This used to be relatively common practice, but
10057                        the rest of the compiler does not correctly
10058                        handle the initialization unless the member is
10059                        static so we make it static below.  */
10060                     if (cxx_dialect >= cxx0x)
10061                       {
10062                         sorry ("non-static data member initializers");
10063                       }
10064                     else
10065                       {
10066                         permerror (input_location, "ISO C++ forbids initialization of member %qD",
10067                                    unqualified_id);
10068                         permerror (input_location, "making %qD static", unqualified_id);
10069                         staticp = 1;
10070                       }
10071                   }
10072               }
10073
10074             if (staticp)
10075               {
10076                 /* C++ allows static class members.  All other work
10077                    for this is done by grokfield.  */
10078                 decl = build_lang_decl (VAR_DECL, unqualified_id, type);
10079                 set_linkage_for_static_data_member (decl);
10080                 /* Even if there is an in-class initialization, DECL
10081                    is considered undefined until an out-of-class
10082                    definition is provided.  */
10083                 DECL_EXTERNAL (decl) = 1;
10084
10085                 if (thread_p)
10086                   DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
10087
10088                 if (constexpr_p && !initialized)
10089                   {
10090                     error ("constexpr static data member %qD must have an "
10091                            "initializer", decl);
10092                     constexpr_p = false;
10093                   }
10094               }
10095             else
10096               {
10097                 if (constexpr_p)
10098                   {
10099                     error ("non-static data member %qE declared %<constexpr%>",
10100                            unqualified_id);
10101                     constexpr_p = false;
10102                   }
10103                 decl = build_decl (input_location,
10104                                    FIELD_DECL, unqualified_id, type);
10105                 DECL_NONADDRESSABLE_P (decl) = bitfield;
10106                 if (bitfield && !unqualified_id)
10107                   TREE_NO_WARNING (decl) = 1;
10108
10109                 if (storage_class == sc_mutable)
10110                   {
10111                     DECL_MUTABLE_P (decl) = 1;
10112                     storage_class = sc_none;
10113                   }
10114               }
10115
10116             bad_specifiers (decl, BSP_FIELD, virtualp,
10117                             memfn_quals != TYPE_UNQUALIFIED,
10118                             inlinep, friendp, raises != NULL_TREE);
10119           }
10120       }
10121     else if (TREE_CODE (type) == FUNCTION_TYPE
10122              || TREE_CODE (type) == METHOD_TYPE)
10123       {
10124         tree original_name;
10125         int publicp = 0;
10126
10127         if (!unqualified_id)
10128           return error_mark_node;
10129
10130         if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
10131           original_name = dname;
10132         else
10133           original_name = unqualified_id;
10134
10135         if (storage_class == sc_auto)
10136           error ("storage class %<auto%> invalid for function %qs", name);
10137         else if (storage_class == sc_register)
10138           error ("storage class %<register%> invalid for function %qs", name);
10139         else if (thread_p)
10140           error ("storage class %<__thread%> invalid for function %qs", name);
10141
10142         if (virt_specifiers)
10143           error ("virt-specifiers in %qs not allowed outside a class definition", name);
10144         /* Function declaration not at top level.
10145            Storage classes other than `extern' are not allowed
10146            and `extern' makes no difference.  */
10147         if (! toplevel_bindings_p ()
10148             && (storage_class == sc_static
10149                 || declspecs->specs[(int)ds_inline])
10150             && pedantic)
10151           {
10152             if (storage_class == sc_static)
10153               pedwarn (input_location, OPT_pedantic, 
10154                        "%<static%> specified invalid for function %qs "
10155                        "declared out of global scope", name);
10156             else
10157               pedwarn (input_location, OPT_pedantic, 
10158                        "%<inline%> specifier invalid for function %qs "
10159                        "declared out of global scope", name);
10160           }
10161
10162         if (ctype != NULL_TREE
10163             && TREE_CODE (ctype) != NAMESPACE_DECL && !MAYBE_CLASS_TYPE_P (ctype))
10164           {
10165             error ("%q#T is not a class or a namespace", ctype);
10166             ctype = NULL_TREE;
10167           }
10168
10169         if (ctype == NULL_TREE)
10170           {
10171             if (virtualp)
10172               {
10173                 error ("virtual non-class function %qs", name);
10174                 virtualp = 0;
10175               }
10176             else if (sfk == sfk_constructor
10177                      || sfk == sfk_destructor)
10178               {
10179                 error (funcdef_flag
10180                        ? "%qs defined in a non-class scope"
10181                        : "%qs declared in a non-class scope", name);
10182                 sfk = sfk_none;
10183               }
10184           }
10185
10186         /* Record presence of `static'.  */
10187         publicp = (ctype != NULL_TREE
10188                    || storage_class == sc_extern
10189                    || storage_class != sc_static);
10190
10191         decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
10192                            virtualp, flags, memfn_quals, raises,
10193                            1, friendp,
10194                            publicp, inlinep | (2 * constexpr_p), sfk,
10195                            funcdef_flag,
10196                            template_count, in_namespace, attrlist,
10197                            declarator->id_loc);
10198         if (decl == NULL_TREE)
10199           return error_mark_node;
10200
10201         if (staticp == 1)
10202           {
10203             int invalid_static = 0;
10204
10205             /* Don't allow a static member function in a class, and forbid
10206                declaring main to be static.  */
10207             if (TREE_CODE (type) == METHOD_TYPE)
10208               {
10209                 permerror (input_location, "cannot declare member function %qD to have "
10210                            "static linkage", decl);
10211                 invalid_static = 1;
10212               }
10213             else if (current_function_decl)
10214               {
10215                 /* FIXME need arm citation */
10216                 error ("cannot declare static function inside another function");
10217                 invalid_static = 1;
10218               }
10219
10220             if (invalid_static)
10221               {
10222                 staticp = 0;
10223                 storage_class = sc_none;
10224               }
10225           }
10226       }
10227     else
10228       {
10229         /* It's a variable.  */
10230
10231         /* An uninitialized decl with `extern' is a reference.  */
10232         decl = grokvardecl (type, unqualified_id,
10233                             declspecs,
10234                             initialized,
10235                             (type_quals & TYPE_QUAL_CONST) != 0,
10236                             ctype ? ctype : in_namespace);
10237         bad_specifiers (decl, BSP_VAR, virtualp,
10238                         memfn_quals != TYPE_UNQUALIFIED,
10239                         inlinep, friendp, raises != NULL_TREE);
10240
10241         if (ctype)
10242           {
10243             DECL_CONTEXT (decl) = ctype;
10244             if (staticp == 1)
10245               {
10246                 permerror (input_location, "%<static%> may not be used when defining "
10247                            "(as opposed to declaring) a static data member");
10248                 staticp = 0;
10249                 storage_class = sc_none;
10250               }
10251             if (storage_class == sc_register && TREE_STATIC (decl))
10252               {
10253                 error ("static member %qD declared %<register%>", decl);
10254                 storage_class = sc_none;
10255               }
10256             if (storage_class == sc_extern && pedantic)
10257               {
10258                 pedwarn (input_location, OPT_pedantic, 
10259                          "cannot explicitly declare member %q#D to have "
10260                          "extern linkage", decl);
10261                 storage_class = sc_none;
10262               }
10263           }
10264         else if (constexpr_p && DECL_EXTERNAL (decl))
10265           {
10266             error ("declaration of constexpr variable %qD is not a definition",
10267                    decl);
10268             constexpr_p = false;
10269           }
10270       }
10271
10272     if (storage_class == sc_extern && initialized && !funcdef_flag)
10273       {
10274         if (toplevel_bindings_p ())
10275           {
10276             /* It's common practice (and completely valid) to have a const
10277                be initialized and declared extern.  */
10278             if (!(type_quals & TYPE_QUAL_CONST))
10279               warning (0, "%qs initialized and declared %<extern%>", name);
10280           }
10281         else
10282           {
10283             error ("%qs has both %<extern%> and initializer", name);
10284             return error_mark_node;
10285           }
10286       }
10287
10288     /* Record `register' declaration for warnings on &
10289        and in case doing stupid register allocation.  */
10290
10291     if (storage_class == sc_register)
10292       DECL_REGISTER (decl) = 1;
10293     else if (storage_class == sc_extern)
10294       DECL_THIS_EXTERN (decl) = 1;
10295     else if (storage_class == sc_static)
10296       DECL_THIS_STATIC (decl) = 1;
10297
10298     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
10299     if (constexpr_p && TREE_CODE (decl) == VAR_DECL)
10300       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10301
10302     /* Record constancy and volatility on the DECL itself .  There's
10303        no need to do this when processing a template; we'll do this
10304        for the instantiated declaration based on the type of DECL.  */
10305     if (!processing_template_decl)
10306       cp_apply_type_quals_to_decl (type_quals, decl);
10307
10308     return decl;
10309   }
10310 }
10311 \f
10312 /* Subroutine of start_function.  Ensure that each of the parameter
10313    types (as listed in PARMS) is complete, as is required for a
10314    function definition.  */
10315
10316 static void
10317 require_complete_types_for_parms (tree parms)
10318 {
10319   for (; parms; parms = DECL_CHAIN (parms))
10320     {
10321       if (dependent_type_p (TREE_TYPE (parms)))
10322         continue;
10323       if (!VOID_TYPE_P (TREE_TYPE (parms))
10324           && complete_type_or_else (TREE_TYPE (parms), parms))
10325         {
10326           relayout_decl (parms);
10327           DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
10328         }
10329       else
10330         /* grokparms or complete_type_or_else will have already issued
10331            an error.  */
10332         TREE_TYPE (parms) = error_mark_node;
10333     }
10334 }
10335
10336 /* Returns nonzero if T is a local variable.  */
10337
10338 int
10339 local_variable_p (const_tree t)
10340 {
10341   if ((TREE_CODE (t) == VAR_DECL
10342        /* A VAR_DECL with a context that is a _TYPE is a static data
10343           member.  */
10344        && !TYPE_P (CP_DECL_CONTEXT (t))
10345        /* Any other non-local variable must be at namespace scope.  */
10346        && !DECL_NAMESPACE_SCOPE_P (t))
10347       || (TREE_CODE (t) == PARM_DECL))
10348     return 1;
10349
10350   return 0;
10351 }
10352
10353 /* Like local_variable_p, but suitable for use as a tree-walking
10354    function.  */
10355
10356 static tree
10357 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
10358                          void *data ATTRIBUTE_UNUSED)
10359 {
10360   if (local_variable_p (*tp) && !DECL_ARTIFICIAL (*tp))
10361     return *tp;
10362   else if (TYPE_P (*tp))
10363     *walk_subtrees = 0;
10364
10365   return NULL_TREE;
10366 }
10367
10368
10369 /* Check that ARG, which is a default-argument expression for a
10370    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
10371    something goes wrong.  DECL may also be a _TYPE node, rather than a
10372    DECL, if there is no DECL available.  */
10373
10374 tree
10375 check_default_argument (tree decl, tree arg)
10376 {
10377   tree var;
10378   tree decl_type;
10379
10380   if (TREE_CODE (arg) == DEFAULT_ARG)
10381     /* We get a DEFAULT_ARG when looking at an in-class declaration
10382        with a default argument.  Ignore the argument for now; we'll
10383        deal with it after the class is complete.  */
10384     return arg;
10385
10386   if (TYPE_P (decl))
10387     {
10388       decl_type = decl;
10389       decl = NULL_TREE;
10390     }
10391   else
10392     decl_type = TREE_TYPE (decl);
10393
10394   if (arg == error_mark_node
10395       || decl == error_mark_node
10396       || TREE_TYPE (arg) == error_mark_node
10397       || decl_type == error_mark_node)
10398     /* Something already went wrong.  There's no need to check
10399        further.  */
10400     return error_mark_node;
10401
10402   /* [dcl.fct.default]
10403
10404      A default argument expression is implicitly converted to the
10405      parameter type.  */
10406   if (!TREE_TYPE (arg)
10407       || !can_convert_arg (decl_type, TREE_TYPE (arg), arg, LOOKUP_NORMAL))
10408     {
10409       if (decl)
10410         error ("default argument for %q#D has type %qT",
10411                decl, TREE_TYPE (arg));
10412       else
10413         error ("default argument for parameter of type %qT has type %qT",
10414                decl_type, TREE_TYPE (arg));
10415
10416       return error_mark_node;
10417     }
10418
10419   /* [dcl.fct.default]
10420
10421      Local variables shall not be used in default argument
10422      expressions.
10423
10424      The keyword `this' shall not be used in a default argument of a
10425      member function.  */
10426   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
10427   if (var)
10428     {
10429       error ("default argument %qE uses local variable %qD", arg, var);
10430       return error_mark_node;
10431     }
10432
10433   /* All is well.  */
10434   return arg;
10435 }
10436
10437 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
10438
10439 static tree
10440 type_is_deprecated (tree type)
10441 {
10442   enum tree_code code;
10443   if (TREE_DEPRECATED (type))
10444     return type;
10445   if (TYPE_NAME (type)
10446       && TREE_DEPRECATED (TYPE_NAME (type)))
10447     return type;
10448
10449   /* Do warn about using typedefs to a deprecated class.  */
10450   if (TAGGED_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
10451     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
10452
10453   code = TREE_CODE (type);
10454
10455   if (code == POINTER_TYPE || code == REFERENCE_TYPE
10456       || code == OFFSET_TYPE || code == FUNCTION_TYPE
10457       || code == METHOD_TYPE || code == ARRAY_TYPE)
10458     return type_is_deprecated (TREE_TYPE (type));
10459
10460   if (TYPE_PTRMEMFUNC_P (type))
10461     return type_is_deprecated
10462       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
10463
10464   return NULL_TREE;
10465 }
10466
10467 /* Decode the list of parameter types for a function type.
10468    Given the list of things declared inside the parens,
10469    return a list of types.
10470
10471    If this parameter does not end with an ellipsis, we append
10472    void_list_node.
10473
10474    *PARMS is set to the chain of PARM_DECLs created.  */
10475
10476 static tree
10477 grokparms (tree parmlist, tree *parms)
10478 {
10479   tree result = NULL_TREE;
10480   tree decls = NULL_TREE;
10481   tree parm;
10482   int any_error = 0;
10483
10484   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
10485     {
10486       tree type = NULL_TREE;
10487       tree init = TREE_PURPOSE (parm);
10488       tree decl = TREE_VALUE (parm);
10489       const char *errmsg;
10490
10491       if (parm == void_list_node)
10492         break;
10493
10494       if (! decl || TREE_TYPE (decl) == error_mark_node)
10495         continue;
10496
10497       type = TREE_TYPE (decl);
10498       if (VOID_TYPE_P (type))
10499         {
10500           if (same_type_p (type, void_type_node)
10501               && DECL_SELF_REFERENCE_P (type)
10502               && !DECL_NAME (decl) && !result && TREE_CHAIN (parm) == void_list_node)
10503             /* this is a parmlist of `(void)', which is ok.  */
10504             break;
10505           cxx_incomplete_type_error (decl, type);
10506           /* It's not a good idea to actually create parameters of
10507              type `void'; other parts of the compiler assume that a
10508              void type terminates the parameter list.  */
10509           type = error_mark_node;
10510           TREE_TYPE (decl) = error_mark_node;
10511         }
10512
10513       if (type != error_mark_node
10514           && TYPE_FOR_JAVA (type)
10515           && MAYBE_CLASS_TYPE_P (type))
10516         {
10517           error ("parameter %qD has Java class type", decl);
10518           type = error_mark_node;
10519           TREE_TYPE (decl) = error_mark_node;
10520           init = NULL_TREE;
10521         }
10522
10523       if (type != error_mark_node
10524           && (errmsg = targetm.invalid_parameter_type (type)))
10525         {
10526           error (errmsg);
10527           type = error_mark_node;
10528           TREE_TYPE (decl) = error_mark_node;
10529         }
10530
10531       if (type != error_mark_node)
10532         {
10533           if (deprecated_state != DEPRECATED_SUPPRESS)
10534             {
10535               tree deptype = type_is_deprecated (type);
10536               if (deptype)
10537                 warn_deprecated_use (deptype, NULL_TREE);
10538             }
10539
10540           /* Top-level qualifiers on the parameters are
10541              ignored for function types.  */
10542           type = cp_build_qualified_type (type, 0);
10543           if (TREE_CODE (type) == METHOD_TYPE)
10544             {
10545               error ("parameter %qD invalidly declared method type", decl);
10546               type = build_pointer_type (type);
10547               TREE_TYPE (decl) = type;
10548             }
10549           else if (abstract_virtuals_error (decl, type))
10550             any_error = 1;  /* Seems like a good idea.  */
10551           else if (POINTER_TYPE_P (type))
10552             {
10553               /* [dcl.fct]/6, parameter types cannot contain pointers
10554                  (references) to arrays of unknown bound.  */
10555               tree t = TREE_TYPE (type);
10556               int ptr = TYPE_PTR_P (type);
10557
10558               while (1)
10559                 {
10560                   if (TYPE_PTR_P (t))
10561                     ptr = 1;
10562                   else if (TREE_CODE (t) != ARRAY_TYPE)
10563                     break;
10564                   else if (!TYPE_DOMAIN (t))
10565                     break;
10566                   t = TREE_TYPE (t);
10567                 }
10568               if (TREE_CODE (t) == ARRAY_TYPE)
10569                 error (ptr
10570                        ? G_("parameter %qD includes pointer to array of "
10571                             "unknown bound %qT")
10572                        : G_("parameter %qD includes reference to array of "
10573                             "unknown bound %qT"),
10574                        decl, t);
10575             }
10576
10577           if (any_error)
10578             init = NULL_TREE;
10579           else if (init && !processing_template_decl)
10580             init = check_default_argument (decl, init);
10581         }
10582
10583       DECL_CHAIN (decl) = decls;
10584       decls = decl;
10585       result = tree_cons (init, type, result);
10586     }
10587   decls = nreverse (decls);
10588   result = nreverse (result);
10589   if (parm)
10590     result = chainon (result, void_list_node);
10591   *parms = decls;
10592
10593   return result;
10594 }
10595
10596 \f
10597 /* D is a constructor or overloaded `operator='.
10598
10599    Let T be the class in which D is declared. Then, this function
10600    returns:
10601
10602    -1 if D's is an ill-formed constructor or copy assignment operator
10603       whose first parameter is of type `T'.
10604    0  if D is not a copy constructor or copy assignment
10605       operator.
10606    1  if D is a copy constructor or copy assignment operator whose
10607       first parameter is a reference to non-const qualified T.
10608    2  if D is a copy constructor or copy assignment operator whose
10609       first parameter is a reference to const qualified T.
10610
10611    This function can be used as a predicate. Positive values indicate
10612    a copy constructor and nonzero values indicate a copy assignment
10613    operator.  */
10614
10615 int
10616 copy_fn_p (const_tree d)
10617 {
10618   tree args;
10619   tree arg_type;
10620   int result = 1;
10621
10622   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10623
10624   if (TREE_CODE (d) == TEMPLATE_DECL
10625       || (DECL_TEMPLATE_INFO (d)
10626           && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10627     /* Instantiations of template member functions are never copy
10628        functions.  Note that member functions of templated classes are
10629        represented as template functions internally, and we must
10630        accept those as copy functions.  */
10631     return 0;
10632
10633   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10634   if (!args)
10635     return 0;
10636
10637   arg_type = TREE_VALUE (args);
10638   if (arg_type == error_mark_node)
10639     return 0;
10640
10641   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
10642     {
10643       /* Pass by value copy assignment operator.  */
10644       result = -1;
10645     }
10646   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
10647            && !TYPE_REF_IS_RVALUE (arg_type)
10648            && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
10649     {
10650       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
10651         result = 2;
10652     }
10653   else
10654     return 0;
10655
10656   args = TREE_CHAIN (args);
10657
10658   if (args && args != void_list_node && !TREE_PURPOSE (args))
10659     /* There are more non-optional args.  */
10660     return 0;
10661
10662   return result;
10663 }
10664
10665 /* D is a constructor or overloaded `operator='.
10666
10667    Let T be the class in which D is declared. Then, this function
10668    returns true when D is a move constructor or move assignment
10669    operator, false otherwise.  */
10670
10671 bool
10672 move_fn_p (const_tree d)
10673 {
10674   tree args;
10675   tree arg_type;
10676   bool result = false;
10677
10678   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
10679
10680   if (cxx_dialect == cxx98)
10681     /* There are no move constructors if we are in C++98 mode.  */
10682     return false;
10683
10684   if (TREE_CODE (d) == TEMPLATE_DECL
10685       || (DECL_TEMPLATE_INFO (d)
10686          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
10687     /* Instantiations of template member functions are never copy
10688        functions.  Note that member functions of templated classes are
10689        represented as template functions internally, and we must
10690        accept those as copy functions.  */
10691     return 0;
10692
10693   args = FUNCTION_FIRST_USER_PARMTYPE (d);
10694   if (!args)
10695     return 0;
10696
10697   arg_type = TREE_VALUE (args);
10698   if (arg_type == error_mark_node)
10699     return 0;
10700
10701   if (TREE_CODE (arg_type) == REFERENCE_TYPE
10702       && TYPE_REF_IS_RVALUE (arg_type)
10703       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
10704                       DECL_CONTEXT (d)))
10705     result = true;
10706
10707   args = TREE_CHAIN (args);
10708
10709   if (args && args != void_list_node && !TREE_PURPOSE (args))
10710     /* There are more non-optional args.  */
10711     return false;
10712
10713   return result;
10714 }
10715
10716 /* Remember any special properties of member function DECL.  */
10717
10718 void
10719 grok_special_member_properties (tree decl)
10720 {
10721   tree class_type;
10722
10723   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10724     return;
10725
10726   class_type = DECL_CONTEXT (decl);
10727   if (DECL_CONSTRUCTOR_P (decl))
10728     {
10729       int ctor = copy_fn_p (decl);
10730
10731       if (!DECL_ARTIFICIAL (decl))
10732         TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
10733
10734       if (ctor > 0)
10735         {
10736           /* [class.copy]
10737
10738              A non-template constructor for class X is a copy
10739              constructor if its first parameter is of type X&, const
10740              X&, volatile X& or const volatile X&, and either there
10741              are no other parameters or else all other parameters have
10742              default arguments.  */
10743           TYPE_HAS_COPY_CTOR (class_type) = 1;
10744           if (user_provided_p (decl))
10745             TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
10746           if (ctor > 1)
10747             TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
10748         }
10749       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
10750         {
10751           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
10752           if (user_provided_p (decl))
10753             TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
10754         }
10755       else if (move_fn_p (decl) && user_provided_p (decl))
10756         TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
10757       else if (is_list_ctor (decl))
10758         TYPE_HAS_LIST_CTOR (class_type) = 1;
10759
10760       if (DECL_DECLARED_CONSTEXPR_P (decl)
10761           && !copy_fn_p (decl) && !move_fn_p (decl))
10762         TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
10763     }
10764   else if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
10765     {
10766       /* [class.copy]
10767
10768          A non-template assignment operator for class X is a copy
10769          assignment operator if its parameter is of type X, X&, const
10770          X&, volatile X& or const volatile X&.  */
10771
10772       int assop = copy_fn_p (decl);
10773
10774       if (assop)
10775         {
10776           TYPE_HAS_COPY_ASSIGN (class_type) = 1;
10777           if (user_provided_p (decl))
10778             TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
10779           if (assop != 1)
10780             TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
10781         }
10782       else if (move_fn_p (decl) && user_provided_p (decl))
10783         TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
10784     }
10785   /* Destructors are handled in check_methods.  */
10786 }
10787
10788 /* Check a constructor DECL has the correct form.  Complains
10789    if the class has a constructor of the form X(X).  */
10790
10791 int
10792 grok_ctor_properties (const_tree ctype, const_tree decl)
10793 {
10794   int ctor_parm = copy_fn_p (decl);
10795
10796   if (ctor_parm < 0)
10797     {
10798       /* [class.copy]
10799
10800          A declaration of a constructor for a class X is ill-formed if
10801          its first parameter is of type (optionally cv-qualified) X
10802          and either there are no other parameters or else all other
10803          parameters have default arguments.
10804
10805          We *don't* complain about member template instantiations that
10806          have this form, though; they can occur as we try to decide
10807          what constructor to use during overload resolution.  Since
10808          overload resolution will never prefer such a constructor to
10809          the non-template copy constructor (which is either explicitly
10810          or implicitly defined), there's no need to worry about their
10811          existence.  Theoretically, they should never even be
10812          instantiated, but that's hard to forestall.  */
10813       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
10814                 ctype, ctype);
10815       return 0;
10816     }
10817
10818   return 1;
10819 }
10820
10821 /* An operator with this code is unary, but can also be binary.  */
10822
10823 static int
10824 ambi_op_p (enum tree_code code)
10825 {
10826   return (code == INDIRECT_REF
10827           || code == ADDR_EXPR
10828           || code == UNARY_PLUS_EXPR
10829           || code == NEGATE_EXPR
10830           || code == PREINCREMENT_EXPR
10831           || code == PREDECREMENT_EXPR);
10832 }
10833
10834 /* An operator with this name can only be unary.  */
10835
10836 static int
10837 unary_op_p (enum tree_code code)
10838 {
10839   return (code == TRUTH_NOT_EXPR
10840           || code == BIT_NOT_EXPR
10841           || code == COMPONENT_REF
10842           || code == TYPE_EXPR);
10843 }
10844
10845 /* DECL is a declaration for an overloaded operator.  If COMPLAIN is true,
10846    errors are issued for invalid declarations.  */
10847
10848 bool
10849 grok_op_properties (tree decl, bool complain)
10850 {
10851   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
10852   tree argtype;
10853   int methodp = (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE);
10854   tree name = DECL_NAME (decl);
10855   enum tree_code operator_code;
10856   int arity;
10857   bool ellipsis_p;
10858   tree class_type;
10859
10860   /* Count the number of arguments and check for ellipsis.  */
10861   for (argtype = argtypes, arity = 0;
10862        argtype && argtype != void_list_node;
10863        argtype = TREE_CHAIN (argtype))
10864     ++arity;
10865   ellipsis_p = !argtype;
10866
10867   class_type = DECL_CONTEXT (decl);
10868   if (class_type && !CLASS_TYPE_P (class_type))
10869     class_type = NULL_TREE;
10870
10871   if (DECL_CONV_FN_P (decl))
10872     operator_code = TYPE_EXPR;
10873   else
10874     do
10875       {
10876 #define DEF_OPERATOR(NAME, CODE, MANGLING, ARITY, ASSN_P)       \
10877         if (ansi_opname (CODE) == name)                         \
10878           {                                                     \
10879             operator_code = (CODE);                             \
10880             break;                                              \
10881           }                                                     \
10882         else if (ansi_assopname (CODE) == name)                 \
10883           {                                                     \
10884             operator_code = (CODE);                             \
10885             DECL_ASSIGNMENT_OPERATOR_P (decl) = 1;              \
10886             break;                                              \
10887           }
10888
10889 #include "operators.def"
10890 #undef DEF_OPERATOR
10891
10892         gcc_unreachable ();
10893       }
10894     while (0);
10895   gcc_assert (operator_code != MAX_TREE_CODES);
10896   SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
10897
10898   if (class_type)
10899     switch (operator_code)
10900       {
10901       case NEW_EXPR:
10902         TYPE_HAS_NEW_OPERATOR (class_type) = 1;
10903         break;
10904
10905       case DELETE_EXPR:
10906         TYPE_GETS_DELETE (class_type) |= 1;
10907         break;
10908
10909       case VEC_NEW_EXPR:
10910         TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
10911         break;
10912
10913       case VEC_DELETE_EXPR:
10914         TYPE_GETS_DELETE (class_type) |= 2;
10915         break;
10916
10917       default:
10918         break;
10919       }
10920
10921     /* [basic.std.dynamic.allocation]/1:
10922
10923        A program is ill-formed if an allocation function is declared
10924        in a namespace scope other than global scope or declared static
10925        in global scope.
10926
10927        The same also holds true for deallocation functions.  */
10928   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR
10929       || operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10930     {
10931       if (DECL_NAMESPACE_SCOPE_P (decl))
10932         {
10933           if (CP_DECL_CONTEXT (decl) != global_namespace)
10934             {
10935               error ("%qD may not be declared within a namespace", decl);
10936               return false;
10937             }
10938           else if (!TREE_PUBLIC (decl))
10939             {
10940               error ("%qD may not be declared as static", decl);
10941               return false;
10942             }
10943         }
10944     }
10945
10946   if (operator_code == NEW_EXPR || operator_code == VEC_NEW_EXPR)
10947     {
10948       TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
10949       DECL_IS_OPERATOR_NEW (decl) = 1;
10950     }
10951   else if (operator_code == DELETE_EXPR || operator_code == VEC_DELETE_EXPR)
10952     TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
10953   else
10954     {
10955       /* An operator function must either be a non-static member function
10956          or have at least one parameter of a class, a reference to a class,
10957          an enumeration, or a reference to an enumeration.  13.4.0.6 */
10958       if (! methodp || DECL_STATIC_FUNCTION_P (decl))
10959         {
10960           if (operator_code == TYPE_EXPR
10961               || operator_code == CALL_EXPR
10962               || operator_code == COMPONENT_REF
10963               || operator_code == ARRAY_REF
10964               || operator_code == NOP_EXPR)
10965             {
10966               error ("%qD must be a nonstatic member function", decl);
10967               return false;
10968             }
10969           else
10970             {
10971               tree p;
10972
10973               if (DECL_STATIC_FUNCTION_P (decl))
10974                 {
10975                   error ("%qD must be either a non-static member "
10976                          "function or a non-member function", decl);
10977                   return false;
10978                 }
10979
10980               for (p = argtypes; p && p != void_list_node; p = TREE_CHAIN (p))
10981                 {
10982                   tree arg = non_reference (TREE_VALUE (p));
10983                   if (arg == error_mark_node)
10984                     return false;
10985
10986                   /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
10987                      because these checks are performed even on
10988                      template functions.  */
10989                   if (MAYBE_CLASS_TYPE_P (arg)
10990                       || TREE_CODE (arg) == ENUMERAL_TYPE)
10991                     break;
10992                 }
10993
10994               if (!p || p == void_list_node)
10995                 {
10996                   if (complain)
10997                     error ("%qD must have an argument of class or "
10998                            "enumerated type", decl);
10999                   return false;
11000                 }
11001             }
11002         }
11003
11004       /* There are no restrictions on the arguments to an overloaded
11005          "operator ()".  */
11006       if (operator_code == CALL_EXPR)
11007         return true;
11008
11009       /* Warn about conversion operators that will never be used.  */
11010       if (IDENTIFIER_TYPENAME_P (name)
11011           && ! DECL_TEMPLATE_INFO (decl)
11012           && warn_conversion
11013           /* Warn only declaring the function; there is no need to
11014              warn again about out-of-class definitions.  */
11015           && class_type == current_class_type)
11016         {
11017           tree t = TREE_TYPE (name);
11018           int ref = (TREE_CODE (t) == REFERENCE_TYPE);
11019
11020           if (ref)
11021             t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
11022
11023           if (TREE_CODE (t) == VOID_TYPE)
11024             warning (OPT_Wconversion,
11025                      ref
11026                      ? G_("conversion to a reference to void "
11027                           "will never use a type conversion operator")
11028                      : G_("conversion to void "
11029                           "will never use a type conversion operator"));
11030           else if (class_type)
11031             {
11032               if (t == class_type)
11033                 warning (OPT_Wconversion,
11034                      ref
11035                      ? G_("conversion to a reference to the same type "
11036                           "will never use a type conversion operator")
11037                      : G_("conversion to the same type "
11038                           "will never use a type conversion operator"));                
11039               /* Don't force t to be complete here.  */
11040               else if (MAYBE_CLASS_TYPE_P (t)
11041                        && COMPLETE_TYPE_P (t)
11042                        && DERIVED_FROM_P (t, class_type))
11043                  warning (OPT_Wconversion,
11044                           ref
11045                           ? G_("conversion to a reference to a base class "
11046                                "will never use a type conversion operator")
11047                           : G_("conversion to a base class "
11048                                "will never use a type conversion operator"));           
11049             }
11050
11051         }
11052
11053       if (operator_code == COND_EXPR)
11054         {
11055           /* 13.4.0.3 */
11056           error ("ISO C++ prohibits overloading operator ?:");
11057           return false;
11058         }
11059       else if (ellipsis_p)
11060         {
11061           error ("%qD must not have variable number of arguments", decl);
11062           return false;
11063         }
11064       else if (ambi_op_p (operator_code))
11065         {
11066           if (arity == 1)
11067             /* We pick the one-argument operator codes by default, so
11068                we don't have to change anything.  */
11069             ;
11070           else if (arity == 2)
11071             {
11072               /* If we thought this was a unary operator, we now know
11073                  it to be a binary operator.  */
11074               switch (operator_code)
11075                 {
11076                 case INDIRECT_REF:
11077                   operator_code = MULT_EXPR;
11078                   break;
11079
11080                 case ADDR_EXPR:
11081                   operator_code = BIT_AND_EXPR;
11082                   break;
11083
11084                 case UNARY_PLUS_EXPR:
11085                   operator_code = PLUS_EXPR;
11086                   break;
11087
11088                 case NEGATE_EXPR:
11089                   operator_code = MINUS_EXPR;
11090                   break;
11091
11092                 case PREINCREMENT_EXPR:
11093                   operator_code = POSTINCREMENT_EXPR;
11094                   break;
11095
11096                 case PREDECREMENT_EXPR:
11097                   operator_code = POSTDECREMENT_EXPR;
11098                   break;
11099
11100                 default:
11101                   gcc_unreachable ();
11102                 }
11103
11104               SET_OVERLOADED_OPERATOR_CODE (decl, operator_code);
11105
11106               if ((operator_code == POSTINCREMENT_EXPR
11107                    || operator_code == POSTDECREMENT_EXPR)
11108                   && ! processing_template_decl
11109                   && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), integer_type_node))
11110                 {
11111                   if (methodp)
11112                     error ("postfix %qD must take %<int%> as its argument",
11113                            decl);
11114                   else
11115                     error ("postfix %qD must take %<int%> as its second "
11116                            "argument", decl);
11117                   return false;
11118                 }
11119             }
11120           else
11121             {
11122               if (methodp)
11123                 error ("%qD must take either zero or one argument", decl);
11124               else
11125                 error ("%qD must take either one or two arguments", decl);
11126               return false;
11127             }
11128
11129           /* More Effective C++ rule 6.  */
11130           if (warn_ecpp
11131               && (operator_code == POSTINCREMENT_EXPR
11132                   || operator_code == POSTDECREMENT_EXPR
11133                   || operator_code == PREINCREMENT_EXPR
11134                   || operator_code == PREDECREMENT_EXPR))
11135             {
11136               tree arg = TREE_VALUE (argtypes);
11137               tree ret = TREE_TYPE (TREE_TYPE (decl));
11138               if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
11139                 arg = TREE_TYPE (arg);
11140               arg = TYPE_MAIN_VARIANT (arg);
11141               if (operator_code == PREINCREMENT_EXPR
11142                   || operator_code == PREDECREMENT_EXPR)
11143                 {
11144                   if (TREE_CODE (ret) != REFERENCE_TYPE
11145                       || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)),
11146                                        arg))
11147                     warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
11148                              build_reference_type (arg));
11149                 }
11150               else
11151                 {
11152                   if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
11153                     warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
11154                 }
11155             }
11156         }
11157       else if (unary_op_p (operator_code))
11158         {
11159           if (arity != 1)
11160             {
11161               if (methodp)
11162                 error ("%qD must take %<void%>", decl);
11163               else
11164                 error ("%qD must take exactly one argument", decl);
11165               return false;
11166             }
11167         }
11168       else /* if (binary_op_p (operator_code)) */
11169         {
11170           if (arity != 2)
11171             {
11172               if (methodp)
11173                 error ("%qD must take exactly one argument", decl);
11174               else
11175                 error ("%qD must take exactly two arguments", decl);
11176               return false;
11177             }
11178
11179           /* More Effective C++ rule 7.  */
11180           if (warn_ecpp
11181               && (operator_code == TRUTH_ANDIF_EXPR
11182                   || operator_code == TRUTH_ORIF_EXPR
11183                   || operator_code == COMPOUND_EXPR))
11184             warning (OPT_Weffc__, "user-defined %qD always evaluates both arguments",
11185                      decl);
11186         }
11187
11188       /* Effective C++ rule 23.  */
11189       if (warn_ecpp
11190           && arity == 2
11191           && !DECL_ASSIGNMENT_OPERATOR_P (decl)
11192           && (operator_code == PLUS_EXPR
11193               || operator_code == MINUS_EXPR
11194               || operator_code == TRUNC_DIV_EXPR
11195               || operator_code == MULT_EXPR
11196               || operator_code == TRUNC_MOD_EXPR)
11197           && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
11198         warning (OPT_Weffc__, "%qD should return by value", decl);
11199
11200       /* [over.oper]/8 */
11201       for (; argtypes && argtypes != void_list_node;
11202           argtypes = TREE_CHAIN (argtypes))
11203         if (TREE_PURPOSE (argtypes))
11204           {
11205             TREE_PURPOSE (argtypes) = NULL_TREE;
11206             if (operator_code == POSTINCREMENT_EXPR
11207                 || operator_code == POSTDECREMENT_EXPR)
11208               {
11209                 pedwarn (input_location, OPT_pedantic, "%qD cannot have default arguments", 
11210                          decl);
11211               }
11212             else
11213               {
11214                 error ("%qD cannot have default arguments", decl);
11215                 return false;
11216               }
11217           }
11218     }
11219   return true;
11220 }
11221 \f
11222 /* Return a string giving the keyword associate with CODE.  */
11223
11224 static const char *
11225 tag_name (enum tag_types code)
11226 {
11227   switch (code)
11228     {
11229     case record_type:
11230       return "struct";
11231     case class_type:
11232       return "class";
11233     case union_type:
11234       return "union";
11235     case enum_type:
11236       return "enum";
11237     case typename_type:
11238       return "typename";
11239     default:
11240       gcc_unreachable ();
11241     }
11242 }
11243
11244 /* Name lookup in an elaborated-type-specifier (after the keyword
11245    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
11246    elaborated-type-specifier is invalid, issue a diagnostic and return
11247    error_mark_node; otherwise, return the *_TYPE to which it referred.
11248    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
11249
11250 tree
11251 check_elaborated_type_specifier (enum tag_types tag_code,
11252                                  tree decl,
11253                                  bool allow_template_p)
11254 {
11255   tree type;
11256
11257   /* In the case of:
11258
11259        struct S { struct S *p; };
11260
11261      name lookup will find the TYPE_DECL for the implicit "S::S"
11262      typedef.  Adjust for that here.  */
11263   if (DECL_SELF_REFERENCE_P (decl))
11264     decl = TYPE_NAME (TREE_TYPE (decl));
11265
11266   type = TREE_TYPE (decl);
11267
11268   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
11269      is false for this case as well.  */
11270   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11271     {
11272       error ("using template type parameter %qT after %qs",
11273              type, tag_name (tag_code));
11274       return error_mark_node;
11275     }
11276   /*   [dcl.type.elab]
11277
11278        If the identifier resolves to a typedef-name or a template
11279        type-parameter, the elaborated-type-specifier is ill-formed.
11280
11281      In other words, the only legitimate declaration to use in the
11282      elaborated type specifier is the implicit typedef created when
11283      the type is declared.  */
11284   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
11285            && !DECL_SELF_REFERENCE_P (decl)
11286            && tag_code != typename_type)
11287     {
11288       error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
11289       error ("%q+D has a previous declaration here", decl);
11290       return error_mark_node;
11291     }
11292   else if (TREE_CODE (type) != RECORD_TYPE
11293            && TREE_CODE (type) != UNION_TYPE
11294            && tag_code != enum_type
11295            && tag_code != typename_type)
11296     {
11297       error ("%qT referred to as %qs", type, tag_name (tag_code));
11298       error ("%q+T has a previous declaration here", type);
11299       return error_mark_node;
11300     }
11301   else if (TREE_CODE (type) != ENUMERAL_TYPE
11302            && tag_code == enum_type)
11303     {
11304       error ("%qT referred to as enum", type);
11305       error ("%q+T has a previous declaration here", type);
11306       return error_mark_node;
11307     }
11308   else if (!allow_template_p
11309            && TREE_CODE (type) == RECORD_TYPE
11310            && CLASSTYPE_IS_TEMPLATE (type))
11311     {
11312       /* If a class template appears as elaborated type specifier
11313          without a template header such as:
11314
11315            template <class T> class C {};
11316            void f(class C);             // No template header here
11317
11318          then the required template argument is missing.  */
11319       error ("template argument required for %<%s %T%>",
11320              tag_name (tag_code),
11321              DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
11322       return error_mark_node;
11323     }
11324
11325   return type;
11326 }
11327
11328 /* Lookup NAME in elaborate type specifier in scope according to
11329    SCOPE and issue diagnostics if necessary.
11330    Return *_TYPE node upon success, NULL_TREE when the NAME is not
11331    found, and ERROR_MARK_NODE for type error.  */
11332
11333 static tree
11334 lookup_and_check_tag (enum tag_types tag_code, tree name,
11335                       tag_scope scope, bool template_header_p)
11336 {
11337   tree t;
11338   tree decl;
11339   if (scope == ts_global)
11340     {
11341       /* First try ordinary name lookup, ignoring hidden class name
11342          injected via friend declaration.  */
11343       decl = lookup_name_prefer_type (name, 2);
11344       /* If that fails, the name will be placed in the smallest
11345          non-class, non-function-prototype scope according to 3.3.1/5.
11346          We may already have a hidden name declared as friend in this
11347          scope.  So lookup again but not ignoring hidden names.
11348          If we find one, that name will be made visible rather than
11349          creating a new tag.  */
11350       if (!decl)
11351         decl = lookup_type_scope (name, ts_within_enclosing_non_class);
11352     }
11353   else
11354     decl = lookup_type_scope (name, scope);
11355
11356   if (decl && DECL_CLASS_TEMPLATE_P (decl))
11357     decl = DECL_TEMPLATE_RESULT (decl);
11358
11359   if (decl && TREE_CODE (decl) == TYPE_DECL)
11360     {
11361       /* Look for invalid nested type:
11362            class C {
11363              class C {};
11364            };  */
11365       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
11366         {
11367           error ("%qD has the same name as the class in which it is "
11368                  "declared",
11369                  decl);
11370           return error_mark_node;
11371         }
11372
11373       /* Two cases we need to consider when deciding if a class
11374          template is allowed as an elaborated type specifier:
11375          1. It is a self reference to its own class.
11376          2. It comes with a template header.
11377
11378          For example:
11379
11380            template <class T> class C {
11381              class C *c1;               // DECL_SELF_REFERENCE_P is true
11382              class D;
11383            };
11384            template <class U> class C; // template_header_p is true
11385            template <class T> class C<T>::D {
11386              class C *c2;               // DECL_SELF_REFERENCE_P is true
11387            };  */
11388
11389       t = check_elaborated_type_specifier (tag_code,
11390                                            decl,
11391                                            template_header_p
11392                                            | DECL_SELF_REFERENCE_P (decl));
11393       return t;
11394     }
11395   else if (decl && TREE_CODE (decl) == TREE_LIST)
11396     {
11397       error ("reference to %qD is ambiguous", name);
11398       print_candidates (decl);
11399       return error_mark_node;
11400     }
11401   else
11402     return NULL_TREE;
11403 }
11404
11405 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
11406    Define the tag as a forward-reference if it is not defined.
11407
11408    If a declaration is given, process it here, and report an error if
11409    multiple declarations are not identical.
11410
11411    SCOPE is TS_CURRENT when this is also a definition.  Only look in
11412    the current frame for the name (since C++ allows new names in any
11413    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
11414    declaration.  Only look beginning from the current scope outward up
11415    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
11416
11417    TEMPLATE_HEADER_P is true when this declaration is preceded by
11418    a set of template parameters.  */
11419
11420 static tree
11421 xref_tag_1 (enum tag_types tag_code, tree name,
11422             tag_scope scope, bool template_header_p)
11423 {
11424   enum tree_code code;
11425   tree t;
11426   tree context = NULL_TREE;
11427
11428   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11429
11430   switch (tag_code)
11431     {
11432     case record_type:
11433     case class_type:
11434       code = RECORD_TYPE;
11435       break;
11436     case union_type:
11437       code = UNION_TYPE;
11438       break;
11439     case enum_type:
11440       code = ENUMERAL_TYPE;
11441       break;
11442     default:
11443       gcc_unreachable ();
11444     }
11445
11446   /* In case of anonymous name, xref_tag is only called to
11447      make type node and push name.  Name lookup is not required.  */
11448   if (ANON_AGGRNAME_P (name))
11449     t = NULL_TREE;
11450   else
11451     t = lookup_and_check_tag  (tag_code, name,
11452                                scope, template_header_p);
11453
11454   if (t == error_mark_node)
11455     return error_mark_node;
11456
11457   if (scope != ts_current && t && current_class_type
11458       && template_class_depth (current_class_type)
11459       && template_header_p)
11460     {
11461       /* Since SCOPE is not TS_CURRENT, we are not looking at a
11462          definition of this tag.  Since, in addition, we are currently
11463          processing a (member) template declaration of a template
11464          class, we must be very careful; consider:
11465
11466            template <class X>
11467            struct S1
11468
11469            template <class U>
11470            struct S2
11471            { template <class V>
11472            friend struct S1; };
11473
11474          Here, the S2::S1 declaration should not be confused with the
11475          outer declaration.  In particular, the inner version should
11476          have a template parameter of level 2, not level 1.  This
11477          would be particularly important if the member declaration
11478          were instead:
11479
11480            template <class V = U> friend struct S1;
11481
11482          say, when we should tsubst into `U' when instantiating
11483          S2.  On the other hand, when presented with:
11484
11485            template <class T>
11486            struct S1 {
11487              template <class U>
11488              struct S2 {};
11489              template <class U>
11490              friend struct S2;
11491            };
11492
11493          we must find the inner binding eventually.  We
11494          accomplish this by making sure that the new type we
11495          create to represent this declaration has the right
11496          TYPE_CONTEXT.  */
11497       context = TYPE_CONTEXT (t);
11498       t = NULL_TREE;
11499     }
11500
11501   if (! t)
11502     {
11503       /* If no such tag is yet defined, create a forward-reference node
11504          and record it as the "definition".
11505          When a real declaration of this type is found,
11506          the forward-reference will be altered into a real type.  */
11507       if (code == ENUMERAL_TYPE)
11508         {
11509           error ("use of enum %q#D without previous declaration", name);
11510           return error_mark_node;
11511         }
11512       else
11513         {
11514           t = make_class_type (code);
11515           TYPE_CONTEXT (t) = context;
11516           t = pushtag (name, t, scope);
11517         }
11518     }
11519   else
11520     {
11521       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
11522         {
11523           if (!redeclare_class_template (t, current_template_parms))
11524             return error_mark_node;
11525         }
11526       else if (!processing_template_decl
11527                && CLASS_TYPE_P (t)
11528                && CLASSTYPE_IS_TEMPLATE (t))
11529         {
11530           error ("redeclaration of %qT as a non-template", t);
11531           error ("previous declaration %q+D", t);
11532           return error_mark_node;
11533         }
11534
11535       /* Make injected friend class visible.  */
11536       if (scope != ts_within_enclosing_non_class
11537           && hidden_name_p (TYPE_NAME (t)))
11538         {
11539           DECL_ANTICIPATED (TYPE_NAME (t)) = 0;
11540           DECL_FRIEND_P (TYPE_NAME (t)) = 0;
11541
11542           if (TYPE_TEMPLATE_INFO (t))
11543             {
11544               DECL_ANTICIPATED (TYPE_TI_TEMPLATE (t)) = 0;
11545               DECL_FRIEND_P (TYPE_TI_TEMPLATE (t)) = 0;
11546             }
11547         }
11548     }
11549
11550   return t;
11551 }
11552
11553 /* Wrapper for xref_tag_1.  */
11554
11555 tree
11556 xref_tag (enum tag_types tag_code, tree name,
11557           tag_scope scope, bool template_header_p)
11558 {
11559   tree ret;
11560   timevar_start (TV_NAME_LOOKUP);
11561   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
11562   timevar_stop (TV_NAME_LOOKUP);
11563   return ret;
11564 }
11565
11566
11567 tree
11568 xref_tag_from_type (tree old, tree id, tag_scope scope)
11569 {
11570   enum tag_types tag_kind;
11571
11572   if (TREE_CODE (old) == RECORD_TYPE)
11573     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
11574   else
11575     tag_kind  = union_type;
11576
11577   if (id == NULL_TREE)
11578     id = TYPE_IDENTIFIER (old);
11579
11580   return xref_tag (tag_kind, id, scope, false);
11581 }
11582
11583 /* Create the binfo hierarchy for REF with (possibly NULL) base list
11584    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
11585    access_* node, and the TREE_VALUE is the type of the base-class.
11586    Non-NULL TREE_TYPE indicates virtual inheritance.  
11587  
11588    Returns true if the binfo hierarchy was successfully created,
11589    false if an error was detected. */
11590
11591 bool
11592 xref_basetypes (tree ref, tree base_list)
11593 {
11594   tree *basep;
11595   tree binfo, base_binfo;
11596   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
11597   unsigned max_bases = 0;  /* Maximum direct bases.  */
11598   int i;
11599   tree default_access;
11600   tree igo_prev; /* Track Inheritance Graph Order.  */
11601
11602   if (ref == error_mark_node)
11603     return false;
11604
11605   /* The base of a derived class is private by default, all others are
11606      public.  */
11607   default_access = (TREE_CODE (ref) == RECORD_TYPE
11608                     && CLASSTYPE_DECLARED_CLASS (ref)
11609                     ? access_private_node : access_public_node);
11610
11611   /* First, make sure that any templates in base-classes are
11612      instantiated.  This ensures that if we call ourselves recursively
11613      we do not get confused about which classes are marked and which
11614      are not.  */
11615   basep = &base_list;
11616   while (*basep)
11617     {
11618       tree basetype = TREE_VALUE (*basep);
11619
11620       if (!(processing_template_decl && uses_template_parms (basetype))
11621           && !complete_type_or_else (basetype, NULL))
11622         /* An incomplete type.  Remove it from the list.  */
11623         *basep = TREE_CHAIN (*basep);
11624       else
11625         {
11626           max_bases++;
11627           if (TREE_TYPE (*basep))
11628             max_vbases++;
11629           if (CLASS_TYPE_P (basetype))
11630             max_vbases += VEC_length (tree, CLASSTYPE_VBASECLASSES (basetype));
11631           basep = &TREE_CHAIN (*basep);
11632         }
11633     }
11634
11635   TYPE_MARKED_P (ref) = 1;
11636
11637   /* The binfo slot should be empty, unless this is an (ill-formed)
11638      redefinition.  */
11639   if (TYPE_BINFO (ref) && !TYPE_SIZE (ref))
11640     {
11641       error ("redefinition of %q#T", ref);
11642       return false;
11643     }
11644
11645   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
11646
11647   binfo = make_tree_binfo (max_bases);
11648
11649   TYPE_BINFO (ref) = binfo;
11650   BINFO_OFFSET (binfo) = size_zero_node;
11651   BINFO_TYPE (binfo) = ref;
11652
11653   /* Apply base-class info set up to the variants of this type.  */
11654   fixup_type_variants (ref);
11655
11656   if (max_bases)
11657     {
11658       BINFO_BASE_ACCESSES (binfo) = VEC_alloc (tree, gc, max_bases);
11659       /* An aggregate cannot have baseclasses.  */
11660       CLASSTYPE_NON_AGGREGATE (ref) = 1;
11661
11662       if (TREE_CODE (ref) == UNION_TYPE)
11663         {
11664           error ("derived union %qT invalid", ref);
11665           return false;
11666         }
11667     }
11668
11669   if (max_bases > 1)
11670     {
11671       if (TYPE_FOR_JAVA (ref))
11672         {
11673           error ("Java class %qT cannot have multiple bases", ref);
11674           return false;
11675         }
11676     }
11677
11678   if (max_vbases)
11679     {
11680       CLASSTYPE_VBASECLASSES (ref) = VEC_alloc (tree, gc, max_vbases);
11681
11682       if (TYPE_FOR_JAVA (ref))
11683         {
11684           error ("Java class %qT cannot have virtual bases", ref);
11685           return false;
11686         }
11687     }
11688
11689   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
11690     {
11691       tree access = TREE_PURPOSE (base_list);
11692       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
11693       tree basetype = TREE_VALUE (base_list);
11694
11695       if (access == access_default_node)
11696         access = default_access;
11697
11698       if (PACK_EXPANSION_P (basetype))
11699         basetype = PACK_EXPANSION_PATTERN (basetype);
11700       if (TREE_CODE (basetype) == TYPE_DECL)
11701         basetype = TREE_TYPE (basetype);
11702       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
11703         {
11704           error ("base type %qT fails to be a struct or class type",
11705                  basetype);
11706           return false;
11707         }
11708
11709       if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
11710         TYPE_FOR_JAVA (ref) = 1;
11711
11712       base_binfo = NULL_TREE;
11713       if (CLASS_TYPE_P (basetype) && !dependent_type_p (basetype))
11714         {
11715           base_binfo = TYPE_BINFO (basetype);
11716           /* The original basetype could have been a typedef'd type.  */
11717           basetype = BINFO_TYPE (base_binfo);
11718
11719           /* Inherit flags from the base.  */
11720           TYPE_HAS_NEW_OPERATOR (ref)
11721             |= TYPE_HAS_NEW_OPERATOR (basetype);
11722           TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
11723             |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
11724           TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
11725           TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
11726           CLASSTYPE_DIAMOND_SHAPED_P (ref)
11727             |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
11728           CLASSTYPE_REPEATED_BASE_P (ref)
11729             |= CLASSTYPE_REPEATED_BASE_P (basetype);
11730         }
11731
11732       /* We must do this test after we've seen through a typedef
11733          type.  */
11734       if (TYPE_MARKED_P (basetype))
11735         {
11736           if (basetype == ref)
11737             error ("recursive type %qT undefined", basetype);
11738           else
11739             error ("duplicate base type %qT invalid", basetype);
11740           return false;
11741         }
11742
11743       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
11744         /* Regenerate the pack expansion for the bases. */
11745         basetype = make_pack_expansion (basetype);
11746
11747       TYPE_MARKED_P (basetype) = 1;
11748
11749       base_binfo = copy_binfo (base_binfo, basetype, ref,
11750                                &igo_prev, via_virtual);
11751       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
11752         BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
11753
11754       BINFO_BASE_APPEND (binfo, base_binfo);
11755       BINFO_BASE_ACCESS_APPEND (binfo, access);
11756     }
11757
11758   if (VEC_space (tree, CLASSTYPE_VBASECLASSES (ref), 1))
11759     /* If we have space in the vbase vector, we must have shared at
11760        least one of them, and are therefore diamond shaped.  */
11761     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
11762
11763   /* Unmark all the types.  */
11764   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
11765     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11766   TYPE_MARKED_P (ref) = 0;
11767
11768   /* Now see if we have a repeated base type.  */
11769   if (!CLASSTYPE_REPEATED_BASE_P (ref))
11770     {
11771       for (base_binfo = binfo; base_binfo;
11772            base_binfo = TREE_CHAIN (base_binfo))
11773         {
11774           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11775             {
11776               CLASSTYPE_REPEATED_BASE_P (ref) = 1;
11777               break;
11778             }
11779           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
11780         }
11781       for (base_binfo = binfo; base_binfo;
11782            base_binfo = TREE_CHAIN (base_binfo))
11783         if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
11784           TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
11785         else
11786           break;
11787     }
11788
11789   return true;
11790 }
11791
11792 \f
11793 /* Copies the enum-related properties from type SRC to type DST.
11794    Used with the underlying type of an enum and the enum itself.  */
11795 static void
11796 copy_type_enum (tree dst, tree src)
11797 {
11798   TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
11799   TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
11800   TYPE_SIZE (dst) = TYPE_SIZE (src);
11801   TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
11802   SET_TYPE_MODE (dst, TYPE_MODE (src));
11803   TYPE_PRECISION (dst) = TYPE_PRECISION (src);
11804   TYPE_ALIGN (dst) = TYPE_ALIGN (src);
11805   TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
11806   TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
11807 }
11808
11809 /* Begin compiling the definition of an enumeration type.
11810    NAME is its name, 
11811
11812    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
11813
11814    UNDERLYING_TYPE is the type that will be used as the storage for
11815    the enumeration type. This should be NULL_TREE if no storage type
11816    was specified.
11817
11818    SCOPED_ENUM_P is true if this is a scoped enumeration type.
11819
11820    if IS_NEW is not NULL, gets TRUE iff a new type is created.
11821
11822    Returns the type object, as yet incomplete.
11823    Also records info about it so that build_enumerator
11824    may be used to declare the individual values as they are read.  */
11825
11826 tree
11827 start_enum (tree name, tree enumtype, tree underlying_type,
11828             bool scoped_enum_p, bool *is_new)
11829 {
11830   tree prevtype = NULL_TREE;
11831   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
11832
11833   if (is_new)
11834     *is_new = false;
11835   /* [C++0x dcl.enum]p5:
11836
11837     If not explicitly specified, the underlying type of a scoped
11838     enumeration type is int.  */
11839   if (!underlying_type && scoped_enum_p)
11840     underlying_type = integer_type_node;
11841
11842   if (underlying_type)
11843     underlying_type = cv_unqualified (underlying_type);
11844
11845   /* If this is the real definition for a previous forward reference,
11846      fill in the contents in the same object that used to be the
11847      forward reference.  */
11848   if (!enumtype)
11849     enumtype = lookup_and_check_tag (enum_type, name,
11850                                      /*tag_scope=*/ts_current,
11851                                      /*template_header_p=*/false);
11852
11853   /* In case of a template_decl, the only check that should be deferred
11854      to instantiation time is the comparison of underlying types.  */
11855   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
11856     {
11857       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
11858         {
11859           error_at (input_location, "scoped/unscoped mismatch "
11860                     "in enum %q#T", enumtype);
11861           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11862                     "previous definition here");
11863           enumtype = error_mark_node;
11864         }
11865       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
11866         {
11867           error_at (input_location, "underlying type mismatch "
11868                     "in enum %q#T", enumtype);
11869           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11870                     "previous definition here");
11871           enumtype = error_mark_node;
11872         }
11873       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
11874                && !dependent_type_p (underlying_type)
11875                && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
11876                && !same_type_p (underlying_type,
11877                                 ENUM_UNDERLYING_TYPE (enumtype)))
11878         {
11879           error_at (input_location, "different underlying type "
11880                     "in enum %q#T", enumtype);
11881           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
11882                     "previous definition here");
11883           underlying_type = NULL_TREE;
11884         }
11885     }
11886
11887   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
11888       || processing_template_decl)
11889     {
11890       /* In case of error, make a dummy enum to allow parsing to
11891          continue.  */
11892       if (enumtype == error_mark_node)
11893         {
11894           name = make_anon_name ();
11895           enumtype = NULL_TREE;
11896         }
11897
11898       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
11899          of an opaque enum, or an opaque enum of an already defined
11900          enumeration (C++0x only).
11901          In any other case, it'll be NULL_TREE. */
11902       if (!enumtype)
11903         {
11904           if (is_new)
11905             *is_new = true;
11906         }
11907       prevtype = enumtype;
11908       enumtype = cxx_make_type (ENUMERAL_TYPE);
11909       enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
11910       if (enumtype == error_mark_node)
11911         return error_mark_node;
11912
11913       /* The enum is considered opaque until the opening '{' of the
11914          enumerator list.  */
11915       SET_OPAQUE_ENUM_P (enumtype, true);
11916       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
11917     }
11918
11919   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
11920
11921   if (underlying_type)
11922     {
11923       if (CP_INTEGRAL_TYPE_P (underlying_type))
11924         {
11925           copy_type_enum (enumtype, underlying_type);
11926           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11927         }
11928       else if (dependent_type_p (underlying_type))
11929         ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
11930       else
11931         error ("underlying type %<%T%> of %<%T%> must be an integral type", 
11932                underlying_type, enumtype);
11933     }
11934
11935   /* If into a template class, the returned enum is always the first
11936      declaration (opaque or not) seen. This way all the references to
11937      this type will be to the same declaration. The following ones are used
11938      only to check for definition errors.  */
11939   if (prevtype && processing_template_decl)
11940     return prevtype;
11941   else
11942     return enumtype;
11943 }
11944
11945 /* After processing and defining all the values of an enumeration type,
11946    install their decls in the enumeration type.
11947    ENUMTYPE is the type object.  */
11948
11949 void
11950 finish_enum_value_list (tree enumtype)
11951 {
11952   tree values;
11953   tree underlying_type;
11954   tree decl;
11955   tree value;
11956   tree minnode, maxnode;
11957   tree t;
11958
11959   bool fixed_underlying_type_p 
11960     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
11961
11962   /* We built up the VALUES in reverse order.  */
11963   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
11964
11965   /* For an enum defined in a template, just set the type of the values;
11966      all further processing is postponed until the template is
11967      instantiated.  We need to set the type so that tsubst of a CONST_DECL
11968      works.  */
11969   if (processing_template_decl)
11970     {
11971       for (values = TYPE_VALUES (enumtype);
11972            values;
11973            values = TREE_CHAIN (values))
11974         TREE_TYPE (TREE_VALUE (values)) = enumtype;
11975       return;
11976     }
11977
11978   /* Determine the minimum and maximum values of the enumerators.  */
11979   if (TYPE_VALUES (enumtype))
11980     {
11981       minnode = maxnode = NULL_TREE;
11982
11983       for (values = TYPE_VALUES (enumtype);
11984            values;
11985            values = TREE_CHAIN (values))
11986         {
11987           decl = TREE_VALUE (values);
11988
11989           /* [dcl.enum]: Following the closing brace of an enum-specifier,
11990              each enumerator has the type of its enumeration.  Prior to the
11991              closing brace, the type of each enumerator is the type of its
11992              initializing value.  */
11993           TREE_TYPE (decl) = enumtype;
11994
11995           /* Update the minimum and maximum values, if appropriate.  */
11996           value = DECL_INITIAL (decl);
11997           if (value == error_mark_node)
11998             value = integer_zero_node;
11999           /* Figure out what the minimum and maximum values of the
12000              enumerators are.  */
12001           if (!minnode)
12002             minnode = maxnode = value;
12003           else if (tree_int_cst_lt (maxnode, value))
12004             maxnode = value;
12005           else if (tree_int_cst_lt (value, minnode))
12006             minnode = value;
12007         }
12008     }
12009   else
12010     /* [dcl.enum]
12011
12012        If the enumerator-list is empty, the underlying type is as if
12013        the enumeration had a single enumerator with value 0.  */
12014     minnode = maxnode = integer_zero_node;
12015
12016   if (!fixed_underlying_type_p)
12017     {
12018       /* Compute the number of bits require to represent all values of the
12019          enumeration.  We must do this before the type of MINNODE and
12020          MAXNODE are transformed, since tree_int_cst_min_precision relies
12021          on the TREE_TYPE of the value it is passed.  */
12022       bool unsignedp = tree_int_cst_sgn (minnode) >= 0;
12023       int lowprec = tree_int_cst_min_precision (minnode, unsignedp);
12024       int highprec = tree_int_cst_min_precision (maxnode, unsignedp);
12025       int precision = MAX (lowprec, highprec);
12026       unsigned int itk;
12027       bool use_short_enum;
12028
12029       /* Determine the underlying type of the enumeration.
12030
12031          [dcl.enum]
12032
12033          The underlying type of an enumeration is an integral type that
12034          can represent all the enumerator values defined in the
12035          enumeration.  It is implementation-defined which integral type is
12036          used as the underlying type for an enumeration except that the
12037          underlying type shall not be larger than int unless the value of
12038          an enumerator cannot fit in an int or unsigned int.
12039
12040          We use "int" or an "unsigned int" as the underlying type, even if
12041          a smaller integral type would work, unless the user has
12042          explicitly requested that we use the smallest possible type.  The
12043          user can request that for all enumerations with a command line
12044          flag, or for just one enumeration with an attribute.  */
12045
12046       use_short_enum = flag_short_enums
12047         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
12048
12049       for (itk = (use_short_enum ? itk_char : itk_int);
12050            itk != itk_none;
12051            itk++)
12052         {
12053           underlying_type = integer_types[itk];
12054           if (underlying_type != NULL_TREE
12055               && TYPE_PRECISION (underlying_type) >= precision
12056               && TYPE_UNSIGNED (underlying_type) == unsignedp)
12057             break;
12058         }
12059       if (itk == itk_none)
12060         {
12061           /* DR 377
12062
12063              IF no integral type can represent all the enumerator values, the
12064              enumeration is ill-formed.  */
12065           error ("no integral type can represent all of the enumerator values "
12066                  "for %qT", enumtype);
12067           precision = TYPE_PRECISION (long_long_integer_type_node);
12068           underlying_type = integer_types[itk_unsigned_long_long];
12069         }
12070
12071       /* [dcl.enum]
12072
12073          The value of sizeof() applied to an enumeration type, an object
12074          of an enumeration type, or an enumerator, is the value of sizeof()
12075          applied to the underlying type.  */
12076       copy_type_enum (enumtype, underlying_type);
12077
12078       /* Compute the minimum and maximum values for the type.
12079
12080          [dcl.enum]
12081
12082          For an enumeration where emin is the smallest enumerator and emax
12083          is the largest, the values of the enumeration are the values of the
12084          underlying type in the range bmin to bmax, where bmin and bmax are,
12085          respectively, the smallest and largest values of the smallest bit-
12086          field that can store emin and emax.  */
12087
12088       /* The middle-end currently assumes that types with TYPE_PRECISION
12089          narrower than their underlying type are suitably zero or sign
12090          extended to fill their mode.  Similarly, it assumes that the front
12091          end assures that a value of a particular type must be within
12092          TYPE_MIN_VALUE and TYPE_MAX_VALUE.
12093
12094          We used to set these fields based on bmin and bmax, but that led
12095          to invalid assumptions like optimizing away bounds checking.  So
12096          now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
12097          TYPE_MAX_VALUE to the values for the mode above and only restrict
12098          the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
12099       ENUM_UNDERLYING_TYPE (enumtype)
12100         = build_distinct_type_copy (underlying_type);
12101       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
12102       set_min_and_max_values_for_integral_type
12103         (ENUM_UNDERLYING_TYPE (enumtype), precision, unsignedp);
12104
12105       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
12106       if (flag_strict_enums)
12107         set_min_and_max_values_for_integral_type (enumtype, precision,
12108                                                   unsignedp);
12109     }
12110   else
12111     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
12112
12113   /* Convert each of the enumerators to the type of the underlying
12114      type of the enumeration.  */
12115   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
12116     {
12117       location_t saved_location;
12118
12119       decl = TREE_VALUE (values);
12120       saved_location = input_location;
12121       input_location = DECL_SOURCE_LOCATION (decl);
12122       if (fixed_underlying_type_p)
12123         /* If the enumeration type has a fixed underlying type, we
12124            already checked all of the enumerator values.  */
12125         value = DECL_INITIAL (decl);
12126       else
12127         value = perform_implicit_conversion (underlying_type,
12128                                              DECL_INITIAL (decl),
12129                                              tf_warning_or_error);
12130       input_location = saved_location;
12131
12132       /* Do not clobber shared ints.  */
12133       value = copy_node (value);
12134
12135       TREE_TYPE (value) = enumtype;
12136       DECL_INITIAL (decl) = value;
12137     }
12138
12139   /* Fix up all variant types of this enum type.  */
12140   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
12141     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
12142
12143   /* Finish debugging output for this type.  */
12144   rest_of_type_compilation (enumtype, namespace_bindings_p ());
12145 }
12146
12147 /* Finishes the enum type. This is called only the first time an
12148    enumeration is seen, be it opaque or odinary.
12149    ENUMTYPE is the type object.  */
12150
12151 void
12152 finish_enum (tree enumtype)
12153 {
12154   if (processing_template_decl)
12155     {
12156       if (at_function_scope_p ())
12157         add_stmt (build_min (TAG_DEFN, enumtype));
12158       return;
12159     }
12160
12161   /* Here there should not be any variants of this type.  */
12162   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
12163               && !TYPE_NEXT_VARIANT (enumtype));
12164 }
12165
12166 /* Build and install a CONST_DECL for an enumeration constant of the
12167    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
12168    LOC is the location of NAME.
12169    Assignment of sequential values by default is handled here.  */
12170
12171 void
12172 build_enumerator (tree name, tree value, tree enumtype, location_t loc)
12173 {
12174   tree decl;
12175   tree context;
12176   tree type;
12177
12178   /* If the VALUE was erroneous, pretend it wasn't there; that will
12179      result in the enum being assigned the next value in sequence.  */
12180   if (value == error_mark_node)
12181     value = NULL_TREE;
12182
12183   /* Remove no-op casts from the value.  */
12184   if (value)
12185     STRIP_TYPE_NOPS (value);
12186
12187   if (! processing_template_decl)
12188     {
12189       /* Validate and default VALUE.  */
12190       if (value != NULL_TREE)
12191         {
12192           value = cxx_constant_value (value);
12193
12194           if (TREE_CODE (value) == INTEGER_CST
12195               && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)))
12196             {
12197               value = perform_integral_promotions (value);
12198             }
12199           else
12200             {
12201               error ("enumerator value for %qD is not an integer constant", name);
12202               value = NULL_TREE;
12203             }
12204         }
12205
12206       /* Default based on previous value.  */
12207       if (value == NULL_TREE)
12208         {
12209           if (TYPE_VALUES (enumtype))
12210             {
12211               HOST_WIDE_INT hi;
12212               unsigned HOST_WIDE_INT lo;
12213               tree prev_value;
12214               bool overflowed;
12215
12216               /* C++03 7.2/4: If no initializer is specified for the first
12217                  enumerator, the type is an unspecified integral
12218                  type. Otherwise the type is the same as the type of the
12219                  initializing value of the preceding enumerator unless the
12220                  incremented value is not representable in that type, in
12221                  which case the type is an unspecified integral type
12222                  sufficient to contain the incremented value.  */
12223               prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
12224               if (error_operand_p (prev_value))
12225                 value = error_mark_node;
12226               else
12227                 {
12228                   overflowed = add_double (TREE_INT_CST_LOW (prev_value),
12229                                            TREE_INT_CST_HIGH (prev_value),
12230                                            1, 0, &lo, &hi);
12231                   if (!overflowed)
12232                     {
12233                       double_int di;
12234                       tree type = TREE_TYPE (prev_value);
12235                       bool pos = (TYPE_UNSIGNED (type) || hi >= 0);
12236                       di.low = lo; di.high = hi;
12237                       if (!double_int_fits_to_tree_p (type, di))
12238                         {
12239                           unsigned int itk;
12240                           for (itk = itk_int; itk != itk_none; itk++)
12241                             {
12242                               type = integer_types[itk];
12243                               if (type != NULL_TREE
12244                                   && (pos || !TYPE_UNSIGNED (type))
12245                                   && double_int_fits_to_tree_p (type, di))
12246                                 break;
12247                             }
12248                           if (type && cxx_dialect < cxx0x
12249                               && itk > itk_unsigned_long)
12250                             pedwarn (input_location, OPT_Wlong_long, pos ? "\
12251 incremented enumerator value is too large for %<unsigned long%>" :  "\
12252 incremented enumerator value is too large for %<long%>");
12253                         }
12254                       if (type == NULL_TREE)
12255                         overflowed = true;
12256                       else
12257                         value = double_int_to_tree (type, di);
12258                     }
12259
12260                   if (overflowed)
12261                     {
12262                       error ("overflow in enumeration values at %qD", name);
12263                       value = error_mark_node;
12264                     }
12265                 }
12266             }
12267           else
12268             value = integer_zero_node;
12269         }
12270
12271       /* Remove no-op casts from the value.  */
12272       STRIP_TYPE_NOPS (value);
12273
12274       /* If the underlying type of the enum is fixed, check whether
12275          the enumerator values fits in the underlying type.  If it
12276          does not fit, the program is ill-formed [C++0x dcl.enum].  */
12277       if (ENUM_UNDERLYING_TYPE (enumtype)
12278           && value
12279           && TREE_CODE (value) == INTEGER_CST
12280           && !int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
12281         {
12282           error ("enumerator value %E is too large for underlying type %<%T%>",
12283                  value, ENUM_UNDERLYING_TYPE (enumtype));
12284
12285           /* Silently convert the value so that we can continue.  */
12286           value = perform_implicit_conversion (ENUM_UNDERLYING_TYPE (enumtype),
12287                                                value, tf_none);
12288         }
12289     }
12290
12291   /* C++ associates enums with global, function, or class declarations.  */
12292   context = current_scope ();
12293
12294   /* Build the actual enumeration constant.  Note that the enumeration
12295      constants have the underlying type of the enum (if it is fixed)
12296      or the type of their initializer (if the underlying type of the
12297      enum is not fixed):
12298
12299       [ C++0x dcl.enum ]
12300
12301         If the underlying type is fixed, the type of each enumerator
12302         prior to the closing brace is the underlying type; if the
12303         initializing value of an enumerator cannot be represented by
12304         the underlying type, the program is ill-formed. If the
12305         underlying type is not fixed, the type of each enumerator is
12306         the type of its initializing value.
12307
12308     If the underlying type is not fixed, it will be computed by
12309     finish_enum and we will reset the type of this enumerator.  Of
12310     course, if we're processing a template, there may be no value.  */
12311   type = value ? TREE_TYPE (value) : NULL_TREE;
12312
12313   if (context && context == current_class_type)
12314     /* This enum declaration is local to the class.  We need the full
12315        lang_decl so that we can record DECL_CLASS_CONTEXT, for example.  */
12316     decl = build_lang_decl_loc (loc, CONST_DECL, name, type);
12317   else
12318     /* It's a global enum, or it's local to a function.  (Note local to
12319        a function could mean local to a class method.  */
12320     decl = build_decl (loc, CONST_DECL, name, type);
12321   
12322   DECL_CONTEXT (decl) = FROB_CONTEXT (context);
12323   TREE_CONSTANT (decl) = 1;
12324   TREE_READONLY (decl) = 1;
12325   DECL_INITIAL (decl) = value;
12326
12327   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
12328     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
12329        on the TYPE_FIELDS list for `S'.  (That's so that you can say
12330        things like `S::i' later.)  */
12331     finish_member_declaration (decl);
12332   else
12333     pushdecl (decl);
12334
12335   /* Add this enumeration constant to the list for this type.  */
12336   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
12337 }
12338
12339 /* Look for an enumerator with the given NAME within the enumeration
12340    type ENUMTYPE.  This routine is used primarily for qualified name
12341    lookup into an enumerator in C++0x, e.g.,
12342
12343      enum class Color { Red, Green, Blue };
12344
12345      Color color = Color::Red;
12346
12347    Returns the value corresponding to the enumerator, or
12348    NULL_TREE if no such enumerator was found.  */
12349 tree
12350 lookup_enumerator (tree enumtype, tree name)
12351 {
12352   tree e;
12353   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
12354
12355   e = purpose_member (name, TYPE_VALUES (enumtype));
12356   return e? TREE_VALUE (e) : NULL_TREE;
12357 }
12358
12359 \f
12360 /* We're defining DECL.  Make sure that its type is OK.  */
12361
12362 static void
12363 check_function_type (tree decl, tree current_function_parms)
12364 {
12365   tree fntype = TREE_TYPE (decl);
12366   tree return_type = complete_type (TREE_TYPE (fntype));
12367
12368   /* In a function definition, arg types must be complete.  */
12369   require_complete_types_for_parms (current_function_parms);
12370
12371   if (dependent_type_p (return_type))
12372     return;
12373   if (!COMPLETE_OR_VOID_TYPE_P (return_type)
12374       || (TYPE_FOR_JAVA (return_type) && MAYBE_CLASS_TYPE_P (return_type)))
12375     {
12376       tree args = TYPE_ARG_TYPES (fntype);
12377
12378       if (!COMPLETE_OR_VOID_TYPE_P (return_type))
12379         error ("return type %q#T is incomplete", return_type);
12380       else
12381         error ("return type has Java class type %q#T", return_type);
12382
12383       /* Make it return void instead.  */
12384       if (TREE_CODE (fntype) == METHOD_TYPE)
12385         fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
12386                                              void_type_node,
12387                                              TREE_CHAIN (args));
12388       else
12389         fntype = build_function_type (void_type_node, args);
12390       fntype
12391         = build_exception_variant (fntype,
12392                                    TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
12393       fntype = (cp_build_type_attribute_variant
12394                 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
12395       TREE_TYPE (decl) = fntype;
12396     }
12397   else
12398     abstract_virtuals_error (decl, TREE_TYPE (fntype));
12399 }
12400
12401 /* Create the FUNCTION_DECL for a function definition.
12402    DECLSPECS and DECLARATOR are the parts of the declaration;
12403    they describe the function's name and the type it returns,
12404    but twisted together in a fashion that parallels the syntax of C.
12405
12406    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
12407    DECLARATOR is really the DECL for the function we are about to
12408    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
12409    indicating that the function is an inline defined in-class.
12410
12411    This function creates a binding context for the function body
12412    as well as setting up the FUNCTION_DECL in current_function_decl.
12413
12414    For C++, we must first check whether that datum makes any sense.
12415    For example, "class A local_a(1,2);" means that variable local_a
12416    is an aggregate of type A, which should have a constructor
12417    applied to it with the argument list [1, 2].
12418
12419    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
12420    or may be a BLOCK if the function has been defined previously
12421    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
12422    error_mark_node if the function has never been defined, or
12423    a BLOCK if the function has been defined somewhere.  */
12424
12425 void
12426 start_preparsed_function (tree decl1, tree attrs, int flags)
12427 {
12428   tree ctype = NULL_TREE;
12429   tree fntype;
12430   tree restype;
12431   int doing_friend = 0;
12432   struct cp_binding_level *bl;
12433   tree current_function_parms;
12434   struct c_fileinfo *finfo
12435     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
12436   bool honor_interface;
12437
12438   /* Sanity check.  */
12439   gcc_assert (TREE_CODE (TREE_VALUE (void_list_node)) == VOID_TYPE);
12440   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
12441
12442   fntype = TREE_TYPE (decl1);
12443   if (TREE_CODE (fntype) == METHOD_TYPE)
12444     ctype = TYPE_METHOD_BASETYPE (fntype);
12445
12446   /* ISO C++ 11.4/5.  A friend function defined in a class is in
12447      the (lexical) scope of the class in which it is defined.  */
12448   if (!ctype && DECL_FRIEND_P (decl1))
12449     {
12450       ctype = DECL_FRIEND_CONTEXT (decl1);
12451
12452       /* CTYPE could be null here if we're dealing with a template;
12453          for example, `inline friend float foo()' inside a template
12454          will have no CTYPE set.  */
12455       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
12456         ctype = NULL_TREE;
12457       else
12458         doing_friend = 1;
12459     }
12460
12461   if (DECL_DECLARED_INLINE_P (decl1)
12462       && lookup_attribute ("noinline", attrs))
12463     warning (0, "inline function %q+D given attribute noinline", decl1);
12464
12465   /* Handle gnu_inline attribute.  */
12466   if (GNU_INLINE_P (decl1))
12467     {
12468       DECL_EXTERNAL (decl1) = 1;
12469       DECL_NOT_REALLY_EXTERN (decl1) = 0;
12470       DECL_INTERFACE_KNOWN (decl1) = 1;
12471       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
12472     }
12473
12474   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
12475     /* This is a constructor, we must ensure that any default args
12476        introduced by this definition are propagated to the clones
12477        now. The clones are used directly in overload resolution.  */
12478     adjust_clone_args (decl1);
12479
12480   /* Sometimes we don't notice that a function is a static member, and
12481      build a METHOD_TYPE for it.  Fix that up now.  */
12482   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
12483                 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
12484
12485   /* Set up current_class_type, and enter the scope of the class, if
12486      appropriate.  */
12487   if (ctype)
12488     push_nested_class (ctype);
12489   else if (DECL_STATIC_FUNCTION_P (decl1))
12490     push_nested_class (DECL_CONTEXT (decl1));
12491
12492   /* Now that we have entered the scope of the class, we must restore
12493      the bindings for any template parameters surrounding DECL1, if it
12494      is an inline member template.  (Order is important; consider the
12495      case where a template parameter has the same name as a field of
12496      the class.)  It is not until after this point that
12497      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
12498   if (flags & SF_INCLASS_INLINE)
12499     maybe_begin_member_template_processing (decl1);
12500
12501   /* Effective C++ rule 15.  */
12502   if (warn_ecpp
12503       && DECL_OVERLOADED_OPERATOR_P (decl1) == NOP_EXPR
12504       && TREE_CODE (TREE_TYPE (fntype)) == VOID_TYPE)
12505     warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>");
12506
12507   /* Make the init_value nonzero so pushdecl knows this is not tentative.
12508      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
12509   if (!DECL_INITIAL (decl1))
12510     DECL_INITIAL (decl1) = error_mark_node;
12511
12512   /* This function exists in static storage.
12513      (This does not mean `static' in the C sense!)  */
12514   TREE_STATIC (decl1) = 1;
12515
12516   /* We must call push_template_decl after current_class_type is set
12517      up.  (If we are processing inline definitions after exiting a
12518      class scope, current_class_type will be NULL_TREE until set above
12519      by push_nested_class.)  */
12520   if (processing_template_decl)
12521     {
12522       /* FIXME: Handle error_mark_node more gracefully.  */
12523       tree newdecl1 = push_template_decl (decl1);
12524       if (newdecl1 != error_mark_node)
12525         decl1 = newdecl1;
12526     }
12527
12528   /* We are now in the scope of the function being defined.  */
12529   current_function_decl = decl1;
12530
12531   /* Save the parm names or decls from this function's declarator
12532      where store_parm_decls will find them.  */
12533   current_function_parms = DECL_ARGUMENTS (decl1);
12534
12535   /* Make sure the parameter and return types are reasonable.  When
12536      you declare a function, these types can be incomplete, but they
12537      must be complete when you define the function.  */
12538   check_function_type (decl1, current_function_parms);
12539
12540   /* Build the return declaration for the function.  */
12541   restype = TREE_TYPE (fntype);
12542   if (DECL_RESULT (decl1) == NULL_TREE)
12543     {
12544       tree resdecl;
12545
12546       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
12547       DECL_ARTIFICIAL (resdecl) = 1;
12548       DECL_IGNORED_P (resdecl) = 1;
12549       DECL_RESULT (decl1) = resdecl;
12550
12551       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
12552     }
12553
12554   /* Let the user know we're compiling this function.  */
12555   announce_function (decl1);
12556
12557   /* Record the decl so that the function name is defined.
12558      If we already have a decl for this name, and it is a FUNCTION_DECL,
12559      use the old decl.  */
12560   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
12561     {
12562       /* A specialization is not used to guide overload resolution.  */
12563       if (!DECL_FUNCTION_MEMBER_P (decl1)
12564           && !(DECL_USE_TEMPLATE (decl1) &&
12565                PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
12566         {
12567           tree olddecl = pushdecl (decl1);
12568
12569           if (olddecl == error_mark_node)
12570             /* If something went wrong when registering the declaration,
12571                use DECL1; we have to have a FUNCTION_DECL to use when
12572                parsing the body of the function.  */
12573             ;
12574           else
12575             {
12576               /* Otherwise, OLDDECL is either a previous declaration
12577                  of the same function or DECL1 itself.  */
12578
12579               if (warn_missing_declarations
12580                   && olddecl == decl1
12581                   && !DECL_MAIN_P (decl1)
12582                   && TREE_PUBLIC (decl1)
12583                   && !DECL_DECLARED_INLINE_P (decl1))
12584                 {
12585                   tree context;
12586
12587                   /* Check whether DECL1 is in an anonymous
12588                      namespace.  */
12589                   for (context = DECL_CONTEXT (decl1);
12590                        context;
12591                        context = DECL_CONTEXT (context))
12592                     {
12593                       if (TREE_CODE (context) == NAMESPACE_DECL
12594                           && DECL_NAME (context) == NULL_TREE)
12595                         break;
12596                     }
12597
12598                   if (context == NULL)
12599                     warning (OPT_Wmissing_declarations,
12600                              "no previous declaration for %q+D", decl1);
12601                 }
12602
12603               decl1 = olddecl;
12604             }
12605         }
12606       else
12607         {
12608           /* We need to set the DECL_CONTEXT.  */
12609           if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
12610             DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
12611         }
12612       fntype = TREE_TYPE (decl1);
12613
12614       /* If #pragma weak applies, mark the decl appropriately now.
12615          The pragma only applies to global functions.  Because
12616          determining whether or not the #pragma applies involves
12617          computing the mangled name for the declaration, we cannot
12618          apply the pragma until after we have merged this declaration
12619          with any previous declarations; if the original declaration
12620          has a linkage specification, that specification applies to
12621          the definition as well, and may affect the mangled name.  */
12622       if (DECL_FILE_SCOPE_P (decl1))
12623         maybe_apply_pragma_weak (decl1);
12624     }
12625
12626   /* constexpr functions must have literal argument types and
12627      literal return type.  */
12628   validate_constexpr_fundecl (decl1);
12629
12630   /* Reset this in case the call to pushdecl changed it.  */
12631   current_function_decl = decl1;
12632
12633   gcc_assert (DECL_INITIAL (decl1));
12634
12635   /* This function may already have been parsed, in which case just
12636      return; our caller will skip over the body without parsing.  */
12637   if (DECL_INITIAL (decl1) != error_mark_node)
12638     return;
12639
12640   /* Initialize RTL machinery.  We cannot do this until
12641      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
12642      even when processing a template; this is how we get
12643      CFUN set up, and our per-function variables initialized.
12644      FIXME factor out the non-RTL stuff.  */
12645   bl = current_binding_level;
12646   allocate_struct_function (decl1, processing_template_decl);
12647
12648   /* Initialize the language data structures.  Whenever we start
12649      a new function, we destroy temporaries in the usual way.  */
12650   cfun->language = ggc_alloc_cleared_language_function ();
12651   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
12652   current_binding_level = bl;
12653
12654   /* Start the statement-tree, start the tree now.  */
12655   DECL_SAVED_TREE (decl1) = push_stmt_list ();
12656
12657   /* If we are (erroneously) defining a function that we have already
12658      defined before, wipe out what we knew before.  */
12659   if (!DECL_PENDING_INLINE_P (decl1))
12660     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
12661
12662   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
12663     {
12664       /* We know that this was set up by `grokclassfn'.  We do not
12665          wait until `store_parm_decls', since evil parse errors may
12666          never get us to that point.  Here we keep the consistency
12667          between `current_class_type' and `current_class_ptr'.  */
12668       tree t = DECL_ARGUMENTS (decl1);
12669
12670       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
12671       gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
12672
12673       cp_function_chain->x_current_class_ref
12674         = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
12675       cp_function_chain->x_current_class_ptr = t;
12676
12677       /* Constructors and destructors need to know whether they're "in
12678          charge" of initializing virtual base classes.  */
12679       t = DECL_CHAIN (t);
12680       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
12681         {
12682           current_in_charge_parm = t;
12683           t = DECL_CHAIN (t);
12684         }
12685       if (DECL_HAS_VTT_PARM_P (decl1))
12686         {
12687           gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
12688           current_vtt_parm = t;
12689         }
12690     }
12691
12692   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
12693                      /* Implicitly-defined methods (like the
12694                         destructor for a class in which no destructor
12695                         is explicitly declared) must not be defined
12696                         until their definition is needed.  So, we
12697                         ignore interface specifications for
12698                         compiler-generated functions.  */
12699                      && !DECL_ARTIFICIAL (decl1));
12700
12701   if (processing_template_decl)
12702     /* Don't mess with interface flags.  */;
12703   else if (DECL_INTERFACE_KNOWN (decl1))
12704     {
12705       tree ctx = decl_function_context (decl1);
12706
12707       if (DECL_NOT_REALLY_EXTERN (decl1))
12708         DECL_EXTERNAL (decl1) = 0;
12709
12710       if (ctx != NULL_TREE && DECL_DECLARED_INLINE_P (ctx)
12711           && TREE_PUBLIC (ctx))
12712         /* This is a function in a local class in an extern inline
12713            function.  */
12714         comdat_linkage (decl1);
12715     }
12716   /* If this function belongs to an interface, it is public.
12717      If it belongs to someone else's interface, it is also external.
12718      This only affects inlines and template instantiations.  */
12719   else if (!finfo->interface_unknown && honor_interface)
12720     {
12721       if (DECL_DECLARED_INLINE_P (decl1)
12722           || DECL_TEMPLATE_INSTANTIATION (decl1))
12723         {
12724           DECL_EXTERNAL (decl1)
12725             = (finfo->interface_only
12726                || (DECL_DECLARED_INLINE_P (decl1)
12727                    && ! flag_implement_inlines
12728                    && !DECL_VINDEX (decl1)));
12729
12730           /* For WIN32 we also want to put these in linkonce sections.  */
12731           maybe_make_one_only (decl1);
12732         }
12733       else
12734         DECL_EXTERNAL (decl1) = 0;
12735       DECL_INTERFACE_KNOWN (decl1) = 1;
12736       /* If this function is in an interface implemented in this file,
12737          make sure that the back end knows to emit this function
12738          here.  */
12739       if (!DECL_EXTERNAL (decl1))
12740         mark_needed (decl1);
12741     }
12742   else if (finfo->interface_unknown && finfo->interface_only
12743            && honor_interface)
12744     {
12745       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
12746          interface, we will have both finfo->interface_unknown and
12747          finfo->interface_only set.  In that case, we don't want to
12748          use the normal heuristics because someone will supply a
12749          #pragma implementation elsewhere, and deducing it here would
12750          produce a conflict.  */
12751       comdat_linkage (decl1);
12752       DECL_EXTERNAL (decl1) = 0;
12753       DECL_INTERFACE_KNOWN (decl1) = 1;
12754       DECL_DEFER_OUTPUT (decl1) = 1;
12755     }
12756   else
12757     {
12758       /* This is a definition, not a reference.
12759          So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
12760       if (!GNU_INLINE_P (decl1))
12761         DECL_EXTERNAL (decl1) = 0;
12762
12763       if ((DECL_DECLARED_INLINE_P (decl1)
12764            || DECL_TEMPLATE_INSTANTIATION (decl1))
12765           && ! DECL_INTERFACE_KNOWN (decl1))
12766         DECL_DEFER_OUTPUT (decl1) = 1;
12767       else
12768         DECL_INTERFACE_KNOWN (decl1) = 1;
12769     }
12770
12771   /* Determine the ELF visibility attribute for the function.  We must not
12772      do this before calling "pushdecl", as we must allow "duplicate_decls"
12773      to merge any attributes appropriately.  We also need to wait until
12774      linkage is set.  */
12775   if (!DECL_CLONED_FUNCTION_P (decl1))
12776     determine_visibility (decl1);
12777
12778   begin_scope (sk_function_parms, decl1);
12779
12780   ++function_depth;
12781
12782   if (DECL_DESTRUCTOR_P (decl1)
12783       || (DECL_CONSTRUCTOR_P (decl1)
12784           && targetm.cxx.cdtor_returns_this ()))
12785     {
12786       cdtor_label = build_decl (input_location, 
12787                                 LABEL_DECL, NULL_TREE, NULL_TREE);
12788       DECL_CONTEXT (cdtor_label) = current_function_decl;
12789     }
12790
12791   start_fname_decls ();
12792
12793   store_parm_decls (current_function_parms);
12794 }
12795
12796
12797 /* Like start_preparsed_function, except that instead of a
12798    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
12799
12800    Returns 1 on success.  If the DECLARATOR is not suitable for a function
12801    (it defines a datum instead), we return 0, which tells
12802    yyparse to report a parse error.  */
12803
12804 int
12805 start_function (cp_decl_specifier_seq *declspecs,
12806                 const cp_declarator *declarator,
12807                 tree attrs)
12808 {
12809   tree decl1;
12810
12811   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
12812   if (decl1 == error_mark_node)
12813     return 0;
12814   /* If the declarator is not suitable for a function definition,
12815      cause a syntax error.  */
12816   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
12817     {
12818       error ("invalid function declaration");
12819       return 0;
12820     }
12821
12822   if (DECL_MAIN_P (decl1))
12823     /* main must return int.  grokfndecl should have corrected it
12824        (and issued a diagnostic) if the user got it wrong.  */
12825     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
12826                              integer_type_node));
12827
12828   start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
12829
12830   return 1;
12831 }
12832 \f
12833 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
12834    FN.  */
12835
12836 static bool
12837 use_eh_spec_block (tree fn)
12838 {
12839   return (flag_exceptions && flag_enforce_eh_specs
12840           && !processing_template_decl
12841           && !type_throw_all_p (TREE_TYPE (fn))
12842           /* We insert the EH_SPEC_BLOCK only in the original
12843              function; then, it is copied automatically to the
12844              clones.  */
12845           && !DECL_CLONED_FUNCTION_P (fn)
12846           /* Implicitly-generated constructors and destructors have
12847              exception specifications.  However, those specifications
12848              are the union of the possible exceptions specified by the
12849              constructors/destructors for bases and members, so no
12850              unallowed exception will ever reach this function.  By
12851              not creating the EH_SPEC_BLOCK we save a little memory,
12852              and we avoid spurious warnings about unreachable
12853              code.  */
12854           && !DECL_DEFAULTED_FN (fn));
12855 }
12856
12857 /* Store the parameter declarations into the current function declaration.
12858    This is called after parsing the parameter declarations, before
12859    digesting the body of the function.
12860
12861    Also install to binding contour return value identifier, if any.  */
12862
12863 static void
12864 store_parm_decls (tree current_function_parms)
12865 {
12866   tree fndecl = current_function_decl;
12867   tree parm;
12868
12869   /* This is a chain of any other decls that came in among the parm
12870      declarations.  If a parm is declared with  enum {foo, bar} x;
12871      then CONST_DECLs for foo and bar are put here.  */
12872   tree nonparms = NULL_TREE;
12873
12874   if (current_function_parms)
12875     {
12876       /* This case is when the function was defined with an ANSI prototype.
12877          The parms already have decls, so we need not do anything here
12878          except record them as in effect
12879          and complain if any redundant old-style parm decls were written.  */
12880
12881       tree specparms = current_function_parms;
12882       tree next;
12883
12884       /* Must clear this because it might contain TYPE_DECLs declared
12885              at class level.  */
12886       current_binding_level->names = NULL;
12887
12888       /* If we're doing semantic analysis, then we'll call pushdecl
12889              for each of these.  We must do them in reverse order so that
12890              they end in the correct forward order.  */
12891       specparms = nreverse (specparms);
12892
12893       for (parm = specparms; parm; parm = next)
12894         {
12895           next = DECL_CHAIN (parm);
12896           if (TREE_CODE (parm) == PARM_DECL)
12897             {
12898               if (DECL_NAME (parm) == NULL_TREE
12899                   || TREE_CODE (parm) != VOID_TYPE)
12900                 pushdecl (parm);
12901               else
12902                 error ("parameter %qD declared void", parm);
12903             }
12904           else
12905             {
12906               /* If we find an enum constant or a type tag,
12907                  put it aside for the moment.  */
12908               TREE_CHAIN (parm) = NULL_TREE;
12909               nonparms = chainon (nonparms, parm);
12910             }
12911         }
12912
12913       /* Get the decls in their original chain order and record in the
12914          function.  This is all and only the PARM_DECLs that were
12915          pushed into scope by the loop above.  */
12916       DECL_ARGUMENTS (fndecl) = getdecls ();
12917     }
12918   else
12919     DECL_ARGUMENTS (fndecl) = NULL_TREE;
12920
12921   /* Now store the final chain of decls for the arguments
12922      as the decl-chain of the current lexical scope.
12923      Put the enumerators in as well, at the front so that
12924      DECL_ARGUMENTS is not modified.  */
12925   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
12926
12927   if (use_eh_spec_block (current_function_decl))
12928     current_eh_spec_block = begin_eh_spec_block ();
12929 }
12930
12931 \f
12932 /* We have finished doing semantic analysis on DECL, but have not yet
12933    generated RTL for its body.  Save away our current state, so that
12934    when we want to generate RTL later we know what to do.  */
12935
12936 static void
12937 save_function_data (tree decl)
12938 {
12939   struct language_function *f;
12940
12941   /* Save the language-specific per-function data so that we can
12942      get it back when we really expand this function.  */
12943   gcc_assert (!DECL_PENDING_INLINE_P (decl));
12944
12945   /* Make a copy.  */
12946   f = ggc_alloc_language_function ();
12947   memcpy (f, cp_function_chain, sizeof (struct language_function));
12948   DECL_SAVED_FUNCTION_DATA (decl) = f;
12949
12950   /* Clear out the bits we don't need.  */
12951   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
12952   f->bindings = NULL;
12953   f->x_local_names = NULL;
12954 }
12955
12956
12957 /* Set the return value of the constructor (if present).  */
12958
12959 static void
12960 finish_constructor_body (void)
12961 {
12962   tree val;
12963   tree exprstmt;
12964
12965   if (targetm.cxx.cdtor_returns_this ()
12966       && (! TYPE_FOR_JAVA (current_class_type)))
12967     {
12968       /* Any return from a constructor will end up here.  */
12969       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
12970
12971       val = DECL_ARGUMENTS (current_function_decl);
12972       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
12973                     DECL_RESULT (current_function_decl), val);
12974       /* Return the address of the object.  */
12975       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
12976       add_stmt (exprstmt);
12977     }
12978 }
12979
12980 /* Do all the processing for the beginning of a destructor; set up the
12981    vtable pointers and cleanups for bases and members.  */
12982
12983 static void
12984 begin_destructor_body (void)
12985 {
12986   tree compound_stmt;
12987
12988   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
12989      issued an error message.  We still want to try to process the
12990      body of the function, but initialize_vtbl_ptrs will crash if
12991      TYPE_BINFO is NULL.  */
12992   if (COMPLETE_TYPE_P (current_class_type))
12993     {
12994       compound_stmt = begin_compound_stmt (0);
12995       /* Make all virtual function table pointers in non-virtual base
12996          classes point to CURRENT_CLASS_TYPE's virtual function
12997          tables.  */
12998       initialize_vtbl_ptrs (current_class_ptr);
12999       finish_compound_stmt (compound_stmt);
13000
13001       /* And insert cleanups for our bases and members so that they
13002          will be properly destroyed if we throw.  */
13003       push_base_cleanups ();
13004     }
13005 }
13006
13007 /* At the end of every destructor we generate code to delete the object if
13008    necessary.  Do that now.  */
13009
13010 static void
13011 finish_destructor_body (void)
13012 {
13013   tree exprstmt;
13014
13015   /* Any return from a destructor will end up here; that way all base
13016      and member cleanups will be run when the function returns.  */
13017   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
13018
13019   /* In a virtual destructor, we must call delete.  */
13020   if (DECL_VIRTUAL_P (current_function_decl))
13021     {
13022       tree if_stmt;
13023       tree virtual_size = cxx_sizeof (current_class_type);
13024
13025       /* [class.dtor]
13026
13027       At the point of definition of a virtual destructor (including
13028       an implicit definition), non-placement operator delete shall
13029       be looked up in the scope of the destructor's class and if
13030       found shall be accessible and unambiguous.  */
13031       exprstmt = build_op_delete_call(DELETE_EXPR, current_class_ptr,
13032                                       virtual_size,
13033                                       /*global_p=*/false,
13034                                       /*placement=*/NULL_TREE,
13035                                       /*alloc_fn=*/NULL_TREE);
13036
13037       if_stmt = begin_if_stmt ();
13038       finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node,
13039                                    current_in_charge_parm,
13040                                    integer_one_node),
13041                            if_stmt);
13042       finish_expr_stmt (exprstmt);
13043       finish_then_clause (if_stmt);
13044       finish_if_stmt (if_stmt);
13045     }
13046
13047   if (targetm.cxx.cdtor_returns_this ())
13048     {
13049       tree val;
13050
13051       val = DECL_ARGUMENTS (current_function_decl);
13052       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
13053                     DECL_RESULT (current_function_decl), val);
13054       /* Return the address of the object.  */
13055       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
13056       add_stmt (exprstmt);
13057     }
13058 }
13059
13060 /* Do the necessary processing for the beginning of a function body, which
13061    in this case includes member-initializers, but not the catch clauses of
13062    a function-try-block.  Currently, this means opening a binding level
13063    for the member-initializers (in a ctor) and member cleanups (in a dtor).  */
13064
13065 tree
13066 begin_function_body (void)
13067 {
13068   tree stmt;
13069
13070   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13071     return NULL_TREE;
13072
13073   if (processing_template_decl)
13074     /* Do nothing now.  */;
13075   else
13076     /* Always keep the BLOCK node associated with the outermost pair of
13077        curly braces of a function.  These are needed for correct
13078        operation of dwarfout.c.  */
13079     keep_next_level (true);
13080
13081   stmt = begin_compound_stmt (BCS_FN_BODY);
13082
13083   if (processing_template_decl)
13084     /* Do nothing now.  */;
13085   else if (DECL_DESTRUCTOR_P (current_function_decl))
13086     begin_destructor_body ();
13087
13088   return stmt;
13089 }
13090
13091 /* Do the processing for the end of a function body.  Currently, this means
13092    closing out the cleanups for fully-constructed bases and members, and in
13093    the case of the destructor, deleting the object if desired.  Again, this
13094    is only meaningful for [cd]tors, since they are the only functions where
13095    there is a significant distinction between the main body and any
13096    function catch clauses.  Handling, say, main() return semantics here
13097    would be wrong, as flowing off the end of a function catch clause for
13098    main() would also need to return 0.  */
13099
13100 void
13101 finish_function_body (tree compstmt)
13102 {
13103   if (compstmt == NULL_TREE)
13104     return;
13105
13106   /* Close the block.  */
13107   finish_compound_stmt (compstmt);
13108
13109   if (processing_template_decl)
13110     /* Do nothing now.  */;
13111   else if (DECL_CONSTRUCTOR_P (current_function_decl))
13112     finish_constructor_body ();
13113   else if (DECL_DESTRUCTOR_P (current_function_decl))
13114     finish_destructor_body ();
13115 }
13116
13117 /* Given a function, returns the BLOCK corresponding to the outermost level
13118    of curly braces, skipping the artificial block created for constructor
13119    initializers.  */
13120
13121 tree
13122 outer_curly_brace_block (tree fndecl)
13123 {
13124   tree block = BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl));
13125   if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
13126     /* Skip the artificial function body block.  */
13127     block = BLOCK_SUBBLOCKS (block);
13128   return block;
13129 }
13130
13131 /* If FNDECL is a class's key method, add the class to the list of
13132    keyed classes that should be emitted.  */
13133
13134 static void
13135 record_key_method_defined (tree fndecl)
13136 {
13137   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
13138       && DECL_VIRTUAL_P (fndecl)
13139       && !processing_template_decl)
13140     {
13141       tree fnclass = DECL_CONTEXT (fndecl);
13142       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
13143         keyed_classes = tree_cons (NULL_TREE, fnclass, keyed_classes);
13144     }
13145 }
13146
13147 /* Subroutine of finish_function.
13148    Save the body of constexpr functions for possible
13149    future compile time evaluation.  */
13150
13151 static void
13152 maybe_save_function_definition (tree fun)
13153 {
13154   if (!processing_template_decl
13155       && DECL_DECLARED_CONSTEXPR_P (fun)
13156       && !DECL_CLONED_FUNCTION_P (fun))
13157     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
13158 }
13159
13160 /* Finish up a function declaration and compile that function
13161    all the way to assembler language output.  The free the storage
13162    for the function definition.
13163
13164    FLAGS is a bitwise or of the following values:
13165      2 - INCLASS_INLINE
13166        We just finished processing the body of an in-class inline
13167        function definition.  (This processing will have taken place
13168        after the class definition is complete.)  */
13169
13170 tree
13171 finish_function (int flags)
13172 {
13173   tree fndecl = current_function_decl;
13174   tree fntype, ctype = NULL_TREE;
13175   int inclass_inline = (flags & 2) != 0;
13176
13177   /* When we get some parse errors, we can end up without a
13178      current_function_decl, so cope.  */
13179   if (fndecl == NULL_TREE)
13180     return error_mark_node;
13181
13182   if (c_dialect_objc ())
13183     objc_finish_function ();
13184
13185   gcc_assert (!defer_mark_used_calls);
13186   defer_mark_used_calls = true;
13187
13188   record_key_method_defined (fndecl);
13189
13190   fntype = TREE_TYPE (fndecl);
13191
13192   /*  TREE_READONLY (fndecl) = 1;
13193       This caused &foo to be of type ptr-to-const-function
13194       which then got a warning when stored in a ptr-to-function variable.  */
13195
13196   gcc_assert (building_stmt_list_p ());
13197   /* The current function is being defined, so its DECL_INITIAL should
13198      be set, and unless there's a multiple definition, it should be
13199      error_mark_node.  */
13200   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
13201
13202   /* For a cloned function, we've already got all the code we need;
13203      there's no need to add any extra bits.  */
13204   if (!DECL_CLONED_FUNCTION_P (fndecl))
13205     {
13206       if (DECL_MAIN_P (current_function_decl))
13207         {
13208           tree stmt;
13209
13210           /* Make it so that `main' always returns 0 by default (or
13211              1 for VMS).  */
13212 #if VMS_TARGET
13213           stmt = finish_return_stmt (integer_one_node);
13214 #else
13215           stmt = finish_return_stmt (integer_zero_node);
13216 #endif
13217           /* Hack.  We don't want the middle-end to warn that this
13218              return is unreachable, so put the statement on the
13219              special line 0.  */
13220           {
13221             location_t linezero = linemap_line_start (line_table, 0, 1);
13222             SET_EXPR_LOCATION (stmt, linezero);
13223           }
13224         }
13225
13226       if (use_eh_spec_block (current_function_decl))
13227         finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
13228                               (TREE_TYPE (current_function_decl)),
13229                               current_eh_spec_block);
13230     }
13231
13232   /* If we're saving up tree structure, tie off the function now.  */
13233   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
13234
13235   finish_fname_decls ();
13236
13237   /* If this function can't throw any exceptions, remember that.  */
13238   if (!processing_template_decl
13239       && !cp_function_chain->can_throw
13240       && !flag_non_call_exceptions
13241       && !decl_replaceable_p (fndecl))
13242     TREE_NOTHROW (fndecl) = 1;
13243
13244   /* This must come after expand_function_end because cleanups might
13245      have declarations (from inline functions) that need to go into
13246      this function's blocks.  */
13247
13248   /* If the current binding level isn't the outermost binding level
13249      for this function, either there is a bug, or we have experienced
13250      syntax errors and the statement tree is malformed.  */
13251   if (current_binding_level->kind != sk_function_parms)
13252     {
13253       /* Make sure we have already experienced errors.  */
13254       gcc_assert (errorcount);
13255
13256       /* Throw away the broken statement tree and extra binding
13257          levels.  */
13258       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
13259
13260       while (current_binding_level->kind != sk_function_parms)
13261         {
13262           if (current_binding_level->kind == sk_class)
13263             pop_nested_class ();
13264           else
13265             poplevel (0, 0, 0);
13266         }
13267     }
13268   poplevel (1, 0, 1);
13269
13270   /* Statements should always be full-expressions at the outermost set
13271      of curly braces for a function.  */
13272   gcc_assert (stmts_are_full_exprs_p ());
13273
13274   /* Save constexpr function body before it gets munged by
13275      the NRV transformation.   */
13276   maybe_save_function_definition (fndecl);
13277
13278   /* Set up the named return value optimization, if we can.  Candidate
13279      variables are selected in check_return_expr.  */
13280   if (current_function_return_value)
13281     {
13282       tree r = current_function_return_value;
13283       tree outer;
13284
13285       if (r != error_mark_node
13286           /* This is only worth doing for fns that return in memory--and
13287              simpler, since we don't have to worry about promoted modes.  */
13288           && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
13289           /* Only allow this for variables declared in the outer scope of
13290              the function so we know that their lifetime always ends with a
13291              return; see g++.dg/opt/nrv6.C.  We could be more flexible if
13292              we were to do this optimization in tree-ssa.  */
13293           && (outer = outer_curly_brace_block (fndecl))
13294           && chain_member (r, BLOCK_VARS (outer)))
13295         finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
13296
13297       current_function_return_value = NULL_TREE;
13298     }
13299
13300   /* Remember that we were in class scope.  */
13301   if (current_class_name)
13302     ctype = current_class_type;
13303
13304   /* Must mark the RESULT_DECL as being in this function.  */
13305   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
13306
13307   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
13308      to the FUNCTION_DECL node itself.  */
13309   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
13310
13311   /* Save away current state, if appropriate.  */
13312   if (!processing_template_decl)
13313     save_function_data (fndecl);
13314
13315   /* Complain if there's just no return statement.  */
13316   if (warn_return_type
13317       && TREE_CODE (TREE_TYPE (fntype)) != VOID_TYPE
13318       && !dependent_type_p (TREE_TYPE (fntype))
13319       && !current_function_returns_value && !current_function_returns_null
13320       /* Don't complain if we abort or throw.  */
13321       && !current_function_returns_abnormally
13322       /* Don't complain if we are declared noreturn.  */
13323       && !TREE_THIS_VOLATILE (fndecl)
13324       && !DECL_NAME (DECL_RESULT (fndecl))
13325       && !TREE_NO_WARNING (fndecl)
13326       /* Structor return values (if any) are set by the compiler.  */
13327       && !DECL_CONSTRUCTOR_P (fndecl)
13328       && !DECL_DESTRUCTOR_P (fndecl))
13329     {
13330       warning (OPT_Wreturn_type,
13331                "no return statement in function returning non-void");
13332       TREE_NO_WARNING (fndecl) = 1;
13333     }
13334
13335   /* Store the end of the function, so that we get good line number
13336      info for the epilogue.  */
13337   cfun->function_end_locus = input_location;
13338
13339   /* Complain about parameters that are only set, but never otherwise used.  */
13340   if (warn_unused_but_set_parameter
13341       && !processing_template_decl
13342       && errorcount == unused_but_set_errorcount
13343       && !DECL_CLONED_FUNCTION_P (fndecl))
13344     {
13345       tree decl;
13346
13347       for (decl = DECL_ARGUMENTS (fndecl);
13348            decl;
13349            decl = DECL_CHAIN (decl))
13350         if (TREE_USED (decl)
13351             && TREE_CODE (decl) == PARM_DECL
13352             && !DECL_READ_P (decl)
13353             && DECL_NAME (decl)
13354             && !DECL_ARTIFICIAL (decl)
13355             && !TREE_NO_WARNING (decl)
13356             && !DECL_IN_SYSTEM_HEADER (decl)
13357             && TREE_TYPE (decl) != error_mark_node
13358             && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
13359             && (!CLASS_TYPE_P (TREE_TYPE (decl))
13360                 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
13361           warning (OPT_Wunused_but_set_parameter,
13362                    "parameter %q+D set but not used", decl);
13363       unused_but_set_errorcount = errorcount;
13364     }
13365
13366   /* Genericize before inlining.  */
13367   if (!processing_template_decl)
13368     {
13369       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
13370       invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
13371       cp_genericize (fndecl);
13372       /* Clear out the bits we don't need.  */
13373       f->x_current_class_ptr = NULL;
13374       f->x_current_class_ref = NULL;
13375       f->x_eh_spec_block = NULL;
13376       f->x_in_charge_parm = NULL;
13377       f->x_vtt_parm = NULL;
13378       f->x_return_value = NULL;
13379       f->bindings = NULL;
13380       f->extern_decl_map = NULL;
13381     }
13382   /* Clear out the bits we don't need.  */
13383   local_names = NULL;
13384
13385   /* We're leaving the context of this function, so zap cfun.  It's still in
13386      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
13387   set_cfun (NULL);
13388   current_function_decl = NULL;
13389
13390   /* If this is an in-class inline definition, we may have to pop the
13391      bindings for the template parameters that we added in
13392      maybe_begin_member_template_processing when start_function was
13393      called.  */
13394   if (inclass_inline)
13395     maybe_end_member_template_processing ();
13396
13397   /* Leave the scope of the class.  */
13398   if (ctype)
13399     pop_nested_class ();
13400
13401   --function_depth;
13402
13403   /* Clean up.  */
13404   current_function_decl = NULL_TREE;
13405
13406   defer_mark_used_calls = false;
13407   if (deferred_mark_used_calls)
13408     {
13409       unsigned int i;
13410       tree decl;
13411
13412       FOR_EACH_VEC_ELT (tree, deferred_mark_used_calls, i, decl)
13413         mark_used (decl);
13414       VEC_free (tree, gc, deferred_mark_used_calls);
13415     }
13416
13417   return fndecl;
13418 }
13419 \f
13420 /* Create the FUNCTION_DECL for a function definition.
13421    DECLSPECS and DECLARATOR are the parts of the declaration;
13422    they describe the return type and the name of the function,
13423    but twisted together in a fashion that parallels the syntax of C.
13424
13425    This function creates a binding context for the function body
13426    as well as setting up the FUNCTION_DECL in current_function_decl.
13427
13428    Returns a FUNCTION_DECL on success.
13429
13430    If the DECLARATOR is not suitable for a function (it defines a datum
13431    instead), we return 0, which tells yyparse to report a parse error.
13432
13433    May return void_type_node indicating that this method is actually
13434    a friend.  See grokfield for more details.
13435
13436    Came here with a `.pushlevel' .
13437
13438    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
13439    CHANGES TO CODE IN `grokfield'.  */
13440
13441 tree
13442 grokmethod (cp_decl_specifier_seq *declspecs,
13443             const cp_declarator *declarator, tree attrlist)
13444 {
13445   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
13446                                 &attrlist);
13447
13448   if (fndecl == error_mark_node)
13449     return error_mark_node;
13450
13451   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
13452     {
13453       error ("invalid member function declaration");
13454       return error_mark_node;
13455     }
13456
13457   if (attrlist)
13458     cplus_decl_attributes (&fndecl, attrlist, 0);
13459
13460   /* Pass friends other than inline friend functions back.  */
13461   if (fndecl == void_type_node)
13462     return fndecl;
13463
13464   if (DECL_IN_AGGR_P (fndecl))
13465     {
13466       if (DECL_CLASS_SCOPE_P (fndecl))
13467         error ("%qD is already defined in class %qT", fndecl,
13468                DECL_CONTEXT (fndecl));
13469       return error_mark_node;
13470     }
13471
13472   check_template_shadow (fndecl);
13473
13474   DECL_DECLARED_INLINE_P (fndecl) = 1;
13475   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
13476
13477   /* We process method specializations in finish_struct_1.  */
13478   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
13479     {
13480       fndecl = push_template_decl (fndecl);
13481       if (fndecl == error_mark_node)
13482         return fndecl;
13483     }
13484
13485   if (! DECL_FRIEND_P (fndecl))
13486     {
13487       if (DECL_CHAIN (fndecl))
13488         {
13489           fndecl = copy_node (fndecl);
13490           TREE_CHAIN (fndecl) = NULL_TREE;
13491         }
13492     }
13493
13494   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
13495
13496   DECL_IN_AGGR_P (fndecl) = 1;
13497   return fndecl;
13498 }
13499 \f
13500
13501 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
13502    we can lay it out later, when and if its type becomes complete.  */
13503
13504 void
13505 maybe_register_incomplete_var (tree var)
13506 {
13507   gcc_assert (TREE_CODE (var) == VAR_DECL);
13508
13509   /* Keep track of variables with incomplete types.  */
13510   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
13511       && DECL_EXTERNAL (var))
13512     {
13513       tree inner_type = TREE_TYPE (var);
13514
13515       while (TREE_CODE (inner_type) == ARRAY_TYPE)
13516         inner_type = TREE_TYPE (inner_type);
13517       inner_type = TYPE_MAIN_VARIANT (inner_type);
13518
13519       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
13520           /* RTTI TD entries are created while defining the type_info.  */
13521           || (TYPE_LANG_SPECIFIC (inner_type)
13522               && TYPE_BEING_DEFINED (inner_type)))
13523         {
13524           incomplete_var *iv
13525             = VEC_safe_push (incomplete_var, gc, incomplete_vars, NULL);
13526           iv->decl = var;
13527           iv->incomplete_type = inner_type;
13528         }
13529     }
13530 }
13531
13532 /* Called when a class type (given by TYPE) is defined.  If there are
13533    any existing VAR_DECLs whose type has been completed by this
13534    declaration, update them now.  */
13535
13536 void
13537 complete_vars (tree type)
13538 {
13539   unsigned ix;
13540   incomplete_var *iv;
13541
13542   for (ix = 0; VEC_iterate (incomplete_var, incomplete_vars, ix, iv); )
13543     {
13544       if (same_type_p (type, iv->incomplete_type))
13545         {
13546           tree var = iv->decl;
13547           tree type = TREE_TYPE (var);
13548           /* Complete the type of the variable.  The VAR_DECL itself
13549              will be laid out in expand_expr.  */
13550           complete_type (type);
13551           cp_apply_type_quals_to_decl (cp_type_quals (type), var);
13552           /* Remove this entry from the list.  */
13553           VEC_unordered_remove (incomplete_var, incomplete_vars, ix);
13554         }
13555       else
13556         ix++;
13557     }
13558
13559   /* Check for pending declarations which may have abstract type.  */
13560   complete_type_check_abstract (type);
13561 }
13562
13563 /* If DECL is of a type which needs a cleanup, build and return an
13564    expression to perform that cleanup here.  Return NULL_TREE if no
13565    cleanup need be done.  */
13566
13567 tree
13568 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
13569 {
13570   tree type;
13571   tree attr;
13572   tree cleanup;
13573
13574   /* Assume no cleanup is required.  */
13575   cleanup = NULL_TREE;
13576
13577   if (error_operand_p (decl))
13578     return cleanup;
13579
13580   /* Handle "__attribute__((cleanup))".  We run the cleanup function
13581      before the destructor since the destructor is what actually
13582      terminates the lifetime of the object.  */
13583   attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
13584   if (attr)
13585     {
13586       tree id;
13587       tree fn;
13588       tree arg;
13589
13590       /* Get the name specified by the user for the cleanup function.  */
13591       id = TREE_VALUE (TREE_VALUE (attr));
13592       /* Look up the name to find the cleanup function to call.  It is
13593          important to use lookup_name here because that is what is
13594          used in c-common.c:handle_cleanup_attribute when performing
13595          initial checks on the attribute.  Note that those checks
13596          include ensuring that the function found is not an overloaded
13597          function, or an object with an overloaded call operator,
13598          etc.; we can rely on the fact that the function found is an
13599          ordinary FUNCTION_DECL.  */
13600       fn = lookup_name (id);
13601       arg = build_address (decl);
13602       mark_used (decl);
13603       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
13604       if (cleanup == error_mark_node)
13605         return error_mark_node;
13606     }
13607   /* Handle ordinary C++ destructors.  */
13608   type = TREE_TYPE (decl);
13609   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
13610     {
13611       int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
13612       bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
13613                          && CLASSTYPE_VBASECLASSES (type));
13614       tree addr;
13615       tree call;
13616
13617       if (TREE_CODE (type) == ARRAY_TYPE)
13618         addr = decl;
13619       else
13620         addr = build_address (decl);
13621
13622       /* Optimize for space over speed here.  */
13623       if (!has_vbases || flag_expensive_optimizations)
13624         flags |= LOOKUP_NONVIRTUAL;
13625
13626       call = build_delete (TREE_TYPE (addr), addr,
13627                            sfk_complete_destructor, flags, 0, complain);
13628       if (call == error_mark_node)
13629         cleanup = error_mark_node;
13630       else if (cleanup)
13631         cleanup = cp_build_compound_expr (cleanup, call, complain);
13632       else
13633         cleanup = call;
13634     }
13635
13636   return cleanup;
13637 }
13638 \f
13639 /* When a stmt has been parsed, this function is called.  */
13640
13641 void
13642 finish_stmt (void)
13643 {
13644 }
13645
13646 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
13647    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
13648    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
13649
13650 tree
13651 static_fn_type (tree memfntype)
13652 {
13653   tree fntype;
13654   tree args;
13655
13656   if (TYPE_PTRMEMFUNC_P (memfntype))
13657     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
13658   if (POINTER_TYPE_P (memfntype)
13659       || TREE_CODE (memfntype) == FUNCTION_DECL)
13660     memfntype = TREE_TYPE (memfntype);
13661   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
13662     return memfntype;
13663   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
13664   args = TYPE_ARG_TYPES (memfntype);
13665   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
13666   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
13667   fntype = (cp_build_type_attribute_variant
13668             (fntype, TYPE_ATTRIBUTES (memfntype)));
13669   fntype = (build_exception_variant
13670             (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
13671   return fntype;
13672 }
13673
13674 /* DECL was originally constructed as a non-static member function,
13675    but turned out to be static.  Update it accordingly.  */
13676
13677 void
13678 revert_static_member_fn (tree decl)
13679 {
13680   tree stype = static_fn_type (decl);
13681   cp_cv_quals quals = type_memfn_quals (stype);
13682
13683   if (quals != TYPE_UNQUALIFIED)
13684     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
13685
13686   TREE_TYPE (decl) = stype;
13687
13688   if (DECL_ARGUMENTS (decl))
13689     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
13690   DECL_STATIC_FUNCTION_P (decl) = 1;
13691 }
13692
13693 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
13694    one of the language-independent trees.  */
13695
13696 enum cp_tree_node_structure_enum
13697 cp_tree_node_structure (union lang_tree_node * t)
13698 {
13699   switch (TREE_CODE (&t->generic))
13700     {
13701     case DEFAULT_ARG:           return TS_CP_DEFAULT_ARG;
13702     case DEFERRED_NOEXCEPT:     return TS_CP_DEFERRED_NOEXCEPT;
13703     case IDENTIFIER_NODE:       return TS_CP_IDENTIFIER;
13704     case OVERLOAD:              return TS_CP_OVERLOAD;
13705     case TEMPLATE_PARM_INDEX:   return TS_CP_TPI;
13706     case PTRMEM_CST:            return TS_CP_PTRMEM;
13707     case BASELINK:              return TS_CP_BASELINK;
13708     case STATIC_ASSERT:         return TS_CP_STATIC_ASSERT;
13709     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
13710     case TRAIT_EXPR:            return TS_CP_TRAIT_EXPR;
13711     case LAMBDA_EXPR:           return TS_CP_LAMBDA_EXPR;
13712     case TEMPLATE_INFO:         return TS_CP_TEMPLATE_INFO;
13713     default:                    return TS_CP_GENERIC;
13714     }
13715 }
13716
13717 /* Build the void_list_node (void_type_node having been created).  */
13718 tree
13719 build_void_list_node (void)
13720 {
13721   tree t = build_tree_list (NULL_TREE, void_type_node);
13722   return t;
13723 }
13724
13725 bool
13726 cp_missing_noreturn_ok_p (tree decl)
13727 {
13728   /* A missing noreturn is ok for the `main' function.  */
13729   return DECL_MAIN_P (decl);
13730 }
13731
13732 /* Return the COMDAT group into which DECL should be placed.  */
13733
13734 tree
13735 cxx_comdat_group (tree decl)
13736 {
13737   tree name;
13738
13739   /* Virtual tables, construction virtual tables, and virtual table
13740      tables all go in a single COMDAT group, named after the primary
13741      virtual table.  */
13742   if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
13743     name = DECL_ASSEMBLER_NAME (CLASSTYPE_VTABLES (DECL_CONTEXT (decl)));
13744   /* For all other DECLs, the COMDAT group is the mangled name of the
13745      declaration itself.  */
13746   else
13747     {
13748       while (DECL_THUNK_P (decl))
13749         {
13750           /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
13751              into the same section as the target function.  In that case
13752              we must return target's name.  */
13753           tree target = THUNK_TARGET (decl);
13754           if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
13755               && DECL_SECTION_NAME (target) != NULL
13756               && DECL_ONE_ONLY (target))
13757             decl = target;
13758           else
13759             break;
13760         }
13761       name = DECL_ASSEMBLER_NAME (decl);
13762     }
13763
13764   return name;
13765 }
13766
13767 #include "gt-cp-decl.h"